[H7] Modify USB Middleware library for composite device support

This commit is contained in:
jflyper 2019-05-08 12:37:33 +09:00
parent cfcd528a87
commit 1861c6d957
7 changed files with 98 additions and 119 deletions

View File

@ -516,18 +516,18 @@ static uint8_t USBD_CDC_Init (USBD_HandleTypeDef *pdev,
CDC_CMD_PACKET_SIZE); CDC_CMD_PACKET_SIZE);
pdev->pClassData = USBD_malloc(sizeof (USBD_CDC_HandleTypeDef)); pdev->pCDC_ClassData = USBD_malloc(sizeof (USBD_CDC_HandleTypeDef));
if(pdev->pClassData == NULL) if(pdev->pCDC_ClassData == NULL)
{ {
ret = 1; ret = 1;
} }
else else
{ {
hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; hcdc = (USBD_CDC_HandleTypeDef*) pdev->pCDC_ClassData;
/* Init physical Interface components */ /* Init physical Interface components */
((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Init(); ((USBD_CDC_ItfTypeDef *)pdev->pCDC_UserData)->Init();
/* Init Xfer states */ /* Init Xfer states */
hcdc->TxState =0; hcdc->TxState =0;
@ -583,11 +583,11 @@ static uint8_t USBD_CDC_DeInit (USBD_HandleTypeDef *pdev,
/* DeInit physical Interface components */ /* DeInit physical Interface components */
if(pdev->pClassData != NULL) if(pdev->pCDC_ClassData != NULL)
{ {
((USBD_CDC_ItfTypeDef *)pdev->pUserData)->DeInit(); ((USBD_CDC_ItfTypeDef *)pdev->pCDC_UserData)->DeInit();
USBD_free(pdev->pClassData); USBD_free(pdev->pCDC_ClassData);
pdev->pClassData = NULL; pdev->pCDC_ClassData = NULL;
} }
return ret; return ret;
@ -603,7 +603,7 @@ static uint8_t USBD_CDC_DeInit (USBD_HandleTypeDef *pdev,
static uint8_t USBD_CDC_Setup (USBD_HandleTypeDef *pdev, static uint8_t USBD_CDC_Setup (USBD_HandleTypeDef *pdev,
USBD_SetupReqTypedef *req) USBD_SetupReqTypedef *req)
{ {
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pCDC_ClassData;
static uint8_t ifalt = 0; static uint8_t ifalt = 0;
switch (req->bmRequest & USB_REQ_TYPE_MASK) switch (req->bmRequest & USB_REQ_TYPE_MASK)
@ -613,7 +613,7 @@ static uint8_t USBD_CDC_Setup (USBD_HandleTypeDef *pdev,
{ {
if (req->bmRequest & 0x80) if (req->bmRequest & 0x80)
{ {
((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(req->bRequest, ((USBD_CDC_ItfTypeDef *)pdev->pCDC_UserData)->Control(req->bRequest,
(uint8_t *)hcdc->data, (uint8_t *)hcdc->data,
req->wLength); req->wLength);
USBD_CtlSendData (pdev, USBD_CtlSendData (pdev,
@ -633,7 +633,7 @@ static uint8_t USBD_CDC_Setup (USBD_HandleTypeDef *pdev,
} }
else else
{ {
((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(req->bRequest, ((USBD_CDC_ItfTypeDef *)pdev->pCDC_UserData)->Control(req->bRequest,
(uint8_t*)req, (uint8_t*)req,
0); 0);
} }
@ -669,9 +669,9 @@ static uint8_t USBD_CDC_DataIn (USBD_HandleTypeDef *pdev, uint8_t epnum)
{ {
UNUSED(epnum); UNUSED(epnum);
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pCDC_ClassData;
if(pdev->pClassData != NULL) if(pdev->pCDC_ClassData != NULL)
{ {
hcdc->TxState = 0; hcdc->TxState = 0;
@ -693,16 +693,16 @@ 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_DataOut (USBD_HandleTypeDef *pdev, uint8_t epnum)
{ {
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pCDC_ClassData;
/* Get the received data length */ /* Get the received data length */
hcdc->RxLength = USBD_LL_GetRxDataSize (pdev, epnum); hcdc->RxLength = USBD_LL_GetRxDataSize (pdev, epnum);
/* USB data will be immediately processed, this allow next USB traffic being /* USB data will be immediately processed, this allow next USB traffic being
NAKed till the end of the application Xfer */ NAKed till the end of the application Xfer */
if(pdev->pClassData != NULL) if(pdev->pCDC_ClassData != NULL)
{ {
((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Receive(hcdc->RxBuffer, &hcdc->RxLength); ((USBD_CDC_ItfTypeDef *)pdev->pCDC_UserData)->Receive(hcdc->RxBuffer, &hcdc->RxLength);
return USBD_OK; return USBD_OK;
} }
@ -723,11 +723,11 @@ 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_EP0_RxReady (USBD_HandleTypeDef *pdev)
{ {
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pCDC_ClassData;
if((pdev->pUserData != NULL) && (hcdc->CmdOpCode != 0xFF)) if((pdev->pCDC_UserData != NULL) && (hcdc->CmdOpCode != 0xFF))
{ {
((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(hcdc->CmdOpCode, ((USBD_CDC_ItfTypeDef *)pdev->pCDC_UserData)->Control(hcdc->CmdOpCode,
(uint8_t *)hcdc->data, (uint8_t *)hcdc->data,
hcdc->CmdLength); hcdc->CmdLength);
hcdc->CmdOpCode = 0xFF; hcdc->CmdOpCode = 0xFF;
@ -800,7 +800,7 @@ uint8_t USBD_CDC_RegisterInterface (USBD_HandleTypeDef *pdev,
if(fops != NULL) if(fops != NULL)
{ {
pdev->pUserData= fops; pdev->pCDC_UserData= fops;
ret = USBD_OK; ret = USBD_OK;
} }
@ -817,7 +817,7 @@ uint8_t USBD_CDC_SetTxBuffer (USBD_HandleTypeDef *pdev,
uint8_t *pbuff, uint8_t *pbuff,
uint16_t length) uint16_t length)
{ {
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pCDC_ClassData;
hcdc->TxBuffer = pbuff; hcdc->TxBuffer = pbuff;
hcdc->TxLength = length; hcdc->TxLength = length;
@ -835,7 +835,7 @@ uint8_t USBD_CDC_SetTxBuffer (USBD_HandleTypeDef *pdev,
uint8_t USBD_CDC_SetRxBuffer (USBD_HandleTypeDef *pdev, uint8_t USBD_CDC_SetRxBuffer (USBD_HandleTypeDef *pdev,
uint8_t *pbuff) uint8_t *pbuff)
{ {
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pClassData; USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*) pdev->pCDC_ClassData;
hcdc->RxBuffer = pbuff; hcdc->RxBuffer = pbuff;
@ -851,9 +851,9 @@ uint8_t USBD_CDC_SetRxBuffer (USBD_HandleTypeDef *pdev,
*/ */
uint8_t USBD_CDC_TransmitPacket(USBD_HandleTypeDef *pdev) 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->pCDC_ClassData;
if(pdev->pClassData != NULL) if(pdev->pCDC_ClassData != NULL)
{ {
if(hcdc->TxState == 0) if(hcdc->TxState == 0)
{ {
@ -888,10 +888,10 @@ uint8_t USBD_CDC_TransmitPacket(USBD_HandleTypeDef *pdev)
*/ */
uint8_t USBD_CDC_ReceivePacket(USBD_HandleTypeDef *pdev) 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->pCDC_ClassData;
/* Suspend or Resume USB Out process */ /* Suspend or Resume USB Out process */
if(pdev->pClassData != NULL) if(pdev->pCDC_ClassData != NULL)
{ {
if(pdev->dev_speed == USBD_SPEED_HIGH ) if(pdev->dev_speed == USBD_SPEED_HIGH )
{ {

View File

@ -49,12 +49,12 @@
/** @defgroup USBD_HID_Exported_Defines /** @defgroup USBD_HID_Exported_Defines
* @{ * @{
*/ */
#define HID_EPIN_ADDR 0x81 #define HID_EPIN_ADDR 0x83
#define HID_EPIN_SIZE 0x04 #define HID_EPIN_SIZE 0x08
#define USB_HID_CONFIG_DESC_SIZ 34 #define USB_HID_CONFIG_DESC_SIZ 34
#define USB_HID_DESC_SIZ 9 #define USB_HID_DESC_SIZ 9
#define HID_MOUSE_REPORT_DESC_SIZE 74 #define HID_MOUSE_REPORT_DESC_SIZE 38
#define HID_DESCRIPTOR_TYPE 0x21 #define HID_DESCRIPTOR_TYPE 0x21
#define HID_REPORT_DESC 0x22 #define HID_REPORT_DESC 0x22

View File

@ -216,53 +216,27 @@ __ALIGN_BEGIN static uint8_t USBD_HID_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_
__ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE] __ALIGN_END = __ALIGN_BEGIN static uint8_t HID_MOUSE_ReportDesc[HID_MOUSE_REPORT_DESC_SIZE] __ALIGN_END =
{ {
0x05, 0x01, 0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0x09, 0x02, 0x09, 0x05, // USAGE (Game Pad)
0xA1, 0x01, 0xa1, 0x01, // COLLECTION (Application)
0x09, 0x01, 0xa1, 0x00, // COLLECTION (Physical)
0x05, 0x01, // USAGE_PAGE (Generic Desktop)
0xA1, 0x00, 0x09, 0x30, // USAGE (X)
0x05, 0x09, 0x09, 0x31, // USAGE (Y)
0x19, 0x01, 0x09, 0x32, // USAGE (Z)
0x29, 0x03, 0x09, 0x33, // USAGE (Rx)
0x09, 0x35, // USAGE (Rz)
0x15, 0x00, 0x09, 0x34, // USAGE (Ry)
0x25, 0x01, 0x09, 0x40, // USAGE (Vx)
0x95, 0x03, 0x09, 0x38, // USAGE (Wheel)
0x75, 0x01, 0x15, 0x81, // LOGICAL_MINIMUM (-127)
0x25, 0x7f, // LOGICAL_MAXIMUM (127)
0x81, 0x02, 0x75, 0x08, // REPORT_SIZE (8)
0x95, 0x01, 0x95, 0x08, // REPORT_COUNT (8)
0x75, 0x05, 0x81, 0x02, // INPUT (Data,Var,Abs)
0x81, 0x01, 0xc0, // END_COLLECTION
0xc0 /* END_COLLECTION */
0x05, 0x01, };
0x09, 0x30,
0x09, 0x31,
0x09, 0x38,
0x15, 0x81,
0x25, 0x7F,
0x75, 0x08,
0x95, 0x03,
0x81, 0x06,
0xC0, 0x09,
0x3c, 0x05,
0xff, 0x09,
0x01, 0x15,
0x00, 0x25,
0x01, 0x75,
0x01, 0x95,
0x02, 0xb1,
0x22, 0x75,
0x06, 0x95,
0x01, 0xb1,
0x01, 0xc0
};
/** /**
* @} * @}
@ -290,17 +264,17 @@ static uint8_t USBD_HID_Init (USBD_HandleTypeDef *pdev,
USBD_LL_OpenEP(pdev, USBD_LL_OpenEP(pdev,
HID_EPIN_ADDR, HID_EPIN_ADDR,
USBD_EP_TYPE_INTR, USBD_EP_TYPE_INTR,
HID_EPIN_SIZE); HID_EPIN_SIZE);
pdev->pClassData = USBD_malloc(sizeof (USBD_HID_HandleTypeDef)); pdev->pHID_ClassData = USBD_malloc(sizeof (USBD_HID_HandleTypeDef));
if(pdev->pClassData == NULL) if(pdev->pHID_ClassData == NULL)
{ {
ret = 1; ret = 1;
} }
else else
{ {
((USBD_HID_HandleTypeDef *)pdev->pClassData)->state = HID_IDLE; ((USBD_HID_HandleTypeDef *)pdev->pHID_ClassData)->state = HID_IDLE;
} }
return ret; return ret;
} }
@ -320,14 +294,14 @@ static uint8_t USBD_HID_DeInit (USBD_HandleTypeDef *pdev,
/* Close HID EPs */ /* Close HID EPs */
USBD_LL_CloseEP(pdev, USBD_LL_CloseEP(pdev,
HID_EPIN_ADDR); HID_EPIN_ADDR);
/* FRee allocated memory */ /* FRee allocated memory */
if(pdev->pClassData != NULL) if(pdev->pHID_ClassData != NULL)
{ {
USBD_free(pdev->pClassData); USBD_free(pdev->pHID_ClassData);
pdev->pClassData = NULL; pdev->pHID_ClassData = NULL;
} }
return USBD_OK; return USBD_OK;
} }
@ -343,8 +317,8 @@ static uint8_t USBD_HID_Setup (USBD_HandleTypeDef *pdev,
{ {
uint16_t len = 0; uint16_t len = 0;
uint8_t *pbuf = NULL; uint8_t *pbuf = NULL;
USBD_HID_HandleTypeDef *hhid = (USBD_HID_HandleTypeDef*) pdev->pClassData; USBD_HID_HandleTypeDef *hhid = (USBD_HID_HandleTypeDef*) pdev->pHID_ClassData;
switch (req->bmRequest & USB_REQ_TYPE_MASK) switch (req->bmRequest & USB_REQ_TYPE_MASK)
{ {
case USB_REQ_TYPE_CLASS : case USB_REQ_TYPE_CLASS :
@ -424,8 +398,8 @@ uint8_t USBD_HID_SendReport (USBD_HandleTypeDef *pdev,
uint8_t *report, uint8_t *report,
uint16_t len) uint16_t len)
{ {
USBD_HID_HandleTypeDef *hhid = (USBD_HID_HandleTypeDef*)pdev->pClassData; USBD_HID_HandleTypeDef *hhid = (USBD_HID_HandleTypeDef*)pdev->pHID_ClassData;
if (pdev->dev_state == USBD_STATE_CONFIGURED ) if (pdev->dev_state == USBD_STATE_CONFIGURED )
{ {
if(hhid->state == HID_IDLE) if(hhid->state == HID_IDLE)
@ -493,10 +467,10 @@ static uint8_t USBD_HID_DataIn (USBD_HandleTypeDef *pdev,
uint8_t epnum) uint8_t epnum)
{ {
UNUSED(epnum); UNUSED(epnum);
/* Ensure that the FIFO is empty before a new transfer, this condition could /* Ensure that the FIFO is empty before a new transfer, this condition could
be caused by a new transfer before the end of the previous transfer */ be caused by a new transfer before the end of the previous transfer */
((USBD_HID_HandleTypeDef *)pdev->pClassData)->state = HID_IDLE; ((USBD_HID_HandleTypeDef *)pdev->pHID_ClassData)->state = HID_IDLE;
return USBD_OK; return USBD_OK;
} }

View File

@ -330,9 +330,9 @@ uint8_t USBD_MSC_Init (USBD_HandleTypeDef *pdev,
USBD_EP_TYPE_BULK, USBD_EP_TYPE_BULK,
MSC_MAX_FS_PACKET); MSC_MAX_FS_PACKET);
} }
pdev->pClassData = USBD_malloc(sizeof (USBD_MSC_BOT_HandleTypeDef)); pdev->pMSC_ClassData = USBD_malloc(sizeof (USBD_MSC_BOT_HandleTypeDef));
if(pdev->pClassData == NULL) if(pdev->pMSC_ClassData == NULL)
{ {
ret = 1; ret = 1;
} }
@ -371,10 +371,10 @@ uint8_t USBD_MSC_DeInit (USBD_HandleTypeDef *pdev,
MSC_BOT_DeInit(pdev); MSC_BOT_DeInit(pdev);
/* Free MSC Class Resources */ /* Free MSC Class Resources */
if(pdev->pClassData != NULL) if(pdev->pMSC_ClassData != NULL)
{ {
USBD_free(pdev->pClassData); USBD_free(pdev->pMSC_ClassData);
pdev->pClassData = NULL; pdev->pMSC_ClassData = NULL;
} }
return 0; return 0;
} }
@ -387,7 +387,7 @@ uint8_t USBD_MSC_DeInit (USBD_HandleTypeDef *pdev,
*/ */
uint8_t USBD_MSC_Setup (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req) uint8_t USBD_MSC_Setup (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{ {
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef*) pdev->pClassData; USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef*) pdev->pMSC_ClassData;
switch (req->bmRequest & USB_REQ_TYPE_MASK) switch (req->bmRequest & USB_REQ_TYPE_MASK)
{ {
@ -402,7 +402,7 @@ uint8_t USBD_MSC_Setup (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
(req->wLength == 1) && (req->wLength == 1) &&
((req->bmRequest & 0x80) == 0x80)) ((req->bmRequest & 0x80) == 0x80))
{ {
hmsc->max_lun = ((USBD_StorageTypeDef *)pdev->pUserData)->GetMaxLun(); hmsc->max_lun = ((USBD_StorageTypeDef *)pdev->pMSC_UserData)->GetMaxLun();
USBD_CtlSendData (pdev, USBD_CtlSendData (pdev,
(uint8_t *)&hmsc->max_lun, (uint8_t *)&hmsc->max_lun,
1); 1);
@ -591,7 +591,7 @@ uint8_t USBD_MSC_RegisterStorage (USBD_HandleTypeDef *pdev,
{ {
if(fops != NULL) if(fops != NULL)
{ {
pdev->pUserData= fops; pdev->pMSC_UserData= fops;
} }
return 0; return 0;
} }

View File

@ -104,7 +104,7 @@ static void MSC_BOT_Abort(USBD_HandleTypeDef *pdev);
*/ */
void MSC_BOT_Init (USBD_HandleTypeDef *pdev) void MSC_BOT_Init (USBD_HandleTypeDef *pdev)
{ {
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef*)pdev->pClassData; USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef*)pdev->pMSC_ClassData;
hmsc->bot_state = USBD_BOT_IDLE; hmsc->bot_state = USBD_BOT_IDLE;
hmsc->bot_status = USBD_BOT_STATUS_NORMAL; hmsc->bot_status = USBD_BOT_STATUS_NORMAL;
@ -112,7 +112,7 @@ void MSC_BOT_Init (USBD_HandleTypeDef *pdev)
hmsc->scsi_sense_tail = 0; hmsc->scsi_sense_tail = 0;
hmsc->scsi_sense_head = 0; hmsc->scsi_sense_head = 0;
((USBD_StorageTypeDef *)pdev->pUserData)->Init(0); ((USBD_StorageTypeDef *)pdev->pMSC_UserData)->Init(0);
USBD_LL_FlushEP(pdev, MSC_EPOUT_ADDR); USBD_LL_FlushEP(pdev, MSC_EPOUT_ADDR);
USBD_LL_FlushEP(pdev, MSC_EPIN_ADDR); USBD_LL_FlushEP(pdev, MSC_EPIN_ADDR);
@ -132,7 +132,7 @@ void MSC_BOT_Init (USBD_HandleTypeDef *pdev)
*/ */
void MSC_BOT_Reset (USBD_HandleTypeDef *pdev) void MSC_BOT_Reset (USBD_HandleTypeDef *pdev)
{ {
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef*)pdev->pClassData; USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef*)pdev->pMSC_ClassData;
hmsc->bot_state = USBD_BOT_IDLE; hmsc->bot_state = USBD_BOT_IDLE;
hmsc->bot_status = USBD_BOT_STATUS_RECOVERY; hmsc->bot_status = USBD_BOT_STATUS_RECOVERY;
@ -152,7 +152,7 @@ void MSC_BOT_Reset (USBD_HandleTypeDef *pdev)
*/ */
void MSC_BOT_DeInit (USBD_HandleTypeDef *pdev) void MSC_BOT_DeInit (USBD_HandleTypeDef *pdev)
{ {
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef*)pdev->pClassData; USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef*)pdev->pMSC_ClassData;
hmsc->bot_state = USBD_BOT_IDLE; hmsc->bot_state = USBD_BOT_IDLE;
} }
@ -168,7 +168,7 @@ void MSC_BOT_DataIn (USBD_HandleTypeDef *pdev,
{ {
UNUSED(epnum); UNUSED(epnum);
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef*)pdev->pClassData; USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef*)pdev->pMSC_ClassData;
switch (hmsc->bot_state) switch (hmsc->bot_state)
{ {
@ -203,7 +203,7 @@ void MSC_BOT_DataOut (USBD_HandleTypeDef *pdev,
{ {
UNUSED(epnum); UNUSED(epnum);
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef*)pdev->pClassData; USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef*)pdev->pMSC_ClassData;
switch (hmsc->bot_state) switch (hmsc->bot_state)
{ {
@ -235,7 +235,7 @@ void MSC_BOT_DataOut (USBD_HandleTypeDef *pdev,
*/ */
static void MSC_BOT_CBW_Decode (USBD_HandleTypeDef *pdev) static void MSC_BOT_CBW_Decode (USBD_HandleTypeDef *pdev)
{ {
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef*)pdev->pClassData; USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef*)pdev->pMSC_ClassData;
hmsc->csw.dTag = hmsc->cbw.dTag; hmsc->csw.dTag = hmsc->cbw.dTag;
hmsc->csw.dDataResidue = hmsc->cbw.dDataLength; hmsc->csw.dDataResidue = hmsc->cbw.dDataLength;
@ -304,7 +304,7 @@ static void MSC_BOT_SendData(USBD_HandleTypeDef *pdev,
uint8_t* buf, uint8_t* buf,
uint16_t len) uint16_t len)
{ {
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef*)pdev->pClassData; USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef*)pdev->pMSC_ClassData;
len = MIN (hmsc->cbw.dDataLength, len); len = MIN (hmsc->cbw.dDataLength, len);
hmsc->csw.dDataResidue -= len; hmsc->csw.dDataResidue -= len;
@ -324,7 +324,7 @@ static void MSC_BOT_SendData(USBD_HandleTypeDef *pdev,
void MSC_BOT_SendCSW (USBD_HandleTypeDef *pdev, void MSC_BOT_SendCSW (USBD_HandleTypeDef *pdev,
uint8_t CSW_Status) uint8_t CSW_Status)
{ {
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef*)pdev->pClassData; USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef*)pdev->pMSC_ClassData;
hmsc->csw.dSignature = USBD_BOT_CSW_SIGNATURE; hmsc->csw.dSignature = USBD_BOT_CSW_SIGNATURE;
hmsc->csw.bStatus = CSW_Status; hmsc->csw.bStatus = CSW_Status;
@ -352,7 +352,7 @@ void MSC_BOT_SendCSW (USBD_HandleTypeDef *pdev,
static void MSC_BOT_Abort (USBD_HandleTypeDef *pdev) static void MSC_BOT_Abort (USBD_HandleTypeDef *pdev)
{ {
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef*)pdev->pClassData; USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef*)pdev->pMSC_ClassData;
if ((hmsc->cbw.bmFlags == 0) && if ((hmsc->cbw.bmFlags == 0) &&
(hmsc->cbw.dDataLength != 0) && (hmsc->cbw.dDataLength != 0) &&
@ -381,7 +381,7 @@ static void MSC_BOT_Abort (USBD_HandleTypeDef *pdev)
void MSC_BOT_CplClrFeature (USBD_HandleTypeDef *pdev, uint8_t epnum) void MSC_BOT_CplClrFeature (USBD_HandleTypeDef *pdev, uint8_t epnum)
{ {
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef*)pdev->pClassData; USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef*)pdev->pMSC_ClassData;
if(hmsc->bot_status == USBD_BOT_STATUS_ERROR )/* Bad CBW Signature */ if(hmsc->bot_status == USBD_BOT_STATUS_ERROR )/* Bad CBW Signature */
{ {

View File

@ -243,9 +243,14 @@ typedef struct _USBD_HandleTypeDef
USBD_SetupReqTypedef request; USBD_SetupReqTypedef request;
USBD_DescriptorsTypeDef *pDesc; USBD_DescriptorsTypeDef *pDesc;
USBD_ClassTypeDef *pClass; USBD_ClassTypeDef *pClass;
void *pClassData; //WARNING: When updating this middleware add this to structure:
void *pUserData; void *pCDC_ClassData;
void *pData; void *pCDC_UserData;
void *pHID_ClassData;
void *pHID_UserData;
void *pMSC_ClassData;
void *pMSC_UserData;
void *pData;
} USBD_HandleTypeDef; } USBD_HandleTypeDef;
/** /**

View File

@ -434,7 +434,7 @@ USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev)
/* Upon Reset call user call back */ /* Upon Reset call user call back */
pdev->dev_state = USBD_STATE_DEFAULT; pdev->dev_state = USBD_STATE_DEFAULT;
if (pdev->pClassData) if (pdev->pMSC_ClassData || pdev->pCDC_ClassData || pdev->pHID_ClassData)
pdev->pClass->DeInit(pdev, pdev->dev_config); pdev->pClass->DeInit(pdev, pdev->dev_config);