diff --git a/firmware/usb_performance/usb_standard_request.c b/firmware/usb_performance/usb_standard_request.c index 1b42bd5e..286d783b 100644 --- a/firmware/usb_performance/usb_standard_request.c +++ b/firmware/usb_performance/usb_standard_request.c @@ -67,7 +67,7 @@ static void usb_send_descriptor( usb_endpoint_t* const endpoint, uint8_t* const descriptor_data ) { - const uint32_t setup_length = (endpoint->setup.length_h << 8) | endpoint->setup.length_l; + const uint32_t setup_length = endpoint->setup.length; uint32_t descriptor_length = descriptor_data[0]; if( descriptor_data[1] == USB_DESCRIPTOR_TYPE_CONFIGURATION ) { descriptor_length = (descriptor_data[3] << 8) | descriptor_data[2]; @@ -221,7 +221,7 @@ static void usb_standard_request_set_configuration( static void usb_standard_request_get_configuration_setup( usb_endpoint_t* const endpoint ) { - if( (endpoint->setup.length_h == 0) && (endpoint->setup.length_l == 1) ) { + if( endpoint->setup.length == 1 ) { endpoint->buffer[0] = 0; if( endpoint->device->configuration ) { endpoint->buffer[0] = endpoint->device->configuration->number; diff --git a/firmware/usb_performance/usb_type.h b/firmware/usb_performance/usb_type.h index 1bfb3205..fed3172b 100644 --- a/firmware/usb_performance/usb_type.h +++ b/firmware/usb_performance/usb_type.h @@ -30,15 +30,30 @@ #define ATTR_ALIGNED(x) __attribute__ ((aligned(x))) #define ATTR_SECTION(x) __attribute__ ((section(x))) -typedef struct { +typedef struct ATTR_PACKED { uint8_t request_type; uint8_t request; - uint8_t value_l; - uint8_t value_h; - uint8_t index_l; - uint8_t index_h; - uint8_t length_l; - uint8_t length_h; + union { + struct { + uint8_t value_l; + uint8_t value_h; + }; + uint16_t value; + }; + union { + struct { + uint8_t index_l; + uint8_t index_h; + }; + uint16_t index; + }; + union { + struct { + uint8_t length_l; + uint8_t length_h; + }; + uint16_t length; + }; } usb_setup_t; typedef enum {