From 10c08ab40453b60077c6880b50ace59f6f548ace Mon Sep 17 00:00:00 2001 From: hathach Date: Sun, 7 Apr 2013 15:48:01 +0700 Subject: [PATCH] add test for mouse_open add hid descriptor for mouse & mouse interface to descriptor_test refractor extract function hidh_interface_status fix error with MACRO HID_REPORT_ITEM with zero data size --> redundant semicolon --- tests/test/host/hid/test_hidh_mouse.c | 29 +++++++++- tests/test/support/descriptor_test.c | 82 +++++++++++++++++++++++++-- tests/test/support/descriptor_test.h | 14 ++--- tinyusb/class/hid.h | 8 +-- tinyusb/class/hid_host.c | 25 +++++--- 5 files changed, 129 insertions(+), 29 deletions(-) diff --git a/tests/test/host/hid/test_hidh_mouse.c b/tests/test/host/hid/test_hidh_mouse.c index b2086b9ad..ab7d7fc9e 100644 --- a/tests/test/host/hid/test_hidh_mouse.c +++ b/tests/test/host/hid/test_hidh_mouse.c @@ -47,6 +47,10 @@ extern hidh_interface_info_t mouse_data[TUSB_CFG_HOST_DEVICE_MAX]; hidh_interface_info_t *p_hidh_mouse; + +tusb_descriptor_interface_t const *p_mouse_interface_desc = &desc_configuration.mouse_interface; +tusb_descriptor_endpoint_t const *p_mouse_endpoint_desc = &desc_configuration.mouse_endpoint; + uint8_t dev_addr; void setUp(void) @@ -77,6 +81,7 @@ void test_mouse_init(void) TEST_ASSERT_MEM_ZERO(mouse_data, sizeof(hidh_interface_info_t)*TUSB_CFG_HOST_DEVICE_MAX); } +//------------- is supported -------------// void test_mouse_is_supported_fail_unplug(void) { tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_UNPLUG); @@ -96,8 +101,28 @@ void test_mouse_is_supported_ok(void) TEST_ASSERT_TRUE( tusbh_hid_mouse_is_supported(dev_addr) ); } - - +void test_mouse_open_ok(void) +{ + uint16_t length=0; + pipe_handle_t pipe_hdl = {.dev_addr = dev_addr, .xfer_type = TUSB_XFER_INTERRUPT, .index = 2}; + + hidh_init(); + + hcd_pipe_open_ExpectAndReturn(dev_addr, p_mouse_endpoint_desc, TUSB_CLASS_HID, pipe_hdl); + + //------------- Code Under TEST -------------// + TEST_ASSERT_EQUAL(TUSB_ERROR_NONE, hidh_open_subtask(dev_addr, p_mouse_interface_desc, &length)); + + TEST_ASSERT_PIPE_HANDLE(pipe_hdl, p_hidh_mouse->pipe_hdl); + TEST_ASSERT_EQUAL(8, p_hidh_mouse->report_size); + TEST_ASSERT_EQUAL(sizeof(tusb_descriptor_interface_t) + sizeof(tusb_hid_descriptor_hid_t) + sizeof(tusb_descriptor_endpoint_t), + length); + + tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); + TEST_ASSERT_TRUE( tusbh_hid_keyboard_is_supported(dev_addr) ); + TEST_ASSERT_EQUAL(TUSB_INTERFACE_STATUS_READY, p_hidh_mouse->status); + +} diff --git a/tests/test/support/descriptor_test.c b/tests/test/support/descriptor_test.c index 3f288fba7..4e4c7cf1c 100644 --- a/tests/test/support/descriptor_test.c +++ b/tests/test/support/descriptor_test.c @@ -92,10 +92,10 @@ const uint8_t keyboard_report_descriptor[] = { HID_OUTPUT ( HID_CONSTANT ), HID_USAGE_PAGE (HID_USAGE_PAGE_KEYBOARD), - HID_USAGE_MIN ( 0 ), - HID_USAGE_MAX ( 101 ), - HID_LOGICAL_MIN ( 0 ), - HID_LOGICAL_MAX ( 101 ), + HID_USAGE_MIN ( 0 ), + HID_USAGE_MAX ( 101 ), + HID_LOGICAL_MIN ( 0 ), + HID_LOGICAL_MAX ( 101 ), HID_REPORT_COUNT ( 6 ), HID_REPORT_SIZE ( 8 ), @@ -103,6 +103,42 @@ const uint8_t keyboard_report_descriptor[] = { HID_COLLECTION_END }; +TUSB_CFG_ATTR_USBRAM ATTR_ALIGNED(4) +const uint8_t mouse_report_descriptor[] = { + HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ), + HID_USAGE ( HID_USAGE_DESKTOP_MOUSE ), + HID_COLLECTION ( HID_COLLECTION_APPLICATION ), + HID_USAGE (HID_USAGE_DESKTOP_POINTER), + + HID_COLLECTION ( HID_COLLECTION_PHYSICAL ), + HID_USAGE_PAGE ( HID_USAGE_PAGE_BUTTON ), + HID_USAGE_MIN ( 1 ), + HID_USAGE_MAX ( 3 ), + HID_LOGICAL_MIN ( 0 ), + HID_LOGICAL_MAX ( 1 ), + + HID_REPORT_COUNT ( 3 ), /* Left, Right and Middle mouse*/ + HID_REPORT_SIZE ( 1 ), + HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ), + + HID_REPORT_COUNT ( 1 ), + HID_REPORT_SIZE ( 5 ), + HID_INPUT ( HID_CONSTANT ), /* reserved */ + + HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ), + HID_USAGE ( HID_USAGE_DESKTOP_X ), + HID_USAGE ( HID_USAGE_DESKTOP_Y ), + HID_LOGICAL_MIN ( 0x81 ), /* -127 */ + HID_LOGICAL_MAX ( 0x7f ), /* 127 */ + + HID_REPORT_COUNT ( 2 ), /* X, Y position */ + HID_REPORT_SIZE ( 8 ), + HID_INPUT ( HID_DATA | HID_VARIABLE | HID_RELATIVE ), /* relative values */ + HID_COLLECTION_END, + + HID_COLLECTION_END +}; + TUSB_CFG_ATTR_USBRAM ATTR_ALIGNED(4) const app_configuration_desc_t desc_configuration = { @@ -120,7 +156,7 @@ const app_configuration_desc_t desc_configuration = .bMaxPower = TUSB_DESC_CONFIG_POWER_MA(100) }, - ///// USB HID Keyboard interface + //------------- HID Keyboard -------------// .keyboard_interface = { .bLength = sizeof(tusb_descriptor_interface_t), @@ -155,5 +191,41 @@ const app_configuration_desc_t desc_configuration = .bInterval = 0x0A }, + //------------- HID Mouse -------------// + .mouse_interface = + { + .bLength = sizeof(tusb_descriptor_interface_t), + .bDescriptorType = TUSB_DESC_INTERFACE, + .bInterfaceNumber = 2, + .bAlternateSetting = 0x00, + .bNumEndpoints = 1, + .bInterfaceClass = TUSB_CLASS_HID, + .bInterfaceSubClass = HID_SUBCLASS_BOOT, + .bInterfaceProtocol = HID_PROTOCOL_MOUSE, + .iInterface = 0x00 + }, + + .mouse_hid = + { + .bLength = sizeof(tusb_hid_descriptor_hid_t), + .bDescriptorType = HID_DESC_HID, + .bcdHID = 0x0111, + .bCountryCode = HID_Local_NotSupported, + .bNumDescriptors = 1, + .bReportType = HID_DESC_REPORT, + .wReportLength = sizeof(mouse_report_descriptor) + }, + + .mouse_endpoint = + { + .bLength = sizeof(tusb_descriptor_endpoint_t), + .bDescriptorType = TUSB_DESC_ENDPOINT, + .bEndpointAddress = 0x82, + .bmAttributes = { .xfer = TUSB_XFER_INTERRUPT }, + .wMaxPacketSize = 0x08, + .bInterval = 0x0A + }, + + .ConfigDescTermination = 0, }; diff --git a/tests/test/support/descriptor_test.h b/tests/test/support/descriptor_test.h index a87dd30bf..423c406dc 100644 --- a/tests/test/support/descriptor_test.h +++ b/tests/test/support/descriptor_test.h @@ -81,19 +81,15 @@ typedef struct tusb_descriptor_endpoint_t CDC_DataInEndpoint; #endif -#if 1 // || TUSB_CFG_DEVICE_HID_KEYBOARD - //Keyboard HID Interface + //------------- HID Keyboard -------------// tusb_descriptor_interface_t keyboard_interface; tusb_hid_descriptor_hid_t keyboard_hid; tusb_descriptor_endpoint_t keyboard_endpoint; -#endif -#if 0 // && TUSB_CFG_DEVICE_HID_MOUSE - //Mouse HID Interface - tusb_descriptor_interface_t HID_MouseInterface; - HID_DESCRIPTOR HID_MouseHID; - tusb_descriptor_endpoint_t HID_MouseEndpoint; -#endif + //------------- HID Mouse -------------// + tusb_descriptor_interface_t mouse_interface; + tusb_hid_descriptor_hid_t mouse_hid; + tusb_descriptor_endpoint_t mouse_endpoint; unsigned char ConfigDescTermination; } app_configuration_desc_t; diff --git a/tinyusb/class/hid.h b/tinyusb/class/hid.h index cfc203034..1d423a53e 100644 --- a/tinyusb/class/hid.h +++ b/tinyusb/class/hid.h @@ -192,12 +192,12 @@ enum USB_HID_LOCAL_CODE //--------------------------------------------------------------------+ //------------- ITEM & TAG -------------// #define HID_REPORT_DATA_0(data) -#define HID_REPORT_DATA_1(data) data -#define HID_REPORT_DATA_2(data) U16_TO_U8S_LE(data) -#define HID_REPORT_DATA_3(data) U32_TO_U8S_LE(data) +#define HID_REPORT_DATA_1(data) , data +#define HID_REPORT_DATA_2(data) , U16_TO_U8S_LE(data) +#define HID_REPORT_DATA_3(data) , U32_TO_U8S_LE(data) #define HID_REPORT_ITEM(data, tag, type, size) \ - ( (tag << 4) | (type << 2) | size), HID_REPORT_DATA_##size(data) + ((tag << 4) | (type << 2) | size) HID_REPORT_DATA_##size(data) #define RI_TYPE_MAIN 0 #define RI_TYPE_GLOBAL 1 diff --git a/tinyusb/class/hid_host.c b/tinyusb/class/hid_host.c index e9e12c71b..c0e507215 100644 --- a/tinyusb/class/hid_host.c +++ b/tinyusb/class/hid_host.c @@ -53,6 +53,19 @@ //--------------------------------------------------------------------+ // INTERNAL OBJECT & FUNCTION DECLARATION //--------------------------------------------------------------------+ +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; + } +} //--------------------------------------------------------------------+ // KEYBOARD @@ -94,15 +107,7 @@ tusb_error_t tusbh_hid_keyboard_get_report(uint8_t dev_addr, uint8_t instance_nu tusb_interface_status_t tusbh_hid_keyboard_status(uint8_t dev_addr, uint8_t instance_num) { - 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 keyboard_data[dev_addr-1].status; - } + return hidh_interface_status(dev_addr, &keyboard_data[dev_addr-1]); } //------------- Internal API -------------// static inline tusb_error_t hidh_keyboard_open(uint8_t dev_addr, tusb_descriptor_endpoint_t const *p_endpoint_desc) ATTR_ALWAYS_INLINE; @@ -160,6 +165,8 @@ tusb_interface_status_t tusbh_hid_mouse_status(uint8_t dev_addr, uint8_t instanc default: return mouse_data[dev_addr-1].status; }*/ + + return TUSB_INTERFACE_STATUS_INVALID_PARA; } //------------- Internal API -------------//