mirror of
https://github.com/hathach/tinyusb.git
synced 2025-01-31 05:52:55 +08:00
rename pipe_status_t to tusb_interface_status_t
add tusbh_hid_keyboard_status & test code
This commit is contained in:
parent
0b08dc7724
commit
ac905a8d09
@ -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));
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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)\
|
||||
|
@ -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;
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user