From 27f860db9ffd46bb8cb43046f9203f510a554d7c Mon Sep 17 00:00:00 2001 From: hathach Date: Sun, 7 Apr 2013 05:09:18 +0700 Subject: rename hidh_keyboard_info_t to hidh_interface_info_t rename tusb_bus_event_t to tusb_event_t add test_mouse_init and more stuff for hidh mouse move delay after port reset to only for speed detection prioritize port change interrupt over xfer interrupt - in case of unplugged, current connect change & xfer error both set - xfer error only break to debugger if not because of unplugged fix bug: set dev addr0 state to UNPLUG after close its control pipe in enumeration process --- tinyusb/class/hid_host.c | 22 ++++++++++++---------- tinyusb/class/hid_host.h | 17 ++++++++++------- tinyusb/class/msc_host.h | 2 +- 3 files changed, 23 insertions(+), 18 deletions(-) (limited to 'tinyusb/class') diff --git a/tinyusb/class/hid_host.c b/tinyusb/class/hid_host.c index db68f01af..61e184db6 100644 --- a/tinyusb/class/hid_host.c +++ b/tinyusb/class/hid_host.c @@ -59,10 +59,10 @@ //--------------------------------------------------------------------+ #if TUSB_CFG_HOST_HID_KEYBOARD -STATIC_ hidh_keyboard_info_t keyboard_data[TUSB_CFG_HOST_DEVICE_MAX]; // does not have addr0, index = dev_address-1 +STATIC_ hidh_interface_info_t keyboard_data[TUSB_CFG_HOST_DEVICE_MAX]; // does not have addr0, index = dev_address-1 -static inline hidh_keyboard_info_t* get_kbd_data(uint8_t dev_addr) ATTR_PURE ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; -static inline hidh_keyboard_info_t* get_kbd_data(uint8_t dev_addr) +static inline hidh_interface_info_t* get_kbd_data(uint8_t dev_addr) ATTR_PURE ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT; +static inline hidh_interface_info_t* get_kbd_data(uint8_t dev_addr) { return &keyboard_data[dev_addr-1]; } @@ -80,7 +80,7 @@ tusb_error_t tusbh_hid_keyboard_get_report(uint8_t dev_addr, uint8_t instance_nu (void) instance_num; - hidh_keyboard_info_t *p_keyboard = get_kbd_data(dev_addr); + hidh_interface_info_t *p_keyboard = get_kbd_data(dev_addr); ASSERT(TUSB_INTERFACE_STATUS_BUSY != p_keyboard->status, TUSB_ERROR_INTERFACE_IS_BUSY); @@ -100,7 +100,7 @@ tusb_interface_status_t tusbh_hid_keyboard_status(uint8_t dev_addr, uint8_t inst static inline tusb_error_t hidh_keyboard_open(uint8_t dev_addr, tusb_descriptor_endpoint_t const *p_endpoint_desc) ATTR_ALWAYS_INLINE; static inline tusb_error_t hidh_keyboard_open(uint8_t dev_addr, tusb_descriptor_endpoint_t const *p_endpoint_desc) { - hidh_keyboard_info_t *p_keyboard = get_kbd_data(dev_addr); + hidh_interface_info_t *p_keyboard = get_kbd_data(dev_addr); p_keyboard->pipe_hdl = hcd_pipe_open(dev_addr, p_endpoint_desc, TUSB_CLASS_HID); p_keyboard->report_size = p_endpoint_desc->wMaxPacketSize.size; // TODO get size from report descriptor @@ -116,7 +116,7 @@ static inline void hidh_keyboard_close(uint8_t dev_addr) pipe_handle_t pipe_hdl = keyboard_data[dev_addr-1].pipe_hdl; if ( pipehandle_is_valid(pipe_hdl) ) { - memclr_(&keyboard_data[dev_addr-1], sizeof(hidh_keyboard_info_t)); + memclr_(&keyboard_data[dev_addr-1], sizeof(hidh_interface_info_t)); ASSERT_INT( TUSB_ERROR_NONE, hcd_pipe_close(pipe_hdl), (void) 0 ); } } @@ -128,6 +128,8 @@ static inline void hidh_keyboard_close(uint8_t dev_addr) //--------------------------------------------------------------------+ #if TUSB_CFG_HOST_HID_MOUSE +STATIC_ hidh_interface_info_t mouse_data[TUSB_CFG_HOST_DEVICE_MAX]; // does not have addr0, index = dev_address-1 + //------------- Internal API -------------// static inline tusb_error_t hidh_mouse_open(uint8_t dev_addr, tusb_descriptor_endpoint_t const *p_endpoint_desc) ATTR_ALWAYS_INLINE; static inline tusb_error_t hidh_mouse_open(uint8_t dev_addr, tusb_descriptor_endpoint_t const *p_endpoint_desc) @@ -150,11 +152,11 @@ static inline void hidh_mouse_close(uint8_t dev_addr) void hidh_init(void) { #if TUSB_CFG_HOST_HID_KEYBOARD - memclr_(&keyboard_data, sizeof(hidh_keyboard_info_t)*TUSB_CFG_HOST_DEVICE_MAX); + memclr_(&keyboard_data, sizeof(hidh_interface_info_t)*TUSB_CFG_HOST_DEVICE_MAX); #endif #if TUSB_CFG_HOST_HID_MOUSE -// hidh_mouse_init(); + memclr_(&mouse_data, sizeof(hidh_interface_info_t)*TUSB_CFG_HOST_DEVICE_MAX); #endif #if TUSB_CFG_HOST_HID_GENERIC @@ -207,12 +209,12 @@ tusb_error_t hidh_open_subtask(uint8_t dev_addr, tusb_descriptor_interface_t con return TUSB_ERROR_NONE; } -void hidh_isr(pipe_handle_t pipe_hdl, tusb_bus_event_t event) +void hidh_isr(pipe_handle_t pipe_hdl, tusb_event_t event) { #if TUSB_CFG_HOST_HID_KEYBOARD if ( pipehandle_is_equal(pipe_hdl, keyboard_data[pipe_hdl.dev_addr-1].pipe_hdl) ) { - keyboard_data[pipe_hdl.dev_addr-1].status = (event == BUS_EVENT_XFER_COMPLETE) ? TUSB_INTERFACE_STATUS_COMPLETE : TUSB_INTERFACE_STATUS_ERROR; + keyboard_data[pipe_hdl.dev_addr-1].status = (event == TUSB_EVENT_XFER_COMPLETE) ? TUSB_INTERFACE_STATUS_COMPLETE : TUSB_INTERFACE_STATUS_ERROR; return; } #endif diff --git a/tinyusb/class/hid_host.h b/tinyusb/class/hid_host.h index 5d5fa1fc9..81a443bd5 100644 --- a/tinyusb/class/hid_host.h +++ b/tinyusb/class/hid_host.h @@ -62,12 +62,6 @@ //--------------------------------------------------------------------+ // KEYBOARD Public API //--------------------------------------------------------------------+ -typedef struct { - pipe_handle_t pipe_hdl; - uint16_t report_size; - volatile tusb_interface_status_t status; -}hidh_keyboard_info_t; - bool tusbh_hid_keyboard_is_supported(uint8_t dev_addr) ATTR_PURE ATTR_WARN_UNUSED_RESULT; tusb_error_t tusbh_hid_keyboard_get_report(uint8_t dev_addr, uint8_t instance_num, uint8_t * const report) ATTR_WARN_UNUSED_RESULT; tusb_interface_status_t tusbh_hid_keyboard_status(uint8_t dev_addr, uint8_t instance_num) ATTR_WARN_UNUSED_RESULT; @@ -75,6 +69,9 @@ tusb_interface_status_t tusbh_hid_keyboard_status(uint8_t dev_addr, uint8_t inst //--------------------------------------------------------------------+ // MOUSE Public API //--------------------------------------------------------------------+ +bool tusbh_hid_mouse_is_supported(uint8_t dev_addr) ATTR_PURE ATTR_WARN_UNUSED_RESULT; +tusb_error_t tusbh_hid_mouse_get_report(uint8_t dev_addr, uint8_t instance_num, uint8_t * const report) ATTR_WARN_UNUSED_RESULT; +tusb_interface_status_t tusbh_hid_mouse_status(uint8_t dev_addr, uint8_t instance_num) ATTR_WARN_UNUSED_RESULT; //--------------------------------------------------------------------+ // GENERIC Public API @@ -85,9 +82,15 @@ tusb_interface_status_t tusbh_hid_keyboard_status(uint8_t dev_addr, uint8_t inst //--------------------------------------------------------------------+ #ifdef _TINY_USB_SOURCE_FILE_ +typedef struct { + pipe_handle_t pipe_hdl; + uint16_t report_size; + volatile tusb_interface_status_t status; +}hidh_interface_info_t; + void hidh_init(void); tusb_error_t hidh_open_subtask(uint8_t dev_addr, tusb_descriptor_interface_t const *p_interface_desc, uint16_t *p_length) ATTR_WARN_UNUSED_RESULT; -void hidh_isr(pipe_handle_t pipe_hdl, tusb_bus_event_t event); +void hidh_isr(pipe_handle_t pipe_hdl, tusb_event_t event); void hidh_close(uint8_t dev_addr); #endif diff --git a/tinyusb/class/msc_host.h b/tinyusb/class/msc_host.h index 5d0a87a65..525eb9291 100644 --- a/tinyusb/class/msc_host.h +++ b/tinyusb/class/msc_host.h @@ -70,7 +70,7 @@ void msch_init(void) ATTR_WEAK; tusb_error_t msch_open_subtask(uint8_t dev_addr, tusb_descriptor_interface_t const *descriptor, uint16_t *p_length) ATTR_WEAK ATTR_WARN_UNUSED_RESULT; -void msch_isr(pipe_handle_t pipe_hdl, tusb_bus_event_t event) ATTR_WEAK; +void msch_isr(pipe_handle_t pipe_hdl, tusb_event_t event) ATTR_WEAK; void msch_close(uint8_t dev_addr) ATTR_WEAK; #endif -- cgit v1.3.1