summaryrefslogtreecommitdiff
path: root/tinyusb
diff options
context:
space:
mode:
Diffstat (limited to 'tinyusb')
-rw-r--r--tinyusb/class/custom_class.h3
-rw-r--r--tinyusb/class/hid_host.c10
-rw-r--r--tinyusb/common/tusb_types.h7
-rw-r--r--tinyusb/host/hub.c2
-rw-r--r--tinyusb/host/usbh.c37
5 files changed, 34 insertions, 25 deletions
diff --git a/tinyusb/class/custom_class.h b/tinyusb/class/custom_class.h
index 9bc4046fe..6fe219e3c 100644
--- a/tinyusb/class/custom_class.h
+++ b/tinyusb/class/custom_class.h
@@ -66,7 +66,8 @@ STATIC_ INLINE_ bool tusbh_custom_is_mounted(uint8_t dev_addr, uint16_t vendor_i
{
(void) vendor_id; // TODO check this later
(void) product_id;
- return (tusbh_device_get_mounted_class_flag(dev_addr) & BIT_(TUSB_CLASS_MAPPED_INDEX_END-1) ) != 0;
+// return (tusbh_device_get_mounted_class_flag(dev_addr) & BIT_(TUSB_CLASS_MAPPED_INDEX_END-1) ) != 0;
+ return false;
}
tusb_error_t tusbh_custom_read(uint8_t dev_addr, uint16_t vendor_id, uint16_t product_id, void * p_buffer, uint16_t length);
diff --git a/tinyusb/class/hid_host.c b/tinyusb/class/hid_host.c
index 450695b15..28a8a202a 100644
--- a/tinyusb/class/hid_host.c
+++ b/tinyusb/class/hid_host.c
@@ -66,8 +66,8 @@ static inline tusb_error_t hidh_interface_open(uint8_t dev_addr, uint8_t interfa
return TUSB_ERROR_NONE;
}
-static inline void hidh_interface_close(uint8_t dev_addr, hidh_interface_info_t *p_hid) ATTR_ALWAYS_INLINE;
-static inline void hidh_interface_close(uint8_t dev_addr, hidh_interface_info_t *p_hid)
+static inline void hidh_interface_close(hidh_interface_info_t *p_hid) ATTR_ALWAYS_INLINE;
+static inline void hidh_interface_close(hidh_interface_info_t *p_hid)
{
(void) hcd_pipe_close(p_hid->pipe_hdl);
memclr_(p_hid, sizeof(hidh_interface_info_t));
@@ -256,6 +256,8 @@ tusb_error_t hidh_open_subtask(uint8_t dev_addr, tusb_descriptor_interface_t con
void hidh_isr(pipe_handle_t pipe_hdl, tusb_event_t event, uint32_t xferred_bytes)
{
+ (void) xferred_bytes; // TODO may need to use this para later
+
#if TUSB_CFG_HOST_HID_KEYBOARD
if ( pipehandle_is_equal(pipe_hdl, keyboardh_data[pipe_hdl.dev_addr-1].pipe_hdl) )
{
@@ -282,7 +284,7 @@ void hidh_close(uint8_t dev_addr)
#if TUSB_CFG_HOST_HID_KEYBOARD
if ( pipehandle_is_valid( keyboardh_data[dev_addr-1].pipe_hdl ) )
{
- hidh_interface_close(dev_addr, &keyboardh_data[dev_addr-1]);
+ hidh_interface_close(&keyboardh_data[dev_addr-1]);
tusbh_hid_keyboard_unmounted_cb(dev_addr);
}
#endif
@@ -290,7 +292,7 @@ void hidh_close(uint8_t dev_addr)
#if TUSB_CFG_HOST_HID_MOUSE
if( pipehandle_is_valid( mouseh_data[dev_addr-1].pipe_hdl ) )
{
- hidh_interface_close(dev_addr, &mouseh_data[dev_addr-1]);
+ hidh_interface_close(&mouseh_data[dev_addr-1]);
tusbh_hid_mouse_unmounted_cb( dev_addr );
}
#endif
diff --git a/tinyusb/common/tusb_types.h b/tinyusb/common/tusb_types.h
index c950a7b66..72563e577 100644
--- a/tinyusb/common/tusb_types.h
+++ b/tinyusb/common/tusb_types.h
@@ -135,8 +135,7 @@ typedef enum {
TUSB_CLASS_PERSONAL_HEALTHCARE = 15 , ///< 15
TUSB_CLASS_AUDIO_VIDEO = 16 , ///< 16
- TUSB_CLASS_MAPPED_INDEX_START = 17 , // TODO compact & minimize this number
- TUSB_CLASS_MAPPED_INDEX_END = TUSB_CLASS_MAPPED_INDEX_START + 5,
+ TUSB_CLASS_MAPPED_INDEX_START = 17 , // TODO Map DIAGNOSTIC, WIRELESS_CONTROLLER, MISC, VENDOR_SPECIFIC to this to minimize the array
TUSB_CLASS_DIAGNOSTIC = 0xDC ,
TUSB_CLASS_WIRELESS_CONTROLLER = 0xE0 ,
@@ -153,7 +152,7 @@ typedef enum {
MISC_PROTOCOL_IAD = 1
}misc_protocol_type_t;
-typedef enum tusb_std_class_flag_{
+typedef enum {
TUSB_CLASS_FLAG_AUDIO = BIT_(TUSB_CLASS_AUDIO) , ///< 1
TUSB_CLASS_FLAG_CDC = BIT_(TUSB_CLASS_CDC) , ///< 2
TUSB_CLASS_FLAG_HID = BIT_(TUSB_CLASS_HID) , ///< 3
@@ -219,7 +218,7 @@ enum {
static inline uint8_t std_class_code_to_index(uint8_t std_class_code) ATTR_CONST ATTR_ALWAYS_INLINE;
static inline uint8_t std_class_code_to_index(uint8_t std_class_code)
{
- return (std_class_code <= TUSB_CLASS_AUDIO_VIDEO ) ? std_class_code :
+ return (std_class_code <= TUSB_CLASS_AUDIO_VIDEO ) ? std_class_code :
(std_class_code == TUSB_CLASS_DIAGNOSTIC ) ? TUSB_CLASS_MAPPED_INDEX_START :
(std_class_code == TUSB_CLASS_WIRELESS_CONTROLLER ) ? TUSB_CLASS_MAPPED_INDEX_START + 1 :
(std_class_code == TUSB_CLASS_MISC ) ? TUSB_CLASS_MAPPED_INDEX_START + 2 :
diff --git a/tinyusb/host/hub.c b/tinyusb/host/hub.c
index 051647018..5e6744c21 100644
--- a/tinyusb/host/hub.c
+++ b/tinyusb/host/hub.c
@@ -59,7 +59,7 @@ typedef struct {
}usbh_hub_t;
TUSB_CFG_ATTR_USBRAM usbh_hub_t hub_data[TUSB_CFG_HOST_DEVICE_MAX];
-TUSB_CFG_ATTR_USBRAM uint8_t hub_enum_buffer[sizeof(descriptor_hub_desc_t)];
+ATTR_ALIGNED(4) TUSB_CFG_ATTR_USBRAM STATIC_VAR uint8_t hub_enum_buffer[sizeof(descriptor_hub_desc_t)];
//OSAL_SEM_DEF(hub_enum_semaphore);
//static osal_semaphore_handle_t hub_enum_sem_hdl;
diff --git a/tinyusb/host/usbh.c b/tinyusb/host/usbh.c
index be7c3f42d..e6db37d4b 100644
--- a/tinyusb/host/usbh.c
+++ b/tinyusb/host/usbh.c
@@ -55,52 +55,56 @@
#define ENUM_QUEUE_DEPTH 5
// TODO fix/compress number of class driver
-static host_class_driver_t const usbh_class_drivers[TUSB_CLASS_MAPPED_INDEX_END] =
+static host_class_driver_t const usbh_class_drivers[] =
{
-#if HOST_CLASS_HID
+ #if HOST_CLASS_HID
[TUSB_CLASS_HID] = {
.init = hidh_init,
.open_subtask = hidh_open_subtask,
.isr = hidh_isr,
.close = hidh_close
},
-#endif
+ #endif
-#if TUSB_CFG_HOST_CDC
+ #if TUSB_CFG_HOST_CDC
[TUSB_CLASS_CDC] = {
.init = cdch_init,
.open_subtask = cdch_open_subtask,
.isr = cdch_isr,
.close = cdch_close
},
-#endif
+ #endif
-#if TUSB_CFG_HOST_MSC
+ #if TUSB_CFG_HOST_MSC
[TUSB_CLASS_MSC] = {
.init = msch_init,
.open_subtask = msch_open_subtask,
.isr = msch_isr,
.close = msch_close
},
-#endif
+ #endif
-#if TUSB_CFG_HOST_HUB
+ #if TUSB_CFG_HOST_HUB
[TUSB_CLASS_HUB] = {
.init = hub_init,
.open_subtask = hub_open_subtask,
.isr = hub_isr,
.close = hub_close
},
-#endif
+ #endif
-#if TUSB_CFG_HOST_CUSTOM_CLASS
+ #if TUSB_CFG_HOST_CUSTOM_CLASS
[TUSB_CLASS_MAPPED_INDEX_END-1] = {
.init = cush_init,
.open_subtask = cush_open_subtask,
.isr = cush_isr,
.close = cush_close
}
-#endif
+ #endif
+};
+
+enum {
+ USBH_CLASS_DRIVER_COUNT = sizeof(usbh_class_drivers) / sizeof(host_class_driver_t)
};
//--------------------------------------------------------------------+
@@ -162,7 +166,7 @@ tusb_error_t usbh_init(void)
}
//------------- class init -------------//
- for (uint8_t class_index = 1; class_index < TUSB_CLASS_MAPPED_INDEX_END; class_index++)
+ for (uint8_t class_index = 1; class_index < USBH_CLASS_DRIVER_COUNT; class_index++)
{
if (usbh_class_drivers[class_index].init)
{
@@ -296,7 +300,7 @@ static void usbh_device_unplugged(uint8_t hostid, uint8_t hub_addr, uint8_t hub_
usbh_devices[dev_addr].state != TUSB_DEVICE_STATE_UNPLUG)
{
// TODO Hub multiple level
- for (uint8_t class_index = 1; class_index < TUSB_CLASS_MAPPED_INDEX_END; class_index++)
+ for (uint8_t class_index = 1; class_index < USBH_CLASS_DRIVER_COUNT; class_index++)
{
if ((usbh_devices[dev_addr].flag_supported_class & BIT_(class_index)) &&
usbh_class_drivers[class_index].close)
@@ -412,9 +416,12 @@ tusb_error_t enumeration_body_subtask(void)
// Acknowledge Port Connection Change
OSAL_SUBTASK_INVOKED_AND_WAIT( hub_port_clear_feature_subtask(usbh_devices[0].hub_addr, usbh_devices[0].hub_port, HUB_FEATURE_PORT_CONNECTION_CHANGE), error );
- if ( ! ((hub_port_status_response_t *) enum_data_buffer)->status_change.connect_status ) SUBTASK_EXIT(TUSB_ERROR_NONE); // only handle connection change
+ hub_port_status_response_t * p_port_status;
+ p_port_status = ((hub_port_status_response_t *) enum_data_buffer);
+
+ if ( ! p_port_status->status_change.connect_status ) SUBTASK_EXIT(TUSB_ERROR_NONE); // only handle connection change
- if ( ! ((hub_port_status_response_t *) enum_data_buffer)->status_current.connect_status )
+ if ( ! p_port_status->status_current.connect_status )
{ // Disconnection event
usbh_device_unplugged(usbh_devices[0].core_id, usbh_devices[0].hub_addr, usbh_devices[0].hub_port);