/** * @brief DFU_Req_DETACH * Handles the DFU DETACH request. * @param pdev: device instance * @param req: pointer to the request structure. * @retval None. */ static void DFU_Req_DETACH(void *pdev, USB_SETUP_REQ *req) { if (DeviceState == STATE_dfuIDLE || DeviceState == STATE_dfuDNLOAD_SYNC || DeviceState == STATE_dfuDNLOAD_IDLE || DeviceState == STATE_dfuMANIFEST_SYNC || DeviceState == STATE_dfuUPLOAD_IDLE ) { /* Update the state machine */ DeviceState = STATE_dfuIDLE; DeviceStatus[0] = STATUS_OK; DeviceStatus[1] = 0; DeviceStatus[2] = 0; DeviceStatus[3] = 0; /*bwPollTimeout=0ms*/ DeviceStatus[4] = DeviceState; DeviceStatus[5] = 0; /*iString*/ wBlockNum = 0; wlength = 0; } /* Check the detach capability in the DFU functional descriptor */ if ((usbd_dfu_CfgDesc[12 + (9 * USBD_ITF_MAX_NUM)]) & DFU_DETACH_MASK) { /* Perform an Attach-Detach operation on USB bus */ DCD_DevDisconnect (pdev); DCD_DevConnect (pdev); } else { /* Wait for the period of time specified in Detach request */ USB_BSP_mDelay (req->wValue); } }
/** * @brief Delay * This function provides delay time in milli sec * @param msec : Value of delay required in milli sec * @retval None */ static void Delay (uint32_t msec) { USB_BSP_mDelay(msec); }