Интерфейс Determining HID, чтобы быть POS или Клавиатурой в C++

У меня есть некоторые устройства сканера штрихкода, которые могут обработать множество интерфейсов USB (Эмуляция COMM, Клавиатура HID, HID НА МЕСТЕ ПРОДАЖИ, и т.д.), проблема состоит в том, что, в то время как я могу сказать, находится ли устройство в режиме HID, я должен смочь определить, является ли это Клавиатура HID или HID НА МЕСТЕ ПРОДАЖИ.

Существует ли способ определить это использование Win32 C++, предпочтительно с созданным в библиотеке окон HID (hidsdi.h)?

5
задан Jonas 6 April 2010 в 16:54
поделиться

3 ответа

Можно использовать HidD_GetHidGuid для получения уникального GUID для устройства. Руководства по интерфейсу устройства определяются каждым устройством/программным обеспечением, Microsoft или третьей стороной по своему усмотрению. В некоторых случаях руководства публикуются и являются стандартными интерфейсами, а в некоторых - нет.

Также можно воспользоваться утилитой USBView от Microsoft, которая позволит вам просмотреть дерево USB, или вы можете посмотреть в реестре и узнать, можете ли вы найти GUID для вашего устройства. Возможно, вам все же придется сделать запрос к вашему устройству, чтобы определить тип устройства, если конфигурационные данные отсутствуют или оно не отображается, кроме как на общем устройстве, если ваше устройство поддерживает это.

Существует два типа GUID: Класс устройства и интерфейс устройства. Устройство может быть только частью одного класса. К сожалению, GUID классов устройств и интерфейсов устройств иногда бывают одними и теми же, что сбивают с толку разработчиков. В WinXP DDK были созданы стандарты, чтобы попытаться сделать определение GUID менее запутанным.

См. также этот предыдущий вопрос по SO: Используйте RegisterDeviceNotification() для ВСЕХ USB устройств.

3
ответ дан 14 December 2019 в 19:13
поделиться

Вот список возможных HID GUID: http://msdn.microsoft.com/en-us/library/ms791134.aspx и используйте hidd_gethidguid, как предложил Roboto

1
ответ дан 14 December 2019 в 19:13
поделиться

Вам потребуется использовать функции HidP_ для проверки возможностей hid-отчета. Выясните, какие возможности (использования) представлены устройством HIDPOS, и проверьте, присутствуют ли эти возможности, используя HidD_GetPreparsedData(), HidP_GetCaps() и затем HidP_GetValueCaps(и/или ..ButtonCaps, etc). Хорошим местом для поиска примеров является страница Яна Аксельсона. Если эти функции присутствуют, значит, у вас POS-устройство. Если нет, то это, должно быть, клавиатура (при условии, что вы убедились, что устройство подключено)

.
1
ответ дан 14 December 2019 в 19:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: