/** * @brief USBD_CDC_Init * DeInitialize the CDC layer * @param pdev: device instance * @param cfgidx: Configuration index * @retval status */ static uint8_t USBD_CDC_DeInit (USBD_HandleTypeDef *pdev, uint8_t cfgidx) { uint8_t ret = 0; /* Open EP IN */ USBD_LL_CloseEP(pdev, CDC_IN_EP); /* Open EP OUT */ USBD_LL_CloseEP(pdev, CDC_OUT_EP); /* Open Command IN EP */ USBD_LL_CloseEP(pdev, CDC_CMD_EP); /* DeInit physical Interface components */ if(pdev->pClassData != NULL) { ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->DeInit(); USBD_free(pdev->pClassData); pdev->pClassData = NULL; } return ret; }
static uint8_t USBD_CDC_DeInit (USBD_HandleTypeDef *pdev, uint8_t cfgidx) { USBD_CDC_HandleTypeDef *hcdc = context; unsigned index; for (index = 0; index < NUM_OF_CDC_UARTS; index++,hcdc++) { /* Close EP IN */ USBD_LL_CloseEP(pdev, parameters[index].data_in_ep); /* Close EP OUT */ USBD_LL_CloseEP(pdev, parameters[index].data_out_ep); /* Close Command IN EP */ USBD_LL_CloseEP(pdev, parameters[index].command_ep); /* DeInitialize the UART peripheral */ if (hcdc->UartHandle.Instance) if(HAL_UART_DeInit(&hcdc->UartHandle) != HAL_OK) { /* Initialization Error */ Error_Handler(); } } return USBD_OK; }
/** * @brief USBD_CDC_HID_Init * DeInitialize the CDC layer * @param pdev: device instance * @param cfgidx: Configuration index * @retval status */ static uint8_t USBD_CDC_HID_DeInit (USBD_HandleTypeDef *pdev, uint8_t cfgidx) { USBD_CDC_HID_HandleTypeDef *handle = (USBD_CDC_HID_HandleTypeDef*) pdev->pClassData; NOT_USED(cfgidx); uint8_t ret = 0; /* Open EP IN */ USBD_LL_CloseEP(pdev, CDC_IN_EP); /* Open EP OUT */ USBD_LL_CloseEP(pdev, CDC_OUT_EP); /* Open Command IN EP */ USBD_LL_CloseEP(pdev, CDC_CMD_EP); #ifdef USE_USB_HID USBD_LL_CloseEP(pdev, HID_IN_EP); #endif /* DeInit physical Interface components */ if(pdev->pClassData != NULL) { //USBD_free(pdev->pClassData); pdev->pClassData = NULL; } return ret; }
/** * @brief USBD_RAW_Init * DeInitialize the TEMPLATE layer * @param pdev: device instance * @param cfgidx: Configuration index * @retval status */ static uint8_t USBD_RAW_DeInit (USBD_HandleTypeDef *pdev, uint8_t cfgidx) { /* Close WinUSBComm EPs */ USBD_LL_CloseEP(pdev, RAW_EPOUT_ADDR); USBD_LL_CloseEP(pdev, RAW_EPIN_ADDR); /* Free WinUSBComm Class Resources */ pdev->pClassData = NULL; return USBD_OK; }
/** * @brief USBD_CUSTOM_HID_Init * DeInitialize the CUSTOM_HID layer * @param pdev: device instance * @param cfgidx: Configuration index * @retval status */ static uint8_t USBD_CUSTOM_HID_DeInit (USBD_HandleTypeDef *pdev, uint8_t cfgidx) { /* Close CUSTOM_HID EP IN */ USBD_LL_CloseEP(pdev, CUSTOM_HID_EPIN_ADDR); /* Close CUSTOM_HID EP OUT */ USBD_LL_CloseEP(pdev, CUSTOM_HID_EPOUT_ADDR); /* FRee allocated memory */ if(pdev->pClassData != NULL) { ((USBD_CUSTOM_HID_ItfTypeDef *)pdev->pUserData)->DeInit(); USBD_free(pdev->pClassData); pdev->pClassData = NULL; } return USBD_OK; }
/** * @brief USBD_MSC_DeInit * DeInitilaize the mass storage configuration * @param pdev: device instance * @param cfgidx: configuration index * @retval status */ uint8_t USBD_MSC_DeInit (USBD_HandleTypeDef *pdev, uint8_t cfgidx) { /* Close MSC EPs */ USBD_LL_CloseEP(pdev, MSC_EPOUT_ADDR); /* Open EP IN */ USBD_LL_CloseEP(pdev, MSC_EPIN_ADDR); /* De-Init the BOT layer */ MSC_BOT_DeInit(pdev); /* Free MSC Class Resources */ if(pdev->pClassData != NULL) { USBD_free(pdev->pClassData); pdev->pClassData = NULL; } return 0; }
/** * @brief USBD_HID_Init * DeInitialize the HID layer * @param pdev: device instance * @param cfgidx: Configuration index * @retval status */ static uint8_t USBD_HID_DeInit (USBD_HandleTypeDef *pdev, uint8_t cfgidx) { /* Close HID EPs */ USBD_LL_CloseEP(pdev, HID_EPIN_SIZE); /* FRee allocated memory */ if(pdev->pClassData != NULL) { USBD_free(pdev->pClassData); pdev->pClassData = NULL; } return USBD_OK; }
/** * @brief USBD_AUDIO_Init * DeInitialize the AUDIO layer * @param pdev: device instance * @param cfgidx: Configuration index * @retval status */ static uint8_t USBD_AUDIO_DeInit (USBD_HandleTypeDef *pdev, uint8_t cfgidx) { /* Open EP OUT */ USBD_LL_CloseEP(pdev, AUDIO_OUT_EP); /* DeInit physical Interface components */ if(pdev->pClassData != NULL) { ((USBD_AUDIO_ItfTypeDef *)pdev->pUserData)->DeInit(0); USBD_free(pdev->pClassData); pdev->pClassData = NULL; } return USBD_OK; }
/** * @brief USBD_MSC_Setup * Handle the MSC specific requests * @param pdev: device instance * @param req: USB request * @retval status */ uint8_t USBD_MSC_Setup (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) { USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef*) pdev->pClassData; switch (req->bmRequest & USB_REQ_TYPE_MASK) { /* Class request */ case USB_REQ_TYPE_CLASS : switch (req->bRequest) { case BOT_GET_MAX_LUN : if((req->wValue == 0) && (req->wLength == 1) && ((req->bmRequest & 0x80) == 0x80)) { hmsc->max_lun = ((USBD_StorageTypeDef *)pdev->pUserData)->GetMaxLun(); USBD_CtlSendData (pdev, (uint8_t *)&hmsc->max_lun, 1); } else { USBD_CtlError(pdev , req); return USBD_FAIL; } break; case BOT_RESET : if((req->wValue == 0) && (req->wLength == 0) && ((req->bmRequest & 0x80) != 0x80)) { MSC_BOT_Reset(pdev); } else { USBD_CtlError(pdev , req); return USBD_FAIL; } break; default: USBD_CtlError(pdev , req); return USBD_FAIL; } break; /* Interface & Endpoint request */ case USB_REQ_TYPE_STANDARD: switch (req->bRequest) { case USB_REQ_GET_INTERFACE : USBD_CtlSendData (pdev, (uint8_t *)&hmsc->interface, 1); break; case USB_REQ_SET_INTERFACE : hmsc->interface = (uint8_t)(req->wValue); break; case USB_REQ_CLEAR_FEATURE: /* Flush the FIFO and Clear the stall status */ USBD_LL_FlushEP(pdev, (uint8_t)req->wIndex); /* Reactivate the EP */ USBD_LL_CloseEP (pdev , (uint8_t)req->wIndex); if((((uint8_t)req->wIndex) & 0x80) == 0x80) { if(pdev->dev_speed == USBD_SPEED_HIGH ) { /* Open EP IN */ USBD_LL_OpenEP(pdev, MSC_EPIN_ADDR, USBD_EP_TYPE_BULK, MSC_MAX_HS_PACKET); } else { /* Open EP IN */ USBD_LL_OpenEP(pdev, MSC_EPIN_ADDR, USBD_EP_TYPE_BULK, MSC_MAX_FS_PACKET); } } else { if(pdev->dev_speed == USBD_SPEED_HIGH ) { /* Open EP IN */ USBD_LL_OpenEP(pdev, MSC_EPOUT_ADDR, USBD_EP_TYPE_BULK, MSC_MAX_HS_PACKET); } else { /* Open EP IN */ USBD_LL_OpenEP(pdev, MSC_EPOUT_ADDR, USBD_EP_TYPE_BULK, MSC_MAX_FS_PACKET); } } /* Handle BOT error */ MSC_BOT_CplClrFeature(pdev, (uint8_t)req->wIndex); break; } break; default: break; } return 0; }