mirror of
https://github.com/STMicroelectronics/stm32-mw-usb-device.git
synced 2026-02-08 20:18:07 -05:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2022e75b01 |
@@ -79,7 +79,8 @@ static void SC_SendData(SC_ADPU_CommandsTypeDef *SCADPU, SC_ADPU_ResponseTypeDef
|
|||||||
*/
|
*/
|
||||||
void SC_Handler(SC_State *SCState, SC_ADPU_CommandsTypeDef *SC_ADPU, SC_ADPU_ResponseTypeDef *SC_Response)
|
void SC_Handler(SC_State *SCState, SC_ADPU_CommandsTypeDef *SC_ADPU, SC_ADPU_ResponseTypeDef *SC_Response)
|
||||||
{
|
{
|
||||||
uint32_t i, j;
|
uint32_t i;
|
||||||
|
uint32_t j;
|
||||||
|
|
||||||
switch (*SCState)
|
switch (*SCState)
|
||||||
{
|
{
|
||||||
@@ -316,8 +317,11 @@ static void SC_AnswerReq(SC_State *SC_state, uint8_t *atr_buffer, uint8_t length
|
|||||||
*/
|
*/
|
||||||
static uint8_t SC_decode_Answer2reset(uint8_t *card)
|
static uint8_t SC_decode_Answer2reset(uint8_t *card)
|
||||||
{
|
{
|
||||||
uint32_t i, flag = 0U, protocol;
|
uint32_t i = 0U;
|
||||||
uint8_t index = 0U, level = 0U;
|
uint32_t flag = 0U;
|
||||||
|
uint32_t protocol;
|
||||||
|
uint8_t index = 0U;
|
||||||
|
uint8_t level = 0U;
|
||||||
|
|
||||||
/******************************TS/T0 Decode************************************/
|
/******************************TS/T0 Decode************************************/
|
||||||
index++;
|
index++;
|
||||||
|
|||||||
@@ -109,7 +109,6 @@ static uint8_t USBD_CDC_EP0_RxReady(USBD_HandleTypeDef *pdev);
|
|||||||
static uint8_t *USBD_CDC_GetFSCfgDesc(uint16_t *length);
|
static uint8_t *USBD_CDC_GetFSCfgDesc(uint16_t *length);
|
||||||
static uint8_t *USBD_CDC_GetHSCfgDesc(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);
|
||||||
static uint8_t *USBD_CDC_GetOtherSpeedCfgDesc(uint16_t *length);
|
|
||||||
uint8_t *USBD_CDC_GetDeviceQualifierDescriptor(uint16_t *length);
|
uint8_t *USBD_CDC_GetDeviceQualifierDescriptor(uint16_t *length);
|
||||||
#endif /* USE_USBD_COMPOSITE */
|
#endif /* USE_USBD_COMPOSITE */
|
||||||
|
|
||||||
|
|||||||
@@ -364,7 +364,8 @@ static uint8_t USBD_CDC_ECM_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
|
|||||||
hcdc->TxLength = 0U;
|
hcdc->TxLength = 0U;
|
||||||
hcdc->LinkStatus = 0U;
|
hcdc->LinkStatus = 0U;
|
||||||
hcdc->NotificationStatus = 0U;
|
hcdc->NotificationStatus = 0U;
|
||||||
hcdc->MaxPcktLen = (pdev->dev_speed == USBD_SPEED_HIGH) ? CDC_ECM_DATA_HS_MAX_PACKET_SIZE : CDC_ECM_DATA_FS_MAX_PACKET_SIZE;
|
hcdc->MaxPcktLen = (pdev->dev_speed == USBD_SPEED_HIGH) ? CDC_ECM_DATA_HS_MAX_PACKET_SIZE : \
|
||||||
|
CDC_ECM_DATA_FS_MAX_PACKET_SIZE;
|
||||||
|
|
||||||
if (hcdc->RxBuffer == NULL)
|
if (hcdc->RxBuffer == NULL)
|
||||||
{
|
{
|
||||||
@@ -427,8 +428,7 @@ static uint8_t USBD_CDC_ECM_DeInit(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
|
|||||||
* @param req: usb requests
|
* @param req: usb requests
|
||||||
* @retval status
|
* @retval status
|
||||||
*/
|
*/
|
||||||
static uint8_t USBD_CDC_ECM_Setup(USBD_HandleTypeDef *pdev,
|
static uint8_t USBD_CDC_ECM_Setup(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
|
||||||
USBD_SetupReqTypedef *req)
|
|
||||||
{
|
{
|
||||||
USBD_CDC_ECM_HandleTypeDef *hcdc = (USBD_CDC_ECM_HandleTypeDef *) pdev->pClassDataCmsit[pdev->classId];
|
USBD_CDC_ECM_HandleTypeDef *hcdc = (USBD_CDC_ECM_HandleTypeDef *) pdev->pClassDataCmsit[pdev->classId];
|
||||||
USBD_CDC_ECM_ItfTypeDef *EcmInterface = (USBD_CDC_ECM_ItfTypeDef *)pdev->pUserData[pdev->classId];
|
USBD_CDC_ECM_ItfTypeDef *EcmInterface = (USBD_CDC_ECM_ItfTypeDef *)pdev->pUserData[pdev->classId];
|
||||||
@@ -449,8 +449,7 @@ static uint8_t USBD_CDC_ECM_Setup(USBD_HandleTypeDef *pdev,
|
|||||||
{
|
{
|
||||||
if ((req->bmRequest & 0x80U) != 0U)
|
if ((req->bmRequest & 0x80U) != 0U)
|
||||||
{
|
{
|
||||||
EcmInterface->Control(req->bRequest,
|
EcmInterface->Control(req->bRequest, (uint8_t *)hcdc->data, req->wLength);
|
||||||
(uint8_t *)hcdc->data, req->wLength);
|
|
||||||
|
|
||||||
len = MIN(CDC_ECM_DATA_BUFFER_SIZE, req->wLength);
|
len = MIN(CDC_ECM_DATA_BUFFER_SIZE, req->wLength);
|
||||||
(void)USBD_CtlSendData(pdev, (uint8_t *)hcdc->data, len);
|
(void)USBD_CtlSendData(pdev, (uint8_t *)hcdc->data, len);
|
||||||
@@ -561,7 +560,8 @@ static uint8_t USBD_CDC_ECM_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum)
|
|||||||
hcdc->TxState = 0U;
|
hcdc->TxState = 0U;
|
||||||
if (((USBD_CDC_ECM_ItfTypeDef *)pdev->pUserData[pdev->classId])->TransmitCplt != NULL)
|
if (((USBD_CDC_ECM_ItfTypeDef *)pdev->pUserData[pdev->classId])->TransmitCplt != NULL)
|
||||||
{
|
{
|
||||||
((USBD_CDC_ECM_ItfTypeDef *)pdev->pUserData[pdev->classId])->TransmitCplt(hcdc->TxBuffer, &hcdc->TxLength, epnum);
|
((USBD_CDC_ECM_ItfTypeDef *)pdev->pUserData[pdev->classId])->TransmitCplt(hcdc->TxBuffer,
|
||||||
|
&hcdc->TxLength, epnum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -569,8 +569,7 @@ static uint8_t USBD_CDC_ECM_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum)
|
|||||||
{
|
{
|
||||||
if (hcdc->NotificationStatus != 0U)
|
if (hcdc->NotificationStatus != 0U)
|
||||||
{
|
{
|
||||||
(void)USBD_CDC_ECM_SendNotification(pdev, CONNECTION_SPEED_CHANGE,
|
(void)USBD_CDC_ECM_SendNotification(pdev, CONNECTION_SPEED_CHANGE, 0U, (uint8_t *)ConnSpeedTab);
|
||||||
0U, (uint8_t *)ConnSpeedTab);
|
|
||||||
|
|
||||||
hcdc->NotificationStatus = 0U;
|
hcdc->NotificationStatus = 0U;
|
||||||
}
|
}
|
||||||
@@ -807,7 +806,10 @@ static uint8_t *USBD_CDC_ECM_USRStringDescriptor(USBD_HandleTypeDef *pdev, uint8
|
|||||||
/* Check if the requested string interface is supported */
|
/* Check if the requested string interface is supported */
|
||||||
if (index == CDC_ECM_MAC_STRING_INDEX)
|
if (index == CDC_ECM_MAC_STRING_INDEX)
|
||||||
{
|
{
|
||||||
USBD_GetString((uint8_t *)((USBD_CDC_ECM_ItfTypeDef *)pdev->pUserData[pdev->classId])->pStrDesc, USBD_StrDesc, length);
|
USBD_GetString((uint8_t *)((USBD_CDC_ECM_ItfTypeDef *)pdev->pUserData[pdev->classId])->pStrDesc,
|
||||||
|
USBD_StrDesc,
|
||||||
|
length);
|
||||||
|
|
||||||
return USBD_StrDesc;
|
return USBD_StrDesc;
|
||||||
}
|
}
|
||||||
/* Not supported Interface Descriptor index */
|
/* Not supported Interface Descriptor index */
|
||||||
@@ -834,7 +836,7 @@ uint8_t USBD_CDC_ECM_SetTxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff, uint3
|
|||||||
uint8_t USBD_CDC_ECM_SetTxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff, uint32_t length)
|
uint8_t USBD_CDC_ECM_SetTxBuffer(USBD_HandleTypeDef *pdev, uint8_t *pbuff, uint32_t length)
|
||||||
{
|
{
|
||||||
USBD_CDC_ECM_HandleTypeDef *hcdc = (USBD_CDC_ECM_HandleTypeDef *)pdev->pClassDataCmsit[pdev->classId];
|
USBD_CDC_ECM_HandleTypeDef *hcdc = (USBD_CDC_ECM_HandleTypeDef *)pdev->pClassDataCmsit[pdev->classId];
|
||||||
#endif
|
#endif /* USE_USBD_COMPOSITE */
|
||||||
|
|
||||||
if (hcdc == NULL)
|
if (hcdc == NULL)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ static int8_t CDC_ECM_Itf_Init(void)
|
|||||||
(void)USBD_CDC_ECM_SetTxBuffer(&USBD_Device, UserTxBuffer, 0U, 0U);
|
(void)USBD_CDC_ECM_SetTxBuffer(&USBD_Device, UserTxBuffer, 0U, 0U);
|
||||||
#else
|
#else
|
||||||
(void)USBD_CDC_ECM_SetTxBuffer(&USBD_Device, UserTxBuffer, 0U);
|
(void)USBD_CDC_ECM_SetTxBuffer(&USBD_Device, UserTxBuffer, 0U);
|
||||||
#endif
|
#endif /* USE_USBD_COMPOSITE */
|
||||||
(void)USBD_CDC_ECM_SetRxBuffer(&USBD_Device, UserRxBuffer);
|
(void)USBD_CDC_ECM_SetRxBuffer(&USBD_Device, UserRxBuffer);
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
@@ -104,7 +104,8 @@ static int8_t CDC_ECM_Itf_Init(void)
|
|||||||
static int8_t CDC_ECM_Itf_DeInit(void)
|
static int8_t CDC_ECM_Itf_DeInit(void)
|
||||||
{
|
{
|
||||||
#ifdef USE_USBD_COMPOSITE
|
#ifdef USE_USBD_COMPOSITE
|
||||||
USBD_CDC_ECM_HandleTypeDef *hcdc_cdc_ecm = (USBD_CDC_ECM_HandleTypeDef *)(USBD_Device.pClassDataCmsit[USBD_Device.classId]);
|
USBD_CDC_ECM_HandleTypeDef *hcdc_cdc_ecm = (USBD_CDC_ECM_HandleTypeDef *) \
|
||||||
|
(USBD_Device.pClassDataCmsit[USBD_Device.classId]);
|
||||||
#else
|
#else
|
||||||
USBD_CDC_ECM_HandleTypeDef *hcdc_cdc_ecm = (USBD_CDC_ECM_HandleTypeDef *)(USBD_Device.pClassData);
|
USBD_CDC_ECM_HandleTypeDef *hcdc_cdc_ecm = (USBD_CDC_ECM_HandleTypeDef *)(USBD_Device.pClassData);
|
||||||
#endif /* USE_USBD_COMPOSITE */
|
#endif /* USE_USBD_COMPOSITE */
|
||||||
@@ -126,7 +127,8 @@ static int8_t CDC_ECM_Itf_DeInit(void)
|
|||||||
static int8_t CDC_ECM_Itf_Control(uint8_t cmd, uint8_t *pbuf, uint16_t length)
|
static int8_t CDC_ECM_Itf_Control(uint8_t cmd, uint8_t *pbuf, uint16_t length)
|
||||||
{
|
{
|
||||||
#ifdef USE_USBD_COMPOSITE
|
#ifdef USE_USBD_COMPOSITE
|
||||||
USBD_CDC_ECM_HandleTypeDef *hcdc_cdc_ecm = (USBD_CDC_ECM_HandleTypeDef *)(USBD_Device.pClassDataCmsit[USBD_Device.classId]);
|
USBD_CDC_ECM_HandleTypeDef *hcdc_cdc_ecm = (USBD_CDC_ECM_HandleTypeDef *) \
|
||||||
|
(USBD_Device.pClassDataCmsit[USBD_Device.classId]);
|
||||||
#else
|
#else
|
||||||
USBD_CDC_ECM_HandleTypeDef *hcdc_cdc_ecm = (USBD_CDC_ECM_HandleTypeDef *)(USBD_Device.pClassData);
|
USBD_CDC_ECM_HandleTypeDef *hcdc_cdc_ecm = (USBD_CDC_ECM_HandleTypeDef *)(USBD_Device.pClassData);
|
||||||
#endif /* USE_USBD_COMPOSITE */
|
#endif /* USE_USBD_COMPOSITE */
|
||||||
@@ -201,7 +203,8 @@ static int8_t CDC_ECM_Itf_Receive(uint8_t *Buf, uint32_t *Len)
|
|||||||
{
|
{
|
||||||
/* Get the CDC_ECM handler pointer */
|
/* Get the CDC_ECM handler pointer */
|
||||||
#ifdef USE_USBD_COMPOSITE
|
#ifdef USE_USBD_COMPOSITE
|
||||||
USBD_CDC_ECM_HandleTypeDef *hcdc_cdc_ecm = (USBD_CDC_ECM_HandleTypeDef *)(USBD_Device.pClassDataCmsit[USBD_Device.classId]);
|
USBD_CDC_ECM_HandleTypeDef *hcdc_cdc_ecm = (USBD_CDC_ECM_HandleTypeDef *) \
|
||||||
|
(USBD_Device.pClassDataCmsit[USBD_Device.classId]);
|
||||||
#else
|
#else
|
||||||
USBD_CDC_ECM_HandleTypeDef *hcdc_cdc_ecm = (USBD_CDC_ECM_HandleTypeDef *)(USBD_Device.pClassData);
|
USBD_CDC_ECM_HandleTypeDef *hcdc_cdc_ecm = (USBD_CDC_ECM_HandleTypeDef *)(USBD_Device.pClassData);
|
||||||
#endif /* USE_USBD_COMPOSITE */
|
#endif /* USE_USBD_COMPOSITE */
|
||||||
|
|||||||
@@ -427,7 +427,8 @@ static uint8_t USBD_CDC_RNDIS_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
|
|||||||
hcdc->TxLength = 0U;
|
hcdc->TxLength = 0U;
|
||||||
hcdc->LinkStatus = 0U;
|
hcdc->LinkStatus = 0U;
|
||||||
hcdc->NotificationStatus = 0U;
|
hcdc->NotificationStatus = 0U;
|
||||||
hcdc->MaxPcktLen = (pdev->dev_speed == USBD_SPEED_HIGH) ? CDC_RNDIS_DATA_HS_MAX_PACKET_SIZE : CDC_RNDIS_DATA_FS_MAX_PACKET_SIZE;
|
hcdc->MaxPcktLen = (pdev->dev_speed == USBD_SPEED_HIGH) ? CDC_RNDIS_DATA_HS_MAX_PACKET_SIZE : \
|
||||||
|
CDC_RNDIS_DATA_FS_MAX_PACKET_SIZE;
|
||||||
|
|
||||||
if (hcdc->RxBuffer == NULL)
|
if (hcdc->RxBuffer == NULL)
|
||||||
{
|
{
|
||||||
@@ -664,7 +665,8 @@ static uint8_t USBD_CDC_RNDIS_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum)
|
|||||||
|
|
||||||
if (((USBD_CDC_RNDIS_ItfTypeDef *)pdev->pUserData[pdev->classId])->TransmitCplt != NULL)
|
if (((USBD_CDC_RNDIS_ItfTypeDef *)pdev->pUserData[pdev->classId])->TransmitCplt != NULL)
|
||||||
{
|
{
|
||||||
((USBD_CDC_RNDIS_ItfTypeDef *)pdev->pUserData[pdev->classId])->TransmitCplt(hcdc->TxBuffer, &hcdc->TxLength, epnum);
|
((USBD_CDC_RNDIS_ItfTypeDef *)pdev->pUserData[pdev->classId])->TransmitCplt(hcdc->TxBuffer, \
|
||||||
|
&hcdc->TxLength, epnum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1614,7 +1616,8 @@ static uint8_t USBD_CDC_RNDIS_ProcessResetMsg(USBD_HandleTypeDef *pdev,
|
|||||||
static uint8_t USBD_CDC_RNDIS_ProcessPacketMsg(USBD_HandleTypeDef *pdev,
|
static uint8_t USBD_CDC_RNDIS_ProcessPacketMsg(USBD_HandleTypeDef *pdev,
|
||||||
USBD_CDC_RNDIS_PacketMsgTypeDef *Msg)
|
USBD_CDC_RNDIS_PacketMsgTypeDef *Msg)
|
||||||
{
|
{
|
||||||
uint32_t tmp1, tmp2;
|
uint32_t tmp1;
|
||||||
|
uint32_t tmp2;
|
||||||
|
|
||||||
/* Get the CDC_RNDIS handle pointer */
|
/* Get the CDC_RNDIS handle pointer */
|
||||||
USBD_CDC_RNDIS_HandleTypeDef *hcdc = (USBD_CDC_RNDIS_HandleTypeDef *)pdev->pClassDataCmsit[pdev->classId];
|
USBD_CDC_RNDIS_HandleTypeDef *hcdc = (USBD_CDC_RNDIS_HandleTypeDef *)pdev->pClassDataCmsit[pdev->classId];
|
||||||
|
|||||||
@@ -114,7 +114,8 @@ static int8_t CDC_RNDIS_Itf_Init(void)
|
|||||||
static int8_t CDC_RNDIS_Itf_DeInit(void)
|
static int8_t CDC_RNDIS_Itf_DeInit(void)
|
||||||
{
|
{
|
||||||
#ifdef USE_USBD_COMPOSITE
|
#ifdef USE_USBD_COMPOSITE
|
||||||
USBD_CDC_RNDIS_HandleTypeDef *hcdc_cdc_rndis = (USBD_CDC_RNDIS_HandleTypeDef *)(USBD_Device.pClassDataCmsit[USBD_Device.classId]);
|
USBD_CDC_RNDIS_HandleTypeDef *hcdc_cdc_rndis = (USBD_CDC_RNDIS_HandleTypeDef *) \
|
||||||
|
(USBD_Device.pClassDataCmsit[USBD_Device.classId]);
|
||||||
#else
|
#else
|
||||||
USBD_CDC_RNDIS_HandleTypeDef *hcdc_cdc_rndis = (USBD_CDC_RNDIS_HandleTypeDef *)(USBD_Device.pClassData);
|
USBD_CDC_RNDIS_HandleTypeDef *hcdc_cdc_rndis = (USBD_CDC_RNDIS_HandleTypeDef *)(USBD_Device.pClassData);
|
||||||
#endif /* USE_USBD_COMPOSITE */
|
#endif /* USE_USBD_COMPOSITE */
|
||||||
@@ -140,7 +141,8 @@ static int8_t CDC_RNDIS_Itf_DeInit(void)
|
|||||||
static int8_t CDC_RNDIS_Itf_Control(uint8_t cmd, uint8_t *pbuf, uint16_t length)
|
static int8_t CDC_RNDIS_Itf_Control(uint8_t cmd, uint8_t *pbuf, uint16_t length)
|
||||||
{
|
{
|
||||||
#ifdef USE_USBD_COMPOSITE
|
#ifdef USE_USBD_COMPOSITE
|
||||||
USBD_CDC_RNDIS_HandleTypeDef *hcdc_cdc_rndis = (USBD_CDC_RNDIS_HandleTypeDef *)(USBD_Device.pClassDataCmsit[USBD_Device.classId]);
|
USBD_CDC_RNDIS_HandleTypeDef *hcdc_cdc_rndis = (USBD_CDC_RNDIS_HandleTypeDef *) \
|
||||||
|
(USBD_Device.pClassDataCmsit[USBD_Device.classId]);
|
||||||
#else
|
#else
|
||||||
USBD_CDC_RNDIS_HandleTypeDef *hcdc_cdc_rndis = (USBD_CDC_RNDIS_HandleTypeDef *)(USBD_Device.pClassData);
|
USBD_CDC_RNDIS_HandleTypeDef *hcdc_cdc_rndis = (USBD_CDC_RNDIS_HandleTypeDef *)(USBD_Device.pClassData);
|
||||||
#endif /* USE_USBD_COMPOSITE */
|
#endif /* USE_USBD_COMPOSITE */
|
||||||
@@ -187,7 +189,8 @@ static int8_t CDC_RNDIS_Itf_Receive(uint8_t *Buf, uint32_t *Len)
|
|||||||
{
|
{
|
||||||
/* Get the CDC_RNDIS handler pointer */
|
/* Get the CDC_RNDIS handler pointer */
|
||||||
#ifdef USE_USBD_COMPOSITE
|
#ifdef USE_USBD_COMPOSITE
|
||||||
USBD_CDC_RNDIS_HandleTypeDef *hcdc_cdc_rndis = (USBD_CDC_RNDIS_HandleTypeDef *)(USBD_Device.pClassDataCmsit[USBD_Device.classId]);
|
USBD_CDC_RNDIS_HandleTypeDef *hcdc_cdc_rndis = (USBD_CDC_RNDIS_HandleTypeDef *) \
|
||||||
|
(USBD_Device.pClassDataCmsit[USBD_Device.classId]);
|
||||||
#else
|
#else
|
||||||
USBD_CDC_RNDIS_HandleTypeDef *hcdc_cdc_rndis = (USBD_CDC_RNDIS_HandleTypeDef *)(USBD_Device.pClassData);
|
USBD_CDC_RNDIS_HandleTypeDef *hcdc_cdc_rndis = (USBD_CDC_RNDIS_HandleTypeDef *)(USBD_Device.pClassData);
|
||||||
#endif /* USE_USBD_COMPOSITE */
|
#endif /* USE_USBD_COMPOSITE */
|
||||||
|
|||||||
@@ -1585,8 +1585,7 @@ static void USBD_CMPSIT_VIDEODesc(USBD_HandleTypeDef *pdev, uint32_t pConf, __I
|
|||||||
|
|
||||||
/* USB Standard VS Interface Descriptor - data transfer mode */
|
/* USB Standard VS Interface Descriptor - data transfer mode */
|
||||||
/* Interface 1, Alternate Setting 1*/
|
/* Interface 1, Alternate Setting 1*/
|
||||||
__USBD_CMPSIT_SET_IF(1U, 1U, 1U, UVC_CC_VIDEO, \
|
__USBD_CMPSIT_SET_IF(1U, 1U, 1U, UVC_CC_VIDEO, SC_VIDEOSTREAMING, PC_PROTOCOL_UNDEFINED, 0U);
|
||||||
SC_VIDEOSTREAMING, PC_PROTOCOL_UNDEFINED, 0U);
|
|
||||||
|
|
||||||
/* Standard VS (Video Streaming) data Endpoint */
|
/* Standard VS (Video Streaming) data Endpoint */
|
||||||
pSVCDEP = ((USBD_StandardVCDataEPDescTypeDef *)(pConf + *Sze));
|
pSVCDEP = ((USBD_StandardVCDataEPDescTypeDef *)(pConf + *Sze));
|
||||||
@@ -1735,8 +1734,8 @@ static void USBD_CMPSIT_MTPDesc(USBD_HandleTypeDef *pdev, uint32_t pConf, __IO
|
|||||||
|
|
||||||
/* Append MTP Interface descriptor */
|
/* Append MTP Interface descriptor */
|
||||||
__USBD_CMPSIT_SET_IF((pdev->tclasslist[pdev->classId].Ifs[0]), (0U), \
|
__USBD_CMPSIT_SET_IF((pdev->tclasslist[pdev->classId].Ifs[0]), (0U), \
|
||||||
(uint8_t)(pdev->tclasslist[pdev->classId].NumEps), USB_MTP_INTRERFACE_CLASS, USB_MTP_INTRERFACE_SUB_CLASS,
|
(uint8_t)(pdev->tclasslist[pdev->classId].NumEps), USB_MTP_INTRERFACE_CLASS, \
|
||||||
USB_MTP_INTRERFACE_PROTOCOL, (0U));
|
USB_MTP_INTRERFACE_SUB_CLASS, USB_MTP_INTRERFACE_PROTOCOL, (0U));
|
||||||
|
|
||||||
if (speed == (uint8_t)USBD_SPEED_HIGH)
|
if (speed == (uint8_t)USBD_SPEED_HIGH)
|
||||||
{
|
{
|
||||||
@@ -1778,7 +1777,8 @@ uint32_t USBD_CMPSIT_SetClassID(USBD_HandleTypeDef *pdev, USBD_CompositeClassTy
|
|||||||
for (idx = 0U; idx < pdev->NumClasses; idx++)
|
for (idx = 0U; idx < pdev->NumClasses; idx++)
|
||||||
{
|
{
|
||||||
/* Check if the class correspond to the requested type and if it is active */
|
/* Check if the class correspond to the requested type and if it is active */
|
||||||
if (((USBD_CompositeClassTypeDef)(pdev->tclasslist[idx].ClassType) == Class) && ((pdev->tclasslist[idx].Active) == 1U))
|
if (((USBD_CompositeClassTypeDef)(pdev->tclasslist[idx].ClassType) == Class) &&
|
||||||
|
((pdev->tclasslist[idx].Active) == 1U))
|
||||||
{
|
{
|
||||||
if (inst == Instance)
|
if (inst == Instance)
|
||||||
{
|
{
|
||||||
@@ -1817,7 +1817,8 @@ uint32_t USBD_CMPSIT_GetClassID(USBD_HandleTypeDef *pdev, USBD_CompositeClassTy
|
|||||||
for (idx = 0U; idx < pdev->NumClasses; idx++)
|
for (idx = 0U; idx < pdev->NumClasses; idx++)
|
||||||
{
|
{
|
||||||
/* Check if the class correspond to the requested type and if it is active */
|
/* Check if the class correspond to the requested type and if it is active */
|
||||||
if (((USBD_CompositeClassTypeDef)(pdev->tclasslist[idx].ClassType) == Class) && ((pdev->tclasslist[idx].Active) == 1U))
|
if (((USBD_CompositeClassTypeDef)(pdev->tclasslist[idx].ClassType) == Class) &&
|
||||||
|
((pdev->tclasslist[idx].Active) == 1U))
|
||||||
{
|
{
|
||||||
if (inst == Instance)
|
if (inst == Instance)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -426,7 +426,8 @@ static uint8_t USBD_CUSTOM_HID_Setup(USBD_HandleTypeDef *pdev,
|
|||||||
{
|
{
|
||||||
/* Let the application decide what to do, keep EP0 data phase in NAK state and
|
/* Let the application decide what to do, keep EP0 data phase in NAK state and
|
||||||
use USBD_CtlSendData() when data become available or stall the EP0 data phase */
|
use USBD_CtlSendData() when data become available or stall the EP0 data phase */
|
||||||
((USBD_CUSTOM_HID_ItfTypeDef *)pdev->pUserData[pdev->classId])->CtrlReqComplete(req->bRequest, req->wLength);
|
((USBD_CUSTOM_HID_ItfTypeDef *)pdev->pUserData[pdev->classId])->CtrlReqComplete(req->bRequest,
|
||||||
|
req->wLength);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -291,7 +291,8 @@ static int8_t SCSI_Inquiry(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *param
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
||||||
pPage = (uint8_t *) & ((USBD_StorageTypeDef *)pdev->pUserData[pdev->classId])->pInquiry[lun * STANDARD_INQUIRY_DATA_LEN];
|
pPage = (uint8_t *) & ((USBD_StorageTypeDef *)pdev->pUserData[pdev->classId]) \
|
||||||
|
->pInquiry[lun * STANDARD_INQUIRY_DATA_LEN];
|
||||||
len = (uint16_t)pPage[4] + 5U;
|
len = (uint16_t)pPage[4] + 5U;
|
||||||
|
|
||||||
if (params[4] <= len)
|
if (params[4] <= len)
|
||||||
@@ -324,7 +325,8 @@ static int8_t SCSI_ReadCapacity10(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = ((USBD_StorageTypeDef *)pdev->pUserData[pdev->classId])->GetCapacity(lun, &hmsc->scsi_blk_nbr, &hmsc->scsi_blk_size);
|
ret = ((USBD_StorageTypeDef *)pdev->pUserData[pdev->classId])->GetCapacity(lun, &hmsc->scsi_blk_nbr,
|
||||||
|
&hmsc->scsi_blk_size);
|
||||||
|
|
||||||
if ((ret != 0) || (hmsc->scsi_medium_state == SCSI_MEDIUM_EJECTED))
|
if ((ret != 0) || (hmsc->scsi_medium_state == SCSI_MEDIUM_EJECTED))
|
||||||
{
|
{
|
||||||
@@ -359,7 +361,7 @@ static int8_t SCSI_ReadCapacity10(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t
|
|||||||
static int8_t SCSI_ReadCapacity16(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
|
static int8_t SCSI_ReadCapacity16(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
|
||||||
{
|
{
|
||||||
UNUSED(params);
|
UNUSED(params);
|
||||||
uint8_t idx;
|
uint32_t idx;
|
||||||
int8_t ret;
|
int8_t ret;
|
||||||
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassDataCmsit[pdev->classId];
|
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassDataCmsit[pdev->classId];
|
||||||
|
|
||||||
@@ -368,7 +370,8 @@ static int8_t SCSI_ReadCapacity16(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = ((USBD_StorageTypeDef *)pdev->pUserData[pdev->classId])->GetCapacity(lun, &hmsc->scsi_blk_nbr, &hmsc->scsi_blk_size);
|
ret = ((USBD_StorageTypeDef *)pdev->pUserData[pdev->classId])->GetCapacity(lun, &hmsc->scsi_blk_nbr,
|
||||||
|
&hmsc->scsi_blk_size);
|
||||||
|
|
||||||
if ((ret != 0) || (hmsc->scsi_medium_state == SCSI_MEDIUM_EJECTED))
|
if ((ret != 0) || (hmsc->scsi_medium_state == SCSI_MEDIUM_EJECTED))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -640,7 +640,8 @@ static uint8_t USBD_VIDEO_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum)
|
|||||||
static uint16_t PcktSze = UVC_PACKET_SIZE;
|
static uint16_t PcktSze = UVC_PACKET_SIZE;
|
||||||
static uint8_t payload_header[2] = {0x02U, 0x00U};
|
static uint8_t payload_header[2] = {0x02U, 0x00U};
|
||||||
uint8_t i = 0U;
|
uint8_t i = 0U;
|
||||||
uint32_t RemainData, DataOffset = 0U;
|
uint32_t RemainData = 0U;
|
||||||
|
uint32_t DataOffset = 0U;
|
||||||
|
|
||||||
/* Check if the Streaming has already been started */
|
/* Check if the Streaming has already been started */
|
||||||
if (hVIDEO->uvc_state == UVC_PLAY_STATUS_STREAMING)
|
if (hVIDEO->uvc_state == UVC_PLAY_STATUS_STREAMING)
|
||||||
|
|||||||
@@ -234,14 +234,16 @@ static int8_t VIDEO_Itf_Data(uint8_t **pbuf, uint16_t *psize, uint16_t *pcktidx)
|
|||||||
*psize = (uint16_t)UVC_PACKET_SIZE;
|
*psize = (uint16_t)UVC_PACKET_SIZE;
|
||||||
|
|
||||||
/* Get the pointer to the next packet to be transmitted */
|
/* Get the pointer to the next packet to be transmitted */
|
||||||
*pbuf = (uint8_t *)(*(ImagePtr + img_count) + (packet_index * ((uint16_t)(UVC_PACKET_SIZE - (UVC_HEADER_PACKET_CNT * 2U)))));
|
*pbuf = (uint8_t *)(*(ImagePtr + img_count) + \
|
||||||
|
(packet_index * ((uint16_t)(UVC_PACKET_SIZE - (UVC_HEADER_PACKET_CNT * 2U)))));
|
||||||
}
|
}
|
||||||
else if ((packet_index == packet_count))
|
else if ((packet_index == packet_count))
|
||||||
{
|
{
|
||||||
if (packet_remainder != 0U)
|
if (packet_remainder != 0U)
|
||||||
{
|
{
|
||||||
/* Get the pointer to the next packet to be transmitted */
|
/* Get the pointer to the next packet to be transmitted */
|
||||||
*pbuf = (uint8_t *)(*(ImagePtr + img_count) + (packet_index * ((uint16_t)(UVC_PACKET_SIZE - (UVC_HEADER_PACKET_CNT * 2U)))));
|
*pbuf = (uint8_t *)(*(ImagePtr + img_count) + \
|
||||||
|
(packet_index * ((uint16_t)(UVC_PACKET_SIZE - (UVC_HEADER_PACKET_CNT * 2U)))));
|
||||||
|
|
||||||
/* Set the current packet size */
|
/* Set the current packet size */
|
||||||
*psize = (uint16_t)(packet_remainder + (UVC_HEADER_PACKET_CNT * 2U));
|
*psize = (uint16_t)(packet_remainder + (UVC_HEADER_PACKET_CNT * 2U));
|
||||||
|
|||||||
@@ -416,7 +416,9 @@ typedef enum
|
|||||||
*/
|
*/
|
||||||
__STATIC_INLINE uint16_t SWAPBYTE(uint8_t *addr)
|
__STATIC_INLINE uint16_t SWAPBYTE(uint8_t *addr)
|
||||||
{
|
{
|
||||||
uint16_t _SwapVal, _Byte1, _Byte2;
|
uint16_t _SwapVal;
|
||||||
|
uint16_t _Byte1;
|
||||||
|
uint16_t _Byte2;
|
||||||
uint8_t *_pbuff = addr;
|
uint8_t *_pbuff = addr;
|
||||||
|
|
||||||
_Byte1 = *(uint8_t *)_pbuff;
|
_Byte1 = *(uint8_t *)_pbuff;
|
||||||
|
|||||||
@@ -256,6 +256,7 @@ USBD_StatusTypeDef USBD_LL_SetTestMode(USBD_HandleTypeDef *pdev, uint8_t testmod
|
|||||||
*/
|
*/
|
||||||
void *USBD_static_malloc(uint32_t size)
|
void *USBD_static_malloc(uint32_t size)
|
||||||
{
|
{
|
||||||
|
UNUSED(size);
|
||||||
static uint32_t mem[(sizeof(USBD_HID_HandleTypeDef) / 4) + 1]; /* On 32-bit boundary */
|
static uint32_t mem[(sizeof(USBD_HID_HandleTypeDef) / 4) + 1]; /* On 32-bit boundary */
|
||||||
return mem;
|
return mem;
|
||||||
}
|
}
|
||||||
@@ -267,7 +268,7 @@ void *USBD_static_malloc(uint32_t size)
|
|||||||
*/
|
*/
|
||||||
void USBD_static_free(void *p)
|
void USBD_static_free(void *p)
|
||||||
{
|
{
|
||||||
|
UNUSED(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -629,19 +629,6 @@ USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev,
|
|||||||
(void)USBD_CtlSendStatus(pdev);
|
(void)USBD_CtlSendStatus(pdev);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
#if 0
|
|
||||||
if (pdev->ep0_state == USBD_EP0_STATUS_OUT)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* STATUS PHASE completed, update ep0_state to idle
|
|
||||||
*/
|
|
||||||
pdev->ep0_state = USBD_EP0_IDLE;
|
|
||||||
(void)USBD_LL_StallEP(pdev, 0U);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -726,16 +713,6 @@ USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
#if 0
|
|
||||||
if ((pdev->ep0_state == USBD_EP0_STATUS_IN) ||
|
|
||||||
(pdev->ep0_state == USBD_EP0_IDLE))
|
|
||||||
{
|
|
||||||
(void)USBD_LL_StallEP(pdev, 0x80U);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
if (pdev->dev_test_mode != 0U)
|
if (pdev->dev_test_mode != 0U)
|
||||||
{
|
{
|
||||||
@@ -862,7 +839,11 @@ USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev,
|
|||||||
|
|
||||||
USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev)
|
USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev)
|
||||||
{
|
{
|
||||||
pdev->dev_old_state = pdev->dev_state;
|
if (pdev->dev_state != USBD_STATE_SUSPENDED)
|
||||||
|
{
|
||||||
|
pdev->dev_old_state = pdev->dev_state;
|
||||||
|
}
|
||||||
|
|
||||||
pdev->dev_state = USBD_STATE_SUSPENDED;
|
pdev->dev_state = USBD_STATE_SUSPENDED;
|
||||||
|
|
||||||
return USBD_OK;
|
return USBD_OK;
|
||||||
|
|||||||
@@ -374,7 +374,9 @@ uint8_t *USBD_Class_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *le
|
|||||||
*/
|
*/
|
||||||
static void Get_SerialNum(void)
|
static void Get_SerialNum(void)
|
||||||
{
|
{
|
||||||
uint32_t deviceserial0, deviceserial1, deviceserial2;
|
uint32_t deviceserial0;
|
||||||
|
uint32_t deviceserial1;
|
||||||
|
uint32_t deviceserial2;
|
||||||
|
|
||||||
deviceserial0 = *(uint32_t *)DEVICE_ID1;
|
deviceserial0 = *(uint32_t *)DEVICE_ID1;
|
||||||
deviceserial1 = *(uint32_t *)DEVICE_ID2;
|
deviceserial1 = *(uint32_t *)DEVICE_ID2;
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
<meta charset="utf-8" />
|
<meta charset="utf-8" />
|
||||||
<meta name="generator" content="pandoc" />
|
<meta name="generator" content="pandoc" />
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
|
||||||
<title>Release Notes for STM32GK Firmware Package</title>
|
<title>Release Notes for STM32Cube USB Device Library</title>
|
||||||
<style>
|
<style>
|
||||||
code{white-space: pre-wrap;}
|
code{white-space: pre-wrap;}
|
||||||
span.smallcaps{font-variant: small-caps;}
|
span.smallcaps{font-variant: small-caps;}
|
||||||
@@ -59,6 +59,53 @@ Page</a> : STM32Cube USB Wiki Page</li>
|
|||||||
<section id="update-history" class="col-sm-12 col-lg-8">
|
<section id="update-history" class="col-sm-12 col-lg-8">
|
||||||
<h1>Update History</h1>
|
<h1>Update History</h1>
|
||||||
<div class="collapse">
|
<div class="collapse">
|
||||||
|
<input type="checkbox" id="collapse-section23" checked aria-hidden="true">
|
||||||
|
<label for="collapse-section23" aria-hidden="true">V2.11.1 /
|
||||||
|
27-September-2022</label>
|
||||||
|
<h2 id="main-changes">Main Changes</h2>
|
||||||
|
<table>
|
||||||
|
<thead>
|
||||||
|
<tr class="header">
|
||||||
|
<th style="text-align: left;">Headline</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr class="even">
|
||||||
|
<td style="text-align: left;"> Improvement of the memory management
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="odd">
|
||||||
|
<td style="text-align: left;"><strong>USB Core:</strong></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="even">
|
||||||
|
<td style="text-align: left;">Fix some compilation warnings related
|
||||||
|
to unused parameters</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="odd">
|
||||||
|
<td style="text-align: left;">Improve some code parts style</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="even">
|
||||||
|
<td style="text-align: left;">Add check on the USB Device status in
|
||||||
|
USBD_LL_Suspend before suspending it</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="odd">
|
||||||
|
<td style="text-align: left;"><strong>USB CDC-ACM Class:</strong></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="even">
|
||||||
|
<td style="text-align: left;">Remove redundant prototype declaration of
|
||||||
|
USBD_CDC_GetOtherSpeedCfgDesc()</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="odd">
|
||||||
|
<td style="text-align: left;"><strong>USB CompositeBuilder, CCID, CDC_ECM, CDC_RNDIS,
|
||||||
|
CustomHID, MSC & Video Classes:</strong></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="even">
|
||||||
|
<td style="text-align: left;"> Improve some code parts style </td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="collapse">
|
||||||
<input type="checkbox" id="collapse-section22" checked aria-hidden="true">
|
<input type="checkbox" id="collapse-section22" checked aria-hidden="true">
|
||||||
<label for="collapse-section22" aria-hidden="true">V2.11.0 /
|
<label for="collapse-section22" aria-hidden="true">V2.11.0 /
|
||||||
25-March-2022</label>
|
25-March-2022</label>
|
||||||
@@ -170,7 +217,7 @@ selected</td>
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse">
|
<div class="collapse">
|
||||||
<input type="checkbox" id="collapse-section20" aria-hidden="true">
|
<input type="checkbox" id="collapse-section20" checked aria-hidden="true">
|
||||||
<label for="collapse-section20" aria-hidden="true">V2.9.0 /
|
<label for="collapse-section20" aria-hidden="true">V2.9.0 /
|
||||||
06-July-2021</label>
|
06-July-2021</label>
|
||||||
<h2 id="main-changes-2">Main Changes</h2>
|
<h2 id="main-changes-2">Main Changes</h2>
|
||||||
@@ -216,7 +263,7 @@ missing casting during class handler allocation</td>
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse">
|
<div class="collapse">
|
||||||
<input type="checkbox" id="collapse-section19" aria-hidden="true">
|
<input type="checkbox" id="collapse-section19" checked aria-hidden="true">
|
||||||
<label for="collapse-section19" aria-hidden="true">V2.8.0 /
|
<label for="collapse-section19" aria-hidden="true">V2.8.0 /
|
||||||
10-Mars-2021</label>
|
10-Mars-2021</label>
|
||||||
<h2 id="main-changes-3">Main Changes</h2>
|
<h2 id="main-changes-3">Main Changes</h2>
|
||||||
@@ -266,7 +313,7 @@ format support</td>
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse">
|
<div class="collapse">
|
||||||
<input type="checkbox" id="collapse-section17" aria-hidden="true">
|
<input type="checkbox" id="collapse-section17" checked aria-hidden="true">
|
||||||
<label for="collapse-section17" aria-hidden="true">V2.7.1 /
|
<label for="collapse-section17" aria-hidden="true">V2.7.1 /
|
||||||
18-August-2020</label>
|
18-August-2020</label>
|
||||||
<h2 id="main-changes-4">Main Changes</h2>
|
<h2 id="main-changes-4">Main Changes</h2>
|
||||||
@@ -285,7 +332,7 @@ check to Class handler</td>
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse">
|
<div class="collapse">
|
||||||
<input type="checkbox" id="collapse-section16" aria-hidden="true">
|
<input type="checkbox" id="collapse-section16" checked aria-hidden="true">
|
||||||
<label for="collapse-section16" aria-hidden="true">V2.7.0 /
|
<label for="collapse-section16" aria-hidden="true">V2.7.0 /
|
||||||
12-August-2020</label>
|
12-August-2020</label>
|
||||||
<h2 id="main-changes-5">Main Changes</h2>
|
<h2 id="main-changes-5">Main Changes</h2>
|
||||||
@@ -370,7 +417,7 @@ user code</td>
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse">
|
<div class="collapse">
|
||||||
<input type="checkbox" id="collapse-section15" aria-hidden="true">
|
<input type="checkbox" id="collapse-section15" checked aria-hidden="true">
|
||||||
<label for="collapse-section15" aria-hidden="true">V2.6.1 /
|
<label for="collapse-section15" aria-hidden="true">V2.6.1 /
|
||||||
05-June-2020</label>
|
05-June-2020</label>
|
||||||
<h2 id="main-changes-6">Main Changes</h2>
|
<h2 id="main-changes-6">Main Changes</h2>
|
||||||
@@ -410,7 +457,7 @@ compatibility with device library version below v2.6.0</td>
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse">
|
<div class="collapse">
|
||||||
<input type="checkbox" id="collapse-section14" aria-hidden="true">
|
<input type="checkbox" id="collapse-section14" checked aria-hidden="true">
|
||||||
<label for="collapse-section14" aria-hidden="true">V2.6.0 /
|
<label for="collapse-section14" aria-hidden="true">V2.6.0 /
|
||||||
27-December-2019</label>
|
27-December-2019</label>
|
||||||
<h2 id="main-changes-7">Main Changes</h2>
|
<h2 id="main-changes-7">Main Changes</h2>
|
||||||
@@ -493,7 +540,7 @@ transfer: USBD_CUSTOM_HID_ReceivePacket()</td>
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse">
|
<div class="collapse">
|
||||||
<input type="checkbox" id="collapse-section13" aria-hidden="true">
|
<input type="checkbox" id="collapse-section13" checked aria-hidden="true">
|
||||||
<label for="collapse-section13" aria-hidden="true">V2.5.3 /
|
<label for="collapse-section13" aria-hidden="true">V2.5.3 /
|
||||||
30-April-2019</label>
|
30-April-2019</label>
|
||||||
<h2 id="main-changes-8">Main Changes</h2>
|
<h2 id="main-changes-8">Main Changes</h2>
|
||||||
@@ -532,7 +579,7 @@ device state only if the current state is USBD_STATE_SUSPENDED</td>
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse">
|
<div class="collapse">
|
||||||
<input type="checkbox" id="collapse-section12" aria-hidden="true">
|
<input type="checkbox" id="collapse-section12" checked aria-hidden="true">
|
||||||
<label for="collapse-section12" aria-hidden="true">V2.5.2 /
|
<label for="collapse-section12" aria-hidden="true">V2.5.2 /
|
||||||
27-Mars-2019</label>
|
27-Mars-2019</label>
|
||||||
<h2 id="main-changes-9">Main Changes</h2>
|
<h2 id="main-changes-9">Main Changes</h2>
|
||||||
@@ -552,7 +599,7 @@ NVIC_SystemReset() prototype change</td>
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse">
|
<div class="collapse">
|
||||||
<input type="checkbox" id="collapse-section11" aria-hidden="true">
|
<input type="checkbox" id="collapse-section11" checked aria-hidden="true">
|
||||||
<label for="collapse-section11" aria-hidden="true">V2.5.1 /
|
<label for="collapse-section11" aria-hidden="true">V2.5.1 /
|
||||||
03-August-2018</label>
|
03-August-2018</label>
|
||||||
<h2 id="main-changes-10">Main Changes</h2>
|
<h2 id="main-changes-10">Main Changes</h2>
|
||||||
@@ -587,7 +634,7 @@ Break on USBD_Template_Setup API</td>
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse">
|
<div class="collapse">
|
||||||
<input type="checkbox" id="collapse-section10" aria-hidden="true">
|
<input type="checkbox" id="collapse-section10" checked aria-hidden="true">
|
||||||
<label for="collapse-section10" aria-hidden="true">V2.5.0 /
|
<label for="collapse-section10" aria-hidden="true">V2.5.0 /
|
||||||
15-December-2017</label>
|
15-December-2017</label>
|
||||||
<h2 id="main-changes-11">Main Changes</h2>
|
<h2 id="main-changes-11">Main Changes</h2>
|
||||||
@@ -637,7 +684,7 @@ machine</td>
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse">
|
<div class="collapse">
|
||||||
<input type="checkbox" id="collapse-section9" aria-hidden="true">
|
<input type="checkbox" id="collapse-section9" checked aria-hidden="true">
|
||||||
<label for="collapse-section9" aria-hidden="true">V2.4.2 /
|
<label for="collapse-section9" aria-hidden="true">V2.4.2 /
|
||||||
11-December-2015</label>
|
11-December-2015</label>
|
||||||
<h2 id="main-changes-12">Main Changes</h2>
|
<h2 id="main-changes-12">Main Changes</h2>
|
||||||
@@ -659,7 +706,7 @@ by #include “usbd_cdc.h”</td>
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse">
|
<div class="collapse">
|
||||||
<input type="checkbox" id="collapse-section8" aria-hidden="true">
|
<input type="checkbox" id="collapse-section8" checked aria-hidden="true">
|
||||||
<label for="collapse-section8" aria-hidden="true">V2.4.1 /
|
<label for="collapse-section8" aria-hidden="true">V2.4.1 /
|
||||||
19-June-2015</label>
|
19-June-2015</label>
|
||||||
<h2 id="main-changes-13">Main Changes</h2>
|
<h2 id="main-changes-13">Main Changes</h2>
|
||||||
@@ -698,7 +745,7 @@ DMA half transfer</td>
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse">
|
<div class="collapse">
|
||||||
<input type="checkbox" id="collapse-section7" aria-hidden="true">
|
<input type="checkbox" id="collapse-section7" checked aria-hidden="true">
|
||||||
<label for="collapse-section7" aria-hidden="true">V2.4.0 /
|
<label for="collapse-section7" aria-hidden="true">V2.4.0 /
|
||||||
28-February-2015</label>
|
28-February-2015</label>
|
||||||
<h2 id="main-changes-14">Main Changes</h2>
|
<h2 id="main-changes-14">Main Changes</h2>
|
||||||
@@ -756,7 +803,7 @@ CDC_SET_CONTROL_LINE_STATE and similar no-data setup requests.</td>
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse">
|
<div class="collapse">
|
||||||
<input type="checkbox" id="collapse-section6" aria-hidden="true">
|
<input type="checkbox" id="collapse-section6" checked aria-hidden="true">
|
||||||
<label for="collapse-section6" aria-hidden="true">V2.3.0 /
|
<label for="collapse-section6" aria-hidden="true">V2.3.0 /
|
||||||
04-November-2014</label>
|
04-November-2014</label>
|
||||||
<h2 id="main-changes-15">Main Changes</h2>
|
<h2 id="main-changes-15">Main Changes</h2>
|
||||||
@@ -790,7 +837,7 @@ update</td>
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse">
|
<div class="collapse">
|
||||||
<input type="checkbox" id="collapse-section5" aria-hidden="true">
|
<input type="checkbox" id="collapse-section5" checked aria-hidden="true">
|
||||||
<label for="collapse-section5" aria-hidden="true">V2.2.0 /
|
<label for="collapse-section5" aria-hidden="true">V2.2.0 /
|
||||||
13-June-2014</label>
|
13-June-2014</label>
|
||||||
<h2 id="main-changes-16">Main Changes</h2>
|
<h2 id="main-changes-16">Main Changes</h2>
|
||||||
@@ -845,7 +892,7 @@ USBD_HID_CLASS)</td>
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse">
|
<div class="collapse">
|
||||||
<input type="checkbox" id="collapse-section4" aria-hidden="true">
|
<input type="checkbox" id="collapse-section4" checked aria-hidden="true">
|
||||||
<label for="collapse-section4" aria-hidden="true">V2.1.0 /
|
<label for="collapse-section4" aria-hidden="true">V2.1.0 /
|
||||||
22-April-2014</label>
|
22-April-2014</label>
|
||||||
<h2 id="main-changes-17">Main Changes</h2>
|
<h2 id="main-changes-17">Main Changes</h2>
|
||||||
@@ -892,7 +939,7 @@ usbd_customhid_if_template.c/h</td>
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse">
|
<div class="collapse">
|
||||||
<input type="checkbox" id="collapse-section3" aria-hidden="true">
|
<input type="checkbox" id="collapse-section3" checked aria-hidden="true">
|
||||||
<label for="collapse-section3" aria-hidden="true">V2.0.0 /
|
<label for="collapse-section3" aria-hidden="true">V2.0.0 /
|
||||||
18-February-2014</label>
|
18-February-2014</label>
|
||||||
<h2 id="main-changes-18">Main Changes</h2>
|
<h2 id="main-changes-18">Main Changes</h2>
|
||||||
@@ -915,7 +962,7 @@ compatible.</td>
|
|||||||
development</strong></p>
|
development</strong></p>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse">
|
<div class="collapse">
|
||||||
<input type="checkbox" id="collapse-section2" aria-hidden="true">
|
<input type="checkbox" id="collapse-section2" checked aria-hidden="true">
|
||||||
<label for="collapse-section2" aria-hidden="true">V1.1.0 /
|
<label for="collapse-section2" aria-hidden="true">V1.1.0 /
|
||||||
19-March-2012</label>
|
19-March-2012</label>
|
||||||
<h2 id="main-changes-19">Main Changes</h2>
|
<h2 id="main-changes-19">Main Changes</h2>
|
||||||
@@ -952,7 +999,7 @@ to take into account error during Control OUT stage</td>
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="collapse">
|
<div class="collapse">
|
||||||
<input type="checkbox" id="collapse-section1" aria-hidden="true">
|
<input type="checkbox" id="collapse-section1" checked aria-hidden="true">
|
||||||
<label for="collapse-section1" aria-hidden="true">V1.0.0 /
|
<label for="collapse-section1" aria-hidden="true">V1.0.0 /
|
||||||
22-July-2011</label>
|
22-July-2011</label>
|
||||||
<h2 id="main-changes-20">Main Changes</h2>
|
<h2 id="main-changes-20">Main Changes</h2>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
pagetitle: Release Notes for STM32GK Firmware Package
|
pagetitle: Release Notes for STM32Cube USB Device Library
|
||||||
lang: en
|
lang: en
|
||||||
header-includes: <link rel="icon" type="image/x-icon" href="_htmresc/favicon.png" />
|
header-includes: <link rel="icon" type="image/x-icon" href="_htmresc/favicon.png" />
|
||||||
---
|
---
|
||||||
@@ -35,6 +35,30 @@ Here is the list of references to user documents:
|
|||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
|
::: {.col-sm-12 .col-lg-8}
|
||||||
|
# Update History
|
||||||
|
::: {.collapse}
|
||||||
|
<input type="checkbox" id="collapse-section23" checked aria-hidden="true">
|
||||||
|
<label for="collapse-section23" aria-hidden="true">V2.11.1 / 27-September-2022</label>
|
||||||
|
<div>
|
||||||
|
|
||||||
|
## Main Changes
|
||||||
|
|
||||||
|
Headline
|
||||||
|
---------
|
||||||
|
Improvement of the memory management
|
||||||
|
**USB Core:**
|
||||||
|
Fix some compilation warnings related to unused parameters
|
||||||
|
Improve some code parts style
|
||||||
|
Add check on the USB Device status in USBD_LL_Suspend before suspending it
|
||||||
|
**USB CDC-ACM Class:**
|
||||||
|
Remove redundant prototype declaration of USBD_CDC_GetOtherSpeedCfgDesc()
|
||||||
|
**USB CompositeBuilder, CCID, CDC_ECM, CDC_RNDIS, CustomHID, MSC & Video Classes:**
|
||||||
|
Improve some code parts style
|
||||||
|
|
||||||
|
</div>
|
||||||
|
:::
|
||||||
|
|
||||||
::: {.col-sm-12 .col-lg-8}
|
::: {.col-sm-12 .col-lg-8}
|
||||||
# Update History
|
# Update History
|
||||||
::: {.collapse}
|
::: {.collapse}
|
||||||
@@ -88,7 +112,7 @@ Here is the list of references to user documents:
|
|||||||
:::
|
:::
|
||||||
|
|
||||||
::: {.collapse}
|
::: {.collapse}
|
||||||
<input type="checkbox" id="collapse-section20" aria-hidden="true">
|
<input type="checkbox" id="collapse-section20" checked aria-hidden="true">
|
||||||
<label for="collapse-section20" aria-hidden="true">V2.9.0 / 06-July-2021</label>
|
<label for="collapse-section20" aria-hidden="true">V2.9.0 / 06-July-2021</label>
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
@@ -110,7 +134,7 @@ Here is the list of references to user documents:
|
|||||||
:::
|
:::
|
||||||
|
|
||||||
::: {.collapse}
|
::: {.collapse}
|
||||||
<input type="checkbox" id="collapse-section19" aria-hidden="true">
|
<input type="checkbox" id="collapse-section19" checked aria-hidden="true">
|
||||||
<label for="collapse-section19" aria-hidden="true">V2.8.0 / 10-Mars-2021</label>
|
<label for="collapse-section19" aria-hidden="true">V2.8.0 / 10-Mars-2021</label>
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
@@ -134,7 +158,7 @@ Here is the list of references to user documents:
|
|||||||
|
|
||||||
|
|
||||||
::: {.collapse}
|
::: {.collapse}
|
||||||
<input type="checkbox" id="collapse-section17" aria-hidden="true">
|
<input type="checkbox" id="collapse-section17" checked aria-hidden="true">
|
||||||
<label for="collapse-section17" aria-hidden="true">V2.7.1 / 18-August-2020</label>
|
<label for="collapse-section17" aria-hidden="true">V2.7.1 / 18-August-2020</label>
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
@@ -149,7 +173,7 @@ Here is the list of references to user documents:
|
|||||||
:::
|
:::
|
||||||
|
|
||||||
::: {.collapse}
|
::: {.collapse}
|
||||||
<input type="checkbox" id="collapse-section16" aria-hidden="true">
|
<input type="checkbox" id="collapse-section16" checked aria-hidden="true">
|
||||||
<label for="collapse-section16" aria-hidden="true">V2.7.0 / 12-August-2020</label>
|
<label for="collapse-section16" aria-hidden="true">V2.7.0 / 12-August-2020</label>
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
@@ -181,7 +205,7 @@ Here is the list of references to user documents:
|
|||||||
:::
|
:::
|
||||||
|
|
||||||
::: {.collapse}
|
::: {.collapse}
|
||||||
<input type="checkbox" id="collapse-section15" aria-hidden="true">
|
<input type="checkbox" id="collapse-section15" checked aria-hidden="true">
|
||||||
<label for="collapse-section15" aria-hidden="true">V2.6.1 / 05-June-2020</label>
|
<label for="collapse-section15" aria-hidden="true">V2.6.1 / 05-June-2020</label>
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
@@ -201,7 +225,7 @@ Here is the list of references to user documents:
|
|||||||
:::
|
:::
|
||||||
|
|
||||||
::: {.collapse}
|
::: {.collapse}
|
||||||
<input type="checkbox" id="collapse-section14" aria-hidden="true">
|
<input type="checkbox" id="collapse-section14" checked aria-hidden="true">
|
||||||
<label for="collapse-section14" aria-hidden="true">V2.6.0 / 27-December-2019</label>
|
<label for="collapse-section14" aria-hidden="true">V2.6.0 / 27-December-2019</label>
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
@@ -234,7 +258,7 @@ Here is the list of references to user documents:
|
|||||||
:::
|
:::
|
||||||
|
|
||||||
::: {.collapse}
|
::: {.collapse}
|
||||||
<input type="checkbox" id="collapse-section13" aria-hidden="true">
|
<input type="checkbox" id="collapse-section13" checked aria-hidden="true">
|
||||||
<label for="collapse-section13" aria-hidden="true">V2.5.3 / 30-April-2019</label>
|
<label for="collapse-section13" aria-hidden="true">V2.5.3 / 30-April-2019</label>
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
@@ -255,7 +279,7 @@ Here is the list of references to user documents:
|
|||||||
|
|
||||||
|
|
||||||
::: {.collapse}
|
::: {.collapse}
|
||||||
<input type="checkbox" id="collapse-section12" aria-hidden="true">
|
<input type="checkbox" id="collapse-section12" checked aria-hidden="true">
|
||||||
<label for="collapse-section12" aria-hidden="true">V2.5.2 / 27-Mars-2019</label>
|
<label for="collapse-section12" aria-hidden="true">V2.5.2 / 27-Mars-2019</label>
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
@@ -270,7 +294,7 @@ Here is the list of references to user documents:
|
|||||||
:::
|
:::
|
||||||
|
|
||||||
::: {.collapse}
|
::: {.collapse}
|
||||||
<input type="checkbox" id="collapse-section11" aria-hidden="true">
|
<input type="checkbox" id="collapse-section11" checked aria-hidden="true">
|
||||||
<label for="collapse-section11" aria-hidden="true">V2.5.1 / 03-August-2018</label>
|
<label for="collapse-section11" aria-hidden="true">V2.5.1 / 03-August-2018</label>
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
@@ -288,7 +312,7 @@ Here is the list of references to user documents:
|
|||||||
:::
|
:::
|
||||||
|
|
||||||
::: {.collapse}
|
::: {.collapse}
|
||||||
<input type="checkbox" id="collapse-section10" aria-hidden="true">
|
<input type="checkbox" id="collapse-section10" checked aria-hidden="true">
|
||||||
<label for="collapse-section10" aria-hidden="true">V2.5.0 / 15-December-2017</label>
|
<label for="collapse-section10" aria-hidden="true">V2.5.0 / 15-December-2017</label>
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
@@ -311,7 +335,7 @@ Here is the list of references to user documents:
|
|||||||
:::
|
:::
|
||||||
|
|
||||||
::: {.collapse}
|
::: {.collapse}
|
||||||
<input type="checkbox" id="collapse-section9" aria-hidden="true">
|
<input type="checkbox" id="collapse-section9" checked aria-hidden="true">
|
||||||
<label for="collapse-section9" aria-hidden="true">V2.4.2 / 11-December-2015</label>
|
<label for="collapse-section9" aria-hidden="true">V2.4.2 / 11-December-2015</label>
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
@@ -327,7 +351,7 @@ Here is the list of references to user documents:
|
|||||||
:::
|
:::
|
||||||
|
|
||||||
::: {.collapse}
|
::: {.collapse}
|
||||||
<input type="checkbox" id="collapse-section8" aria-hidden="true">
|
<input type="checkbox" id="collapse-section8" checked aria-hidden="true">
|
||||||
<label for="collapse-section8" aria-hidden="true">V2.4.1 / 19-June-2015</label>
|
<label for="collapse-section8" aria-hidden="true">V2.4.1 / 19-June-2015</label>
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
@@ -348,7 +372,7 @@ Here is the list of references to user documents:
|
|||||||
:::
|
:::
|
||||||
|
|
||||||
::: {.collapse}
|
::: {.collapse}
|
||||||
<input type="checkbox" id="collapse-section7" aria-hidden="true">
|
<input type="checkbox" id="collapse-section7" checked aria-hidden="true">
|
||||||
<label for="collapse-section7" aria-hidden="true">V2.4.0 / 28-February-2015</label>
|
<label for="collapse-section7" aria-hidden="true">V2.4.0 / 28-February-2015</label>
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
@@ -371,7 +395,7 @@ Here is the list of references to user documents:
|
|||||||
:::
|
:::
|
||||||
|
|
||||||
::: {.collapse}
|
::: {.collapse}
|
||||||
<input type="checkbox" id="collapse-section6" aria-hidden="true">
|
<input type="checkbox" id="collapse-section6" checked aria-hidden="true">
|
||||||
<label for="collapse-section6" aria-hidden="true">V2.3.0 / 04-November-2014</label>
|
<label for="collapse-section6" aria-hidden="true">V2.3.0 / 04-November-2014</label>
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
@@ -389,7 +413,7 @@ Here is the list of references to user documents:
|
|||||||
:::
|
:::
|
||||||
|
|
||||||
::: {.collapse}
|
::: {.collapse}
|
||||||
<input type="checkbox" id="collapse-section5" aria-hidden="true">
|
<input type="checkbox" id="collapse-section5" checked aria-hidden="true">
|
||||||
<label for="collapse-section5" aria-hidden="true">V2.2.0 / 13-June-2014</label>
|
<label for="collapse-section5" aria-hidden="true">V2.2.0 / 13-June-2014</label>
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
@@ -412,7 +436,7 @@ Here is the list of references to user documents:
|
|||||||
:::
|
:::
|
||||||
|
|
||||||
::: {.collapse}
|
::: {.collapse}
|
||||||
<input type="checkbox" id="collapse-section4" aria-hidden="true">
|
<input type="checkbox" id="collapse-section4" checked aria-hidden="true">
|
||||||
<label for="collapse-section4" aria-hidden="true">V2.1.0 / 22-April-2014</label>
|
<label for="collapse-section4" aria-hidden="true">V2.1.0 / 22-April-2014</label>
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
@@ -433,7 +457,7 @@ Here is the list of references to user documents:
|
|||||||
:::
|
:::
|
||||||
|
|
||||||
::: {.collapse}
|
::: {.collapse}
|
||||||
<input type="checkbox" id="collapse-section3" aria-hidden="true">
|
<input type="checkbox" id="collapse-section3" checked aria-hidden="true">
|
||||||
<label for="collapse-section3" aria-hidden="true">V2.0.0 / 18-February-2014</label>
|
<label for="collapse-section3" aria-hidden="true">V2.0.0 / 18-February-2014</label>
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
@@ -452,7 +476,7 @@ Major update based on STM32Cube specification.
|
|||||||
:::
|
:::
|
||||||
|
|
||||||
::: {.collapse}
|
::: {.collapse}
|
||||||
<input type="checkbox" id="collapse-section2" aria-hidden="true">
|
<input type="checkbox" id="collapse-section2" checked aria-hidden="true">
|
||||||
<label for="collapse-section2" aria-hidden="true">V1.1.0 / 19-March-2012</label>
|
<label for="collapse-section2" aria-hidden="true">V1.1.0 / 19-March-2012</label>
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
@@ -471,7 +495,7 @@ Major update based on STM32Cube specification.
|
|||||||
:::
|
:::
|
||||||
|
|
||||||
::: {.collapse}
|
::: {.collapse}
|
||||||
<input type="checkbox" id="collapse-section1" aria-hidden="true">
|
<input type="checkbox" id="collapse-section1" checked aria-hidden="true">
|
||||||
<label for="collapse-section1" aria-hidden="true">V1.0.0 / 22-July-2011</label>
|
<label for="collapse-section1" aria-hidden="true">V1.0.0 / 22-July-2011</label>
|
||||||
<div>
|
<div>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user