HID терминал для окон - PullRequest
       17

HID терминал для окон

0 голосов
/ 23 октября 2018

Я разработал прошивку для моего устройства STM32.В этом устройстве я определил интерфейс CUSTOM HID для отправки / получения строки через этот интерфейс.Вектор описания моего интерфейса USB:

/**** Descriptor of CUSTOM HID interface ****/
0x09, /*bLength: Interface Descriptor size*/
0x04, /*bDescriptorType: Interface descriptor type*/
0x00, /*bInterfaceNumber: Number of Interface*/
0x00, /*bAlternateSetting: Alternate setting*/
0x02, /*bNumEndpoints*/
0x03, /*bInterfaceClass: CUSTOM_HID*/
0x00, /*bInterfaceSubClass : 1=BOOT, 0=no boot*/
0x00, /*nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse*/
0x00, /*iInterface: Index of string descriptor*/

/**** Descriptor of CUSTOM_HID ****/
0x09, /*bLength: CUSTOM_HID Descriptor size*/
0x21, /*bDescriptorType: CUSTOM_HID*/
0x11, /*bCUSTOM_HIDUSTOM_HID: CUSTOM_HID Class Spec release number*/
0x01,
0x00, /*bCountryCode: Hardware target country*/
0x01, /*bNumDescriptors: Number of CUSTOM_HID class descriptors to follow*/
0x22, /*bDescriptorType*/
0x33,/*wItemLength: Total length of Report descriptor*/
0x00,

/**** Descriptor of Custom HID endpoints ****/
0x07, /* bLength: Endpoint Descriptor size */
0x05, /* bDescriptorType: */
0x04, /*bEndpointAddress: Endpoint Address (OUT)*/
0x03, /* bmAttributes: Interrupt endpoint */
0x40, /* wMaxPacketSize (64 bytes) */
0x00,
0x0A, /* bInterval: Polling Interval (10 ms) */

0x07, /*bLength: Endpoint Descriptor size*/
0x05, /*bDescriptorType:*/
0x81, /*bEndpointAddress: Endpoint Address (IN)*/
0x03, /*bmAttributes: Interrupt endpoint*/
0x40, /*wMaxPacketSize (64 bytes) */
0x00,
0x0A, /*bInterval: Polling Interval (10 ms)*/

Я проверил свое устройство на строку отправки / получения в Linux, и это хорошо работает (простая строка эха для устройства hidraw).Сейчас я пытаюсь разработать простую программу для Windows (попробуйте v7x64 и v10x64).Я протестировал много библиотек:

В моих тестах я отправляю сообщение, подобное этому:

0x00 (Report ID)
0x41 (Report payload) (A)
...

Но во всех моих тестах я вижу, что не все сообщения отправляются на устройство.Например, мне нужно отправить 10 или более раз одну и ту же строку, прежде чем устройство получит сообщение.Как я могу улучшить связь между Windows и устройством?

1 Ответ

0 голосов
/ 08 января 2019

После большой отладки я обнаружил проблему.

В библиотеке STM32 можно определить размер буфера HID

#define USBD_CUSTOMHID_OUTREPORT_BUF_SIZE ...

В системах Unix контроль этого размера буфера отсутствует, ноWindows нет!В моем случае я определил буфер размером 1024 байта (в версии USB FS).Когда я пытался отправить сообщение, Windows отправляет порции по 64 байта, и он не может получать байты от USB, пока буфер не будет заполнен.

После изменения размера буфера с правильным значением, 64 байта,связь работает и в Windows.

...