adk-libusb = adk+libusb

Сделал вот крохотную библиотечку. Любителям андроида и железок должно понравится.

Если вы еще не слышали про ADK (Android Open Accessory Development Kit), то есть неплохая презентация с прошлогоднего Google IO 2011. Там бравые дяди в юбках и очках рассказывают и показывают что это и зачем этот ADK нужен.

ADK? Нет, не слышал

ADK нужен, наверное, в двух случаях: вы производитель всяких гаджетов и хотите сделать какой-то прибабмас для телефонов и планшетов с андроидом, или же вы гик.

Если вы гик, и дома валяется пара ардуин или других железяк, а еще у вас есть андроид-устройство (ну вы же гик?), то самое время их совместить.

Короче, ADK это очень простой способ обмена данными между android-приложением и какой-либо железкой с USB. При чем, хостом может быть как android (если это, скажем, планшет), так и устройство (напр., arduino + usb host shield).

Я, к сожалению, из тех гиков у которых ни один случай не срабатывал. У меня нет планшета с usb-хостом и нет ардуино. А попробовать на практике этот ADK хотелось.

Кстати, для работы с ADK нужен андроид 2.3.4+ (да-да, не обязательно 3.x или 4.x). Даже мой старенький HTC Wildfire сгодился.

Стоп. У меня есть устройство с usb-хостом

Ну, да, под рукой всегда есть комп. Почему бы ему не общаться с телефоном через ADK, например, когда телефон заряжается через USB? Почему бы например в трее компа не писать уровень заряда телефона или еще что-то?

Надо значит написать простенький драйвер для телефона, чтобы позволял общаться в режиме Accessory.

libusb

Ну это моя давняя страсть, поэтому выбора особо не возникало. Вместо драйвера будет обертка над libusb. Конечно, без особых усилий можно написать char device driver и читать/писать через какой-то /dev/adk0. Но это сложнее и не сильно портабельно.

Вся обертка находится в одном *.h файле в проекте adk-libusb на bitbucket.

Там же есть и простой пример драйвера (просто пишет на экран команды, которые поступают от андроида).

Использование

1) вначале сделать adk_open(VID, PID). Здесь VID/PID — это идентификатор вашего устройства в обычном режиме (можно получить через lsusb). Если не найдено устройство в ADK-режиме — будет открыто устройство по этому идентификатору и переведено в ADK режим;
2) затем делать adk_read()/adk_write() для чтения данных с телефона и записи. Внутренний протокол полностью в ваших руках;
3) когда закончили — adk_close().

Вот насколько все просто.

На стороне телефона я особо не заморачивался и использовал пока тестовую прогу от разработчиков андроида — взять можно тут

Когда драйвер написан и собран, приложение для телефона установлено на телефон — дальше все предсказуемо:
1) втыкаем телефон в комп
2) запускаем самодельную программу-драйвер на компе (можно автоматизировать через udev)
3) запускается само (если нет — вручную) приложение на телефоне
4) приложение и драйвер обмениваются данными

Дальше?

А дальше думаем что можно сделать сопрягая телефон с железками. adk.h можно использовать для прототипирования реального устройства (если ардуины нет под рукой), а можно для более тесной интеграции с компом (напр. общий буфер обмена для телефона и компа, самодельный dropbox — воткнули телефон, просинхронизировали папку и т.д.).

Изобретайте!

Реклама

2 comments on “adk-libusb = adk+libusb

  1. VitaliyAT:

    А можно сделать из андройда удлинитель для наушников и принимать телефонные звонки одновременно. Музыка с компа, завонки с телефона?

    • Да, в принципе можно, хотя libusb и не самый простой способ (реалтайм вряд ли возможен). Я бы скорее поставил стриминг аудио на компе через tcp и на телефоне плеером бы открывал бы этот стрим. Такая себе микро-интернет-радиостанция на одного и код писать не надо. Может и еще проще варанты есть.

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s