mirror of
https://github.com/hathach/tinyusb.git
synced 2025-03-25 23:38:06 +00: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)
|
void test_keyboard_is_supported_fail_unplug(void)
|
||||||
{
|
{
|
||||||
hidh_init();
|
|
||||||
tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_UNPLUG);
|
tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_UNPLUG);
|
||||||
TEST_ASSERT_FALSE( tusbh_hid_keyboard_is_supported(dev_addr) );
|
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);
|
tusbh_device_get_state_IgnoreAndReturn(TUSB_DEVICE_STATE_CONFIGURED);
|
||||||
TEST_ASSERT_TRUE( tusbh_hid_keyboard_is_supported(dev_addr) );
|
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));
|
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()
|
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);
|
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);
|
hcd_pipe_xfer_ExpectAndReturn(p_hidh_kbd->pipe_hdl, (uint8_t*) &report, p_hidh_kbd->report_size, true, TUSB_ERROR_NONE);
|
||||||
|
|
||||||
//------------- Code Under TEST -------------//
|
//------------- Code Under TEST -------------//
|
||||||
TEST_ASSERT_EQUAL(TUSB_ERROR_NONE, tusbh_hid_keyboard_get_report(dev_addr, 0, &report));
|
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);
|
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
|
// TODO abstract to use hidh service
|
||||||
ASSERT_STATUS( hcd_pipe_xfer(p_keyboard->pipe_hdl, (uint8_t*) report, p_keyboard->report_size, true) ) ;
|
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;
|
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)
|
void hidh_keyboard_close(uint8_t dev_addr)
|
||||||
{
|
{
|
||||||
pipe_handle_t pipe_hdl = keyboard_data[dev_addr-1].pipe_hdl;
|
pipe_handle_t pipe_hdl = keyboard_data[dev_addr-1].pipe_hdl;
|
||||||
|
@ -65,11 +65,12 @@
|
|||||||
typedef struct {
|
typedef struct {
|
||||||
pipe_handle_t pipe_hdl;
|
pipe_handle_t pipe_hdl;
|
||||||
uint16_t report_size;
|
uint16_t report_size;
|
||||||
|
volatile tusb_interface_status_t status;
|
||||||
}hidh_keyboard_info_t;
|
}hidh_keyboard_info_t;
|
||||||
|
|
||||||
bool tusbh_hid_keyboard_is_supported(uint8_t dev_addr) ATTR_PURE ATTR_WARN_UNUSED_RESULT;
|
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;
|
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
|
// MOUSE Public API
|
||||||
|
@ -63,6 +63,7 @@
|
|||||||
ENTRY(TUSB_ERROR_NONE)\
|
ENTRY(TUSB_ERROR_NONE)\
|
||||||
ENTRY(TUSB_ERROR_INVALID_PARA)\
|
ENTRY(TUSB_ERROR_INVALID_PARA)\
|
||||||
ENTRY(TUSB_ERROR_DEVICE_NOT_READY)\
|
ENTRY(TUSB_ERROR_DEVICE_NOT_READY)\
|
||||||
|
ENTRY(TUSB_ERROR_INTERFACE_IS_BUSY)\
|
||||||
ENTRY(TUSB_ERROR_HCD_FAILED)\
|
ENTRY(TUSB_ERROR_HCD_FAILED)\
|
||||||
ENTRY(TUSB_ERROR_USBH_MOUNT_DEVICE_NOT_RESPOND)\
|
ENTRY(TUSB_ERROR_USBH_MOUNT_DEVICE_NOT_RESPOND)\
|
||||||
ENTRY(TUSB_ERROR_USBH_MOUNT_CONFIG_DESC_TOO_LONG)\
|
ENTRY(TUSB_ERROR_USBH_MOUNT_CONFIG_DESC_TOO_LONG)\
|
||||||
|
@ -64,6 +64,7 @@ typedef struct {
|
|||||||
uint8_t dev_addr;
|
uint8_t dev_addr;
|
||||||
uint8_t xfer_type;
|
uint8_t xfer_type;
|
||||||
uint8_t index;
|
uint8_t index;
|
||||||
|
uint8_t reserved;
|
||||||
} pipe_handle_t;
|
} pipe_handle_t;
|
||||||
|
|
||||||
static inline bool pipehandle_is_valid(pipe_handle_t pipe_hdl) ATTR_CONST ATTR_ALWAYS_INLINE ATTR_WARN_UNUSED_RESULT;
|
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
|
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;
|
usbh_devices[dev_addr].control.request = *p_request;
|
||||||
(void) hcd_pipe_control_xfer(dev_addr, &usbh_devices[dev_addr].control.request, data);
|
(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
|
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
|
// 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) );
|
tusbh_device_mount_failed_cb(TUSB_ERROR_USBH_MOUNT_DEVICE_NOT_RESPOND, NULL) );
|
||||||
|
|
||||||
OSAL_SUBTASK_END
|
OSAL_SUBTASK_END
|
||||||
@ -178,9 +178,9 @@ static inline tusb_error_t usbh_pipe_control_close(uint8_t dev_addr)
|
|||||||
return TUSB_ERROR_NONE;
|
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
|
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 );
|
osal_semaphore_post( usbh_devices[ pipe_hdl.dev_addr ].control.sem_hdl );
|
||||||
}else if (usbh_class_drivers[class_code].isr)
|
}else if (usbh_class_drivers[class_code].isr)
|
||||||
{
|
{
|
||||||
|
@ -63,12 +63,13 @@
|
|||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// MACRO CONSTANT TYPEDEF
|
// MACRO CONSTANT TYPEDEF
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
typedef enum pipe_status_{
|
typedef enum tusb_interface_status_{
|
||||||
PIPE_STATUS_READY = 0,
|
TUSB_INTERFACE_STATUS_READY = 0,
|
||||||
PIPE_STATUS_BUSY,
|
TUSB_INTERFACE_STATUS_BUSY,
|
||||||
PIPE_STATUS_COMPLETE,
|
TUSB_INTERFACE_STATUS_COMPLETE,
|
||||||
PIPE_STATUS_ERROR
|
TUSB_INTERFACE_STATUS_ERROR,
|
||||||
} pipe_status_t;
|
TUSB_INTERFACE_STATUS_INVALID_PARA
|
||||||
|
} tusb_interface_status_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
void (* const init) (void);
|
void (* const init) (void);
|
||||||
@ -84,9 +85,9 @@ typedef struct {
|
|||||||
// APPLICATION API
|
// APPLICATION API
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
tusb_error_t tusbh_configuration_set (uint8_t dev_addr, uint8_t configure_number) ATTR_WARN_UNUSED_RESULT;
|
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;
|
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 const dev_addr) ATTR_ALWAYS_INLINE 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 const dev_addr)
|
static inline bool tusbh_device_is_configured(uint8_t dev_addr)
|
||||||
{
|
{
|
||||||
return tusbh_device_get_state(dev_addr) == TUSB_DEVICE_STATE_CONFIGURED;
|
return tusbh_device_get_state(dev_addr) == TUSB_DEVICE_STATE_CONFIGURED;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user