remove unused usbd dev state

This commit is contained in:
hathach 2018-07-13 15:08:38 +07:00
parent 584b6f716d
commit 5f8882a6d7

View File

@ -58,8 +58,20 @@
#define CFG_TUD_TASK_PRIO 0 #define CFG_TUD_TASK_PRIO 0
#endif #endif
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
// MACRO CONSTANT TYPEDEF // Device Data
//--------------------------------------------------------------------+
typedef struct {
uint8_t config_num;
uint8_t itf2class[16]; // determine interface number belongs to which class
}usbd_device_t;
CFG_TUSB_ATTR_USBRAM CFG_TUSB_MEM_ALIGN uint8_t _usbd_ctrl_buf[CFG_TUD_CTRL_BUFSIZE];
static usbd_device_t _usbd_dev;
//--------------------------------------------------------------------+
// Class Driver
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
typedef struct { typedef struct {
uint8_t class_code; uint8_t class_code;
@ -72,19 +84,6 @@ typedef struct {
void (* close ) (uint8_t); void (* close ) (uint8_t);
} usbd_class_driver_t; } usbd_class_driver_t;
typedef struct {
volatile uint8_t state;
uint8_t config_num;
uint8_t itf2class[16]; // determine interface number belongs to which class
}usbd_device_t;
//--------------------------------------------------------------------+
// Class & Device Driver
//--------------------------------------------------------------------+
CFG_TUSB_ATTR_USBRAM CFG_TUSB_MEM_ALIGN uint8_t _usbd_ctrl_buf[CFG_TUD_CTRL_BUFSIZE];
static usbd_device_t _usbd_dev;
static usbd_class_driver_t const usbd_class_drivers[] = static usbd_class_driver_t const usbd_class_drivers[] =
{ {
#if CFG_TUD_CDC #if CFG_TUD_CDC
@ -198,7 +197,7 @@ static uint16_t get_descriptor(uint8_t rhport, tusb_control_request_t const * co
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
bool tud_mounted(void) bool tud_mounted(void)
{ {
return _usbd_dev.state == TUSB_DEVICE_STATE_CONFIGURED; return _usbd_dev.config_num > 0;
} }
//--------------------------------------------------------------------+ //--------------------------------------------------------------------+
@ -227,6 +226,7 @@ tusb_error_t usbd_init (void)
osal_task_create(&_usbd_task_def); osal_task_create(&_usbd_task_def);
//------------- Core init -------------// //------------- Core init -------------//
varclr_(&_usbd_dev);
//------------- class init -------------// //------------- class init -------------//
for (uint8_t i = 0; i < USBD_CLASS_DRIVER_COUNT; i++) for (uint8_t i = 0; i < USBD_CLASS_DRIVER_COUNT; i++)
@ -337,7 +337,6 @@ static tusb_error_t proc_control_request_st(uint8_t rhport, tusb_control_request
else if ( TUSB_REQ_SET_ADDRESS == p_request->bRequest ) else if ( TUSB_REQ_SET_ADDRESS == p_request->bRequest )
{ {
dcd_set_address(rhport, (uint8_t) p_request->wValue); dcd_set_address(rhport, (uint8_t) p_request->wValue);
_usbd_dev.state = TUSB_DEVICE_STATE_ADDRESSED;
#if CFG_TUSB_MCU != OPT_MCU_NRF5X // nrf5x auto handle set address, we must not return status #if CFG_TUSB_MCU != OPT_MCU_NRF5X // nrf5x auto handle set address, we must not return status
dcd_control_status(rhport, p_request->bmRequestType_bit.direction); dcd_control_status(rhport, p_request->bmRequestType_bit.direction);
@ -403,7 +402,6 @@ static tusb_error_t proc_set_config_req(uint8_t rhport, uint8_t config_number)
{ {
dcd_set_config(rhport, config_number); dcd_set_config(rhport, config_number);
_usbd_dev.state = TUSB_DEVICE_STATE_CONFIGURED;
_usbd_dev.config_num = config_number; _usbd_dev.config_num = config_number;
//------------- parse configuration & open drivers -------------// //------------- parse configuration & open drivers -------------//
@ -439,9 +437,11 @@ static tusb_error_t proc_set_config_req(uint8_t rhport, uint8_t config_number)
} }
TU_ASSERT( drid < USBD_CLASS_DRIVER_COUNT, TUSB_ERROR_NOT_SUPPORTED_YET ); TU_ASSERT( drid < USBD_CLASS_DRIVER_COUNT, TUSB_ERROR_NOT_SUPPORTED_YET );
// Check duplicate interface number TODO support alternate setting // Check duplicate interface number -> alternate setting
TU_ASSERT( 0 == _usbd_dev.itf2class[p_desc_itf->bInterfaceNumber], TUSB_ERROR_FAILED); if( 0 == _usbd_dev.itf2class[p_desc_itf->bInterfaceNumber])
_usbd_dev.itf2class[p_desc_itf->bInterfaceNumber] = class_code; {
_usbd_dev.itf2class[p_desc_itf->bInterfaceNumber] = class_code;
}
uint16_t length=0; uint16_t length=0;
TU_ASSERT_ERR( usbd_class_drivers[drid].open( rhport, p_desc_itf, &length ) ); TU_ASSERT_ERR( usbd_class_drivers[drid].open( rhport, p_desc_itf, &length ) );
@ -524,16 +524,9 @@ void dcd_bus_event(uint8_t rhport, usbd_bus_event_type_t bus_event)
{ {
switch(bus_event) switch(bus_event)
{ {
case USBD_BUS_EVENT_RESET : case USBD_BUS_EVENT_RESET:
varclr_(&_usbd_dev);
osal_queue_flush(_usbd_q); osal_queue_flush(_usbd_q);
osal_semaphore_reset_isr(_usbd_ctrl_sem); osal_semaphore_reset_isr(_usbd_ctrl_sem);
// TODO move to unplugged
for (uint8_t i = 0; i < USBD_CLASS_DRIVER_COUNT; i++)
{
if ( usbd_class_drivers[i].close ) usbd_class_drivers[i].close( rhport );
}
break; break;
case USBD_BUS_EVENT_SOF: case USBD_BUS_EVENT_SOF:
@ -551,11 +544,16 @@ void dcd_bus_event(uint8_t rhport, usbd_bus_event_type_t bus_event)
case USBD_BUS_EVENT_UNPLUGGED: case USBD_BUS_EVENT_UNPLUGGED:
varclr_(&_usbd_dev); varclr_(&_usbd_dev);
for (uint8_t i = 0; i < USBD_CLASS_DRIVER_COUNT; i++)
{
if ( usbd_class_drivers[i].close ) usbd_class_drivers[i].close( rhport );
}
tud_umount_cb(); // invoke callback tud_umount_cb(); // invoke callback
break; break;
case USBD_BUS_EVENT_SUSPENDED: case USBD_BUS_EVENT_SUSPENDED:
_usbd_dev.state = TUSB_DEVICE_STATE_SUSPENDED; // TODO support suspended
break; break;
default: break; default: break;