fix(radio): stack corruption and other -DUSBJ_EX=OFF issues (#4684)

This commit is contained in:
ThomasKuehne
2024-03-06 13:22:04 +10:00
committed by GitHub
parent 5f32648b21
commit 94a472ecab
3 changed files with 19 additions and 18 deletions
+1 -1
View File
@@ -621,7 +621,7 @@ void menuModelSetup(event_t event)
CASE_LUA_MODEL_SCRIPTS(VIEWOPT_ROW(0))
VIEWOPT_ROW(0),
USB_JOYSTICK_ROWS,
USB_JOYSTICK_ROWS
});
MENU_CHECK(menuTabModel, MENU_MODEL_SETUP, HEADER_LINE + ITEM_MODEL_SETUP_LINES_COUNT);
@@ -200,7 +200,7 @@ extern int16_t channelOutputs[MAX_OUTPUT_CHANNELS];
void usbJoystickUpdate()
{
#if !defined(USBJ_EX)
static uint8_t HID_Buffer[0/*HID_IN_PACKET*/];
static uint8_t HID_Buffer[HID_IN_PACKET];
//buttons
HID_Buffer[0] = 0;
@@ -83,22 +83,22 @@ static uint8_t *USBD_HID_GetDeviceQualifierDesc(uint16_t *length);
/*
This USB HID endpoint report description defines a device with:
* 24 digital buttons
* 8 analog axes with 8bit resolution
* 8 analog axes with 11bit resolution
Repot packet described as C struct is:
Report packet described as C struct is:
struct {
uint8_t buttons1; //bit 0 - button 1, bit 1 - button 2, ..., mapped to channels 9-16, on if channel > 0
uint8_t buttons2; // mapped to channels 17-24, on if channel > 0
uint8_t buttons3; // mapped to channels 25-32, on if channel > 0
uint8_t X; //analog value, mapped to channel 1
uint8_t Y; //analog value, mapped to channel 2
uint8_t Z; //analog value, mapped to channel 3
uint8_t Rx; //analog value, mapped to channel 4
uint8_t Ry //analog value, mapped to channel 5
uint8_t Rz; //analog value, mapped to channel 6
uint8_t S1; //analog value, mapped to channel 7
uint8_t S2; //analog value, mapped to channel 8
uint16_t X; //analog value, mapped to channel 1
uint16_t Y; //analog value, mapped to channel 2
uint16_t Z; //analog value, mapped to channel 3
uint16_t Rx; //analog value, mapped to channel 4
uint16_t Ry //analog value, mapped to channel 5
uint16_t Rz; //analog value, mapped to channel 6
uint16_t S1; //analog value, mapped to channel 7
uint16_t S2; //analog value, mapped to channel 8
}
*/
__ALIGN_BEGIN static const uint8_t HID_JOYSTICK_ReportDesc[] __ALIGN_END =
@@ -167,6 +167,7 @@ USBD_ClassTypeDef USBD_HID =
/* USB HID device FS Configuration Descriptor */
__ALIGN_BEGIN static uint8_t USBD_HID_CfgDesc[USB_HID_CONFIG_DESC_SIZ] __ALIGN_END =
{
/************** Configuration Descriptor ****************/
0x09, /* bLength: Configuration Descriptor size */
USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */
USB_HID_CONFIG_DESC_SIZ, /* wTotalLength: Bytes returned */
@@ -178,7 +179,7 @@ __ALIGN_BEGIN static uint8_t USBD_HID_CfgDesc[USB_HID_CONFIG_DESC_SIZ] __ALIGN_E
0xE0, /* bmAttributes: Bus Powered according to user configuration */
USBD_MAX_POWER, /* MaxPower (mA) */
/************** Descriptor of Joystick Mouse interface ****************/
/************** Interface Descriptor for Joystick ****************/
/* 09 */
0x09, /* bLength: Interface Descriptor size */
USB_DESC_TYPE_INTERFACE, /* bDescriptorType: Interface descriptor type */
@@ -189,7 +190,7 @@ __ALIGN_BEGIN static uint8_t USBD_HID_CfgDesc[USB_HID_CONFIG_DESC_SIZ] __ALIGN_E
0x00, /* bInterfaceSubClass : 1=BOOT, 0=no boot */
0x00, /* nInterfaceProtocol : 0=none, 1=keyboard, 2=mouse */
0, /* iInterface: Index of string descriptor */
/******************** Descriptor of Joystick Mouse HID ********************/
/******************** HID Descriptor for Joystick ********************/
/* 18 */
0x09, /* bLength: HID Descriptor size */
HID_DESCRIPTOR_TYPE, /* bDescriptorType: HID */
@@ -204,7 +205,7 @@ __ALIGN_BEGIN static uint8_t USBD_HID_CfgDesc[USB_HID_CONFIG_DESC_SIZ] __ALIGN_E
0, /*wItemLength: Total length of Report descriptor*/
#endif
0x00,
/******************** Descriptor of Mouse endpoint ********************/
/******************** Endpoint Descriptor for Joystick ********************/
/* 27 */
0x07, /* bLength: Endpoint Descriptor size */
USB_DESC_TYPE_ENDPOINT, /* bDescriptorType:*/
@@ -212,9 +213,9 @@ __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_EPIN_SIZE, /*wMaxPacketSize: 4 Byte max */
HID_IN_PACKET, /* wMaxPacketSize */
#else
0, /*HID_IN_PACKET,*/ /*wMaxPacketSize*/
0, /* wMaxPacketSize */
#endif
0x00,
0x01, /*bInterval: Polling Interval (1 ms)*/
@@ -277,7 +278,7 @@ static uint8_t USBD_HID_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
#if defined(USBJ_EX)
uint8_t hid_in_pkt_size = usbReportSize();
#else
uint8_t hid_in_pkt_size = HID_EPIN_SIZE;
uint8_t hid_in_pkt_size = HID_IN_PACKET;
#endif
USBD_HID_HandleTypeDef *hhid;