From aeccdfde3f4462fae5e3b9cbb4eae76526bdb204 Mon Sep 17 00:00:00 2001 From: hathach Date: Tue, 5 Feb 2013 13:57:06 +0700 Subject: remove TUSB prefix for class enum definitions add most of HID USAGE TABLE and definitions etc ... --- tests/test/host/test_hid_host_keyboard.c | 12 +-- tests/test/host/test_usbh.c | 74 +++++++------- tests/test/support/descriptor_test.c | 159 +++++++++++++++++++++++++++++++ tests/test/support/descriptor_test.h | 109 +++++++++++++++++++++ 4 files changed, 308 insertions(+), 46 deletions(-) create mode 100644 tests/test/support/descriptor_test.c create mode 100644 tests/test/support/descriptor_test.h (limited to 'tests') diff --git a/tests/test/host/test_hid_host_keyboard.c b/tests/test/host/test_hid_host_keyboard.c index d0a93f691..888c216e6 100644 --- a/tests/test/host/test_hid_host_keyboard.c +++ b/tests/test/host/test_hid_host_keyboard.c @@ -46,12 +46,12 @@ extern class_hid_keyboard_info_t keyboard_info_pool[TUSB_CFG_HOST_DEVICE_MAX]; tusb_keyboard_report_t sample_key[2] = { { - .modifier = TUSB_KEYBOARD_MODIFIER_LEFTCTRL, - .keycode = {TUSB_KEYBOARD_KEYCODE_a} + .modifier = KEYBOARD_MODIFIER_LEFTCTRL, + .keycode = {KEYBOARD_KEYCODE_a} }, { - .modifier = TUSB_KEYBOARD_MODIFIER_RIGHTALT, - .keycode = {TUSB_KEYBOARD_KEYCODE_z} + .modifier = KEYBOARD_MODIFIER_RIGHTALT, + .keycode = {KEYBOARD_KEYCODE_z} } }; @@ -78,8 +78,8 @@ void setUp(void) .bAlternateSetting = 0, .bNumEndpoints = 1, .bInterfaceClass = TUSB_CLASS_HID, - .bInterfaceSubClass = TUSB_HID_SUBCLASS_BOOT, - .bInterfaceProtocol = TUSB_HID_PROTOCOL_KEYBOARD, + .bInterfaceSubClass = HID_SUBCLASS_BOOT, + .bInterfaceProtocol = HID_PROTOCOL_KEYBOARD, .iInterface = 0 }); diff --git a/tests/test/host/test_usbh.c b/tests/test/host/test_usbh.c index 432efc0d8..911756ede 100644 --- a/tests/test/host/test_usbh.c +++ b/tests/test/host/test_usbh.c @@ -38,6 +38,7 @@ #include "unity.h" #include "errors.h" #include "usbh.h" +#include "descriptor_test.h" #include "mock_osal.h" #include "mock_hcd.h" #include "mock_usbh_hcd.h" @@ -128,6 +129,7 @@ usbh_enumerate_t enum_connect = }; extern usbh_device_addr0_t device_addr0; + void queue_recv_stub (osal_queue_handle_t const queue_hdl, uint32_t *p_data, uint32_t msec, tusb_error_t *p_error, int num_call) { TEST_ASSERT_EQUAL_PTR(enum_queue_hdl, queue_hdl); @@ -140,49 +142,32 @@ void semaphore_wait_stub(osal_semaphore_handle_t const sem_hdl, uint32_t msec, t (*p_error) = TUSB_ERROR_NONE; } -tusb_error_t pipe_control_stub(pipe_handle_t pipe_hdl, const tusb_std_request_t * const p_request, uint8_t data[], int num_call) +tusb_error_t get_device_desc_stub(pipe_handle_t pipe_hdl, const tusb_std_request_t * const p_request, uint8_t data[], int num_call) { - tusb_descriptor_device_t dev_desc = - { - .bLength = sizeof(tusb_descriptor_device_t), - .bDescriptorType = TUSB_DESC_DEVICE, - .bcdUSB = 0x0200, - .bDeviceClass = 0x00, - .bDeviceSubClass = 0x00, - .bDeviceProtocol = 0x00, + TEST_ASSERT(num_call < 2); + TEST_ASSERT_EQUAL(TUSB_REQUEST_GET_DESCRIPTOR, p_request->bRequest); + TEST_ASSERT_EQUAL(TUSB_DESC_DEVICE, p_request->wValue >> 8); - .bMaxPacketSize0 = 64, + memcpy(data, &desc_device, p_request->wLength); - .idVendor = 0x1FC9, - .idProduct = 0x4000, - .bcdDevice = 0x0100, + return TUSB_ERROR_NONE; +} - .iManufacturer = 0x01, - .iProduct = 0x02, - .iSerialNumber = 0x03, +tusb_error_t set_device_addr_stub(pipe_handle_t pipe_hdl, const tusb_std_request_t * const p_request, uint8_t data[], int num_call) +{ + TEST_ASSERT_EQUAL(TUSB_REQUEST_SET_ADDRESS, p_request->bRequest); + TEST_ASSERT_EQUAL(p_request->wValue, 1); + return TUSB_ERROR_NONE; +} - .bNumConfigurations = 0x02 - }; +tusb_error_t get_configuration_desc_stub(pipe_handle_t pipe_hdl, const tusb_std_request_t * const p_request, uint8_t data[], int num_call) +{ + TEST_ASSERT(num_call < 2); - switch (p_request->bRequest) - { - case TUSB_REQUEST_GET_DESCRIPTOR: - switch (p_request->wValue >> 8) - { - case TUSB_DESC_DEVICE: - memcpy(data, &dev_desc, p_request->wLength); - break; - - default: - TEST_FAIL(); - break; - } - break; - - case TUSB_REQUEST_SET_ADDRESS: - TEST_ASSERT_EQUAL(p_request->wValue, 1); - break; - } + TEST_ASSERT_EQUAL(TUSB_REQUEST_GET_DESCRIPTOR, p_request->bRequest); + TEST_ASSERT_EQUAL(TUSB_DESC_CONFIGURATION, p_request->wValue >> 8); + + memcpy(data, &desc_device, p_request->wLength); return TUSB_ERROR_NONE; } @@ -199,16 +184,15 @@ void test_enum_task_connect(void) hcd_addr0_open_IgnoreAndReturn(TUSB_ERROR_NONE); // get 8-byte of device descriptor - hcd_pipe_control_xfer_StubWithCallback(pipe_control_stub); + hcd_pipe_control_xfer_StubWithCallback(get_device_desc_stub); osal_semaphore_wait_StubWithCallback(semaphore_wait_stub); // set device address - hcd_pipe_control_xfer_StubWithCallback(pipe_control_stub); + hcd_pipe_control_xfer_StubWithCallback(set_device_addr_stub); osal_semaphore_wait_StubWithCallback(semaphore_wait_stub); hcd_addr0_close_IgnoreAndReturn(TUSB_ERROR_NONE); } - usbh_enumeration_task(); TEST_ASSERT_EQUAL(TUSB_DEVICE_STATUS_ADDRESSED, usbh_device_info_pool[0].status); @@ -217,6 +201,16 @@ void test_enum_task_connect(void) TEST_ASSERT_EQUAL(enum_connect.hub_addr, usbh_device_info_pool[0].hub_addr); TEST_ASSERT_EQUAL(enum_connect.hub_port, usbh_device_info_pool[0].hub_port); + hcd_pipe_control_open_ExpectAndReturn(1, desc_device.bMaxPacketSize0, TUSB_ERROR_NONE); + + hcd_pipe_control_xfer_StubWithCallback(get_device_desc_stub); // get full device descriptor + osal_semaphore_wait_StubWithCallback(semaphore_wait_stub); + + hcd_pipe_control_xfer_StubWithCallback(get_configuration_desc_stub); // get 9 bytes of configuration descriptor + osal_semaphore_wait_StubWithCallback(semaphore_wait_stub); + + hcd_pipe_control_xfer_StubWithCallback(get_configuration_desc_stub); // get full-length configuration descriptor + osal_semaphore_wait_StubWithCallback(semaphore_wait_stub); } void test_enum_task_disconnect(void) diff --git a/tests/test/support/descriptor_test.c b/tests/test/support/descriptor_test.c new file mode 100644 index 000000000..bbc5c72c6 --- /dev/null +++ b/tests/test/support/descriptor_test.c @@ -0,0 +1,159 @@ +/* + * descriptor_test.c + * + * Created on: Feb 5, 2013 + * Author: hathach + */ + +/* + * Software License Agreement (BSD License) + * Copyright (c) 2012, hathach (tinyusb.net) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the tiny usb stack. + */ + +#include "tusb_option.h" +#include "descriptor_test.h" + +TUSB_CFG_ATTR_USBRAM ATTR_ALIGNED(4) +tusb_descriptor_device_t desc_device = +{ + .bLength = sizeof(tusb_descriptor_device_t), + .bDescriptorType = TUSB_DESC_DEVICE, + .bcdUSB = 0x0200, + .bDeviceClass = 0x00, + .bDeviceSubClass = 0x00, + .bDeviceProtocol = 0x00, + + .bMaxPacketSize0 = 64, + + .idVendor = 0x1FC9, + .idProduct = 0x4000, + .bcdDevice = 0x0100, + + .iManufacturer = 0x01, + .iProduct = 0x02, + .iSerialNumber = 0x03, + + .bNumConfigurations = 0x02 +} ; +// +TUSB_CFG_ATTR_USBRAM ATTR_ALIGNED(4) +const uint8_t keyboard_report_descriptor[] = { + HID_USAGE_PAGE ( HID_USAGE_PAGE_DESKTOP ), + HID_USAGE ( HID_USAGE_DESKTOP_KEYBOARD ), + HID_COLLECTION ( HID_COLLECTION_APPLICATION ), + HID_USAGE_PAGE ( HID_USAGE_PAGE_KEYBOARD ), + HID_USAGE_MIN ( 224 ), + HID_USAGE_MAX ( 231 ), + HID_LOGICAL_MIN ( 0 ), + HID_LOGICAL_MAX ( 1 ), + + HID_REPORT_COUNT ( 8 ), /* 8 bits */ + HID_REPORT_SIZE ( 1 ), + HID_INPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ), /* maskable modifier key */ + + HID_REPORT_COUNT ( 1 ), + HID_REPORT_SIZE ( 8 ), + HID_INPUT ( HID_CONSTANT ), /* reserved */ + + HID_USAGE_PAGE ( HID_USAGE_PAGE_LED ), + HID_USAGE_MIN ( 1 ), + HID_USAGE_MAX ( 5 ), + HID_REPORT_COUNT ( 5 ), + HID_REPORT_SIZE ( 1 ), + HID_OUTPUT ( HID_DATA | HID_VARIABLE | HID_ABSOLUTE ), /* 5-bit Led report */ + + HID_REPORT_COUNT ( 1 ), + HID_REPORT_SIZE ( 3 ), /* led padding */ + 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_REPORT_COUNT ( 6 ), + HID_REPORT_SIZE ( 8 ), + HID_INPUT ( HID_DATA | HID_ARRAY | HID_ABSOLUTE ), /* keycodes array 6 items */ + HID_COLLECTION_END +}; + +TUSB_CFG_ATTR_USBRAM ATTR_ALIGNED(4) +const app_configuration_desc_t desc_configuration = +{ + .configuration = + { + .bLength = sizeof(tusb_descriptor_configuration_t), + .bDescriptorType = TUSB_DESC_CONFIGURATION, + + .wTotalLength = sizeof(app_configuration_desc_t) - 1, // exclude termination + .bNumInterfaces = 1, + + .bConfigurationValue = 1, + .iConfiguration = 0x00, + .bmAttributes = TUSB_DESC_CONFIG_ATT_BUS_POWER, + .bMaxPower = TUSB_DESC_CONFIG_POWER_MA(100) + }, + + ///// USB HID Keyboard interface + .keyboard_interface = + { + .bLength = sizeof(tusb_descriptor_interface_t), + .bDescriptorType = TUSB_DESC_INTERFACE, + .bInterfaceNumber = 1, + .bAlternateSetting = 0x00, + .bNumEndpoints = 1, + .bInterfaceClass = TUSB_CLASS_HID, + .bInterfaceSubClass = HID_SUBCLASS_BOOT, + .bInterfaceProtocol = HID_PROTOCOL_KEYBOARD, + .iInterface = 0x00 + }, + + .keyboard_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(keyboard_report_descriptor) + }, + + .keyboard_endpoint = + { + .bLength = sizeof(tusb_descriptor_endpoint_t), + .bDescriptorType = TUSB_DESC_ENDPOINT, + .bEndpointAddress = 0x81, + .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 new file mode 100644 index 000000000..71f6351c9 --- /dev/null +++ b/tests/test/support/descriptor_test.h @@ -0,0 +1,109 @@ +/* + * descriptor_test.h + * + * Created on: Feb 5, 2013 + * Author: hathach + */ + +/* + * Software License Agreement (BSD License) + * Copyright (c) 2012, hathach (tinyusb.net) + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT + * SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT + * OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * This file is part of the tiny usb stack. + */ + +/** \file + * \brief TBD + * + * \note TBD + */ + +/** \ingroup TBD + * \defgroup TBD + * \brief TBD + * + * @{ + */ + +#ifndef _TUSB_TEST_DESCRIPTOR_H_ +#define _TUSB_TEST_DESCRIPTOR_H_ + +#ifdef __cplusplus + extern "C" { +#endif + +#include "common/common.h" +#include "class/hid.h" + +typedef struct +{ + tusb_descriptor_configuration_t configuration; + +#if 0 //&& IAD_DESC_REQUIRED + tusb_descriptor_interface_association_t CDC_IAD; +#endif + +#if 0 //&& TUSB_CFG_DEVICE_CDC + //CDC - Serial + //CDC Control Interface + tusb_descriptor_interface_t CDC_CCI_Interface; + CDC_HEADER_DESCRIPTOR CDC_Header; + CDC_ABSTRACT_CONTROL_MANAGEMENT_DESCRIPTOR CDC_ACM; + CDC_UNION_1SLAVE_DESCRIPTOR CDC_Union; + tusb_descriptor_endpoint_t CDC_NotificationEndpoint; + + //CDC Data Interface + tusb_descriptor_interface_t CDC_DCI_Interface; + tusb_descriptor_endpoint_t CDC_DataOutEndpoint; + tusb_descriptor_endpoint_t CDC_DataInEndpoint; +#endif + +#if 1 // || TUSB_CFG_DEVICE_HID_KEYBOARD + //Keyboard HID Interface + 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 + + unsigned char ConfigDescTermination; +} app_configuration_desc_t; + +extern tusb_descriptor_device_t desc_device; + +#ifdef __cplusplus + } +#endif + +#endif /* _TUSB_TEST_DESCRIPTOR_H_ */ + +/** @} */ -- cgit v1.3.1