From c026a9f2e0aca713c7cb5f08eb40018f7f16e1be Mon Sep 17 00:00:00 2001 From: hathach Date: Mon, 25 Mar 2013 16:02:24 +0700 Subject: [PATCH] remove obsolete TUSB_CFG_HOST_HID_KEYBOARD_ENDPOINT_SIZE temporarily ignore test for hid_host.c due to ceedling linking issue with weak symbol implement hidh_open_subtask driver to subclass open rename hidh_keyboard_install to hidh_keyboard_open_subtask --- demos/host/tusb_config.h | 1 - tests/test/host/hid/test_hidh.c | 31 ++++++++++++++++++------ tests/test/host/hid/test_hidh_keyboard.c | 9 ++++--- tests/test/support/tusb_config.h | 2 -- tinyusb/class/hid_host.c | 28 ++++++++++++++++++++- tinyusb/class/hid_host_keyboard.c | 2 +- tinyusb/class/hid_host_keyboard.h | 6 +++-- tinyusb/host/usbh.c | 8 +++--- tinyusb/tusb_option.h | 5 ---- 9 files changed, 65 insertions(+), 27 deletions(-) diff --git a/demos/host/tusb_config.h b/demos/host/tusb_config.h index 1ef980a4..8a1985e9 100644 --- a/demos/host/tusb_config.h +++ b/demos/host/tusb_config.h @@ -72,7 +72,6 @@ //------------- CLASS -------------// #define TUSB_CFG_HOST_HID_KEYBOARD 1 -#define TUSB_CFG_HOST_HID_KEYBOARD_ENDPOINT_SIZE 64 //--------------------------------------------------------------------+ // DEVICE CONFIGURATION diff --git a/tests/test/host/hid/test_hidh.c b/tests/test/host/hid/test_hidh.c index 294fcecf..412b5d82 100644 --- a/tests/test/host/hid/test_hidh.c +++ b/tests/test/host/hid/test_hidh.c @@ -37,14 +37,16 @@ #include "stdlib.h" #include "unity.h" +#include "common/common.h" #include "errors.h" +#include "hid_host.h" #include "mock_osal.h" #include "mock_hcd.h" #include "mock_usbh.h" #include "mock_hid_host_keyboard.h" -#include "hid_host.h" + uint8_t dev_addr; uint8_t instance_num; @@ -52,17 +54,32 @@ uint8_t instance_num; void setUp(void) { instance_num = 0; - dev_addr = RANDOM(TUSB_CFG_HOST_DEVICE_MAX)+1; +// dev_addr = RANDOM(TUSB_CFG_HOST_DEVICE_MAX)+1; } void tearDown(void) { } -void test_hidh_init() +void test_hidh_init(void) { -// hidh_keyboard_init_Expect(); -// //------------- Code Under TEST -------------// -// hidh_init(); - TEST_FAIL(); + hidh_keyboard_init_Expect(); + + //------------- Code Under TEST -------------// + if (!hidh_init) + TEST_IGNORE(); + +} + +void test_hidh_close(void) +{ + if (!hidh_close) + TEST_IGNORE(); +} + +void test_hihd_isr(void) +{ + if (!hidh_isr) + TEST_IGNORE(); + } diff --git a/tests/test/host/hid/test_hidh_keyboard.c b/tests/test/host/hid/test_hidh_keyboard.c index a7459460..ffd712bf 100644 --- a/tests/test/host/hid/test_hidh_keyboard.c +++ b/tests/test/host/hid/test_hidh_keyboard.c @@ -111,12 +111,13 @@ void test_keyboard_no_instances_invalid_para(void) TEST_ASSERT_EQUAL(0, tusbh_hid_keyboard_no_instances(dev_addr)); } -void test_keyboard_install_ok(void) +void test_keyboard_open_ok(void) { + uint16_t length=0; tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); TEST_ASSERT_EQUAL(0, tusbh_hid_keyboard_no_instances(dev_addr)); - TEST_ASSERT_EQUAL(TUSB_ERROR_NONE, hidh_keyboard_install(dev_addr, (uint8_t*) &kbd_descriptor)); + TEST_ASSERT_EQUAL(TUSB_ERROR_NONE, hidh_keyboard_open_subtask(dev_addr, (uint8_t*) &kbd_descriptor, &length)); tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); TEST_ASSERT_EQUAL(1, tusbh_hid_keyboard_no_instances(dev_addr)); } @@ -166,7 +167,7 @@ void test_keyboard_get_class_not_supported() void test_keyboard_get_report_xfer_failed() { tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); - hcd_pipe_xfer_ExpectAndReturn(p_hidh_kbd_interface->pipe_in, &report, p_hidh_kbd_interface->report_size, true, TUSB_ERROR_INVALID_PARA); + hcd_pipe_xfer_ExpectAndReturn(p_hidh_kbd_interface->pipe_in, (uint8_t*) &report, p_hidh_kbd_interface->report_size, true, TUSB_ERROR_INVALID_PARA); //------------- Code Under TEST -------------// TEST_ASSERT_EQUAL(TUSB_ERROR_INVALID_PARA, tusbh_hid_keyboard_get(dev_addr, instance_num, &report)); @@ -175,7 +176,7 @@ void test_keyboard_get_report_xfer_failed() void test_keyboard_get_ok() { tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); - hcd_pipe_xfer_ExpectAndReturn(p_hidh_kbd_interface->pipe_in, &report, p_hidh_kbd_interface->report_size, true, TUSB_ERROR_NONE); + hcd_pipe_xfer_ExpectAndReturn(p_hidh_kbd_interface->pipe_in, (uint8_t*) &report, p_hidh_kbd_interface->report_size, true, TUSB_ERROR_NONE); //------------- Code Under TEST -------------// TEST_ASSERT_EQUAL(TUSB_ERROR_NONE, tusbh_hid_keyboard_get(dev_addr, instance_num, &report)); diff --git a/tests/test/support/tusb_config.h b/tests/test/support/tusb_config.h index 6ea154de..64afe3b1 100644 --- a/tests/test/support/tusb_config.h +++ b/tests/test/support/tusb_config.h @@ -72,8 +72,6 @@ //------------- CLASS -------------// #define TUSB_CFG_HOST_HID_KEYBOARD 1 -#define TUSB_CFG_HOST_HID_KEYBOARD_ENDPOINT_SIZE 64 - #define HOST_HCD_XFER_INTERRUPT #define HOST_HCD_XFER_BULK diff --git a/tinyusb/class/hid_host.c b/tinyusb/class/hid_host.c index 91a5c499..94433934 100644 --- a/tinyusb/class/hid_host.c +++ b/tinyusb/class/hid_host.c @@ -75,7 +75,33 @@ void hidh_init(void) tusb_error_t hidh_open_subtask(uint8_t dev_addr, uint8_t const *descriptor, uint16_t *p_length) { - return TUSB_ERROR_NONE; + tusb_descriptor_interface_t* p_interface = (tusb_descriptor_interface_t*) descriptor; + if (p_interface->bInterfaceSubClass == HID_SUBCLASS_BOOT) + { + switch(p_interface->bInterfaceProtocol) + { + #if TUSB_CFG_HOST_HID_KEYBOARD + case HID_PROTOCOL_KEYBOARD: + return hidh_keyboard_open_subtask(dev_addr, descriptor, p_length); + break; + #endif + + #if TUSB_CFG_HOST_HID_MOUSE + case HID_PROTOCOL_MOUSE: + return hidh_keyboard_open_subtask(dev_addr, descriptor, p_length); + break; + #endif + + default: // unknown protocol --> skip this interface + *p_length = p_interface->bLength; + return TUSB_ERROR_NONE; + } + }else + { + // open generic + *p_length = p_interface->bLength; + return TUSB_ERROR_NONE; + } } void hidh_isr(pipe_handle_t pipe_hdl, tusb_bus_event_t event) diff --git a/tinyusb/class/hid_host_keyboard.c b/tinyusb/class/hid_host_keyboard.c index 3ac18b3f..72ba4d7b 100644 --- a/tinyusb/class/hid_host_keyboard.c +++ b/tinyusb/class/hid_host_keyboard.c @@ -97,7 +97,7 @@ void hidh_keyboard_init(void) memclr_(&keyboard_data, sizeof(hidh_keyboard_info_t)*TUSB_CFG_HOST_DEVICE_MAX); } -tusb_error_t hidh_keyboard_install(uint8_t const dev_addr, uint8_t const *descriptor) +tusb_error_t hidh_keyboard_open_subtask(uint8_t dev_addr, uint8_t const *descriptor, uint16_t *p_length) { keyboard_data[dev_addr-1].instance_count++; diff --git a/tinyusb/class/hid_host_keyboard.h b/tinyusb/class/hid_host_keyboard.h index 8716d8ec..f07595dc 100644 --- a/tinyusb/class/hid_host_keyboard.h +++ b/tinyusb/class/hid_host_keyboard.h @@ -52,7 +52,7 @@ #define _TUSB_HID_HOST_KEYBOARD_H_ #include "common/common.h" -#include "usbh.h" // TODO refractor +#include "host/usbh.h" // TODO refractor #include "hid.h" #ifdef __cplusplus @@ -87,8 +87,10 @@ typedef struct { keyboard_interface_t instance[TUSB_CFG_HOST_HID_KEYBOARD_NO_INSTANCES_PER_DEVICE]; } hidh_keyboard_info_t; -void hidh_keyboard_init(void); +void hidh_keyboard_init(void); tusb_error_t hidh_keyboard_install(uint8_t dev_addr, uint8_t const *descriptor) ATTR_WARN_UNUSED_RESULT; +tusb_error_t hidh_keyboard_open_subtask(uint8_t dev_addr, uint8_t const *descriptor, uint16_t *p_length) ATTR_WARN_UNUSED_RESULT; +void hidh_keyboard_close(uint8_t dev_addr); #endif diff --git a/tinyusb/host/usbh.c b/tinyusb/host/usbh.c index 24c112bf..c6fc411f 100644 --- a/tinyusb/host/usbh.c +++ b/tinyusb/host/usbh.c @@ -250,8 +250,8 @@ OSAL_TASK_DECLARE(usbh_enumeration_task) // for OSAL_NONE local variable won't retain value after blocking service sem_wait/queue_recv static uint8_t new_addr; - static uint8_t configure_selected = 1; - static uint8_t *p_desc = NULL; + static uint8_t configure_selected = 1; // TODO move + static uint8_t *p_desc = NULL; // TODO move OSAL_TASK_LOOP_BEGIN @@ -385,9 +385,9 @@ OSAL_TASK_DECLARE(usbh_enumeration_task) TASK_ASSERT( false ); // corrupted data, abort enumeration } // supported class - else if ( class_code < TUSB_CLASS_MAX_CONSEC_NUMBER && usbh_class_drivers[class_code].open_subtask) + else if ( class_code < TUSB_CLASS_MAX_CONSEC_NUMBER && usbh_class_drivers[class_code].open_subtask) // TODO custom class { - uint16_t length; + uint16_t length=0; OSAL_SUBTASK_INVOKED_AND_WAIT ( // parameters in task/sub_task must be static storage (static or global) usbh_class_drivers[ ((tusb_descriptor_interface_t*) p_desc)->bInterfaceClass ].open_subtask(new_addr, p_desc, &length) ); p_desc += length; diff --git a/tinyusb/tusb_option.h b/tinyusb/tusb_option.h index 976e5fd0..55a2381a 100644 --- a/tinyusb/tusb_option.h +++ b/tinyusb/tusb_option.h @@ -126,11 +126,6 @@ //------------- HID CLASS -------------// #define HOST_CLASS_HID ( TUSB_CFG_HOST_HID_KEYBOARD ) #if TUSB_CFG_HOST_HID_KEYBOARD - #if !defined(TUSB_CFG_HOST_HID_KEYBOARD_ENDPOINT_SIZE) - #define TUSB_CFG_HOST_HID_KEYBOARD_ENDPOINT_SIZE 64 - #warning TUSB_CFG_HOST_HID_KEYBOARD_ENDPOINT_SIZE is not defined, default value is 64 - #endif - #if !defined(TUSB_CFG_HOST_HID_KEYBOARD_NO_INSTANCES_PER_DEVICE) #define TUSB_CFG_HOST_HID_KEYBOARD_NO_INSTANCES_PER_DEVICE 1 #endif