Skip to content

Commit

Permalink
Separate USB state init from reset
Browse files Browse the repository at this point in the history
- On init the USB state is reset to it's defaults
- Prevents to call the reset driver callback during initialisation
  • Loading branch information
RockyZeroFour committed Apr 2, 2024
1 parent 191fab2 commit b14ab26
Showing 1 changed file with 14 additions and 7 deletions.
21 changes: 14 additions & 7 deletions src/device/usbd.c
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,7 @@ static osal_mutex_t _usbd_mutex;
//--------------------------------------------------------------------+
// Prototypes
//--------------------------------------------------------------------+
static void usbd_set_defaults(void);
static void configuration_reset(uint8_t rhport);
static void usbd_reset(uint8_t rhport);
static bool invoke_class_control(uint8_t rhport, usbd_class_driver_t const * driver, tusb_control_request_t const * request);
Expand Down Expand Up @@ -399,7 +400,7 @@ bool tud_init (uint8_t rhport)
TU_LOG2("USBD init\r\n");
TU_LOG2_INT(sizeof(usbd_device_t));

configuration_reset(rhport);
usbd_set_defaults();

#if CFG_TUSB_OS != OPT_OS_NONE
// Init device mutex
Expand Down Expand Up @@ -434,19 +435,25 @@ bool tud_init (uint8_t rhport)
return true;
}

static void usbd_set_defaults(void)
{
tu_varclr(&_usbd_dev);

// Set values to their defaults
memset(_usbd_dev.itf2drv, DRVID_INVALID, sizeof(_usbd_dev.itf2drv)); // invalid mapping
memset(_usbd_dev.ep2drv , DRVID_INVALID, sizeof(_usbd_dev.ep2drv )); // invalid mapping

_usbd_dev.speed = TUSB_SPEED_INVALID; // Unknown initial speed
}

static void configuration_reset(uint8_t rhport)
{
for ( uint8_t i = 0; i < TOTAL_DRIVER_COUNT; i++ )
{
get_driver(i)->reset(rhport);
}

tu_varclr(&_usbd_dev);

memset(_usbd_dev.itf2drv, DRVID_INVALID, sizeof(_usbd_dev.itf2drv)); // invalid mapping
memset(_usbd_dev.ep2drv , DRVID_INVALID, sizeof(_usbd_dev.ep2drv )); // invalid mapping

_usbd_dev.speed = TUSB_SPEED_INVALID;
usbd_set_defaults();
}

static void usbd_reset(uint8_t rhport)
Expand Down

0 comments on commit b14ab26

Please sign in to comment.