implement tuh_init()
change usbh driver init() return type from void to bool
This commit is contained in:
@@ -621,12 +621,11 @@ bool tuh_cdc_set_line_coding(uint8_t idx, cdc_line_coding_t const* line_coding,
|
|||||||
// CLASS-USBH API
|
// CLASS-USBH API
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
|
||||||
void cdch_init(void) {
|
bool cdch_init(void) {
|
||||||
|
TU_LOG_DRV("sizeof(cdch_interface_t) = %u\r\n", sizeof(cdch_interface_t));
|
||||||
tu_memclr(cdch_data, sizeof(cdch_data));
|
tu_memclr(cdch_data, sizeof(cdch_data));
|
||||||
|
|
||||||
for (size_t i = 0; i < CFG_TUH_CDC; i++) {
|
for (size_t i = 0; i < CFG_TUH_CDC; i++) {
|
||||||
cdch_interface_t* p_cdc = &cdch_data[i];
|
cdch_interface_t* p_cdc = &cdch_data[i];
|
||||||
|
|
||||||
tu_edpt_stream_init(&p_cdc->stream.tx, true, true, false,
|
tu_edpt_stream_init(&p_cdc->stream.tx, true, true, false,
|
||||||
p_cdc->stream.tx_ff_buf, CFG_TUH_CDC_TX_BUFSIZE,
|
p_cdc->stream.tx_ff_buf, CFG_TUH_CDC_TX_BUFSIZE,
|
||||||
p_cdc->stream.tx_ep_buf, CFG_TUH_CDC_TX_EPSIZE);
|
p_cdc->stream.tx_ep_buf, CFG_TUH_CDC_TX_EPSIZE);
|
||||||
@@ -635,9 +634,16 @@ void cdch_init(void) {
|
|||||||
p_cdc->stream.rx_ff_buf, CFG_TUH_CDC_RX_BUFSIZE,
|
p_cdc->stream.rx_ff_buf, CFG_TUH_CDC_RX_BUFSIZE,
|
||||||
p_cdc->stream.rx_ep_buf, CFG_TUH_CDC_RX_EPSIZE);
|
p_cdc->stream.rx_ep_buf, CFG_TUH_CDC_RX_EPSIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool cdch_deinit(void) {
|
bool cdch_deinit(void) {
|
||||||
|
for (size_t i = 0; i < CFG_TUH_CDC; i++) {
|
||||||
|
cdch_interface_t* p_cdc = &cdch_data[i];
|
||||||
|
tu_edpt_stream_deinit(&p_cdc->stream.tx);
|
||||||
|
tu_edpt_stream_deinit(&p_cdc->stream.rx);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -192,7 +192,7 @@ TU_ATTR_WEAK extern void tuh_cdc_tx_complete_cb(uint8_t idx);
|
|||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// Internal Class Driver API
|
// Internal Class Driver API
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
void cdch_init (void);
|
bool cdch_init (void);
|
||||||
bool cdch_deinit (void);
|
bool cdch_deinit (void);
|
||||||
bool cdch_open (uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const *itf_desc, uint16_t max_len);
|
bool cdch_open (uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const *itf_desc, uint16_t max_len);
|
||||||
bool cdch_set_config (uint8_t dev_addr, uint8_t itf_num);
|
bool cdch_set_config (uint8_t dev_addr, uint8_t itf_num);
|
||||||
|
|||||||
@@ -372,8 +372,10 @@ bool tuh_hid_send_report(uint8_t daddr, uint8_t idx, uint8_t report_id, const vo
|
|||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// USBH API
|
// USBH API
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
void hidh_init(void) {
|
bool hidh_init(void) {
|
||||||
|
TU_LOG_DRV("sizeof(hidh_interface_t) = %u\r\n", sizeof(hidh_interface_t));
|
||||||
tu_memclr(_hidh_itf, sizeof(_hidh_itf));
|
tu_memclr(_hidh_itf, sizeof(_hidh_itf));
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hidh_deinit(void) {
|
bool hidh_deinit(void) {
|
||||||
|
|||||||
@@ -163,7 +163,7 @@ TU_ATTR_WEAK void tuh_hid_set_protocol_complete_cb(uint8_t dev_addr, uint8_t idx
|
|||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// Internal Class Driver API
|
// Internal Class Driver API
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
void hidh_init(void);
|
bool hidh_init(void);
|
||||||
bool hidh_deinit(void);
|
bool hidh_deinit(void);
|
||||||
bool hidh_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const* desc_itf, uint16_t max_len);
|
bool hidh_open(uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const* desc_itf, uint16_t max_len);
|
||||||
bool hidh_set_config(uint8_t dev_addr, uint8_t itf_num);
|
bool hidh_set_config(uint8_t dev_addr, uint8_t itf_num);
|
||||||
|
|||||||
@@ -284,15 +284,16 @@ bool tuh_msc_reset(uint8_t dev_addr) {
|
|||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// CLASS-USBH API
|
// CLASS-USBH API
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
void msch_init(void) {
|
bool msch_init(void) {
|
||||||
|
TU_LOG_DRV("sizeof(msch_interface_t) = %u\r\n", sizeof(msch_interface_t));
|
||||||
tu_memclr(_msch_itf, sizeof(_msch_itf));
|
tu_memclr(_msch_itf, sizeof(_msch_itf));
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool msch_deinit(void) {
|
bool msch_deinit(void) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void msch_close(uint8_t dev_addr) {
|
void msch_close(uint8_t dev_addr) {
|
||||||
TU_VERIFY(dev_addr <= CFG_TUH_DEVICE_MAX,);
|
TU_VERIFY(dev_addr <= CFG_TUH_DEVICE_MAX,);
|
||||||
msch_interface_t* p_msc = get_itf(dev_addr);
|
msch_interface_t* p_msc = get_itf(dev_addr);
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ TU_ATTR_WEAK void tuh_msc_umount_cb(uint8_t dev_addr);
|
|||||||
// Internal Class Driver API
|
// Internal Class Driver API
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
|
|
||||||
void msch_init (void);
|
bool msch_init (void);
|
||||||
bool msch_deinit (void);
|
bool msch_deinit (void);
|
||||||
bool msch_open (uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const *desc_itf, uint16_t max_len);
|
bool msch_open (uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const *desc_itf, uint16_t max_len);
|
||||||
bool msch_set_config (uint8_t dev_addr, uint8_t itf_num);
|
bool msch_set_config (uint8_t dev_addr, uint8_t itf_num);
|
||||||
|
|||||||
@@ -182,8 +182,9 @@ bool hub_port_get_status(uint8_t hub_addr, uint8_t hub_port, void* resp,
|
|||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// CLASS-USBH API (don't require to verify parameters)
|
// CLASS-USBH API (don't require to verify parameters)
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
void hub_init(void) {
|
bool hub_init(void) {
|
||||||
tu_memclr(hub_data, sizeof(hub_data));
|
tu_memclr(hub_data, sizeof(hub_data));
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool hub_deinit(void) {
|
bool hub_deinit(void) {
|
||||||
|
|||||||
@@ -187,16 +187,14 @@ bool hub_port_get_status (uint8_t hub_addr, uint8_t hub_port, void* resp,
|
|||||||
bool hub_edpt_status_xfer(uint8_t dev_addr);
|
bool hub_edpt_status_xfer(uint8_t dev_addr);
|
||||||
|
|
||||||
// Reset a port
|
// Reset a port
|
||||||
static inline bool hub_port_reset(uint8_t hub_addr, uint8_t hub_port,
|
TU_ATTR_ALWAYS_INLINE static inline
|
||||||
tuh_xfer_cb_t complete_cb, uintptr_t user_data)
|
bool hub_port_reset(uint8_t hub_addr, uint8_t hub_port, tuh_xfer_cb_t complete_cb, uintptr_t user_data) {
|
||||||
{
|
|
||||||
return hub_port_set_feature(hub_addr, hub_port, HUB_FEATURE_PORT_RESET, complete_cb, user_data);
|
return hub_port_set_feature(hub_addr, hub_port, HUB_FEATURE_PORT_RESET, complete_cb, user_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Clear Reset Change
|
// Clear Reset Change
|
||||||
static inline bool hub_port_clear_reset_change(uint8_t hub_addr, uint8_t hub_port,
|
TU_ATTR_ALWAYS_INLINE static inline
|
||||||
tuh_xfer_cb_t complete_cb, uintptr_t user_data)
|
bool hub_port_clear_reset_change(uint8_t hub_addr, uint8_t hub_port, tuh_xfer_cb_t complete_cb, uintptr_t user_data) {
|
||||||
{
|
|
||||||
return hub_port_clear_feature(hub_addr, hub_port, HUB_FEATURE_PORT_RESET_CHANGE, complete_cb, user_data);
|
return hub_port_clear_feature(hub_addr, hub_port, HUB_FEATURE_PORT_RESET_CHANGE, complete_cb, user_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -204,7 +202,7 @@ static inline bool hub_port_clear_reset_change(uint8_t hub_addr, uint8_t hub_por
|
|||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
// Internal Class Driver API
|
// Internal Class Driver API
|
||||||
//--------------------------------------------------------------------+
|
//--------------------------------------------------------------------+
|
||||||
void hub_init (void);
|
bool hub_init (void);
|
||||||
bool hub_deinit (void);
|
bool hub_deinit (void);
|
||||||
bool hub_open (uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const *itf_desc, uint16_t max_len);
|
bool hub_open (uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const *itf_desc, uint16_t max_len);
|
||||||
bool hub_set_config (uint8_t dev_addr, uint8_t itf_num);
|
bool hub_set_config (uint8_t dev_addr, uint8_t itf_num);
|
||||||
|
|||||||
@@ -351,9 +351,12 @@ bool tuh_inited(void) {
|
|||||||
|
|
||||||
bool tuh_init(uint8_t rhport) {
|
bool tuh_init(uint8_t rhport) {
|
||||||
// skip if already initialized
|
// skip if already initialized
|
||||||
if ( tuh_inited() ) return true;
|
if (tuh_rhport_is_active(rhport)) return true;
|
||||||
|
|
||||||
TU_LOG_USBH("USBH init on controller %u\r\n", rhport);
|
TU_LOG_USBH("USBH init on controller %u\r\n", rhport);
|
||||||
|
|
||||||
|
// Init host stack if not already
|
||||||
|
if (!tuh_inited()) {
|
||||||
TU_LOG_INT_USBH(sizeof(usbh_device_t));
|
TU_LOG_INT_USBH(sizeof(usbh_device_t));
|
||||||
TU_LOG_INT_USBH(sizeof(hcd_event_t));
|
TU_LOG_INT_USBH(sizeof(hcd_event_t));
|
||||||
TU_LOG_INT_USBH(sizeof(_ctrl_xfer));
|
TU_LOG_INT_USBH(sizeof(_ctrl_xfer));
|
||||||
@@ -362,7 +365,7 @@ bool tuh_init(uint8_t rhport) {
|
|||||||
TU_LOG_INT_USBH(sizeof(tu_edpt_stream_t));
|
TU_LOG_INT_USBH(sizeof(tu_edpt_stream_t));
|
||||||
|
|
||||||
// Event queue
|
// Event queue
|
||||||
_usbh_q = osal_queue_create( &_usbh_qdef );
|
_usbh_q = osal_queue_create(&_usbh_qdef);
|
||||||
TU_ASSERT(_usbh_q != NULL);
|
TU_ASSERT(_usbh_q != NULL);
|
||||||
|
|
||||||
#if OSAL_MUTEX_REQUIRED
|
#if OSAL_MUTEX_REQUIRED
|
||||||
@@ -372,7 +375,7 @@ bool tuh_init(uint8_t rhport) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Get application driver if available
|
// Get application driver if available
|
||||||
if ( usbh_app_driver_get_cb ) {
|
if (usbh_app_driver_get_cb) {
|
||||||
_app_driver = usbh_app_driver_get_cb(&_app_driver_count);
|
_app_driver = usbh_app_driver_get_cb(&_app_driver_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -381,7 +384,7 @@ bool tuh_init(uint8_t rhport) {
|
|||||||
tu_memclr(_usbh_devices, sizeof(_usbh_devices));
|
tu_memclr(_usbh_devices, sizeof(_usbh_devices));
|
||||||
tu_memclr(&_ctrl_xfer, sizeof(_ctrl_xfer));
|
tu_memclr(&_ctrl_xfer, sizeof(_ctrl_xfer));
|
||||||
|
|
||||||
for(uint8_t i=0; i<TOTAL_DEVICES; i++) {
|
for (uint8_t i = 0; i < TOTAL_DEVICES; i++) {
|
||||||
clear_device(&_usbh_devices[i]);
|
clear_device(&_usbh_devices[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -393,9 +396,10 @@ bool tuh_init(uint8_t rhport) {
|
|||||||
driver->init();
|
driver->init();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Init host controller
|
||||||
_usbh_controller = rhport;;
|
_usbh_controller = rhport;;
|
||||||
|
|
||||||
TU_ASSERT(hcd_init(rhport));
|
TU_ASSERT(hcd_init(rhport));
|
||||||
hcd_int_enable(rhport);
|
hcd_int_enable(rhport);
|
||||||
|
|
||||||
@@ -405,14 +409,31 @@ bool tuh_init(uint8_t rhport) {
|
|||||||
bool tuh_deinit(uint8_t rhport) {
|
bool tuh_deinit(uint8_t rhport) {
|
||||||
if (!tuh_rhport_is_active(rhport)) return true;
|
if (!tuh_rhport_is_active(rhport)) return true;
|
||||||
|
|
||||||
|
// deinit host controller
|
||||||
hcd_int_disable(rhport);
|
hcd_int_disable(rhport);
|
||||||
hcd_deinit(rhport);
|
hcd_deinit(rhport);
|
||||||
|
|
||||||
_usbh_controller = TUSB_INDEX_INVALID_8;
|
_usbh_controller = TUSB_INDEX_INVALID_8;
|
||||||
|
|
||||||
// no other controller is active, deinit the stack
|
// deinit host stack if no controller is active
|
||||||
if (!tuh_inited()) {
|
if (!tuh_inited()) {
|
||||||
|
// Class drivers
|
||||||
|
for (uint8_t drv_id = 0; drv_id < TOTAL_DRIVER_COUNT; drv_id++) {
|
||||||
|
usbh_class_driver_t const* driver = get_driver(drv_id);
|
||||||
|
if (driver) {
|
||||||
|
TU_LOG_USBH("%s deinit\r\n", driver->name);
|
||||||
|
driver->deinit();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
osal_queue_delete(_usbh_q);
|
||||||
|
_usbh_q = NULL;
|
||||||
|
|
||||||
|
#if OSAL_MUTEX_REQUIRED
|
||||||
|
// TODO make sure there is no task waiting on this mutex
|
||||||
|
osal_mutex_delete(_usbh_mutex);
|
||||||
|
_usbh_mutex = NULL;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ enum {
|
|||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char const* name;
|
char const* name;
|
||||||
void (* const init )(void);
|
bool (* const init )(void);
|
||||||
bool (* const deinit )(void);
|
bool (* const deinit )(void);
|
||||||
bool (* const open )(uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const * itf_desc, uint16_t max_len);
|
bool (* const open )(uint8_t rhport, uint8_t dev_addr, tusb_desc_interface_t const * itf_desc, uint16_t max_len);
|
||||||
bool (* const set_config )(uint8_t dev_addr, uint8_t itf_num);
|
bool (* const set_config )(uint8_t dev_addr, uint8_t itf_num);
|
||||||
|
|||||||
Reference in New Issue
Block a user