/** * @brief usbd_cdc_Init * DeInitialize the CDC layer * @param pdev: device instance * @param cfgidx: Configuration index * @retval status */ static uint8_t usbd_cdc_msc_DeInit (void *pdev, uint8_t cfgidx) { /* Open EP IN */ DCD_EP_Close(pdev, CDC_IN_EP); /* Open EP OUT */ DCD_EP_Close(pdev, CDC_OUT_EP); /* Open Command IN EP */ DCD_EP_Close(pdev, CDC_CMD_EP); /* Restore default state of the Interface physical components */ APP_FOPS.pIf_DeInit(); /* Close MSC EPs */ DCD_EP_Close (pdev , MSC_IN_EP); DCD_EP_Close (pdev , MSC_OUT_EP); /* Un Init the BOT layer */ MSC_BOT_DeInit(pdev); return USBD_OK; }
uint8_t USBD_HID_DeInit (void *pdev, uint8_t cfgidx) { DCD_EP_Close (pdev , HID_IN_EP); DCD_EP_Close (pdev , HID_OUT_EP); return USBD_OK; }
static uint8_t usbd_rndis_deinit(void *pdev, uint8_t cfgidx) { DCD_EP_Close(pdev, RNDIS_NOTIFICATION_IN_EP); DCD_EP_Close(pdev, RNDIS_DATA_IN_EP); DCD_EP_Close(pdev, RNDIS_DATA_OUT_EP); return USBD_OK; }
/** * @brief usbd_midi_Init * DeInitializes the AUDIO layer. * @param pdev: device instance * @param cfgidx: Configuration index * @retval status */ static uint8_t usbd_midi_DeInit (void *pdev, uint8_t cfgidx) { UNUSED(cfgidx); DCD_EP_Close (pdev , MIDI_OUT_EP); DCD_EP_Close (pdev , MIDI_IN_EP); //No Hardware to de-init return USBD_OK; }
/** * @brief USBD_HID_Init * DeInitialize the HID layer * @param pdev: device instance * @param cfgidx: Configuration index * @retval status */ static uint8_t USBD_HID_DeInit (void *pdev, uint8_t cfgidx) { /* Close HID EPs */ DCD_EP_Close (pdev , HID_IN_EP); DCD_EP_Close (pdev , HID_OUT_EP); return USBD_OK; }
/** * @brief usbd_cdc_Init * DeInitialize the CDC layer * @param pdev: device instance * @param cfgidx: Configuration index * @retval status */ static uint8_t usbd_cf_DeInit (void *pdev, uint8_t cfgidx) { /* Open EP IN */ DCD_EP_Close(pdev, IN_EP); /* Open EP OUT */ DCD_EP_Close(pdev, OUT_EP); 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 (void *pdev, uint8_t cfgidx) { /* Close MSC EPs */ DCD_EP_Close (pdev , MSC_IN_EP); DCD_EP_Close (pdev , MSC_OUT_EP); /* Un Init the BOT layer */ MSC_BOT_DeInit(pdev); return USBD_OK; }
uint8_t USBD_Dev_DS3_ClassDeInit (void *pcore , uint8_t cfgidx) { DCD_EP_Close (pcore , 0x02); DCD_EP_Close (pcore , 0x81); #ifdef ENABLE_DS3_ADDITIONAL_FEATURES DCD_EP_Close (pcore , 0x83); #endif USBD_Host_Is_PS3 = 0; USBD_Dev_DS3_IsActive = 0; dbg_printf(DBGMODE_TRACE, "USBD_Dev_DS3_ClassDeInit\r\n"); return USBD_OK; }
/** * @brief USBD_CDC_ClassDeInit * DeInitialize the CDC layer * @param pdev: device instance * @param cfgidx: Configuration index * @retval status */ static uint8_t USBD_CDC_ClassDeInit (void *pdev, uint8_t cfgidx) { DCD_EP_Close(pdev, USBD_Dev_CDC_D2H_EP); DCD_EP_Close(pdev, USBD_Dev_CDC_H2D_EP); DCD_EP_Close(pdev, USBD_Dev_CDC_CMD_EP); free(USBD_CDC_H2D_Buff); USBD_CDC_H2D_Buff = 0; free(USBD_CDC_D2H_Buff); USBD_CDC_D2H_Buff = 0; free(USBD_CDC_CMD_Buff); USBD_CDC_CMD_Buff = 0; free(USBD_CDC_H2D_FIFO.start); USBD_CDC_H2D_FIFO.start = 0; free(USBD_CDC_D2H_FIFO.start); USBD_CDC_D2H_FIFO.start = 0; USBD_CDC_IsReady = 0; return USBD_OK; }
/** * @brief usbd_cdc_Init * DeInitialize the CDC layer * @param pdev: device instance * @param cfgidx: Configuration index * @retval status */ uint8_t usbd_cdc_DeInit (void *pdev, uint8_t cfgidx) { /* Open EP IN */ DCD_EP_Close(pdev, CDC_IN_EP); /* Open EP OUT */ DCD_EP_Close(pdev, CDC_OUT_EP); /* Open Command IN EP */ DCD_EP_Close(pdev, CDC_CMD_EP); return USBD_OK; }
/** * @brief usbd_cdc_Init * DeInitialize the CDC layer * @param pdev: device instance * @param cfgidx: Configuration index * @retval status */ static uint8_t usbd_cdc_DeInit (void *pdev, //缺省初始化设备 uint8_t cfgidx) { /* Open EP IN */ DCD_EP_Close(pdev, //关闭设备端点CDC_IN_EP CDC_IN_EP); /* Open EP OUT */ DCD_EP_Close(pdev, //关闭设备端点CDC_OUT_EP CDC_OUT_EP); /* Open Command IN EP */ DCD_EP_Close(pdev, //关闭设备端点CDC_CMD_EP CDC_CMD_EP); return USBD_OK; }
extern void PIOS_USBHOOK_DeRegisterEpOutCallback(uint8_t epnum) { PIOS_Assert(epnum < NELEMENTS(usb_epout_table)); usb_epout_table[epnum].cb = NULL; DCD_EP_Close(&pios_usb_otg_core_handle, epnum); }
static uint8_t usbd_video_DeInit (void *pdev, uint8_t cfgidx) { DCD_EP_Close (pdev , USB_ENDPOINT_IN(1)); /* DeInitialize the Audio output Hardware layer */ return USBD_OK; }
/** * @brief usbd_cdc_Init * DeInitialize the CDC layer * @param pdev: device instance * @param cfgidx: Configuration index * @retval status */ static uint8_t usbd_cdc_DeInit (void *pdev, uint8_t cfgidx) { /* Open EP IN */ DCD_EP_Close((USB_OTG_CORE_HANDLE*) pdev, CDC_IN_EP); /* Open EP OUT */ DCD_EP_Close((USB_OTG_CORE_HANDLE*) pdev, CDC_OUT_EP); /* Open Command IN EP */ DCD_EP_Close((USB_OTG_CORE_HANDLE*) pdev, CDC_CMD_EP); /* Restore default state of the Interface physical components */ APP_FOPS.pIf_DeInit(); return USBD_OK; }
/** * @brief usbd_cdc_Init * DeInitialize the CDC layer * @param pdev: device instance * @param cfgidx: Configuration index * @retval status */ static cyg_uint8 usbd_cdc_DeInit (void *pdev, cyg_uint8 cfgidx) { /* Open EP IN */ DCD_EP_Close(pdev, CDC_IN_EP); /* Open EP OUT */ DCD_EP_Close(pdev, CDC_OUT_EP); /* Open Command IN EP */ DCD_EP_Close(pdev, CDC_CMD_EP); /* Restore default state of the Interface physical components */ APP_FOPS.pIf_DeInit(); return USBD_OK; }
/** * @brief usbd_cdc_Init * DeInitialize the CDC layer * @param pdev: device instance * @param cfgidx: Configuration index * @retval status */ static uint8_t usbd_cdc_DeInit (void *pdev, uint8_t cfgidx) { /* Open EP IN */ DCD_EP_Close(pdev, CDC_IN_EP); /* Open EP OUT */ DCD_EP_Close(pdev, CDC_OUT_EP); /* Open Command IN EP */ DCD_EP_Close(pdev, CDC_CMD_EP); /* Restore default state of the Interface physical components */ TEMPLATE_fops.pIf_DeInit(); return USBD_OK; }
/** * @brief usbd_cdc_Init * DeInitialize the CDC layer * @param pdev: device instance * @param cfgidx: Configuration index * @retval status */ static uint8_t usbd_cdc_DeInit (void *pdev, uint8_t cfgidx) { usbd_cdc_Change_Open_State(0); if (cdcConfigured) { if (USB_Tx_State) { DCD_EP_Flush(pdev, CDC_IN_EP); } /* Close EP IN */ DCD_EP_Close(pdev, CDC_IN_EP); /* Close EP OUT */ DCD_EP_Close(pdev, CDC_OUT_EP); /* Close Command IN EP */ DCD_EP_Close(pdev, CDC_CMD_EP); /* Restore default state of the Interface physical components */ APP_FOPS.pIf_DeInit(); } usbd_cdc_Change_Open_State(0); cdcConfigured = 0; USB_Tx_State = 0; USB_Rx_State = 0; USB_Rx_Buffer_head = 0; USB_Rx_Buffer_tail = 0; USB_Rx_Buffer_length = USB_RX_BUFFER_SIZE; USB_Tx_Buffer_tail = 0; USB_Tx_Buffer_head = 0; return USBD_OK; }
/** * @brief usbd_audio_Init * DeInitializes the AUDIO layer. * @param pdev: device instance * @param cfgidx: Configuration index * @retval status */ static uint8_t usbd_audio_DeInit (void *pdev, uint8_t cfgidx) { DCD_EP_Close (pdev , AUDIO_OUT_EP); /* DeInitialize the Audio output Hardware layer */ if (AUDIO_OUT_fops.DeInit(0) != USBD_OK) { return USBD_FAIL; } return USBD_OK; }
/** * @brief usbd_cdc_Init * DeInitialize the CDC layer * @param pdev: device instance * @param cfgidx: Configuration index * @retval status */ static uint8_t usbd_composite_DeInit (void *pdev, uint8_t cfgidx) { /* Open EP IN */ DCD_EP_Close(pdev, CDC_IN_EP); /* Open EP OUT */ DCD_EP_Close(pdev, CDC_OUT_EP); /* Open Command IN EP */ DCD_EP_Close(pdev, CDC_CMD_EP); /* Restore default state of the Interface physical components */ APP_FOPS.pIf_DeInit(); /* Close HID EPs */ DCD_EP_Close (pdev , HID_IN_EP); DCD_EP_Close (pdev , HID_OUT_EP); 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 (void *pdev, USB_SETUP_REQ *req) { 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)) { USBD_MSC_MaxLun = USBD_STORAGE_fops->GetMaxLun(); if(USBD_MSC_MaxLun > 0) { USBD_CtlSendData (pdev, &USBD_MSC_MaxLun, 1); } else { USBD_CtlError(pdev , req); return USBD_FAIL; } } 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, &USBD_MSC_AltSet, 1); break; case USB_REQ_SET_INTERFACE : USBD_MSC_AltSet = (uint8_t)(req->wValue); break; case USB_REQ_CLEAR_FEATURE: /* Flush the FIFO and Clear the stall status */ DCD_EP_Flush(pdev, (uint8_t)req->wIndex); /* Re-activate the EP */ DCD_EP_Close (pdev , (uint8_t)req->wIndex); if((((uint8_t)req->wIndex) & 0x80) == 0x80) { DCD_EP_Open(pdev, ((uint8_t)req->wIndex), MSC_EPIN_SIZE, USB_OTG_EP_BULK); } else { DCD_EP_Open(pdev, ((uint8_t)req->wIndex), MSC_EPOUT_SIZE, USB_OTG_EP_BULK); } /* Handle BOT error */ MSC_BOT_CplClrFeature(pdev, (uint8_t)req->wIndex); break; } break; default: break; } return USBD_OK; }
/** * @brief usbd_cdc_Setup * Handle the CDC specific requests * @param pdev: instance * @param req: usb requests * @retval status */ static uint8_t usbd_cdc_msc_Setup (void *pdev, USB_SETUP_REQ *req) { uint16_t len=USB_CDC_MSC_DESC_SIZ; uint8_t *pbuf=usbd_cdc_msc_CfgDesc + 9; switch (req->bmRequest & USB_REQ_TYPE_MASK) { /* CDC Class Requests -------------------------------*/ case USB_REQ_TYPE_CLASS : switch (req->bRequest) { case BOT_GET_MAX_LUN : if((req->wValue == 0) && (req->wLength == 1) && ((req->bmRequest & 0x80) == 0x80)) { USBD_MSC_MaxLun = USBD_STORAGE_fops->GetMaxLun(); if(USBD_MSC_MaxLun > 0) { USBD_CtlSendData (pdev, &USBD_MSC_MaxLun, 1); } else { USBD_CtlError(pdev , req); return USBD_FAIL; } } 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; // CDC default: /* Check if the request is a data setup packet */ if (req->wLength) { /* Check if the request is Device-to-Host */ if (req->bmRequest & 0x80) { /* Get the data to be sent to Host from interface layer */ APP_FOPS.pIf_Ctrl(req->bRequest, CmdBuff, req->wLength); /* Send the data to the host */ USBD_CtlSendData (pdev, CmdBuff, req->wLength); } else /* Host-to-Device requeset */ { /* Set the value of the current command to be processed */ cdcCmd = req->bRequest; cdcLen = req->wLength; /* Prepare the reception of the buffer over EP0 Next step: the received data will be managed in usbd_cdc_EP0_TxSent() function. */ USBD_CtlPrepareRx (pdev, CmdBuff, req->wLength); } } else /* No Data request */ { /* Transfer the command to the interface layer */ APP_FOPS.pIf_Ctrl(req->bRequest, NULL, 0); // check for DTE present changes - NEZ if (req->bRequest == SET_CONTROL_LINE_STATE) { USB_DTE_Present = req->wValue & 0x01; if (!USB_DTE_Present) { DCD_EP_Flush (pdev, CDC_IN_EP); USB_Tx_State = 0; } } } return USBD_OK; break; // default } break; // case USB_REQ_TYPE_CLASS /* Standard Requests -------------------------------*/ case USB_REQ_TYPE_STANDARD: switch (req->bRequest) { case USB_REQ_GET_DESCRIPTOR: if( (req->wValue >> 8) == CDC_DESCRIPTOR_TYPE) { #ifdef USB_OTG_HS_INTERNAL_DMA_ENABLED pbuf = usbd_cdc_Desc; #else pbuf = usbd_cdc_msc_CfgDesc + 9 + (9 * USBD_ITF_MAX_NUM); #endif len = MIN(USB_CDC_MSC_DESC_SIZ , req->wLength); } USBD_CtlSendData (pdev, pbuf, len); break; case USB_REQ_GET_INTERFACE : if ((uint8_t)req->wValue == CDC_IN_EP || (uint8_t)req->wValue == CDC_OUT_EP) { USBD_CtlSendData (pdev, (uint8_t *)&usbd_cdc_AltSet, 1); } else { USBD_CtlSendData (pdev, &USBD_MSC_AltSet, 1); break; } break; case USB_REQ_SET_INTERFACE : if ((uint8_t)req->wValue == CDC_IN_EP || (uint8_t)req->wValue == CDC_OUT_EP) { if ((uint8_t)(req->wValue) < USBD_ITF_MAX_NUM) { usbd_cdc_AltSet = (uint8_t)(req->wValue); } else { /* Call the error management function (command will be nacked */ USBD_CtlError (pdev, req); } } else { USBD_MSC_AltSet = (uint8_t)(req->wValue); } break; case USB_REQ_CLEAR_FEATURE: /* Flush the FIFO and Clear the stall status */ DCD_EP_Flush(pdev, (uint8_t)req->wIndex); /* Re-activate the EP */ DCD_EP_Close (pdev , (uint8_t)req->wIndex); if((((uint8_t)req->wIndex) & 0x80) == 0x80) { DCD_EP_Open(pdev, ((uint8_t)req->wIndex), MSC_EPIN_SIZE, USB_OTG_EP_BULK); } else { DCD_EP_Open(pdev, ((uint8_t)req->wIndex), MSC_EPOUT_SIZE, USB_OTG_EP_BULK); } /* Handle BOT error */ MSC_BOT_CplClrFeature(pdev, (uint8_t)req->wIndex); break; } } return USBD_OK; }