diff options
| author | hathach <[email protected]> | 2013-03-25 16:02:24 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2013-03-25 16:02:24 +0700 |
| commit | c026a9f2e0aca713c7cb5f08eb40018f7f16e1be (patch) | |
| tree | e41cc280d7558de8fafcf29c9198dcf54fa76e03 /tinyusb/class | |
| parent | 45db7b4a533c8f4693167e120cc8285b29b4794f (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.c | 28 | ||||
| -rw-r--r-- | tinyusb/class/hid_host_keyboard.c | 2 | ||||
| -rw-r--r-- | tinyusb/class/hid_host_keyboard.h | 6 |
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 |
