summaryrefslogtreecommitdiff
path: root/tinyusb
diff options
context:
space:
mode:
authorhathach <[email protected]>2013-03-26 16:39:25 +0700
committerhathach <[email protected]>2013-03-26 16:39:25 +0700
commitac905a8d09598067c53ff32835a2d70797d970be (patch)
tree2ea02bce7ac3f4174dc99f4a22e56abb1c109595 /tinyusb
parent0b08dc7724a67f09be16fad3d6702ce0d7566f03 (diff)
rename pipe_status_t to tusb_interface_status_t
add tusbh_hid_keyboard_status & test code
Diffstat (limited to 'tinyusb')
-rw-r--r--tinyusb/class/hid_host.c9
-rw-r--r--tinyusb/class/hid_host.h3
-rw-r--r--tinyusb/common/errors.h1
-rw-r--r--tinyusb/host/hcd.h1
-rw-r--r--tinyusb/host/usbh.c10
-rw-r--r--tinyusb/host/usbh.h19
6 files changed, 28 insertions, 15 deletions
diff --git a/tinyusb/class/hid_host.c b/tinyusb/class/hid_host.c
index 723fd64f1..bd63aa99d 100644
--- a/tinyusb/class/hid_host.c
+++ b/tinyusb/class/hid_host.c
@@ -95,12 +95,21 @@ tusb_error_t tusbh_hid_keyboard_get_report(uint8_t dev_addr, uint8_t instance_nu
hidh_keyboard_info_t *p_keyboard = get_kbd_data(dev_addr);
+ ASSERT(TUSB_INTERFACE_STATUS_BUSY != p_keyboard->status, TUSB_ERROR_INTERFACE_IS_BUSY);
+
// TODO abstract to use hidh service
ASSERT_STATUS( hcd_pipe_xfer(p_keyboard->pipe_hdl, (uint8_t*) report, p_keyboard->report_size, true) ) ;
+ p_keyboard->status = TUSB_INTERFACE_STATUS_BUSY;
+
return TUSB_ERROR_NONE;
}
+tusb_interface_status_t tusbh_hid_keyboard_status(uint8_t dev_addr, uint8_t instance_num)
+{
+ return tusbh_device_get_state(dev_addr) ? keyboard_data[dev_addr-1].status : TUSB_INTERFACE_STATUS_INVALID_PARA;
+}
+
void hidh_keyboard_close(uint8_t dev_addr)
{
pipe_handle_t pipe_hdl = keyboard_data[dev_addr-1].pipe_hdl;
diff --git a/tinyusb/class/hid_host.h b/tinyusb/class/hid_host.h
index 482c3213d..1846bf674 100644
--- a/tinyusb/class/hid_host.h
+++ b/tinyusb/class/hid_host.h
@@ -65,11 +65,12 @@
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, tusb_keyboard_report_t * const report) ATTR_WARN_UNUSED_RESULT;
-pipe_status_t tusbh_hid_keyboard_status(uint8_t dev_addr, uint8_t instance_num) ATTR_WARN_UNUSED_RESULT;
+tusb_interface_status_t tusbh_hid_keyboard_status(uint8_t dev_addr, uint8_t instance_num) ATTR_WARN_UNUSED_RESULT;
//--------------------------------------------------------------------+
// MOUSE Public API
diff --git a/tinyusb/common/errors.h b/tinyusb/common/errors.h
index 95ac20928..41d8d43fe 100644
--- a/tinyusb/common/errors.h
+++ b/tinyusb/common/errors.h
@@ -63,6 +63,7 @@
ENTRY(TUSB_ERROR_NONE)\
ENTRY(TUSB_ERROR_INVALID_PARA)\
ENTRY(TUSB_ERROR_DEVICE_NOT_READY)\
+ ENTRY(TUSB_ERROR_INTERFACE_IS_BUSY)\
ENTRY(TUSB_ERROR_HCD_FAILED)\
ENTRY(TUSB_ERROR_USBH_MOUNT_DEVICE_NOT_RESPOND)\
ENTRY(TUSB_ERROR_USBH_MOUNT_CONFIG_DESC_TOO_LONG)\
diff --git a/tinyusb/host/hcd.h b/tinyusb/host/hcd.h
index 05b4d6d6d..b3c4a57ce 100644
--- a/tinyusb/host/hcd.h
+++ b/tinyusb/host/hcd.h
@@ -64,6 +64,7 @@ typedef struct {
uint8_t dev_addr;
uint8_t xfer_type;
uint8_t index;
+ uint8_t reserved;
} pipe_handle_t;
static inline bool pipehandle_is_valid(pipe_handle_t pipe_hdl) ATTR_CONST ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
diff --git a/tinyusb/host/usbh.c b/tinyusb/host/usbh.c
index 7deb68bb3..08ab56880 100644
--- a/tinyusb/host/usbh.c
+++ b/tinyusb/host/usbh.c
@@ -148,13 +148,13 @@ tusb_error_t usbh_control_xfer_subtask(uint8_t dev_addr, tusb_std_request_t cons
OSAL_SUBTASK_BEGIN
- usbh_devices[dev_addr].control.pipe_status = PIPE_STATUS_BUSY;
+ usbh_devices[dev_addr].control.pipe_status = TUSB_INTERFACE_STATUS_BUSY;
usbh_devices[dev_addr].control.request = *p_request;
(void) hcd_pipe_control_xfer(dev_addr, &usbh_devices[dev_addr].control.request, data);
osal_semaphore_wait(usbh_devices[dev_addr].control.sem_hdl, OSAL_TIMEOUT_NORMAL, &error); // careful of local variable without static
// TODO make handler for this function general purpose
- SUBTASK_ASSERT_STATUS_WITH_HANDLER(error || usbh_devices[dev_addr].control.pipe_status == PIPE_STATUS_ERROR,
+ SUBTASK_ASSERT_STATUS_WITH_HANDLER(error || usbh_devices[dev_addr].control.pipe_status == TUSB_INTERFACE_STATUS_ERROR,
tusbh_device_mount_failed_cb(TUSB_ERROR_USBH_MOUNT_DEVICE_NOT_RESPOND, NULL) );
OSAL_SUBTASK_END
@@ -178,9 +178,9 @@ static inline tusb_error_t usbh_pipe_control_close(uint8_t dev_addr)
return TUSB_ERROR_NONE;
}
-pipe_status_t usbh_pipe_status_get(pipe_handle_t pipe_hdl)
+tusb_interface_status_t usbh_pipe_status_get(pipe_handle_t pipe_hdl)
{
- return PIPE_STATUS_BUSY;
+ return TUSB_INTERFACE_STATUS_BUSY;
}
//--------------------------------------------------------------------+
@@ -191,7 +191,7 @@ void usbh_isr(pipe_handle_t pipe_hdl, uint8_t class_code, tusb_bus_event_t event
{
if (class_code == 0) // Control transfer
{
- usbh_devices[ pipe_hdl.dev_addr ].control.pipe_status = (event == BUS_EVENT_XFER_COMPLETE) ? PIPE_STATUS_COMPLETE : PIPE_STATUS_ERROR;
+ usbh_devices[ pipe_hdl.dev_addr ].control.pipe_status = (event == BUS_EVENT_XFER_COMPLETE) ? TUSB_INTERFACE_STATUS_COMPLETE : TUSB_INTERFACE_STATUS_ERROR;
osal_semaphore_post( usbh_devices[ pipe_hdl.dev_addr ].control.sem_hdl );
}else if (usbh_class_drivers[class_code].isr)
{
diff --git a/tinyusb/host/usbh.h b/tinyusb/host/usbh.h
index 1e1653e8c..684505471 100644
--- a/tinyusb/host/usbh.h
+++ b/tinyusb/host/usbh.h
@@ -63,12 +63,13 @@
//--------------------------------------------------------------------+
// MACRO CONSTANT TYPEDEF
//--------------------------------------------------------------------+
-typedef enum pipe_status_{
- PIPE_STATUS_READY = 0,
- PIPE_STATUS_BUSY,
- PIPE_STATUS_COMPLETE,
- PIPE_STATUS_ERROR
-} pipe_status_t;
+typedef enum tusb_interface_status_{
+ TUSB_INTERFACE_STATUS_READY = 0,
+ TUSB_INTERFACE_STATUS_BUSY,
+ TUSB_INTERFACE_STATUS_COMPLETE,
+ TUSB_INTERFACE_STATUS_ERROR,
+ TUSB_INTERFACE_STATUS_INVALID_PARA
+} tusb_interface_status_t;
typedef struct {
void (* const init) (void);
@@ -84,9 +85,9 @@ typedef struct {
// APPLICATION API
//--------------------------------------------------------------------+
tusb_error_t tusbh_configuration_set (uint8_t dev_addr, uint8_t configure_number) ATTR_WARN_UNUSED_RESULT;
-tusb_device_state_t tusbh_device_get_state (uint8_t const dev_addr) ATTR_WARN_UNUSED_RESULT ATTR_PURE;
-static inline bool tusbh_device_is_configured(uint8_t const dev_addr) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT ATTR_PURE;
-static inline bool tusbh_device_is_configured(uint8_t const dev_addr)
+tusb_device_state_t tusbh_device_get_state (uint8_t dev_addr) ATTR_WARN_UNUSED_RESULT ATTR_PURE;
+static inline bool tusbh_device_is_configured(uint8_t dev_addr) ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT ATTR_PURE;
+static inline bool tusbh_device_is_configured(uint8_t dev_addr)
{
return tusbh_device_get_state(dev_addr) == TUSB_DEVICE_STATE_CONFIGURED;
}