Hi,
I work with STM32F4LP5 chip and Keil USB device stack.
I configure USB-HID with HID_REPORT_DESCRITOR to 63 and a specific descriptor as follow :
#define KBD_REPORT_DESC_SIZE 63Uconst uint8_t usbd_hid0_report_descriptor[KBD_REPORT_DESC_SIZE] ={0x05, 0x01, // Usage Page (Generic Desktop),0x09, 0x06, // Usage (Keyboard),0xA1, 0x01, // Collection (Application),0x75, 0x01, // Report Size (1),0x95, 0x08, // Report Count (8),0x05, 0x07, // Usage Page (Key Codes),0x19, 0xE0, // Usage Minimum (224),0x29, 0xE7, // Usage Maximum (231),0x15, 0x00, // Logical Minimum (0),0x25, 0x01, // Logical Maximum (1),0x81, 0x02, // Input (Data, Variable, Absolute),//;Modifier byte0x95, 0x01, // Report Count (1),0x75, 0x08, // Report Size (8),0x81, 0x03, // Input (Constant),//;Reserved byte0x95, 0x05, // Report Count (5),0x75, 0x01, // Report Size (1),0x05, 0x08, // Usage Page (LEDs),0x19, 0x01, // Usage Minimum (1),0x29, 0x05, // Usage Maximum (5),0x91, 0x02, // Output (Data, Variable, Absolute),//;LED report0x95, 0x01, // Report Count (1),0x75, 0x03, // Report Size (3),0x91, 0x03, // Output (Constant), ;LED report?// padding0x95, 0x06, //................// Report Count (6),0x75, 0x08, // Report Size (8),0x15, 0x00, // Logical Minimum (0),0x25, 0x68, // Logical Maximum(104),0x05, 0x07, // Usage Page (Key Codes),0x19, 0x00, // Usage Minimum (0),0x29, 0x68, // Usage Maximum (104),0x81, 0x00, // Input (Data, Array),0xc0 // End Collection};
In main, i do USB initialization layer :
USBD_Initialize (0); // USB Device 0 Initialization USBD_Connect (0); // USB Device 0 Connect
PC HOST view and is ok to mangage keyboard USB-HID : Ok
Then the first call to USBD_HID_GetReportTrigger() function works fine and send a correct 8 bytes flow to HOST (pc) :
USBD_HID_GetReportTrigger(0, 0, (uint8_t *)&keyBoardHIDsub, sizeof(keyBoardHIDsub) );
But STM32 won't send 8 bytes to release the key and send only one 0 byte over USB link and HOST repeat the key in loop.
The second call to USBD_HID_GetReportTrigger give 0x23 error : usbDriverBusy
Why ?
Regards,
G.Grange
If you need to check a report descriptor, this site can be useful.
https://eleccelerator.com/usbdescreqparser/