l_fin_l 0 30 октября, 2020 Опубликовано 30 октября, 2020 (изменено) · Жалоба Добрый день всем! Сгенерировал проект в CubeMX(v6.0.0) с использованием USB Custom HID, прием данных с хоста работает, а вот данные с устройства на хост не отправляются. USBTrace пишет STATUS_NOT_SUPPORTED(картинка в приложении). Может кто сталкивался с данной проблемой, или знает ее решение. Изменено 30 октября, 2020 пользователем l_fin_l Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 46 30 октября, 2020 Опубликовано 30 октября, 2020 · Жалоба А девайс-менеджер что у вас показывает? Желтый треугольничек или всё нормально? Т.е. драйвер-то подцепился? Виртуальный COM-порт появился? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 31 октября, 2020 Опубликовано 31 октября, 2020 · Жалоба Какой такой com-порт на HID? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
l_fin_l 0 1 ноября, 2020 Опубликовано 1 ноября, 2020 · Жалоба 31.10.2020 в 02:28, Xenia сказал: А девайс-менеджер что у вас показывает? Желтый треугольничек или всё нормально? Т.е. драйвер-то подцепился? Виртуальный COM-порт появился? ну он без COM-порта, это просто HID. В Диспетчере устройств все отображается, драйвер подцепляется, могу слать пакеты на устройство, а вот с устройства на хост не получается Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mcheb 0 2 ноября, 2020 Опубликовано 2 ноября, 2020 · Жалоба Вот так работает /* USB report descriptor */ const uint8_t usbDescReport[] = { 0x06, 0xFF, 0x00, /* USAGE_PAGE (Vendor Page: 0xFF00) */ 0x09, 0x01, /* USAGE (1) */ 0xa1, 0x01, /* COLLECTION (Application) */ // 0x15, 0x00, /* LOGICAL_MINIMUM (0) */ // 0x26, 0xff, 0x00, /* LOGICAL_MAXIMUM (255) */ 0x75, 0x08, /* REPORT_SIZE bits*/ 0x95, USB_HID_SIZE-1, /* REPORT_COUNT bytes*/ /* IN --> 1+1+62 bytes */ 0x85, IN_REPORT_ID, /* REPORT_ID */ 0x09, IN_REPORT_ID, /* USAGE */ // 0x95, USB_IN_SIZE-1, /* REPORT_COUNT */ 0x81, 0x02, // INPUT (Data,Variable,Abs) /* OUT 1+1+62 bytes */ 0x85, OUT_REPORT_ID, /* REPORT_ID*/ 0x09, OUT_REPORT_ID, /* USAGE */ // 0x95, USB_OUT_SIZE-1, /* REPORT_COUNT */ 0x91, 0x02, // OUTPUT(Data, Variable,Abs // feature in-out report 0x85, FEATURE_REPORT_ID,/* REPORT_ID */ 0x09, FEATURE_REPORT_ID, /* USAGE */ // 0x95, USB_OUT_SIZE-1, /* REPORT_COUNT */ 0xB1, 0x02, // Feature (Data, Variable,Abs) 0xc0 /* END_COLLECTION */ } /** BOOTLOADER function */ void usbHidRead(void) { uint8_t buf[USB_HID_SIZE]; uint16_t cnt,i; cnt = usbReadOutEp(buf,FreeCnt(&rxFifo)); if(cnt != 0) { if(buf[1] > 0) { /** buf[0] Report ID buf[1] - data length */ for(i=0; i<buf[1]; i++) InsChar(buf[i+2]); // usbSetUartIrq(); } } } /** BOOTLOADER function */ void usbHidSend(void) { uint8_t buf[USB_HID_SIZE]; uint16_t cnt=0; buf[0] = IN_REPORT_ID; /** Report ID */ for(cnt=2; cnt<USB_HID_SIZE;) { if(WaitCnt(&txFifo) == 0) break; else buf[cnt++] = ReqChar(); } if(cnt > 2) { buf[1] = cnt-2; pUsb.sendFlag = 1; // prtBuf("SendToHost: ",(void *)(buf+1),cnt-1); usbWriteInEp(buf,USB_HID_SIZE); } else pUsb.sendFlag = 0; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Xenia 46 2 ноября, 2020 Опубликовано 2 ноября, 2020 · Жалоба Вообще-то после "Collection (Application)" должно еще раз быть "Usage Page", оттого и Logical Minimum/Maximum не работают. Т.е. "Usage Page" должно заключать в себе каждый отдельный блок. Только "Report_ID" может быть его старше и находиться снаружи. Например, у меня оно так: 0x05, 0x01, // Usage Page (Generic Desktop) 0x09, 0x04, // Usage (Joystick) 0xA1, 0x01, // Collection (Application) 0x85, 0x01, // Report ID (1) // Axis 0x05, 0x01, // Usage Page (Generic Desktop) 0x09, 0x30, // Usage (X) 0x09, 0x31, // Usage (Y) 0x09, 0x32, // Usage (Z) 0x09, 0x33, // Usage (A0) 0x09, 0x34, // Usage (A1) 0x09, 0x35, // Usage (A2) 0x09, 0x37, // Usage (A3) 0x09, 0x36, // Usage (A4) 0x16,0x00,0x00, // Logical Minimum (0) 0x26,0x00,0x10, // Logical Maximum (4096) 0x35, 0x00, // Physical Minimum (0) 0x46,0x00,0x10, // Physical Maximum (4096) 0x75, 0x10, // Report Size (16) 0x95, 0x08, // Report Count (8) 0x81, 0x02, // Input (Data, Variable, Absolute) // Buttons 0x05, 0x09, // Usage Page (Buttons) 0x19, 0x01, // Usage Minimum (1) 0x29, 0x80, // Usage Maximum (128) 0x15, 0x00, // Logical Minimum (0) 0x25, 0x01, // Logical Maximum (1) 0x75, 0x01, // Report Size (1) 0x95, 0xC0, // Report Count (192) 0x81, 0x02, // Input (Data, Variable, Absolute) // Feature 0x85, 0x40, // Report ID (0x40) 0x05, 0x08, // Usage Page (LEDs) 0x09, 0x4B, // Usage (Generic Indicator) 0x75, 0x08, // Report Size (8) 0x95, 0x3F, // Report Count (63) 0xB1, 0x00, // Feature (Data, Array, Absolute) 0xC0, // End Collection (Application) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy_Em 2 2 ноября, 2020 Опубликовано 2 ноября, 2020 · Жалоба А я просто стащил набор дескрипторов из соответствующего оборудования и слепил "что было": https://github.com/eddyem/stm32samples/blob/master/F1-nolib/USB_HID/usb_lib.c#L77 Отлично работает без всяких халов-спл и т.п. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
l_fin_l 0 3 ноября, 2020 Опубликовано 3 ноября, 2020 · Жалоба Спасибо всем кто откликнулся, проблему решил. Сделал все так, как описывается в данном видео, вдруг кому пригодится Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться