summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <[email protected]>2013-03-25 16:02:24 +0700
committerhathach <[email protected]>2013-03-25 16:02:24 +0700
commitc026a9f2e0aca713c7cb5f08eb40018f7f16e1be (patch)
treee41cc280d7558de8fafcf29c9198dcf54fa76e03
parent45db7b4a533c8f4693167e120cc8285b29b4794f (diff)
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
-rw-r--r--demos/host/tusb_config.h1
-rw-r--r--tests/test/host/hid/test_hidh.c31
-rw-r--r--tests/test/host/hid/test_hidh_keyboard.c9
-rw-r--r--tests/test/support/tusb_config.h2
-rw-r--r--tinyusb/class/hid_host.c28
-rw-r--r--tinyusb/class/hid_host_keyboard.c2
-rw-r--r--tinyusb/class/hid_host_keyboard.h6
-rw-r--r--tinyusb/host/usbh.c8
-rw-r--r--tinyusb/tusb_option.h5
9 files changed, 65 insertions, 27 deletions
diff --git a/demos/host/tusb_config.h b/demos/host/tusb_config.h
index 1ef980a45..8a1985e96 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 294fcecfb..412b5d820 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 -------------//
+ if (!hidh_init)
+ TEST_IGNORE();
+
+}
+
+void test_hidh_close(void)
+{
+ if (!hidh_close)
+ TEST_IGNORE();
+}
+
+void test_hihd_isr(void)
{
-// hidh_keyboard_init_Expect();
-// //------------- Code Under TEST -------------//
-// hidh_init();
- TEST_FAIL();
+ 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 a74594603..ffd712bf9 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 6ea154dea..64afe3b17 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 91a5c4991..944339344 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 3ac18b3f4..72ba4d7be 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 8716d8ec5..f07595dcf 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 24c112bf6..c6fc411fa 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 976e5fd08..55a2381a9 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