что такое профиль hid в настройках bluetooth для часов
Профиль HID
Попытку реализации HID на КПК, я начну с ознакомления с профилями Bluetooth.
Что же такое профиль в технологии Bluetooth?
Профиль — это, всего на всего, набор функций или возможностей, доступных для определённого устройства Bluetooth и позволяющий устройству предоставлять или использовать эту возможность совместно с другими устройствами.
Так как мы рассматриваем профиль HID, то спецификация HID определена в «USB Device Class Definition for Human Interface Devices», (да-да, спецификация HID определена именно в документах USB). Bluetooth HID профиль должен использовать протоколы, процедуры и другие возможности, обозначенные именно в указанной спецификации.
Типичными примерами устройств, поддерживающих профиль HID, являются:
— клавиатуры и указывающие устройства, например мышь, трекбол, джойстик;
— оконечные устройства, например всевозможные ручки, переключатели, кнопки и слайдеры;
— устройства дистанционного контроля и управления, например пульты дистанционного управления, игровые устройства;
— устройства, не требующие действий от человека, но поддерживающие передачу данных в простом формате относительно возможностей HID, такие как: сканеры штрих-кода, термометры или вольтметры.
Класс устройств HID изначально был нацелен на устройства, взаимодействующие с человеком, однако этот класс хорошо применим к любым приложениям, требующим быстрые операции ввода-вывода с внешними интерфейсами и позволяющий устройствам описывать самих себя. Определение класса HID включает поддержку различных типов и способов вывода информации конечному пользователю. HID поддерживает инициализацию и управление описывающих самих себя устройств.
Спецификация USB включает концепцию, позволяющую вместо того, что бы иметь различные драйверы для каждого нового периферийного устройства, группировать вместе устройства, имеющие одинаковые характеристики представления данных (т.н. data reporting), в класс устройств и иметь единственный драйвер класса для каждой группы. Устройства, в свою очередь, имеют возможность описывать самих себя в драйвере класса, например, то, как они управляются и как именно они передают данные. Это позволяет отменить необходимость менять программное обеспечение драйвера для вновь разработанных устройств этого класса.
HID не специфичен относительно USB или другого типа транспорта передачи данных. Постепенно я буду описывать как использовать протокол HID поверх Bluetooth.
Информация об устройстве HID хранится в сегментах энергонезависимой памяти. Эти сегменты называются дескрипторами. Дескриптор интерфейса может идентифицировать устройство определить устройство, как принадлежащие к одному из конечного числа классов.
Класс устройств HID использует соответствующий драйвер класса HID для и извлечения и маршрутизации данных. Маршрутизация и извлечение данных осуществляется путем изучения дескрипторов устройства и данных, которые оно предоставляет.
Дескриптор класса устройства HID перечисляет другие имеющиеся дескрипторы и указывает из размер. Пример:
— дескриптор Report — описывает каждую часть данных, генерируемых устройством, и реальный размер этой части. Этот дескриптор, например, может определять элементы, описывающие какую либо позицию или состояние кнопки. Здесь информация элемента используется как для определения откуда маршрутизировать ввод, например, от мышки или от джойстика; или может использоваться для назначения функции ввода определенному программному обеспечению, например использовать ввод данных от джойстика для управления самолетом или танком :). Изучая элементы дескриптора Report, драйвер класса HID позволяет определять размер и состав данных, передаваемых от устройства HID.
— дескриптор Physical — устанавливает необязательные дескрипторы, которые предоставляют информацию о части или частях тела человека, используемых для активации элементов управления устройства.
На первый взгляд, то, что я здесь описал, кажется сложным. Мне тоже так казалось, когда я начал все это изучать. Надеюсь дальше все прояснится :).
С помощью Bluetooth вы можете выполнять такие действия, как соединение телефона с динамиками для прослушивания музыки, передачи и получения файлов на другие устройства и от них, подключение смартфона без порта к беспроводным наушникам и т. д. Однако существуют специальные «Профили», которые делают это возможным для устройства Bluetooth, чтобы эффективно выполнять свои функции.
Существует множество устройств, которыми можно управлять с помощью Bluetooth, и для каждой функции есть специальные профили Bluetooth.
Проще говоря, профили Bluetooth определенный спецификации беспроводного интерфейса. Вы когда-нибудь задумывались, как вы можете осуществлять беспроводную потоковую передачу звука со смартфона на Bluetooth наушники, или звуковую панель; или как вы можете обмениваться файлами с другим устройством через Bluetooth? Тогда вам следует взглянуть на некоторые из наиболее распространенных профилей Bluetooth.
1. Расширенный профиль распространения аудио (A2DP)
Если вы используете наушники Bluetooth, наушники, автомобильную стереосистему, ваше устройство использует этот профиль для обеспечения передачи высококачественного звука.
2. Аудио/видео профиль дистанционного управления (AVRCP)
Этот профиль отвечает за функциональность удаленного управления устройствами Bluetooth. Вы найдете этот профиль на таких устройствах, как телевизоры, наушники, интеллектуальные колонки, звуковые панели, смартфоны и другое стереооборудование. ACRCP предоставляет интерфейс, который позволяет вашему устройству Bluetooth ставить на паузу музыку, увеличивать и уменьшать громкость, переходить к следующему и предыдущему файлу в вашем списке воспроизведения и т. д.
AVRCP играет жизненно важную роль в управляющем устройстве (например, смартфоне) и целевом устройстве (гарнитуре Bluetooth, динамике и т. д.).
Когда вы нажимаете кнопку (воспроизведение, паузы, затем и т. д.) На управляющем устройстве, команда обнаруживается контроллером с помощью AVRCP. Профиль впоследствии преобразует команду в A/V-сигнал управления, который он передает целевому устройству.
3. Профиль передачи файлов (FTP)
4. Профиль громкой связи (HFP)
Как указано в названии, профиль Hands-Free (HFP) отвечает за успешное выполнение беспроводных телефонных звонков с устройства Bluetooth. Вы найдете этот профиль в мобильных телефонах, автомобильной информационно-развлекательной системе, наушниках и т. д.
HFP использует кодек Continuious Variable Slope Delta (CVSD) (кодирование используется для сжатия данных аудиосигналов) для передачи голоса и для определения некоторых параметров управления голосом (например, громкости). Если вы собираетесь использовать громкую связь во время вождения или в любом другом месте, ваше устройство должно иметь этот профиль.
5. Профиль гарнитуры (HSP)
6. Базовый профиль печати (BPP)
7. Профиль устройства интерфейса пользователя (HID)
Этот профиль обычно используется периферийными устройствами с поддержкой Bluetooth, такими как беспроводные клавиатуры, мыши, игровые контроллеры и т. д. Профиль Human Interface Device определяет функции и протоколы, с помощью которых эти устройства взаимодействуют с устройством Bluetooth.
Хотя существует более 20 профилей Bluetooth, вышеупомянутые профили являются наиболее важными, поскольку они используются в нашей повседневной жизни. Они находятся в устройствах, которыми вы пользуетесь каждый день: мобильные телефоны, ноутбуки, гарнитуры, периферийные устройства, принтеры, автомобили, умные бытовые приборы и т. д.
Как подключить смарт-часы к телефону
Содержание
Содержание
Подключение смарт-часов к смартфону необходмо для полноценной работы устройства и доступа к целому ряду функций: получение уведомлений о звонках, смс, почте, управление плеером и камерой, блокировка или поиск смартфона, отслеживание действий на детском телефоне и многое дургое. Настроить подключение нужно только один раз. В дальнейшем соединение и синхронизация осуществляются в автоматическом режиме. Рассмотрим, как выполнить подключение устройств под iOS и Android.
Перед подключением на обоих устройствах должен быть активирован Bluetooth, а смартфон подключен к интернету. Устройства на протяжении процесса настройки подключения должны располагаться рядом.
Как подключить Apple Watch к iPhone
Предварительно нужно включить на айфоне Bluetooth. Также необходимо подключение к Wi-Fi или сотовой сети.
1. Часы включить и поднести к смартфону. На его экране появится окно подключения с кнопкой «Продолжить», на которую следует нажать. Если сообщение не появится автоматически, откройте приложение Apple Watch и выберите пункт «Создать пару».
2. Навести тыловую камеру телефона на циферблат часов, чтобы он оказался по центру видоискателя, и дождаться сообщения о создании пары. Если воспользоваться камерой по каким-то причинам не получилось, нужно нажать «Создать пару с Apple Watch вручную» и следовать инструкциям на дисплее смартфона.
3. Если у вас это первые смарт-часы Apple, следует нажать «Настроить как новые Apple Watch». В противном случае выбрать резервную копию и следовать появившимся на экране инструкциям.
4. Затем нажать «Левая» или «Правая», чтобы выбрать руку, на которой будут располагаться часы.
5. При появлении соответствующего запроса, нужно ввести пароль Apple ID. Если запрос не появится, осуществите вход через приложение Apple Watch, выбрав в нем «Основные» — «Apple ID».
6. Если на айфоне настроено приложение «Локатор», вам будет предложено включить функцию «Блокировка активации». Отобразившееся окно «Блокировка активации» будет означать, что привязка смарт-часов к идентификатору Apple ID уже имеется. Для продолжения настройки в этом случае потребуется ввести логин и пароль учетной записи Apple ID.
7. Этап создания код-пароля можно пропустить, нажав «Не добавлять код-пароль», однако, в дальнейшем он может потребоваться для некоторых функций (например, для Apple Pay).
8. На следующем этапе можно выбрать и настроить некоторые функции Apple Watch, следуя инструкциям, а также установить доступные приложения.
9. Завершится процедура подключения синхронизацией устройств, которые может занять некоторое время в зависимости от объема имеющихся данных. О завершении синхронизации часы дадут знать звуковым сигналом и легкой пульсацией. После этого необходимо нажать на колесико Digital Crown с правой стороны часов.
Как подключить Apple Watch к Android-смартфону
1. Для подключения часов Apple к смартфону под Android необходимо установить на смартфон приложение Aerlink: Wear Connect for iOS, а на часы — BLE Utility, используя для этого айфон.
2. Установленное приложение нужно запустить на смартфоне и включить iOS Service.
3. На часах запустить BLE Utility и открыть вкладку Peripheral. После этого на смартфоне появится уведомление об обнаруженных часах. Нужно на него нажать и дождаться соединения.
В процессе подключения нужно дать часам ряд разрешений на доступ: к календарю, к уведомлениям, к контактам и к геолокации. Но даже после подключения Apple Watch к андроид-устройству будут работать не все функции. Например, голосовой ассистент окажется недоступен. Уведомления о звонках, смс и прочем приходить будут, но ответить на звонок с часов уже не получится.
Как подключить любые часы к iPhone
1. Чтобы подключить смарт-часы с ОС Google Wear и другими операционными системами (кроме Apple Watch) к айфону, нужно установить на часы приложение Aerlink: Wear Connect for iOS, используя для этого андроид-смартфон, на iPhone установить утилиту BLE Utility.
2. На часах активировать Aerlink в меню «Пуск», на смартфоне запустить BLE Utility и открыть вкладку Peripheral.
3. После того как устройства обнаружат друг друга, на дисплее смарт-часов отобразится код для сопряжения, который нужно будет ввести в окне создания пары на смартфоне.
Как подключить любые часы к Android-смартфону
1. Для подключения смарт-часов (любых, кроме Apple Watch) к смартфону под Android потребуется установить на него гугловское приложение Wear OS, которое подходит для подавляющего большинства моделей (версия Android должна быть 4.4 или выше).
У отдельных брендов могут быть собственные аналогичные программы (например, Galaxy Wearable, Huawei Wear, MiFit и другие — указано в инструкции к часам), но Wear OS тоже подойдет. Wear OS добавляет смарт-часам определенные функции и поддерживает гугл-ассистента.
2. Включить Bluetooth и интернет на смартфоне и приблизить к нему часы. Если Bluetooth не включен, Wear OS предложит сделать это прямо в нем. Также нужно предоставить часам доступ к геолокации, нажав кнопку «Далее».
3. После запуска Wear OS и обнаружения смартфоном часов приложение предложит выбрать модель из списка. Если нужные часы в списке отсутствуют, можно нажать «Часов в списке нет» и почитать подробную инструкцию с перечислением причин и способов решения.
4. Ввести пин-код, если приложение его потребует.
5. Дождаться передачи данных, которое может занять несколько минут в зависимости от объема.
6. Выбрать нужный аккаунт Google для синхронизации.
7. Произвести настройки часов, следуя инструкциям на экране.
Как подключить детские смарт-часы
У большинства моделей детских смарт-часов, в отличие от «взрослых», имеется слот для СИМ-карты, необходимой для отслеживания местоположения ребенка и возможности связаться с ним в любой момент. Тариф лучше выбрать с безлимитным интернетом. Работоспособность СИМ-карты рекомендуется предварительно проверить на телефоне и только после этого установить ее в часы. Также желательно проверить баланс и отключить проверку ПИН-кода.
1. Вставить SIM-карту в часы и включить их.
2. Включить Bluetooth на обоих устройствах.
3. Установить на смартфон приложение SeTracker, SeTracker2 или аналогичное.
4. После запуска приложения нужно пройти регистрацию. Для этого необходимо указать код лицензии (на задней стороне часов), номер телефона на случай необходимости восстановления пароля, e-mail в качестве логина и пароль, имя ребенка и проч.
5. Запустить привязку, дождаться подключения и синхронизации.
6. Далее можно осуществить настройку часов, активируя необходимые опции в соответствии с инструкцией.
Что делать, если смарт-часы не подключаются
1. Если осуществить подключение умных часов к смартфону не получается, первым делом проверьте совместимость устройств, ознакомившись с инструкцией или поискав информацию в интернете.
2. Убедитесь, что часы заряжены и включены, а Bluetooth активирован на обоих устройствах.
3. Попробуйте перезагрузить устройства, удалить подключение на смартфоне, а затем выполнить подключение заново, сбросить настройки часов до заводских и осуществить новое подключение.
4. Установите последние доступные обновления операционной системы для смартфона и часов.
5. Проверьте в настройках смартфона, включено ли разрешение отправлять уведомления на сопряженных часах.
6. Подключение может не происходить из-за того, что уже имеется коннект с другим гаджетом. В этом случае нужно удалить все текущие соединения в настройках или путем перезагрузки, после чего попытаться подключиться вновь.
7. Следует учесть также, что подключить часы к двум смартфонам сразу не получится. Перед подключением часов к новому телефону, их нужно отключить от предыдущего.
Обучаем HID устройство (читай BT-клавиатуру) работать правильно
Приветствую, хабралюди! На ДР, мне друзья подарили BT-клавиатуру. Маленькая, беленькая, симпатичная, Удобная!
Подключил ее к своему Android 2.3.5 (SGSII), стал с ее помощью лазить по меню, запускать программы, дошел до Вконтакте и решил написать сообщение… а вот переключить на русский язык не смог, но как оказалось позже, это еще были только цветочки! Но кое-что мне удалось. Интересно как?
Сейчас я уже многое понял, и не знаю с чего начать свой рассказ. Поэтому будет долго и скучно, но игра стоит свеч!
Имеем:
Первые шаги
Начал я с того, что написал письмо в техподдержку клавиатуры, с вопросом: а не могли бы вы посодействовать с настройкой клавиатуры для Андроида? Получил, как и ожидалось, ласковый отказ: «Эта клавиатура сделана специально для iPad».
Кому лень было читать статьи, кратко поясню:
На Вашем Android устройстве есть папка (кстати зависит от устройства, подробности есть в статье выше)
/system/usr
где расположены нужные нам каталоги
keylayout и keychars
в них размещаются файлы типа имя_клавиатуры.kl и имя_клавиатуры.kcm.bin соответственно.
Первый (обычный текстовый) отвечает за соответствие сигналов клавиатуры (Linux key code) сигналам Android (Android key code name) и выглядит как список из таких команд:
key 30 A WAKE
Расшифровка: key [scancode] [Android key] [Flags]
По-русски: если на клавиатуре нажали кнопку с кодом 30, то системе будет послана клавиша А, при этом устройство проснется.
Флаг WAKE заставляет устройство проснуться и отреагировать на нажатие буквой А.
А флаг WAKE_DROPPED заставляет только проснуться, т.е. чтобы нажать А, надо будет нажать ее снова.
В статье есть описание и других флагов.
Второй (скомпилированный из исходника бинарник) отвечает за комбинации клавиш вместе с Shift, Alt и т.п. Здесь уже идет таблица из разных вариантов, описывающих действия над Android key. В исходном виде он выглядит как:
key A <
label: ‘A’
base: ‘a’
shift, capslock: ‘A’
ctrl, alt, meta: none
>
А скомпилирован он для ускорения работы и загрузки устройства.
Решаем что делать
Я написал в техподдержку клавиатуры снова, описав свои наблюдения. Но поддержки от них никакой не добился. Им это не интересно. Придется все делать самому.
Что, опять нужен root?
Для доступа в папку /system нужны права root. Значит нужно его получить и не потерять гарантию. Я долго искал способ и для себя один нашел. Ничего не нужно прошивать. Все можно вернуть назад. ИСПОЛЬЗУЙТЕ НА СВОЙ СТРАХ И РИСК! ВСЕ ТОЛЬКО ДЛЯ ОЗНАКОМЛЕНИЯ! НИКАКОЙ ОТВЕТСТВЕННОСТИ! Но для меня все сработало как надо.
Готовим файл
Первые грабли:
Определить имя нужного файла может быть затруднительно. Общий принцип названия файлов, согласно статье — Vendor_XXXX_Product_XXXX_Version_XXXX.kl или DEVICE_NAME.kl
Ну вот, нашли файл, скачали, сделали копию, открыли текстовым редактором типа notepad.
У меня файл назывался Broadcom_Bluetooth_HID.kl
Тааааак, и что тут у нас?
Все понятно, какие-то коды, какие-то кнопки, что к чему не особо понятно, но мы уже готовы к этому, потому что внимательно читали эту статью с начала и до сюда. А как же определить коды клавиш?
Вторые грабли:
Чтобы определить коды клавиш понадобится средство отладки или.
Просто заходим на маркет и находим то что нужно, не с первой попытки конечно. Я перепробовал 3-4 программы. Не все могли похвастаться нужной функцией — многие отображали только Android коды, которые уже прописаны в нашем файле. А нам нужны scancod’ы!
Получаем scancod’ы
Я «отксерил» свою клавиатуру на копире и ручкой стал подписывать коды, которые мне давала программа KeyEvent Display. Так я получил набор кодов, осталось переписать их в файл и назначить им правильные функции.
Редактируем файл
Открываем первую статью по клавиатурам и методично назначаем новые значения нашим кнопкам.
Получается что-то вроде этого:
Третьи грабли:
Не все кнопки будут работать с Вашей версией Android OS! Обратите внимание на колонку Version в первой статье про клавиатуры. Если вы используете те коду, которые предназначены для версий больше вашей, тогда с этого места клавиатура не будет работать.
Все кнопки, указанные после неправильной не будут функционировать.
Поэтому, для будущей совместимости, я в своем файле, клавиши предназначенные не для моей версии Android OS, перенес в конец. Как показала практика, в этом случае все работает и файл готов к переносу на другие версии ОС.
Закидываем файл в систему
Здесь не обойтись без консольной утилиты. Подключаем девайс по USB в режиме отладки и выполняем последовательно команды в консоли cmd.exe:
Четвертые грабли:
Папка /system находится на файловой системе в режиме только для чтения. Для того, чтобы туда писать, нужно перемонтировать систему в режиме RW. Но для этого, нужно определить точку монтирования и тип файловой системы при помощи простой команды mount.
После перезагрузки устройства, файловая система снова станет «только для чтения».
Пояснения к командам:
Проверяем
Заработало!
Поздравляю! По-другому и быть не могло! Вы молодец! Только… как же на русский-то перейти?
Не долго гугля, я нашел простой ответ — нужна софтварная клавиатура, поддерживающая аппаратную. Таких немного. Идеальная, на мой взглад, на сегодня — ruKeybord
Устанавливаем, настраиваем, в раскладках устанавливаем аппаратную клавиатуру вместо qwerty и т.п.
Теперь можно переключать раскладку через Alt+Shift (UPD: или Shift+Space). И флажок показывается.
Кто еще не в курсе, чтобы быстро переключаться между клавиатурами, подержите палец на любом поле ввода и выберите из выпавшего меню «Режим ввода».
Итоги
Как ни старался, но заставить заработать все кнопки, подобно компьютеру, на 2.3.5 невозможно. Но скоро я обновлюсь до Android OS 4 и новые кнопки заработают. На первой фотографии я сижу в putty и редактирую сайт. Очень не хватает кнопки Ctrl. Очень жду обновления ОС. Доволен результатом.
Работаем с USB Custom HID на Android
В современных Android — приложениях для взаимодействия с другими устройствами чаще всего используются беспроводные протоколы передачи данных, как например Bluetooth. В годы, когда часть устройств имеют беспроводную зарядку, сложно представить себе связку Android устройства и периферийного модуля, в которой необходимо использование проводных интерфейсов. Однако когда такая необходимость возникает, на ум сразу же приходит USB.
Давайте разберем с вами гипотетический кейс. Представьте, что к вам приходит заказчик и говорит: “Мне нужно Android приложение для управления устройством сбора данных и вывода этих самых данных на экран. Есть одно НО — приложение надо написать на одноплатный компьютер с операционной системой Android, а периферийное устройство подключено по USB”
Звучит фантастически, но и такое иногда случается. И тут как нельзя кстати пригодится глубокое знание USB стека и его протоколов, но данная статья не об этом. В данной статье мы рассмотрим, как управлять периферийным устройством по протоколу USB Custom HID с Android устройства. Для простоты напишем Android-приложение (HOST), которое будет управлять светодиодом на периферийным устройством (DEVICE) и получать состояние кнопки (нажатия). Код для периферийной платы приводить не буду, кому интересно — пишите в комментариях.
Итак, приступим.
Теория. Максимально коротко
Для начала немного теории, максимально коротко. Это упрощенный минимум, достаточный для понимания кода, но для большего понимания советую ознакомиться с этим ресурсом.
Для общения по USB на периферийном устройстве необходимо реализовать интерфейс взаимодействия. Разные функции (например, USB HID, USB Mass Strorage или USB CDC) будут реализовывать свои интерфейсы, а некоторые будут иметь несколько интерфейсов. Каждый интерфейс содержит в себе конечные точки — специальные каналы связи, своего рода буферы обмена.
На моем периферийном устройстве реализован Custom HID с одним интерфейсом и с двумя конечными точками, одной для приёма, другой для передачи. Обычно информация с существующими на устройстве интерфейсами и конечными точками написана в спецификации на устройство, в противном случае определить их можно через специальные программы, к примеру USBlyzer.
Устройства в USB HID общаются через репорты. Что такое репорты? Так как данные передаются через конечные точки, то нам надо как-то идентифицировать, а также распарсить в соответствие с протоколом. Устройства не просто кидают друг другу байты данных, а обмениваются пакетами, имеющими четко определенную структуру, которая описывается на устройстве в специальном дескрипторе репорта. Таким образом, по дескриптору репорта, мы можем точно определить, какой идентификатор, структуру, размер и частоту передачи имеют те или иные данные. Идентификация пакета происходит по первому байту, который представляет из себя ID репорта. Например данные о состоянии кнопки, идут в репорта с а светодиодом мы управляем через репорт с >
Подальше от железа, поближе к Android
В Android поддержка USB устройств появилась начиная с API версии 12 (Android 3.1) Для работы с периферийным устройством нам необходимо реализовать режим USB host. Работа с USB достаточно неплохо описана в документации.
Для начала необходимо идентифицировать ваше подключаемое устройство, среди всего разнообразия USB девайсов. USB девайсы идентифицируются по сочетанию vid (vendor id) и pid (product id). Создадим в папке xml файл device_filter.xml со следующим содержимым:
Теперь необходимо внести соответствующие разрешения и action (если вам они необходимы) в манифест приложения:
В android:resource мы указываем файл с необходимыми фильтрами для устройств. Также, как я уже говорил ранее, можно назначить intent фильтры, для запуска приложения, к примеру, в результате подключения вашего устройства.
Для начала необходимо получить UsbManager, найти устройство, интерфейс и конечные точки устройства. Это необходимо делать при каждом подключении устройства.
Здесь мы видим те самые интерфейсы и конечные точки, речь о которых шла в прошлом разделе. Зная номер интерфейса, мы находим обе конечные точки, на прием и передачу, и инициируем usb соединение. На этом все, теперь можно читать данные.
Как я уже говорил ранее, устройства общаются через репорты.
В метод sendReport мы передаем массив байт, в котором нулевым байтом является репорт ID, берем текущее USB подключение к устройству и выполняем передачу. В качестве параметров в метод BulkTransfer передаем номер конечной точки, данные, их размер и таймаут передачи. Стоит отметить, что класс UsbDeviceConnection имеет методы для реализации обмена данными с устройством USB — методы bulkTransfer и controlTransfer. Их использование зависит от типа передачи, который поддерживает та или иная конечная точка. В данном случае используем bulkTransfer, хотя для HID чаще всего характерно использование конечных точек с типом control. Но у нас Custom HID, так что делаем что хотим. Про тип передачи советую почитать отдельно, так как от него зависит объем и частота передаваемых данных.
Для получения данных необходимо знать размер получаемых данных, который можно, как знать заранее, так и получить из конечной точки.
Метод получения данных по USB HID является синхронным и блокирующим и выполнять его необходимо в другом потоке, кроме того, репорты от устройства могут приходить постоянно, либо в любое время, поэтому необходимо реализовать постоянный опрос репорта, чтобы не пропустить данные. Сделаем это при помощи RxJava:
Получив массив байт, мы должны проверить нулевой байт, так как он является report ID и в соответствии с ним парсить полученные данные.
По завершении всех действий с USB нужно закрыть соединение. Можно выполнять это в onDestroy activity или в onCleared во ViewModel.
Заключение
В статье рассмотрен очень небольшой и примитивный, исключительно демонстративный код с реализацией для конкретного устройства. Конечно, классов USB существует много, не только HID и для них естественно реализация будет иная. Однако все методы достаточно неплохо документированы и имея хорошее представление о USB стеке можно легко разобраться в том, как их применять.