diff --git a/radio/src/targets/common/arm/stm32/usbd_hid_joystick.c b/radio/src/targets/common/arm/stm32/usbd_hid_joystick.c index 97c885a4a..9f9a493c8 100644 --- a/radio/src/targets/common/arm/stm32/usbd_hid_joystick.c +++ b/radio/src/targets/common/arm/stm32/usbd_hid_joystick.c @@ -123,7 +123,7 @@ __ALIGN_BEGIN static const uint8_t HID_JOYSTICK_ReportDesc[] __ALIGN_END = 0x09, 0x34, // USAGE (Ry) 0x09, 0x35, // USAGE (Rz) 0x09, 0x36, // USAGE (Slider) - 0x09, 0x36, // USAGE (Slider) + 0x09, 0x37, // USAGE (Dial) 0x16, 0x00, 0x00, // LOGICAL_MINIMUM (0) 0x26, 0xFF, 0x07, // LOGICAL_MAXIMUM (2047) 0x75, 0x10, // REPORT_SIZE (16) @@ -170,8 +170,8 @@ __ALIGN_BEGIN static uint8_t USBD_HID_CfgDesc[USB_HID_CONFIG_DESC_SIZ] __ALIGN_E /************** Configuration Descriptor ****************/ 0x09, /* bLength: Configuration Descriptor size */ USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */ - USB_HID_CONFIG_DESC_SIZ, /* wTotalLength: Bytes returned */ - 0x00, + LOBYTE(USB_HID_CONFIG_DESC_SIZ), /* wTotalLength: Bytes returned */ + HIBYTE(USB_HID_CONFIG_DESC_SIZ), 0x01, /* bNumInterfaces: 1 interface */ 0x01, /* bConfigurationValue: Configuration value */ 0x00, /* iConfiguration: Index of string descriptor @@ -200,11 +200,12 @@ __ALIGN_BEGIN static uint8_t USBD_HID_CfgDesc[USB_HID_CONFIG_DESC_SIZ] __ALIGN_E 0x01, /* bNumDescriptors: Number of HID class descriptors to follow */ 0x22, /* bDescriptorType */ #if !defined(USBJ_EX) - sizeof(HID_JOYSTICK_ReportDesc), /*wItemLength: Total length of Report descriptor*/ + LOBYTE(sizeof(HID_JOYSTICK_ReportDesc)), /* wItemLength: Total length of Report descriptor*/ + HIBYTE(sizeof(HID_JOYSTICK_ReportDesc)), #else - 0, /*wItemLength: Total length of Report descriptor*/ -#endif + 0x00, /* wItemLength: Total length of Report descriptor*/ 0x00, +#endif /******************** Endpoint Descriptor for Joystick ********************/ /* 27 */ 0x07, /* bLength: Endpoint Descriptor size */ @@ -213,12 +214,13 @@ __ALIGN_BEGIN static uint8_t USBD_HID_CfgDesc[USB_HID_CONFIG_DESC_SIZ] __ALIGN_E HID_EPIN_ADDR, /* bEndpointAddress: Endpoint Address (IN) */ 0x03, /* bmAttributes: Interrupt endpoint */ #if !defined(USBJ_EX) - HID_IN_PACKET, /* wMaxPacketSize */ + LOBYTE(HID_IN_PACKET), /* wMaxPacketSize */ + HIBYTE(HID_IN_PACKET), #else - 0, /* wMaxPacketSize */ -#endif + 0x00, /* wMaxPacketSize */ 0x00, - 0x01, /*bInterval: Polling Interval (1 ms)*/ +#endif + 0x01, /* bInterval: Polling Interval (1 ms) */ /* 34 */ }; #endif /* USE_USBD_COMPOSITE */ @@ -234,8 +236,13 @@ __ALIGN_BEGIN static uint8_t USBD_HID_Desc[USB_HID_DESC_SIZ] __ALIGN_END = 0x00, /* bCountryCode: Hardware target country */ 0x01, /* bNumDescriptors: Number of HID class descriptors to follow */ 0x22, /* bDescriptorType */ - HID_MOUSE_REPORT_DESC_SIZE, /* wItemLength: Total length of Report descriptor */ +#if !defined(USBJ_EX) + LOBYTE(sizeof(HID_JOYSTICK_ReportDesc)), /* wItemLength: Total length of Report descriptor */ + HIBYTE(sizeof(HID_JOYSTICK_ReportDesc)) +#else + 0x00, /* wItemLength: Total length of Report descriptor */ 0x00, +#endif }; #ifndef USE_USBD_COMPOSITE @@ -276,9 +283,9 @@ static uint8_t USBD_HID_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx) { UNUSED(cfgidx); #if defined(USBJ_EX) - uint8_t hid_in_pkt_size = usbReportSize(); + uint16_t hid_in_pkt_size = usbReportSize(); #else - uint8_t hid_in_pkt_size = HID_IN_PACKET; + uint16_t hid_in_pkt_size = HID_IN_PACKET; #endif USBD_HID_HandleTypeDef *hhid; @@ -299,14 +306,7 @@ static uint8_t USBD_HID_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx) HIDInEpAdd = USBD_CoreGetEPAdd(pdev, USBD_EP_IN, USBD_EP_TYPE_INTR); #endif /* USE_USBD_COMPOSITE */ - if (pdev->dev_speed == USBD_SPEED_HIGH) - { - pdev->ep_in[HIDInEpAdd & 0xFU].bInterval = 1; - } - else /* LOW and FULL-speed endpoints */ - { - pdev->ep_in[HIDInEpAdd & 0xFU].bInterval = 1; - } + pdev->ep_in[HIDInEpAdd & 0xFU].bInterval = 1; /* Open EP IN */ (void)USBD_LL_OpenEP(pdev, HIDInEpAdd, USBD_EP_TYPE_INTR, hid_in_pkt_size); @@ -425,6 +425,11 @@ static uint8_t USBD_HID_Setup(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *re else if ((req->wValue >> 8) == HID_DESCRIPTOR_TYPE) { pbuf = USBD_HID_Desc; +#if defined(USBJ_EX) + struct usbReport_t ret = usbReportDesc(); + pbuf[7] = LOBYTE(ret.size); + pbuf[8] = HIBYTE(ret.size); +#endif len = MIN(USB_HID_DESC_SIZ, req->wLength); } else @@ -556,15 +561,27 @@ static uint8_t *USBD_HID_GetFSCfgDesc(uint16_t *length) { USBD_EpDescTypeDef *pEpDesc = USBD_GetEpDesc(USBD_HID_CfgDesc, HID_EPIN_ADDR); - if (pEpDesc != NULL) - { - pEpDesc->bInterval = 1; - } - #if defined(USBJ_EX) struct usbReport_t ret = usbReportDesc(); - USBD_HID_CfgDesc[25] = ret.size; - USBD_HID_CfgDesc[31] = usbReportSize(); + + USBD_HID_CfgDesc[25] = LOBYTE(ret.size); + USBD_HID_CfgDesc[26] = HIBYTE(ret.size); + + uint16_t size = usbReportSize(); + USBD_HID_CfgDesc[31] = LOBYTE(size); + USBD_HID_CfgDesc[32] = HIBYTE(size); + + if (pEpDesc != NULL) + { + pEpDesc->wMaxPacketSize = size; + pEpDesc->bInterval = 1; + } +#else + if (pEpDesc != NULL) + { + pEpDesc->wMaxPacketSize = HID_IN_PACKET; + pEpDesc->bInterval = 1; + } #endif *length = (uint16_t)sizeof(USBD_HID_CfgDesc); @@ -580,21 +597,7 @@ static uint8_t *USBD_HID_GetFSCfgDesc(uint16_t *length) */ static uint8_t *USBD_HID_GetHSCfgDesc(uint16_t *length) { - USBD_EpDescTypeDef *pEpDesc = USBD_GetEpDesc(USBD_HID_CfgDesc, HID_EPIN_ADDR); - - if (pEpDesc != NULL) - { - pEpDesc->bInterval = 1; - } - -#if defined(USBJ_EX) - struct usbReport_t ret = usbReportDesc(); - USBD_HID_CfgDesc[25] = ret.size; - USBD_HID_CfgDesc[31] = usbReportSize(); -#endif - - *length = (uint16_t)sizeof(USBD_HID_CfgDesc); - return USBD_HID_CfgDesc; + return USBD_HID_GetFSCfgDesc(length); } /** @@ -606,20 +609,7 @@ static uint8_t *USBD_HID_GetHSCfgDesc(uint16_t *length) */ static uint8_t *USBD_HID_GetOtherSpeedCfgDesc(uint16_t *length) { - USBD_EpDescTypeDef *pEpDesc = USBD_GetEpDesc(USBD_HID_CfgDesc, HID_EPIN_ADDR); - - if (pEpDesc != NULL) - { - pEpDesc->bInterval = 1; - } -#if defined(USBJ_EX) - struct usbReport_t ret = usbReportDesc(); - USBD_HID_CfgDesc[25] = ret.size; - USBD_HID_CfgDesc[31] = usbReportSize(); -#endif - - *length = (uint16_t)sizeof(USBD_HID_CfgDesc); - return USBD_HID_CfgDesc; + return USBD_HID_GetFSCfgDesc(length); } #endif /* USE_USBD_COMPOSITE */