improve usbh

This commit is contained in:
hathach
2021-06-11 17:14:22 +07:00
parent a1a03c92f6
commit 572d986a02
5 changed files with 56 additions and 52 deletions

View File

@@ -30,7 +30,8 @@
// MACRO TYPEDEF CONSTANT ENUM DECLARATION // MACRO TYPEDEF CONSTANT ENUM DECLARATION
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// If your host terminal support ansi escape code, it can be use to simulate mouse cursor // If your host terminal support ansi escape code such as TeraTerm
// it can be use to simulate mouse cursor movement within terminal
#define USE_ANSI_ESCAPE 0 #define USE_ANSI_ESCAPE 0
#define MAX_REPORT 4 #define MAX_REPORT 4
@@ -113,6 +114,13 @@ void tuh_hid_report_received_cb(uint8_t dev_addr, uint8_t instance, uint8_t cons
return; return;
} }
// For complete list of Usage Page & Usage checkout src/class/hid/hid.h. For examples:
// - Keyboard : Desktop, Keyboard
// - Mouse : Desktop, Mouse
// - Gamepad : Desktop, Gamepad
// - Consumer Control (Media Key) : Consumer, Consumer Control
// - System Control (Power key) : Desktop, System Control
// - Generic (vendor) : 0xFFxx, xx
if ( rpt_info->usage_page == HID_USAGE_PAGE_DESKTOP ) if ( rpt_info->usage_page == HID_USAGE_PAGE_DESKTOP )
{ {
switch (rpt_info->usage) switch (rpt_info->usage)

View File

@@ -37,16 +37,6 @@
// MACRO CONSTANT TYPEDEF // MACRO CONSTANT TYPEDEF
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
/*
"KEYBOARD" : in_len=8 , out_len=1, usage_page=0x01, usage=0x06 # Generic Desktop, Keyboard
"MOUSE" : in_len=4 , out_len=0, usage_page=0x01, usage=0x02 # Generic Desktop, Mouse
"CONSUMER" : in_len=2 , out_len=0, usage_page=0x0C, usage=0x01 # Consumer, Consumer Control
"SYS_CONTROL" : in_len=1 , out_len=0, usage_page=0x01, usage=0x80 # Generic Desktop, Sys Control
"GAMEPAD" : in_len=6 , out_len=0, usage_page=0x01, usage=0x05 # Generic Desktop, Game Pad
"DIGITIZER" : in_len=5 , out_len=0, usage_page=0x0D, usage=0x02 # Digitizers, Pen
"XAC_COMPATIBLE_GAMEPAD" : in_len=3 , out_len=0, usage_page=0x01, usage=0x05 # Generic Desktop, Game Pad
"RAW" : in_len=64, out_len=0, usage_page=0xFFAF, usage=0xAF # Vendor 0xFFAF "Adafruit", 0xAF
*/
typedef struct typedef struct
{ {
uint8_t itf_num; uint8_t itf_num;

View File

@@ -317,8 +317,8 @@ void tu_print_var(uint8_t const* buf, uint32_t bufsize)
#define TU_LOG1 tu_printf #define TU_LOG1 tu_printf
#define TU_LOG1_MEM tu_print_mem #define TU_LOG1_MEM tu_print_mem
#define TU_LOG1_VAR(_x) tu_print_var((uint8_t const*)(_x), sizeof(*(_x))) #define TU_LOG1_VAR(_x) tu_print_var((uint8_t const*)(_x), sizeof(*(_x)))
#define TU_LOG1_INT(_x) tu_printf(#_x " = %ld\n", (uint32_t) (_x) ) #define TU_LOG1_INT(_x) tu_printf(#_x " = %ld\r\n", (uint32_t) (_x) )
#define TU_LOG1_HEX(_x) tu_printf(#_x " = %lX\n", (uint32_t) (_x) ) #define TU_LOG1_HEX(_x) tu_printf(#_x " = %lX\r\n", (uint32_t) (_x) )
// Log Level 2: Warn // Log Level 2: Warn
#if CFG_TUSB_DEBUG >= 2 #if CFG_TUSB_DEBUG >= 2

View File

@@ -795,6 +795,8 @@ static bool enum_get_addr0_device_desc_complete(uint8_t dev_addr, tusb_control_r
return false; return false;
} }
TU_ASSERT(tu_desc_type(_usbh_ctrl_buf) == TUSB_DESC_DEVICE);
// Reset device again before Set Address // Reset device again before Set Address
TU_LOG2("Port reset \r\n"); TU_LOG2("Port reset \r\n");
@@ -938,7 +940,7 @@ static bool enum_get_config_desc_complete(uint8_t dev_addr, tusb_control_request
// Parse configuration & set up drivers // Parse configuration & set up drivers
// Driver open aren't allowed to make any usb transfer yet // Driver open aren't allowed to make any usb transfer yet
parse_configuration_descriptor(dev_addr, (tusb_desc_configuration_t*) _usbh_ctrl_buf); TU_ASSERT( parse_configuration_descriptor(dev_addr, (tusb_desc_configuration_t*) _usbh_ctrl_buf) );
TU_LOG2("Set Configuration = %d\r\n", CONFIG_NUM); TU_LOG2("Set Configuration = %d\r\n", CONFIG_NUM);
tusb_control_request_t const new_request = tusb_control_request_t const new_request =
@@ -988,12 +990,17 @@ static bool parse_configuration_descriptor(uint8_t dev_addr, tusb_desc_configura
// parse each interfaces // parse each interfaces
while( p_desc < _usbh_ctrl_buf + desc_cfg->wTotalLength ) while( p_desc < _usbh_ctrl_buf + desc_cfg->wTotalLength )
{ {
// skip until we see interface descriptor tusb_desc_interface_assoc_t const * desc_itf_assoc = NULL;
if ( TUSB_DESC_INTERFACE != tu_desc_type(p_desc) )
{ // Class will always starts with Interface Association (if any) and then Interface descriptor
p_desc = tu_desc_next(p_desc); // skip the descriptor, increase by the descriptor's length if ( TUSB_DESC_INTERFACE_ASSOCIATION == tu_desc_type(p_desc) )
}else
{ {
desc_itf_assoc = (tusb_desc_interface_assoc_t const *) p_desc;
p_desc = tu_desc_next(p_desc); // next to Interface
}
TU_ASSERT( TUSB_DESC_INTERFACE == tu_desc_type(p_desc) );
tusb_desc_interface_t const* desc_itf = (tusb_desc_interface_t const*) p_desc; tusb_desc_interface_t const* desc_itf = (tusb_desc_interface_t const*) p_desc;
// Check if class is supported // Check if class is supported
@@ -1033,7 +1040,6 @@ static bool parse_configuration_descriptor(uint8_t dev_addr, tusb_desc_configura
} }
} }
} }
}
return true; return true;
} }

View File

@@ -68,7 +68,7 @@ bool tuh_control_xfer (uint8_t dev_addr, tusb_control_request_t const* request,
_ctrl_xfer.stage = STAGE_SETUP; _ctrl_xfer.stage = STAGE_SETUP;
_ctrl_xfer.complete_cb = complete_cb; _ctrl_xfer.complete_cb = complete_cb;
TU_LOG2("Send Setup to address %u: ", dev_addr); TU_LOG2("Control Setup (addr = %u): ", dev_addr);
TU_LOG2_VAR(request); TU_LOG2_VAR(request);
TU_LOG2("\r\n"); TU_LOG2("\r\n");
@@ -119,7 +119,7 @@ bool usbh_control_xfer_cb (uint8_t dev_addr, uint8_t ep_addr, xfer_result_t resu
if (request->wLength) if (request->wLength)
{ {
TU_LOG2("Control data:\r\n"); TU_LOG2("Control data (addr = %u):\r\n", dev_addr);
TU_LOG2_MEM(_ctrl_xfer.buffer, request->wLength, 2); TU_LOG2_MEM(_ctrl_xfer.buffer, request->wLength, 2);
} }