rename pipe_status_t to tusb_interface_status_t

add tusbh_hid_keyboard_status & test code
This commit is contained in:
hathach 2013-03-26 16:39:25 +07:00
parent 0b08dc7724
commit ac905a8d09
7 changed files with 42 additions and 17 deletions

View File

@ -97,7 +97,6 @@ void test_keyboard_init(void)
void test_keyboard_is_supported_fail_unplug(void)
{
hidh_init();
tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_UNPLUG);
TEST_ASSERT_FALSE( tusbh_hid_keyboard_is_supported(dev_addr) );
}
@ -134,6 +133,7 @@ void test_keyboard_open_ok(void)
tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED);
TEST_ASSERT_TRUE( tusbh_hid_keyboard_is_supported(dev_addr) );
TEST_ASSERT_EQUAL(TUSB_INTERFACE_STATUS_READY, p_hidh_kbd->status);
}
//--------------------------------------------------------------------+
@ -166,12 +166,24 @@ void test_keyboard_get_report_xfer_failed()
TEST_ASSERT_EQUAL(TUSB_ERROR_INVALID_PARA, tusbh_hid_keyboard_get_report(dev_addr, 0, &report));
}
void test_keyboard_get_report_xfer_failed_busy()
{
tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED);
p_hidh_kbd->status = TUSB_INTERFACE_STATUS_BUSY;
TEST_ASSERT_EQUAL(TUSB_ERROR_INTERFACE_IS_BUSY, tusbh_hid_keyboard_get_report(dev_addr, 0, &report));
}
void test_keyboard_get_ok()
{
tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED);
TEST_ASSERT_EQUAL(TUSB_INTERFACE_STATUS_READY, tusbh_hid_keyboard_status(dev_addr, 0));
tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED);
hcd_pipe_xfer_ExpectAndReturn(p_hidh_kbd->pipe_hdl, (uint8_t*) &report, p_hidh_kbd->report_size, true, TUSB_ERROR_NONE);
//------------- Code Under TEST -------------//
TEST_ASSERT_EQUAL(TUSB_ERROR_NONE, tusbh_hid_keyboard_get_report(dev_addr, 0, &report));
}
tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED);
TEST_ASSERT_EQUAL(TUSB_INTERFACE_STATUS_BUSY, tusbh_hid_keyboard_status(dev_addr, 0));
}

View File

@ -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;

View File

@ -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

View File

@ -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)\

View File

@ -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;

View File

@ -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)
{

View File

@ -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;
}