From ddeec330fabaa1b41cbd359e268a84334cfac65e Mon Sep 17 00:00:00 2001 From: hathach Date: Mon, 25 Mar 2013 13:08:40 +0700 Subject: separate hidh_keyboard from hid_host move test hid related to its own folder --- tests/test/host/hid/test_hidh.c | 51 +++++++++ tests/test/host/hid/test_hidh_keyboard.c | 183 +++++++++++++++++++++++++++++++ tests/test/host/test_hidh.c | 51 --------- tests/test/host/test_hidh_keyboard.c | 182 ------------------------------ tinyusb/class/hid_host.c | 52 +++------ tinyusb/class/hid_host.h | 40 ++----- tinyusb/class/hid_host_keyboard.c | 102 +++++++++++++++++ tinyusb/class/hid_host_keyboard.h | 99 +++++++++++++++++ 8 files changed, 461 insertions(+), 299 deletions(-) create mode 100644 tests/test/host/hid/test_hidh.c create mode 100644 tests/test/host/hid/test_hidh_keyboard.c delete mode 100644 tests/test/host/test_hidh.c delete mode 100644 tests/test/host/test_hidh_keyboard.c create mode 100644 tinyusb/class/hid_host_keyboard.c create mode 100644 tinyusb/class/hid_host_keyboard.h diff --git a/tests/test/host/hid/test_hidh.c b/tests/test/host/hid/test_hidh.c new file mode 100644 index 000000000..838805c63 --- /dev/null +++ b/tests/test/host/hid/test_hidh.c @@ -0,0 +1,51 @@ +/* + * test_host_hid.c + * + * Created on: Dec 18, 2012 + * Author: hathach + */ + +/* + * Software License Agreement (BSD License) + * Copyright (c) 2012, hathach (tinyusb.org) + * 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 "unity.h" + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void test_hidh() +{ + TEST_IGNORE(); +} diff --git a/tests/test/host/hid/test_hidh_keyboard.c b/tests/test/host/hid/test_hidh_keyboard.c new file mode 100644 index 000000000..a74594603 --- /dev/null +++ b/tests/test/host/hid/test_hidh_keyboard.c @@ -0,0 +1,183 @@ +/* + * test_host_hid_keyboard.c + * + * Created on: Jan 18, 2013 + * Author: hathach + */ + +/* + * Software License Agreement (BSD License) + * Copyright (c) 2012, hathach (tinyusb.org) + * 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 "stdlib.h" +#include "unity.h" +#include "errors.h" +#include "hid_host.h" +#include "hid_host_keyboard.h" +#include "mock_osal.h" +#include "mock_usbh.h" +#include "mock_hcd.h" + +extern hidh_keyboard_info_t keyboard_data[TUSB_CFG_HOST_DEVICE_MAX]; + +tusb_keyboard_report_t sample_key[2] = +{ + { + .modifier = KEYBOARD_MODIFIER_LEFTCTRL, + .keycode = {KEYBOARD_KEYCODE_a} + }, + { + .modifier = KEYBOARD_MODIFIER_RIGHTALT, + .keycode = {KEYBOARD_KEYCODE_z} + } +}; + +uint8_t dev_addr; +tusb_keyboard_report_t report; +uint8_t instance_num; +keyboard_interface_t* p_hidh_kbd_interface; + +tusb_descriptor_interface_t const kbd_descriptor = +{ + .bLength = sizeof(tusb_descriptor_interface_t), + .bDescriptorType = TUSB_DESC_INTERFACE, + .bInterfaceNumber = 1, + .bAlternateSetting = 0, + .bNumEndpoints = 1, + .bInterfaceClass = TUSB_CLASS_HID, + .bInterfaceSubClass = HID_SUBCLASS_BOOT, + .bInterfaceProtocol = HID_PROTOCOL_KEYBOARD, + .iInterface = 0 +}; + + +void setUp(void) +{ + instance_num = 0; + dev_addr = RANDOM(TUSB_CFG_HOST_DEVICE_MAX)+1; + + memclr_(&report, sizeof(tusb_keyboard_report_t)); + + hidh_keyboard_init(); + + keyboard_data[dev_addr-1].instance_count = 0; + p_hidh_kbd_interface = &keyboard_data[dev_addr-1].instance[instance_num]; + + p_hidh_kbd_interface->report_size = sizeof(tusb_keyboard_report_t); + p_hidh_kbd_interface->pipe_in = (pipe_handle_t) { + .dev_addr = dev_addr, + .xfer_type = TUSB_XFER_INTERRUPT, + .index = 1 + }; + +} + +void tearDown(void) +{ +} + +//--------------------------------------------------------------------+ +// keyboard_install, keyboard_no_instances, keybaord_init +//--------------------------------------------------------------------+ +void test_keyboard_no_instances_invalid_para(void) +{ + tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_UNPLUG); + TEST_ASSERT_EQUAL(0, tusbh_hid_keyboard_no_instances(dev_addr)); +} + +void test_keyboard_install_ok(void) +{ + 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)); + tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); + TEST_ASSERT_EQUAL(1, tusbh_hid_keyboard_no_instances(dev_addr)); +} + +void test_keyboard_init(void) +{ + hidh_keyboard_init(); + + for(uint32_t i=0; i < sizeof(hidh_keyboard_info_t)*TUSB_CFG_HOST_DEVICE_MAX; i++) + TEST_ASSERT_EQUAL(0, ((uint8_t*)keyboard_data) [i]); +} + +//--------------------------------------------------------------------+ +// keyboard_get +//--------------------------------------------------------------------+ +void test_keyboard_get_invalid_address(void) +{ + tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); + TEST_ASSERT_EQUAL(TUSB_ERROR_INVALID_PARA, tusbh_hid_keyboard_get(0, 0, NULL)); // invalid address +} + +void test_keyboard_get_invalid_instance(void) +{ + tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); + TEST_ASSERT_EQUAL(TUSB_ERROR_INVALID_PARA, tusbh_hid_keyboard_get(dev_addr, TUSB_CFG_HOST_HID_KEYBOARD_NO_INSTANCES_PER_DEVICE, &report)); // invalid instance +} + +void test_keyboard_get_invalid_buffer(void) +{ + tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); + TEST_ASSERT_EQUAL(TUSB_ERROR_INVALID_PARA, tusbh_hid_keyboard_get(dev_addr, 0, NULL)); // invalid buffer +} + +void test_keyboard_get_device_not_ready(void) +{ + tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_UNPLUG); + TEST_ASSERT_EQUAL(TUSB_ERROR_DEVICE_NOT_READY, tusbh_hid_keyboard_get(dev_addr, 0, &report)); // device not mounted +} + +void test_keyboard_get_class_not_supported() +{ + tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); + p_hidh_kbd_interface->pipe_in = (pipe_handle_t) { 0 }; + TEST_ASSERT_EQUAL(TUSB_ERROR_CLASS_DEVICE_DONT_SUPPORT, tusbh_hid_keyboard_get(dev_addr, instance_num, &report)); +} + +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); + + //------------- Code Under TEST -------------// + TEST_ASSERT_EQUAL(TUSB_ERROR_INVALID_PARA, tusbh_hid_keyboard_get(dev_addr, instance_num, &report)); +} + +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); + + //------------- Code Under TEST -------------// + TEST_ASSERT_EQUAL(TUSB_ERROR_NONE, tusbh_hid_keyboard_get(dev_addr, instance_num, &report)); +} + diff --git a/tests/test/host/test_hidh.c b/tests/test/host/test_hidh.c deleted file mode 100644 index f27a19b2c..000000000 --- a/tests/test/host/test_hidh.c +++ /dev/null @@ -1,51 +0,0 @@ -/* - * test_host_hid.c - * - * Created on: Dec 18, 2012 - * Author: hathach - */ - -/* - * Software License Agreement (BSD License) - * Copyright (c) 2012, hathach (tinyusb.org) - * 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 "unity.h" - -void setUp(void) -{ -} - -void tearDown(void) -{ -} - -void test_() -{ - TEST_IGNORE(); -} diff --git a/tests/test/host/test_hidh_keyboard.c b/tests/test/host/test_hidh_keyboard.c deleted file mode 100644 index 5153a5f2d..000000000 --- a/tests/test/host/test_hidh_keyboard.c +++ /dev/null @@ -1,182 +0,0 @@ -/* - * test_host_hid_keyboard.c - * - * Created on: Jan 18, 2013 - * Author: hathach - */ - -/* - * Software License Agreement (BSD License) - * Copyright (c) 2012, hathach (tinyusb.org) - * 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 "stdlib.h" -#include "unity.h" -#include "errors.h" -#include "hid_host.h" -#include "mock_osal.h" -#include "mock_usbh.h" -#include "mock_hcd.h" - -extern hidh_keyboard_info_t keyboard_data[TUSB_CFG_HOST_DEVICE_MAX]; - -tusb_keyboard_report_t sample_key[2] = -{ - { - .modifier = KEYBOARD_MODIFIER_LEFTCTRL, - .keycode = {KEYBOARD_KEYCODE_a} - }, - { - .modifier = KEYBOARD_MODIFIER_RIGHTALT, - .keycode = {KEYBOARD_KEYCODE_z} - } -}; - -uint8_t dev_addr; -tusb_keyboard_report_t report; -uint8_t instance_num; -keyboard_interface_t* p_hidh_kbd_interface; - -tusb_descriptor_interface_t const kbd_descriptor = -{ - .bLength = sizeof(tusb_descriptor_interface_t), - .bDescriptorType = TUSB_DESC_INTERFACE, - .bInterfaceNumber = 1, - .bAlternateSetting = 0, - .bNumEndpoints = 1, - .bInterfaceClass = TUSB_CLASS_HID, - .bInterfaceSubClass = HID_SUBCLASS_BOOT, - .bInterfaceProtocol = HID_PROTOCOL_KEYBOARD, - .iInterface = 0 -}; - - -void setUp(void) -{ - instance_num = 0; - dev_addr = RANDOM(TUSB_CFG_HOST_DEVICE_MAX)+1; - - memclr_(&report, sizeof(tusb_keyboard_report_t)); - - hidh_keyboard_init(); - - keyboard_data[dev_addr-1].instance_count = 0; - p_hidh_kbd_interface = &keyboard_data[dev_addr-1].instance[instance_num]; - - p_hidh_kbd_interface->report_size = sizeof(tusb_keyboard_report_t); - p_hidh_kbd_interface->pipe_in = (pipe_handle_t) { - .dev_addr = dev_addr, - .xfer_type = TUSB_XFER_INTERRUPT, - .index = 1 - }; - -} - -void tearDown(void) -{ -} - -//--------------------------------------------------------------------+ -// keyboard_install, keyboard_no_instances, keybaord_init -//--------------------------------------------------------------------+ -void test_keyboard_no_instances_invalid_para(void) -{ - tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_UNPLUG); - TEST_ASSERT_EQUAL(0, tusbh_hid_keyboard_no_instances(dev_addr)); -} - -void test_keyboard_install_ok(void) -{ - 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)); - tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); - TEST_ASSERT_EQUAL(1, tusbh_hid_keyboard_no_instances(dev_addr)); -} - -void test_keyboard_init(void) -{ - hidh_keyboard_init(); - - for(uint32_t i=0; i < sizeof(hidh_keyboard_info_t)*TUSB_CFG_HOST_DEVICE_MAX; i++) - TEST_ASSERT_EQUAL(0, ((uint8_t*)keyboard_data) [i]); -} - -//--------------------------------------------------------------------+ -// keyboard_get -//--------------------------------------------------------------------+ -void test_keyboard_get_invalid_address(void) -{ - tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); - TEST_ASSERT_EQUAL(TUSB_ERROR_INVALID_PARA, tusbh_hid_keyboard_get(0, 0, NULL)); // invalid address -} - -void test_keyboard_get_invalid_instance(void) -{ - tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); - TEST_ASSERT_EQUAL(TUSB_ERROR_INVALID_PARA, tusbh_hid_keyboard_get(dev_addr, TUSB_CFG_HOST_HID_KEYBOARD_NO_INSTANCES_PER_DEVICE, &report)); // invalid instance -} - -void test_keyboard_get_invalid_buffer(void) -{ - tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); - TEST_ASSERT_EQUAL(TUSB_ERROR_INVALID_PARA, tusbh_hid_keyboard_get(dev_addr, 0, NULL)); // invalid buffer -} - -void test_keyboard_get_device_not_ready(void) -{ - tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_UNPLUG); - TEST_ASSERT_EQUAL(TUSB_ERROR_DEVICE_NOT_READY, tusbh_hid_keyboard_get(dev_addr, 0, &report)); // device not mounted -} - -void test_keyboard_get_class_not_supported() -{ - tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED); - p_hidh_kbd_interface->pipe_in = (pipe_handle_t) { 0 }; - TEST_ASSERT_EQUAL(TUSB_ERROR_CLASS_DEVICE_DONT_SUPPORT, tusbh_hid_keyboard_get(dev_addr, instance_num, &report)); -} - -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); - - //------------- Code Under TEST -------------// - TEST_ASSERT_EQUAL(TUSB_ERROR_INVALID_PARA, tusbh_hid_keyboard_get(dev_addr, instance_num, &report)); -} - -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); - - //------------- Code Under TEST -------------// - TEST_ASSERT_EQUAL(TUSB_ERROR_NONE, tusbh_hid_keyboard_get(dev_addr, instance_num, &report)); -} - diff --git a/tinyusb/class/hid_host.c b/tinyusb/class/hid_host.c index e322349b5..91a5c4991 100644 --- a/tinyusb/class/hid_host.c +++ b/tinyusb/class/hid_host.c @@ -47,7 +47,6 @@ #include "common/common.h" #include "hid_host.h" -#if TUSB_CFG_HOST_HID_KEYBOARD //--------------------------------------------------------------------+ // MACRO CONSTANT TYPEDEF //--------------------------------------------------------------------+ @@ -55,59 +54,38 @@ //--------------------------------------------------------------------+ // INTERNAL OBJECT & FUNCTION DECLARATION //--------------------------------------------------------------------+ -STATIC_ hidh_keyboard_info_t keyboard_data[TUSB_CFG_HOST_DEVICE_MAX]; // does not have addr0, index = dev_address-1 - //--------------------------------------------------------------------+ -// PUBLIC API (Parameter Verification is required) +// CLASS-USBD API (don't require to verify parameters) //--------------------------------------------------------------------+ -tusb_error_t tusbh_hid_keyboard_get(uint8_t const dev_addr, uint8_t instance_num, tusb_keyboard_report_t * const report) +void hidh_init(void) { - //------------- parameters validation -------------// - 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(instance_num < TUSB_CFG_HOST_HID_KEYBOARD_NO_INSTANCES_PER_DEVICE, TUSB_ERROR_INVALID_PARA); - - keyboard_interface_t *p_kbd; - p_kbd = &keyboard_data[dev_addr-1].instance[instance_num]; - - // TODO abtract class support for device - ASSERT(0 != p_kbd->pipe_in.dev_addr, TUSB_ERROR_CLASS_DEVICE_DONT_SUPPORT); +#if TUSB_CFG_HOST_HID_KEYBOARD + hidh_keyboard_init(); +#endif - // TODO abtract to use hidh service - ASSERT_STATUS( hcd_pipe_xfer(p_kbd->pipe_in, report, p_kbd->report_size, 1) ) ; +#if TUSB_CFG_HOST_HID_MOUSE + hidh_mouse_init(); +#endif - return TUSB_ERROR_NONE; +#if TUSB_CFG_HOST_HID_GENERIC + hidh_generic_init(); +#endif } -uint8_t tusbh_hid_keyboard_no_instances(uint8_t const dev_addr) +tusb_error_t hidh_open_subtask(uint8_t dev_addr, uint8_t const *descriptor, uint16_t *p_length) { - ASSERT(tusbh_device_is_configured(dev_addr), 0); - - return keyboard_data[dev_addr-1].instance_count; + return TUSB_ERROR_NONE; } -//--------------------------------------------------------------------+ -// CLASS-USBD API (don't require to verify parameters) -//--------------------------------------------------------------------+ -void hidh_init(void) +void hidh_isr(pipe_handle_t pipe_hdl, tusb_bus_event_t event) { -#if TUSB_CFG_HOST_HID_KEYBOARD - hidh_keyboard_init(); -#endif -} -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) +void hidh_close(uint8_t dev_addr) { - keyboard_data[dev_addr-1].instance_count++; - return TUSB_ERROR_NONE; } -#endif #endif diff --git a/tinyusb/class/hid_host.h b/tinyusb/class/hid_host.h index a61f56125..f4f1cbb9b 100644 --- a/tinyusb/class/hid_host.h +++ b/tinyusb/class/hid_host.h @@ -59,45 +59,27 @@ #include "host/usbh.h" #include "hid.h" -//--------------------------------------------------------------------+ -// APPLICATION API -//--------------------------------------------------------------------+ -uint8_t tusbh_hid_keyboard_no_instances(uint8_t const dev_addr) ATTR_PURE ATTR_WARN_UNUSED_RESULT; -static inline bool tusbh_hid_keyboard_is_supported(uint8_t const dev_addr) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT ATTR_PURE; -static inline bool tusbh_hid_keyboard_is_supported(uint8_t const dev_addr) -{ - return tusbh_hid_keyboard_no_instances(dev_addr) > 0; -} +#if TUSB_CFG_HOST_HID_KEYBOARD + #include "hid_host_keyboard.h" +#endif -tusb_error_t tusbh_hid_keyboard_get(uint8_t const handle, uint8_t const instance_num, tusb_keyboard_report_t * const report) ATTR_WARN_UNUSED_RESULT; -pipe_status_t tusbh_hid_keyboard_pipe_status(uint8_t const handle, uint8_t const instance_num) ATTR_WARN_UNUSED_RESULT; +#if TUSB_CFG_HOST_HID_MOUSE + #include "hid_host_mouse.h" +#endif //--------------------------------------------------------------------+ -// INTERNAL API +// APPLICATION API //--------------------------------------------------------------------+ -#ifdef _TINY_USB_SOURCE_FILE_ - -typedef struct { - pipe_handle_t pipe_in; - uint8_t report_size; - uint8_t buffer[TUSB_CFG_HOST_HID_KEYBOARD_ENDPOINT_SIZE]; -}keyboard_interface_t; - -typedef struct { - uint8_t instance_count; - keyboard_interface_t instance[TUSB_CFG_HOST_HID_KEYBOARD_NO_INSTANCES_PER_DEVICE]; -} hidh_keyboard_info_t; - -void hidh_keyboard_init(void); -tusb_error_t hidh_keyboard_install(uint8_t dev_addr, uint8_t const *descriptor) ATTR_WARN_UNUSED_RESULT; //--------------------------------------------------------------------+ // CLASS DRIVER FUNCTION (all declared with WEAK) //--------------------------------------------------------------------+ +#ifdef _TINY_USB_SOURCE_FILE_ + void hidh_init(void) ATTR_WEAK; tusb_error_t hidh_open_subtask(uint8_t dev_addr, uint8_t const *descriptor, uint16_t *p_length) ATTR_WEAK ATTR_WARN_UNUSED_RESULT; -void hidh_isr(pipe_handle_t pipe_hdl, tusb_bus_event_t event) ATTR_WEAK; -void hidh_close(uint8_t dev_addr) ATTR_WEAK; +void hidh_isr(pipe_handle_t pipe_hdl, tusb_bus_event_t event) ATTR_WEAK; +void hidh_close(uint8_t dev_addr) ATTR_WEAK; #endif diff --git a/tinyusb/class/hid_host_keyboard.c b/tinyusb/class/hid_host_keyboard.c new file mode 100644 index 000000000..2bb9503c0 --- /dev/null +++ b/tinyusb/class/hid_host_keyboard.c @@ -0,0 +1,102 @@ +/* + * hid_host_keyboard.c + * + * Created on: Mar 25, 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" + +#if (MODE_HOST_SUPPORTED && TUSB_CFG_HOST_HID_KEYBOARD) + +#define _TINY_USB_SOURCE_FILE_ + +//--------------------------------------------------------------------+ +// INCLUDE +//--------------------------------------------------------------------+ +#include "common/common.h" +#include "hid_host.h" + +//--------------------------------------------------------------------+ +// MACRO CONSTANT TYPEDEF +//--------------------------------------------------------------------+ + +//--------------------------------------------------------------------+ +// INTERNAL OBJECT & FUNCTION DECLARATION +//--------------------------------------------------------------------+ +STATIC_ hidh_keyboard_info_t keyboard_data[TUSB_CFG_HOST_DEVICE_MAX]; // does not have addr0, index = dev_address-1 + +//--------------------------------------------------------------------+ +// IMPLEMENTATION +//--------------------------------------------------------------------+ + +//------------- PUBLIC API (Parameter Verification is required) -------------// +tusb_error_t tusbh_hid_keyboard_get(uint8_t const dev_addr, uint8_t instance_num, tusb_keyboard_report_t * const report) +{ + //------------- parameters validation -------------// + 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(instance_num < TUSB_CFG_HOST_HID_KEYBOARD_NO_INSTANCES_PER_DEVICE, TUSB_ERROR_INVALID_PARA); + + keyboard_interface_t *p_kbd; + p_kbd = &keyboard_data[dev_addr-1].instance[instance_num]; + + // TODO abtract class support for device + ASSERT(0 != p_kbd->pipe_in.dev_addr, TUSB_ERROR_CLASS_DEVICE_DONT_SUPPORT); + + // TODO abtract to use hidh service + ASSERT_STATUS( hcd_pipe_xfer(p_kbd->pipe_in, report, p_kbd->report_size, 1) ) ; + + return TUSB_ERROR_NONE; +} + +uint8_t tusbh_hid_keyboard_no_instances(uint8_t const dev_addr) +{ + ASSERT(tusbh_device_is_configured(dev_addr), 0); + + return keyboard_data[dev_addr-1].instance_count; +} + +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) +{ + keyboard_data[dev_addr-1].instance_count++; + + return TUSB_ERROR_NONE; +} + +#endif diff --git a/tinyusb/class/hid_host_keyboard.h b/tinyusb/class/hid_host_keyboard.h new file mode 100644 index 000000000..a3c096bf6 --- /dev/null +++ b/tinyusb/class/hid_host_keyboard.h @@ -0,0 +1,99 @@ +/* + * hid_host_keyboard.h + * + * Created on: Mar 25, 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_HID_HOST_KEYBOARD_H_ +#define _TUSB_HID_HOST_KEYBOARD_H_ + +#include "common/common.h" + +#ifdef __cplusplus + extern "C" { +#endif + +//--------------------------------------------------------------------+ +// PUBLIC API (parameter validation required) +//--------------------------------------------------------------------+ +uint8_t tusbh_hid_keyboard_no_instances(uint8_t const dev_addr) ATTR_PURE ATTR_WARN_UNUSED_RESULT; +static inline bool tusbh_hid_keyboard_is_supported(uint8_t const dev_addr) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT ATTR_PURE; +static inline bool tusbh_hid_keyboard_is_supported(uint8_t const dev_addr) +{ + return tusbh_hid_keyboard_no_instances(dev_addr) > 0; +} + +tusb_error_t tusbh_hid_keyboard_get(uint8_t const dev_addr, uint8_t const instance_num, tusb_keyboard_report_t * const report) ATTR_WARN_UNUSED_RESULT; +pipe_status_t tusbh_hid_keyboard_pipe_status(uint8_t const dev_addr, uint8_t const instance_num) ATTR_WARN_UNUSED_RESULT; + +//--------------------------------------------------------------------+ +// INTERNAL API (no need for parameter validation) +//--------------------------------------------------------------------+ +#ifdef _TINY_USB_SOURCE_FILE_ + +typedef struct { + pipe_handle_t pipe_in; + uint16_t report_size; +}keyboard_interface_t; + +typedef struct { + uint8_t instance_count; + keyboard_interface_t instance[TUSB_CFG_HOST_HID_KEYBOARD_NO_INSTANCES_PER_DEVICE]; +} hidh_keyboard_info_t; + +void hidh_keyboard_init(void); +tusb_error_t hidh_keyboard_install(uint8_t dev_addr, uint8_t const *descriptor) ATTR_WARN_UNUSED_RESULT; + +#endif + +#ifdef __cplusplus + } +#endif + +#endif /* _TUSB_HID_HOST_KEYBOARD_H_ */ + +/** @} */ -- cgit v1.3.1