From cb600ed9887224b6e0b4904f66442eef2900fd2d Mon Sep 17 00:00:00 2001 From: hathach Date: Sat, 28 Sep 2013 01:01:44 +0700 Subject: [PATCH] clean up hid host (temp let test failed) --- .project | 15 ++++- demos/host/host_os_none/host_os_none.uvopt | 54 ++++++++--------- .../test/host/hid/test_hidh_keyboard.c | 8 ++- .../test/host/hid/test_hidh_mouse.c | 12 ++-- tinyusb/class/hid_host.c | 58 ++++++------------- tinyusb/class/hid_host.h | 8 ++- tinyusb/host/hcd.h | 3 +- 7 files changed, 78 insertions(+), 80 deletions(-) diff --git a/.project b/.project index 7e61105dc..c59396d04 100644 --- a/.project +++ b/.project @@ -69,7 +69,7 @@ - 0 + 1380304047311 22 @@ -78,7 +78,7 @@ - 0 + 1380304047319 22 @@ -87,7 +87,7 @@ - 0 + 1380304047327 10 @@ -95,5 +95,14 @@ 1.0-name-matches-false-false-docs + + 1380304047336 + + 26 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-build + + diff --git a/demos/host/host_os_none/host_os_none.uvopt b/demos/host/host_os_none/host_os_none.uvopt index a95989020..f7043fdc4 100644 --- a/demos/host/host_os_none/host_os_none.uvopt +++ b/demos/host/host_os_none/host_os_none.uvopt @@ -150,7 +150,7 @@ 0 JL2CM3 - -U268003250 -O1006 -S8 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO23 -TC72000000 -TP21 -TDS800B -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB5 -TFE1 -FO15 -FD10000000 -FC800 -FN2 -FF0LPC18xx43xx_512_BA -FS01A000000 -FL080000 -FF1LPC18xx43xx_512_BB -FS11B000000 -FL180000 + -U268003250 -O1006 -S8 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(4) -TO19 -TC72000000 -TP21 -TDS800B -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB5 -TFE1 -FO15 -FD10000000 -FC800 -FN2 -FF0LPC18xx43xx_512_BA -FS01A000000 -FL080000 -FF1LPC18xx43xx_512_BB -FS11B000000 -FL180000 0 @@ -424,10 +424,10 @@ 1 0 0 - 17 + 0 0 - 94 - 111 + 147 + 159 0 ..\src\main.c main.c @@ -442,8 +442,8 @@ 0 0 0 - 92 - 145 + 59 + 75 0 ..\src\cdc_serial_app.c cdc_serial_app.c @@ -458,8 +458,8 @@ 0 0 0 - 111 - 123 + 112 + 135 0 ..\src\keyboard_app.c keyboard_app.c @@ -488,10 +488,10 @@ 1 0 0 - 12 + 1 0 - 0 - 0 + 47 + 65 0 ..\src\rndis_app.c rndis_app.c @@ -504,10 +504,10 @@ 1 0 0 - 1 + 0 0 - 121 - 150 + 1 + 1 0 ..\src\msc_app.c msc_app.c @@ -576,10 +576,10 @@ 1 0 0 - 6 + 44 0 - 93 - 135 + 64 + 106 0 ..\..\bsp\boards\printf_retarget.c printf_retarget.c @@ -794,7 +794,7 @@ 0 0 0 - 1 + 2 5 0 ..\..\..\tinyusb\host\ehci\ehci.c @@ -952,10 +952,10 @@ 1 0 0 - 22 + 79 0 - 59 - 64 + 1 + 14 0 ..\..\..\tinyusb\class\msc_host.c msc_host.c @@ -1024,10 +1024,10 @@ 1 0 0 - 0 + 64 0 - 0 - 0 + 553 + 579 0 ..\..\bsp\lpc43xx\CMSIS_LPC43xx_DriverLib\src\lpc43xx_cgu.c lpc43xx_cgu.c @@ -1080,10 +1080,10 @@ 2 0 0 - 54 + 0 0 139 - 148 + 151 0 ..\..\bsp\lpc43xx\startup_keil\startup_LPC43xx.s startup_LPC43xx.s @@ -1106,7 +1106,7 @@ 0 20 0 - 49 + 50 62 0 ..\..\..\vendor\fatfs\diskio.c diff --git a/tests/lpc18xx_43xx/test/host/hid/test_hidh_keyboard.c b/tests/lpc18xx_43xx/test/host/hid/test_hidh_keyboard.c index fbc6b33f6..bb8de051d 100644 --- a/tests/lpc18xx_43xx/test/host/hid/test_hidh_keyboard.c +++ b/tests/lpc18xx_43xx/test/host/hid/test_hidh_keyboard.c @@ -204,12 +204,13 @@ void test_keyboard_get_ok() { tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); - TEST_ASSERT_EQUAL(TUSB_INTERFACE_STATUS_READY, tusbh_hid_keyboard_status(dev_addr)); + TEST_FAIL(); +// TEST_ASSERT_EQUAL(TUSB_INTERFACE_STATUS_READY, tusbh_hid_keyboard_status(dev_addr)); hcd_pipe_xfer_ExpectAndReturn(p_hidh_kbd->pipe_hdl, (uint8_t*) &report, p_hidh_kbd->report_size, true, TUSB_ERROR_NONE); //------------- Code Under TEST -------------// TEST_ASSERT_EQUAL(TUSB_ERROR_NONE, tusbh_hid_keyboard_get_report(dev_addr, &report)); - TEST_ASSERT_EQUAL(TUSB_INTERFACE_STATUS_BUSY, tusbh_hid_keyboard_status(dev_addr)); +// TEST_ASSERT_EQUAL(TUSB_INTERFACE_STATUS_BUSY, tusbh_hid_keyboard_status(dev_addr)); } void test_keyboard_isr_event_complete(void) @@ -220,7 +221,8 @@ void test_keyboard_isr_event_complete(void) hidh_isr(p_hidh_kbd->pipe_hdl, TUSB_EVENT_XFER_COMPLETE, 8); tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); - TEST_ASSERT_EQUAL(TUSB_INTERFACE_STATUS_COMPLETE, tusbh_hid_keyboard_status(dev_addr)); + TEST_FAIL(); +// TEST_ASSERT_EQUAL(TUSB_INTERFACE_STATUS_COMPLETE, tusbh_hid_keyboard_status(dev_addr)); } diff --git a/tests/lpc18xx_43xx/test/host/hid/test_hidh_mouse.c b/tests/lpc18xx_43xx/test/host/hid/test_hidh_mouse.c index 89d1bb7b6..b74704f07 100644 --- a/tests/lpc18xx_43xx/test/host/hid/test_hidh_mouse.c +++ b/tests/lpc18xx_43xx/test/host/hid/test_hidh_mouse.c @@ -175,13 +175,15 @@ void test_mouse_get_report_xfer_failed_busy() void test_mouse_get_ok() { tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); - TEST_ASSERT_EQUAL(TUSB_INTERFACE_STATUS_READY, tusbh_hid_mouse_status(dev_addr)); + TEST_FAIL(); +// TEST_ASSERT_EQUAL(TUSB_INTERFACE_STATUS_READY, tusbh_hid_mouse_status(dev_addr)); hcd_pipe_xfer_ExpectAndReturn(p_hidh_mouse->pipe_hdl, (uint8_t*) &report, p_hidh_mouse->report_size, true, TUSB_ERROR_NONE); //------------- Code Under TEST -------------// TEST_ASSERT_STATUS( tusbh_hid_mouse_get_report(dev_addr, &report)); - TEST_ASSERT_EQUAL(TUSB_INTERFACE_STATUS_BUSY, tusbh_hid_mouse_status(dev_addr)); + TEST_FAIL(); +// TEST_ASSERT_EQUAL(TUSB_INTERFACE_STATUS_BUSY, tusbh_hid_mouse_status(dev_addr)); } void test_mouse_isr_event_xfer_complete(void) @@ -192,7 +194,8 @@ void test_mouse_isr_event_xfer_complete(void) hidh_isr(p_hidh_mouse->pipe_hdl, TUSB_EVENT_XFER_COMPLETE, 8); tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); - TEST_ASSERT_EQUAL(TUSB_INTERFACE_STATUS_COMPLETE, tusbh_hid_mouse_status(dev_addr)); + TEST_FAIL(); +// TEST_ASSERT_EQUAL(TUSB_INTERFACE_STATUS_COMPLETE, tusbh_hid_mouse_status(dev_addr)); } void test_mouse_isr_event_xfer_error(void) @@ -203,7 +206,8 @@ void test_mouse_isr_event_xfer_error(void) hidh_isr(p_hidh_mouse->pipe_hdl, TUSB_EVENT_XFER_ERROR, 0); tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); - TEST_ASSERT_EQUAL(TUSB_INTERFACE_STATUS_ERROR, tusbh_hid_mouse_status(dev_addr)); + TEST_FAIL(); +// TEST_ASSERT_EQUAL(TUSB_INTERFACE_STATUS_ERROR, tusbh_hid_mouse_status(dev_addr)); } diff --git a/tinyusb/class/hid_host.c b/tinyusb/class/hid_host.c index 5dc450fa9..b968c4454 100644 --- a/tinyusb/class/hid_host.c +++ b/tinyusb/class/hid_host.c @@ -54,20 +54,6 @@ //--------------------------------------------------------------------+ // HID Interface common functions //--------------------------------------------------------------------+ -tusb_interface_status_t hidh_interface_status(uint8_t dev_addr, hidh_interface_info_t *p_hid) ATTR_PURE ATTR_ALWAYS_INLINE; -tusb_interface_status_t hidh_interface_status(uint8_t dev_addr, hidh_interface_info_t *p_hid) -{ - switch( tusbh_device_get_state(dev_addr) ) - { - case TUSB_DEVICE_STATE_UNPLUG: - case TUSB_DEVICE_STATE_INVALID_PARAMETER: - return TUSB_INTERFACE_STATUS_INVALID_PARA; - - default: - return p_hid->status; - } -} - static inline tusb_error_t hidh_interface_open(uint8_t dev_addr, uint8_t interface_number, tusb_descriptor_endpoint_t const *p_endpoint_desc, hidh_interface_info_t *p_hid) ATTR_ALWAYS_INLINE; static inline tusb_error_t hidh_interface_open(uint8_t dev_addr, uint8_t interface_number, tusb_descriptor_endpoint_t const *p_endpoint_desc, hidh_interface_info_t *p_hid) { @@ -93,14 +79,12 @@ tusb_error_t hidh_interface_get_report(uint8_t dev_addr, void * report, hidh_int { //------------- parameters validation -------------// // TODO change to use is configured function - ASSERT_INT(TUSB_DEVICE_STATE_CONFIGURED, tusbh_device_get_state(dev_addr), TUSB_ERROR_DEVICE_NOT_READY); - ASSERT_PTR(report, TUSB_ERROR_INVALID_PARA); - ASSERT(TUSB_INTERFACE_STATUS_BUSY != p_hid->status, TUSB_ERROR_INTERFACE_IS_BUSY); + ASSERT_INT (TUSB_DEVICE_STATE_CONFIGURED, tusbh_device_get_state(dev_addr), TUSB_ERROR_DEVICE_NOT_READY); + ASSERT_PTR (report, TUSB_ERROR_INVALID_PARA); + ASSERT_FALSE(hcd_pipe_is_busy(p_hid->pipe_hdl), TUSB_ERROR_INTERFACE_IS_BUSY); ASSERT_STATUS( hcd_pipe_xfer(p_hid->pipe_hdl, report, p_hid->report_size, true) ) ; - p_hid->status = TUSB_INTERFACE_STATUS_BUSY; - return TUSB_ERROR_NONE; } @@ -132,9 +116,10 @@ tusb_error_t tusbh_hid_keyboard_get_report(uint8_t dev_addr, void* report) return hidh_interface_get_report(dev_addr, report, &keyboardh_data[dev_addr-1]); } -tusb_interface_status_t tusbh_hid_keyboard_status(uint8_t dev_addr) +bool tusbh_hid_keyboard_is_busy(uint8_t dev_addr) { - return hidh_interface_status(dev_addr, &keyboardh_data[dev_addr-1]); + return tusbh_hid_keyboard_is_mounted(dev_addr) && + hcd_pipe_is_busy( keyboardh_data[dev_addr-1].pipe_hdl ); } #endif @@ -152,16 +137,17 @@ bool tusbh_hid_mouse_is_mounted(uint8_t dev_addr) return tusbh_device_is_configured(dev_addr) && pipehandle_is_valid(mouseh_data[dev_addr-1].pipe_hdl); } +bool tusbh_hid_mouse_is_busy(uint8_t dev_addr) +{ + return tusbh_hid_mouse_is_mounted(dev_addr) && + hcd_pipe_is_busy( mouseh_data[dev_addr-1].pipe_hdl ); +} + tusb_error_t tusbh_hid_mouse_get_report(uint8_t dev_addr, void * report) { return hidh_interface_get_report(dev_addr, report, &mouseh_data[dev_addr-1]); } -tusb_interface_status_t tusbh_hid_mouse_status(uint8_t dev_addr) -{ - return hidh_interface_status(dev_addr, &mouseh_data[dev_addr-1]); -} - #endif //--------------------------------------------------------------------+ @@ -214,17 +200,13 @@ tusb_error_t hidh_open_subtask(uint8_t dev_addr, tusb_descriptor_interface_t con OSAL_SUBTASK_BEGIN -#if 1 - //------------- SET IDLE request -------------// - // TODO this request can be stalled by device (indicate not supported), - // until we have clear stall handler, temporarily disable it. - OSAL_SUBTASK_INVOKED_AND_WAIT( - usbh_control_xfer_subtask( dev_addr, bm_request_type(TUSB_DIR_HOST_TO_DEV, TUSB_REQUEST_TYPE_CLASS, TUSB_REQUEST_RECIPIENT_INTERFACE), - HID_REQUEST_CONTROL_SET_IDLE, 0, p_interface_desc->bInterfaceNumber, - 0, NULL ), - error - ); -#endif + //------------- SET IDLE (0) request -------------// + OSAL_SUBTASK_INVOKED_AND_WAIT( + usbh_control_xfer_subtask( dev_addr, bm_request_type(TUSB_DIR_HOST_TO_DEV, TUSB_REQUEST_TYPE_CLASS, TUSB_REQUEST_RECIPIENT_INTERFACE), + HID_REQUEST_CONTROL_SET_IDLE, 0, p_interface_desc->bInterfaceNumber, + 0, NULL ), + error + ); #if 0 //------------- Get Report Descriptor TODO HID parser -------------// @@ -276,7 +258,6 @@ void hidh_isr(pipe_handle_t pipe_hdl, tusb_event_t event, uint32_t xferred_bytes #if TUSB_CFG_HOST_HID_KEYBOARD if ( pipehandle_is_equal(pipe_hdl, keyboardh_data[pipe_hdl.dev_addr-1].pipe_hdl) ) { - keyboardh_data[pipe_hdl.dev_addr-1].status = (event == TUSB_EVENT_XFER_COMPLETE) ? TUSB_INTERFACE_STATUS_COMPLETE : TUSB_INTERFACE_STATUS_ERROR; tusbh_hid_keyboard_isr(pipe_hdl.dev_addr, event); return; } @@ -285,7 +266,6 @@ void hidh_isr(pipe_handle_t pipe_hdl, tusb_event_t event, uint32_t xferred_bytes #if TUSB_CFG_HOST_HID_MOUSE if ( pipehandle_is_equal(pipe_hdl, mouseh_data[pipe_hdl.dev_addr-1].pipe_hdl) ) { - mouseh_data[pipe_hdl.dev_addr-1].status = (event == TUSB_EVENT_XFER_COMPLETE) ? TUSB_INTERFACE_STATUS_COMPLETE : TUSB_INTERFACE_STATUS_ERROR; tusbh_hid_mouse_isr(pipe_hdl.dev_addr, event); return; } diff --git a/tinyusb/class/hid_host.h b/tinyusb/class/hid_host.h index 6a8dc8a0d..d0179a9bc 100644 --- a/tinyusb/class/hid_host.h +++ b/tinyusb/class/hid_host.h @@ -60,8 +60,9 @@ extern uint8_t const hid_keycode_to_ascii_tbl[2][128]; // TODO used weak attr if build failed without KEYBOARD enabled bool tusbh_hid_keyboard_is_mounted(uint8_t dev_addr) ATTR_PURE ATTR_WARN_UNUSED_RESULT; +bool tusbh_hid_keyboard_is_busy(uint8_t dev_addr) ATTR_PURE ATTR_WARN_UNUSED_RESULT; tusb_error_t tusbh_hid_keyboard_get_report(uint8_t dev_addr, void * report) /*ATTR_WARN_UNUSED_RESULT*/; -tusb_interface_status_t tusbh_hid_keyboard_status(uint8_t dev_addr) ATTR_WARN_UNUSED_RESULT; + //------------- Application Callback -------------// void tusbh_hid_keyboard_isr(uint8_t dev_addr, tusb_event_t event); void tusbh_hid_keyboard_mounted_cb(uint8_t dev_addr); @@ -71,8 +72,9 @@ void tusbh_hid_keyboard_unmounted_isr(uint8_t dev_addr); // MOUSE Application API //--------------------------------------------------------------------+ bool tusbh_hid_mouse_is_mounted(uint8_t dev_addr) ATTR_PURE ATTR_WARN_UNUSED_RESULT; +bool tusbh_hid_mouse_is_busy(uint8_t dev_addr) ATTR_PURE ATTR_WARN_UNUSED_RESULT; tusb_error_t tusbh_hid_mouse_get_report(uint8_t dev_addr, void* report) /*ATTR_WARN_UNUSED_RESULT*/; -tusb_interface_status_t tusbh_hid_mouse_status(uint8_t dev_addr) ATTR_WARN_UNUSED_RESULT; + //------------- Application Callback -------------// void tusbh_hid_mouse_isr(uint8_t dev_addr, tusb_event_t event); void tusbh_hid_mouse_mounted_cb(uint8_t dev_addr); @@ -86,6 +88,7 @@ tusb_error_t tusbh_hid_generic_get_report(uint8_t dev_addr, void* report, bool tusb_error_t tusbh_hid_generic_set_report(uint8_t dev_addr, void* report, bool int_on_complete) ATTR_WARN_UNUSED_RESULT; tusb_interface_status_t tusbh_hid_generic_get_status(uint8_t dev_addr) ATTR_WARN_UNUSED_RESULT; tusb_interface_status_t tusbh_hid_generic_set_status(uint8_t dev_addr) ATTR_WARN_UNUSED_RESULT; + //------------- Application Callback -------------// void tusbh_hid_generic_isr(uint8_t dev_addr, tusb_event_t event); @@ -98,7 +101,6 @@ typedef struct { pipe_handle_t pipe_hdl; uint16_t report_size; uint8_t interface_number; - volatile tusb_interface_status_t status; }hidh_interface_info_t; void hidh_init(void); diff --git a/tinyusb/host/hcd.h b/tinyusb/host/hcd.h index 6383015a8..903e0e65e 100644 --- a/tinyusb/host/hcd.h +++ b/tinyusb/host/hcd.h @@ -100,7 +100,8 @@ tusb_error_t hcd_pipe_xfer(pipe_handle_t pipe_hdl, uint8_t buffer[], uint16_t t tusb_error_t hcd_pipe_close(pipe_handle_t pipe_hdl) /*ATTR_WARN_UNUSED_RESULT*/; bool hcd_pipe_is_busy(pipe_handle_t pipe_hdl); -bool hcd_pipe_is_stalled(pipe_handle_t pipe_hdl); +bool hcd_pipe_is_error(pipe_handle_t pipe_hdl); +bool hcd_pipe_is_stalled(pipe_handle_t pipe_hdl); // stalled also counted as error bool hcd_pipe_is_idle(pipe_handle_t pipe_hdl); uint8_t hcd_pipe_get_endpoint_addr(pipe_handle_t pipe_hdl); tusb_error_t hcd_pipe_clear_stall(pipe_handle_t pipe_hdl);