что значит профиль hid

Что значит профиль hid

Нижеуказанные профили определены и одобрены группой разработки Bluetooth SIG :

Advanced Audio Distribution Profile (A2DP)

Audio / Video Remote Control Profile (AVRCP)

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

Common ISDN Access Profile (CIP)

Профиль беспроводной телефонии.

Профиль позволяет идентифицировать класс устройства, производителя, версию продукта.

Dial-up Networking Profile (DUN)

Профиль является базой для всех остальных профилей.

Generic Object Exchange Profile (GOEP)

Hard Copy Cable Replacement Profile (HCRP)

Профиль предоставляет простую альтернативу кабельного соединения между устройством и принтером. Минус профиля в том, что для принтера необходимы специфичные драйвера, что делает профиль неуниверсальным.

Профиль используется для соединения беспроводной гарнитуры и телефона, передаёт монозвук в одном канале.

Human Interface Device Profile (HID)

Обеспечивает поддержку устройств с HID ( Human Interface Device ), таких как мышки, джойстики, клавиатуры и проч. Использует медленный канал, работает на пониженной мощности.

Базовый профиль для пересылки «объектов», таких как изображения, виртуальные визитные карточки и др. Передачу данных инициирует отправляющее устройство (клиент), а не приёмное (сервер).

Personal Area Networking Profile (PAN)

Phone Book Access Profile (PBAP)

Профиль позволяет обмениваться записями телефонных книг между устройствами.

Service Discovery Application Profile (SDAP)

Профиль используется для предоставления информации о профилях, которые использует устройство-сервер.

SIM Access Profile (SAP, SIM)

Wireless Application Protocol Bearer (WAPB)

Источник

Bluetooth 5.0 и другие: разбираемся с новыми стандартами aptX HD, Adaptive и Low Latency

О технологии Bluetooth, в частности, в аудиоприменениях более или менее обстоятельно мы писали: общие сведения и профили HSP, HFP и A2DP и уже более аудиофильский aptX HD. Немало гораздо более громких проектов в области потребительской электроники за это время, вспыхнув ярким маркетингом, канули в Лету. А Bluetooth — жив и процветает! Технология, развиваясь с далекого 1993 года, берет новые вершины. Пора бы посмотреть, каковы ее последние достижения.

Один из секретов популярности Bluetooth (а к следующему году в мире прогнозируется наличие 14 миллиардов устройств с этой технологией) — в обратной совместимости. То есть если ваш смартфон поддерживает, скажем, Bluetooth 5.0, а наушники — только Bluetooth 4.2, это значит, что в случае их взаимодействия все будет работать. Правда, в рамках младшей из двух возможных версий Bluetooth. И это не может не радовать. Ведь зачастую выход новой версии чего-либо полностью исключал совместимость со всем, что выпускалось раньше, как бы намекая: вот этот рабочий и практически новый девайс теперь пора выбросить. Такое происходит, например, со многими интерфейсами кабельного подключения.

Bluetooth, уже во многом сумевший заменить кабель, оказался гораздо более лоялен к пользователям. При этом обновления происходят с похвальной регулярностью. За время, прошедшее с нашей публикации, появился Bluetooth 4.2, отличавшийся от принятого в конце 2013 года Bluetooth 4.1 повышенной конфиденциальностью и увеличением скорости передачи данных. И вот уже больше трех лет мир наслаждается Bluetooth 5.0. Радиус действия и скорость передачи данных увеличились в разы. К этому добавилась улучшенная помехозащищенность. Все вместе дало возможность обновить технологии передачи аудиосигнала.

Меньше тока, больше метров

Прежде всего, отметим развитие спецификации Bluetooth Low Energy. Начиная с пятой версии, она наконец-то может использоваться аудиоустройствами. Это значит, что ваши новые наушники и подключенный к ним смартфон могут дольше работать по Bluetooth от одной зарядки аккумулятора. Кроме того, функция Dual Audio, реализованная в Bluetooth 5.0, позволила воспроизводить звук на двух подключенных устройствах одновременно. Например, слушать один и тот же трек вдвоем с одного смартфона — так гораздо романтичнее. Мало того, на два разных устройства, в принципе, можно даже передавать два разных сигнала с одного гаджета.

Другое дело, реализованы ли эти возможности (и если реализованы — то как) в каждом конкретном случае. Ведь для этого, кроме готовности встроенного Bluetooth-модуля, необходимо аппаратное и программное соответствие остальных систем гаджета, где он установлен.

Отдельная тема — задокументированная возможность Bluetooth 5.0 работать на дистанциях до 240 метров. Эти возможности уже понемногу начинают использоваться. Правда, о задокументированной функции разработчики говорят, как о достижении, возможном «после многолетних исследований и повторных тестов» — но это останется уже на их совести.

Важнейшее преимущество Bluetooth 5.0 — возможность использовать скорость передачи данных до 2 Мбит/с, а это вдвое больше, чем поддерживает Bluetooth 4.2. Какие реальные улучшения следуют из этого? Самый простой ответ напрашивается сразу: возможность слушать некомпрессированный Hi-Res! Ведь на скорости 1 Мбит/с, доступной с Bluetooth 4.2, уже был реализован стандарт сжатия aptX, обеспечивший передачу цифрового аудио практически в качестве CD.

Семейство aptX: Adaptive, Low Latency и аудиофильский HD

И вот с этого места — литавры и фанфары (естественно, в НD-качестве) — на сцену выходит Qualcomm aptX HD, специально разработанный для удовлетворения растущего спроса на аудио высокого разрешения. Этот расширенный кодек поддерживает 24-битное качество музыки по Bluetooth на частоте до 48 кГц. И еще одно достижение — соотношение сигнал-шум, достигающее 129 дБ, а это уже величина, доступная не на всех современных ЦАПах референсного уровня.

На сайте разработчика приводится цитата из результатов независимых тестов Солфордского университета: «Из анализа результатов 24 человек, проходивших тест, сделан вывод о том, что участники не смогли последовательно обнаружить разницу между звуком 24 бит/96 кГц и кодированным и декодированным звуком 24 бит/48 кГц aptX HD».

Читайте также:  Что можно делать в обеденный перерыв

Разберем пример реализации aptX HD на аудиочипсете Qualcomm SOC CSR8675. Он не только может обрабатывать сквозное 24-битное аудио, но также обеспечивает более глубокую обработку цифрового сигнала, чем его предшественники. Понижение соотношения сигнал/шум достигается, в частности, благодаря последовательному кодированию и декодированию при передаче/приеме. Также заявлено уменьшение искажений — особенно в диапазоне 10–20 кГц.

Чипсет работает под управлением программируемого 80-МГц RISC-процессора. Аудиосигнал обрабатывает встроенный 24-битный процессор Kalimba DSP. На борту, между прочим, стерео 24-битный АЦП с частотой дискретизации до 96 кГц, а встроенный стерео 24-битный ЦАП реализует частоту дискретизации до 192 кГц — параметры заданы с запасом.

На этом разработчики из Qualcomm не остановились, предложив кодек aptX Adaptive Audio. При низкой задержке в динамическом режиме, что отлично подойдет для геймерских гарнитур, он обеспечивает адаптивный битрейт, регулируя скорость передачи данных для бесперебойной связи. В своем релизе Qualcomm говорит о aptX Adaptive Audio, как о динамически настраиваемом аудиокодеке нового поколения, обратно совместимом с aptX и aptX HD.

Компания заявляет, что кодек спроектирован так, чтобы «автоматически настраиваться для обеспечения оптимального качества звука или задержки в зависимости от того, какой контент воспроизводится на устройстве, а также с учетом внешней радиочастотной среды, для обеспечения надежности». aptX Adaptive может работать на двух битрейтах: 276 и 420 Кбит/сек. Во втором варианте, благодаря более совершенным алгоритмам кодирования, по некоторым параметрам вроде сигнал-шум он даже превосходит aptX HD, хотя и не намного.

И еще один кодек от Qualcomm — aptX Low Latency, использующий скорость Bluetooth 5.0 для передачи аудио с низкой задержкой. Технология обеспечивает сквозную задержку при передаче по Bluetooth не более 32 мс. Задержка стандартного стерео Bluetooth сильно варьируется в зависимости от реализации системы и буферизации, но обычно она на порядок выше. И это ощутимо.

Видео и MIDI

Таким образом, возможности Bluetooth 5.0 в еще большей степени, чем раньше, стали достоянием любителей качественного аудио. И это не значит, что развитие Bluetooth не проникает в другие направления мультимедийных развлечений.

Если заглянуть в раздел существующих спецификаций на сайте организации Bluetooth SIG, занимающейся развитием технологии, то, кроме расширенного профиля распространения аудио A2DP версии 1.3.2, можно найти профиль дистанционного управления A/V – AVRCP, общий профиль распределения аудио/видео GAVDP (существующий, кстати, с 2012 года), HID, профиль устройства интерфейса пользователя и другие перспективные возможности.

Отдельно стоит обратить внимание на технологию BLE MIDI (также называемую Bluetooth SMART), распространяемую для MIDI-сообщества, к которому имеют отношение не только профессиональные музыканты. Речь идет о воспроизведении по Bluetooth MIDI-записей или формируемых интерфейсами MIDI-последовательностей (даже рост растений). Эти Bluetooth-технологии создают новую свободу для творчества и получения новых впечатлений. Что дальше предоставит нам Bluetooth в своем развитии — станет известно очень скоро. Выход новой версии прогнозируется в ближайшее время.

Источник

Менее распространенные HID

СОДЕРЖАНИЕ

HID стандарт

Компоненты протокола HID

Предполагается, что хост будет более сложным объектом, чем устройство. Хосту необходимо получить дескриптор HID с устройства и проанализировать его, прежде чем он сможет полностью взаимодействовать с устройством. Анализ дескриптора HID может быть сложным. Известно, что многие операционные системы содержат ошибки в драйверах устройств, ответственных за анализ дескрипторов HID, спустя годы после того, как драйверы устройств были изначально выпущены для общественности. Однако эта сложность является причиной того, что возможны быстрые инновации с HID-устройствами.

Вышеупомянутый механизм описывает так называемый «протокол отчетов» HID. Поскольку было понятно, что не все хосты могут анализировать дескрипторы HID, HID также определяет «протокол загрузки». В протоколе загрузки поддерживаются только определенные устройства с определенными функциями, поскольку используются фиксированные форматы пакетов данных. В этом режиме дескриптор HID не используется, поэтому нововведения ограничены. Однако преимущество в том, что минимальная функциональность все еще возможна на хостах, которые в противном случае не смогли бы поддерживать HID. Единственные устройства, поддерживаемые в протоколе загрузки:

Обычно режим загрузки используется в первые моменты загрузки компьютера. Непосредственная настройка BIOS компьютера часто выполняется только в режиме загрузки. Иногда появляется сообщение, информирующее пользователя о том, что на устройстве установлен правильный драйвер и теперь его можно использовать.

HID определение устройства

Согласно спецификации HID, устройство описывается в режиме отчета как набор элементов управления или группа элементов управления. Элементы управления соответствуют полю, содержащему данные, и другому полю, содержащему тег использования. Каждый тег использования описан в спецификации, поскольку конструктор предложил использовать данные, описанные в режиме отчета.

Другие протоколы с использованием HID

Источник

Работаем с 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 стеке можно легко разобраться в том, как их применять.

Источник

Обучаем HID устройство (читай BT-клавиатуру) работать правильно

Приветствую, хабралюди!
На ДР, мне друзья подарили BT-клавиатуру. Маленькая, беленькая, симпатичная, Удобная!
Подключил ее к своему Android 2.3.5 (SGSII), стал с ее помощью лазить по меню, запускать программы, дошел до Вконтакте и решил написать сообщение… а вот переключить на русский язык не смог, но как оказалось позже, это еще были только цветочки! Но кое-что мне удалось. Интересно как?

Читайте также:  шуруповерт 18v рейтинг лучших

Сейчас я уже многое понял, и не знаю с чего начать свой рассказ. Поэтому будет долго и скучно, но игра стоит свеч!

Имеем:
Первые шаги

Начал я с того, что написал письмо в техподдержку клавиатуры, с вопросом: а не могли бы вы посодействовать с настройкой клавиатуры для Андроида? Получил, как и ожидалось, ласковый отказ: «Эта клавиатура сделана специально для 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. Очень жду обновления ОС. Доволен результатом.

Источник

Библиотека с советами