--- Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c (date 1511202099000) +++ Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c (revision ) @@ -59,6 +59,7 @@ */ /* Includes ------------------------------------------------------------------*/ +#include "usbd_msc.h" // for rejecting bad control messages #include "usbd_cdc.h" #include "usbd_desc.h" #include "usbd_ctlreq.h" @@ -103,34 +104,7 @@ * @{ */ - -static uint8_t USBD_CDC_Init (USBD_HandleTypeDef *pdev, - uint8_t cfgidx); - -static uint8_t USBD_CDC_DeInit (USBD_HandleTypeDef *pdev, - uint8_t cfgidx); - -static uint8_t USBD_CDC_Setup (USBD_HandleTypeDef *pdev, - USBD_SetupReqTypedef *req); - -static uint8_t USBD_CDC_DataIn (USBD_HandleTypeDef *pdev, - uint8_t epnum); - -static uint8_t USBD_CDC_DataOut (USBD_HandleTypeDef *pdev, - uint8_t epnum); - -static uint8_t USBD_CDC_EP0_RxReady (USBD_HandleTypeDef *pdev); - -static uint8_t *USBD_CDC_GetFSCfgDesc (uint16_t *length); - -static uint8_t *USBD_CDC_GetHSCfgDesc (uint16_t *length); - -static uint8_t *USBD_CDC_GetOtherSpeedCfgDesc (uint16_t *length); - -static uint8_t *USBD_CDC_GetOtherSpeedCfgDesc (uint16_t *length); - -uint8_t *USBD_CDC_GetDeviceQualifierDescriptor (uint16_t *length); - +#ifndef CDC_COMPOSITE /* USB Standard Device Descriptor */ __ALIGN_BEGIN static uint8_t USBD_CDC_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] __ALIGN_END = { @@ -156,7 +130,7 @@ /* CDC interface class callbacks structure */ -USBD_ClassTypeDef USBD_CDC = +USBD_ClassTypeDef USBD_CDC = { USBD_CDC_Init, USBD_CDC_DeInit, @@ -172,6 +146,7 @@ USBD_CDC_GetFSCfgDesc, USBD_CDC_GetOtherSpeedCfgDesc, USBD_CDC_GetDeviceQualifierDescriptor, + NULL }; /* USB CDC device Configuration Descriptor */ @@ -456,6 +431,7 @@ 0x00, 0x00 /* bInterval */ }; +#endif /** * @} @@ -463,7 +439,7 @@ /** @defgroup USBD_CDC_Private_Functions * @{ - */ + */ /** * @brief USBD_CDC_Init @@ -472,7 +448,7 @@ * @param cfgidx: Configuration index * @retval status */ -static uint8_t USBD_CDC_Init (USBD_HandleTypeDef *pdev, +uint8_t USBD_CDC_Init (USBD_HandleTypeDef *pdev, uint8_t cfgidx) { uint8_t ret = 0; @@ -514,18 +490,18 @@ CDC_CMD_PACKET_SIZE); - pdev->pClassData = USBD_malloc(sizeof (USBD_CDC_HandleTypeDef)); + pdev->pClassData2 = USBD_malloc(sizeof (USBD_CDC_HandleTypeDef)); - if(pdev->pClassData == NULL) + if(pdev->pClassData2 == NULL) { ret = 1; } else { - hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; + hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData2; /* Init physical Interface components */ - ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Init(); + ((USBD_CDC_ItfTypeDef *)pdev->pUserData2)->Init(); /* Init Xfer states */ hcdc->TxState =0; @@ -560,7 +536,7 @@ * @param cfgidx: Configuration index * @retval status */ -static uint8_t USBD_CDC_DeInit (USBD_HandleTypeDef *pdev, +uint8_t USBD_CDC_DeInit (USBD_HandleTypeDef *pdev, uint8_t cfgidx) { uint8_t ret = 0; @@ -579,11 +555,11 @@ /* DeInit physical Interface components */ - if(pdev->pClassData != NULL) + if(pdev->pClassData2 != NULL) { - ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->DeInit(); - USBD_free(pdev->pClassData); - pdev->pClassData = NULL; + ((USBD_CDC_ItfTypeDef *)pdev->pUserData2)->DeInit(); + USBD_free(pdev->pClassData2); + pdev->pClassData2 = NULL; } return ret; @@ -596,20 +572,23 @@ * @param req: usb requests * @retval status */ -static uint8_t USBD_CDC_Setup (USBD_HandleTypeDef *pdev, +uint8_t USBD_CDC_Setup (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) { - USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; + USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData2; static uint8_t ifalt = 0; switch (req->bmRequest & USB_REQ_TYPE_MASK) { case USB_REQ_TYPE_CLASS : + if (req->bRequest == BOT_GET_MAX_LUN) break; // Not ours! + if (req->bRequest == BOT_RESET) break; // Not ours! + if (req->wLength) { if (req->bmRequest & 0x80) { - ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(req->bRequest, + ((USBD_CDC_ItfTypeDef *)pdev->pUserData2)->Control(req->bRequest, (uint8_t *)hcdc->data, req->wLength); USBD_CtlSendData (pdev, @@ -629,7 +608,7 @@ } else { - ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(req->bRequest, + ((USBD_CDC_ItfTypeDef *)pdev->pUserData2)->Control(req->bRequest, (uint8_t*)req, 0); } @@ -661,14 +640,15 @@ * @param epnum: endpoint number * @retval status */ -static uint8_t USBD_CDC_DataIn (USBD_HandleTypeDef *pdev, uint8_t epnum) +uint8_t USBD_CDC_DataIn (USBD_HandleTypeDef *pdev, uint8_t epnum) { - USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; + USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData2; - if(pdev->pClassData != NULL) + if(pdev->pClassData2 != NULL) { hcdc->TxState = 0; + USBD_CDC_TransmitDone(pdev); return USBD_OK; } @@ -685,18 +665,18 @@ * @param epnum: endpoint number * @retval status */ -static uint8_t USBD_CDC_DataOut (USBD_HandleTypeDef *pdev, uint8_t epnum) +uint8_t USBD_CDC_DataOut (USBD_HandleTypeDef *pdev, uint8_t epnum) { - USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; + USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData2; /* Get the received data length */ hcdc->RxLength = USBD_LL_GetRxDataSize (pdev, epnum); /* USB data will be immediately processed, this allow next USB traffic being NAKed till the end of the application Xfer */ - if(pdev->pClassData != NULL) + if(pdev->pClassData2 != NULL) { - ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Receive(hcdc->RxBuffer, &hcdc->RxLength); + ((USBD_CDC_ItfTypeDef *)pdev->pUserData2)->Receive(hcdc->RxBuffer, &hcdc->RxLength); return USBD_OK; } @@ -715,13 +695,13 @@ * @param epnum: endpoint number * @retval status */ -static uint8_t USBD_CDC_EP0_RxReady (USBD_HandleTypeDef *pdev) +uint8_t USBD_CDC_EP0_RxReady (USBD_HandleTypeDef *pdev) { - USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; + USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData2; - if((pdev->pUserData != NULL) && (hcdc->CmdOpCode != 0xFF)) + if((pdev->pUserData2 != NULL) && (hcdc->CmdOpCode != 0xFF)) { - ((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(hcdc->CmdOpCode, + ((USBD_CDC_ItfTypeDef *)pdev->pUserData2)->Control(hcdc->CmdOpCode, (uint8_t *)hcdc->data, hcdc->CmdLength); hcdc->CmdOpCode = 0xFF; @@ -730,6 +710,7 @@ return USBD_OK; } +#ifndef CDC_COMPOSITE /** * @brief USBD_CDC_GetFSCfgDesc * Return configuration descriptor @@ -737,7 +718,7 @@ * @param length : pointer data length * @retval pointer to descriptor buffer */ -static uint8_t *USBD_CDC_GetFSCfgDesc (uint16_t *length) +uint8_t *USBD_CDC_GetFSCfgDesc (uint16_t *length) { *length = sizeof (USBD_CDC_CfgFSDesc); return USBD_CDC_CfgFSDesc; @@ -750,7 +731,7 @@ * @param length : pointer data length * @retval pointer to descriptor buffer */ -static uint8_t *USBD_CDC_GetHSCfgDesc (uint16_t *length) +uint8_t *USBD_CDC_GetHSCfgDesc (uint16_t *length) { *length = sizeof (USBD_CDC_CfgHSDesc); return USBD_CDC_CfgHSDesc; @@ -763,7 +744,7 @@ * @param length : pointer data length * @retval pointer to descriptor buffer */ -static uint8_t *USBD_CDC_GetOtherSpeedCfgDesc (uint16_t *length) +uint8_t *USBD_CDC_GetOtherSpeedCfgDesc (uint16_t *length) { *length = sizeof (USBD_CDC_OtherSpeedCfgDesc); return USBD_CDC_OtherSpeedCfgDesc; @@ -780,6 +761,7 @@ *length = sizeof (USBD_CDC_DeviceQualifierDesc); return USBD_CDC_DeviceQualifierDesc; } +#endif /** * @brief USBD_CDC_RegisterInterface @@ -794,7 +776,7 @@ if(fops != NULL) { - pdev->pUserData= fops; + pdev->pUserData2= fops; ret = USBD_OK; } @@ -811,7 +793,7 @@ uint8_t *pbuff, uint16_t length) { - USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; + USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData2; hcdc->TxBuffer = pbuff; hcdc->TxLength = length; @@ -829,7 +811,7 @@ uint8_t USBD_CDC_SetRxBuffer (USBD_HandleTypeDef *pdev, uint8_t *pbuff) { - USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; + USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData2; hcdc->RxBuffer = pbuff; @@ -845,9 +827,9 @@ */ uint8_t USBD_CDC_TransmitPacket(USBD_HandleTypeDef *pdev) { - USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; + USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData2; - if(pdev->pClassData != NULL) + if(pdev->pClassData2 != NULL) { if(hcdc->TxState == 0) { @@ -882,10 +864,10 @@ */ uint8_t USBD_CDC_ReceivePacket(USBD_HandleTypeDef *pdev) { - USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; + USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData2; /* Suspend or Resume USB Out process */ - if(pdev->pClassData != NULL) + if(pdev->pClassData2 != NULL) { if(pdev->dev_speed == USBD_SPEED_HIGH ) {