summaryrefslogtreecommitdiff
path: root/src/host
diff options
context:
space:
mode:
Diffstat (limited to 'src/host')
-rw-r--r--src/host/usbh.c51
1 files changed, 29 insertions, 22 deletions
diff --git a/src/host/usbh.c b/src/host/usbh.c
index 2ef936ad0..a9c2c201f 100644
--- a/src/host/usbh.c
+++ b/src/host/usbh.c
@@ -53,13 +53,39 @@
// USBH-HCD common data structure
//--------------------------------------------------------------------+
+// device0 struct must be strictly a subset of normal device struct
+typedef struct
+{
+ // port
+ uint8_t rhport;
+ uint8_t hub_addr;
+ uint8_t hub_port;
+ uint8_t speed;
+
+ volatile struct TU_ATTR_PACKED
+ {
+ uint8_t connected : 1;
+ uint8_t addressed : 1;
+ uint8_t configured : 1;
+ uint8_t suspended : 1;
+ };
+} usbh_dev0_t;
+
typedef struct {
- //------------- port -------------//
+ // port
uint8_t rhport;
uint8_t hub_addr;
uint8_t hub_port;
uint8_t speed;
+ volatile struct TU_ATTR_PACKED
+ {
+ uint8_t connected : 1;
+ uint8_t addressed : 1;
+ uint8_t configured : 1;
+ uint8_t suspended : 1;
+ };
+
//------------- device descriptor -------------//
uint16_t vid;
uint16_t pid;
@@ -73,14 +99,6 @@ typedef struct {
// uint8_t interface_count; // bNumInterfaces alias
//------------- device -------------//
- struct TU_ATTR_PACKED
- {
- uint8_t connected : 1;
- uint8_t addressed : 1;
- uint8_t configured : 1;
- uint8_t suspended : 1;
- };
-
volatile uint8_t state; // device state, value from enum tusbh_device_state_t
uint8_t itf2drv[16]; // map interface number to driver (0xff is invalid)
@@ -103,16 +121,6 @@ typedef struct {
} usbh_device_t;
-typedef struct
-{
- uint8_t rhport;
- uint8_t hub_addr;
- uint8_t hub_port;
- uint8_t speed;
-
- volatile uint8_t connected;
-} usbh_dev0_t;
-
//--------------------------------------------------------------------+
// MACRO CONSTANT TYPEDEF
@@ -894,11 +902,10 @@ static bool enum_get_9byte_config_desc_complete(uint8_t dev_addr, tusb_control_r
TU_ASSERT(XFER_RESULT_SUCCESS == result);
// TODO not enough buffer to hold configuration descriptor
- tusb_desc_configuration_t const * desc_config = (tusb_desc_configuration_t const*) _usbh_ctrl_buf;
- uint16_t total_len;
+ uint8_t const * desc_config = _usbh_ctrl_buf;
// Use offsetof to avoid pointer to the odd/misaligned address
- memcpy(&total_len, (uint8_t*) desc_config + offsetof(tusb_desc_configuration_t, wTotalLength), 2);
+ uint16_t const total_len = tu_le16toh( tu_unaligned_read16(desc_config + offsetof(tusb_desc_configuration_t, wTotalLength)) );
TU_ASSERT(total_len <= CFG_TUH_ENUMERATION_BUFSIZE);