summaryrefslogtreecommitdiff
path: root/tinyusb/class
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 /tinyusb/class
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
Diffstat (limited to 'tinyusb/class')
-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
3 files changed, 32 insertions, 4 deletions
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