Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/Flipper-Zero/STM32CubeWB.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'Middlewares/ST/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_bot.c')
-rw-r--r--Middlewares/ST/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_bot.c191
1 files changed, 120 insertions, 71 deletions
diff --git a/Middlewares/ST/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_bot.c b/Middlewares/ST/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_bot.c
index ae68ac055..bbe94303e 100644
--- a/Middlewares/ST/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_bot.c
+++ b/Middlewares/ST/STM32_USB_Device_Library/Class/MSC/Src/usbd_msc_bot.c
@@ -90,15 +90,20 @@ static void MSC_BOT_Abort(USBD_HandleTypeDef *pdev);
/**
-* @brief MSC_BOT_Init
-* Initialize the BOT Process
-* @param pdev: device instance
-* @retval None
-*/
+ * @brief MSC_BOT_Init
+ * Initialize the BOT Process
+ * @param pdev: device instance
+ * @retval None
+ */
void MSC_BOT_Init(USBD_HandleTypeDef *pdev)
{
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
+ if (hmsc == NULL)
+ {
+ return;
+ }
+
hmsc->bot_state = USBD_BOT_IDLE;
hmsc->bot_status = USBD_BOT_STATUS_NORMAL;
@@ -111,88 +116,107 @@ void MSC_BOT_Init(USBD_HandleTypeDef *pdev)
(void)USBD_LL_FlushEP(pdev, MSC_EPOUT_ADDR);
(void)USBD_LL_FlushEP(pdev, MSC_EPIN_ADDR);
- /* Prapare EP to Receive First BOT Cmd */
+ /* Prepare EP to Receive First BOT Cmd */
(void)USBD_LL_PrepareReceive(pdev, MSC_EPOUT_ADDR, (uint8_t *)&hmsc->cbw,
USBD_BOT_CBW_LENGTH);
}
/**
-* @brief MSC_BOT_Reset
-* Reset the BOT Machine
-* @param pdev: device instance
-* @retval None
-*/
+ * @brief MSC_BOT_Reset
+ * Reset the BOT Machine
+ * @param pdev: device instance
+ * @retval None
+ */
void MSC_BOT_Reset(USBD_HandleTypeDef *pdev)
{
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
+ if (hmsc == NULL)
+ {
+ return;
+ }
+
hmsc->bot_state = USBD_BOT_IDLE;
hmsc->bot_status = USBD_BOT_STATUS_RECOVERY;
(void)USBD_LL_ClearStallEP(pdev, MSC_EPIN_ADDR);
(void)USBD_LL_ClearStallEP(pdev, MSC_EPOUT_ADDR);
- /* Prapare EP to Receive First BOT Cmd */
+ /* Prepare EP to Receive First BOT Cmd */
(void)USBD_LL_PrepareReceive(pdev, MSC_EPOUT_ADDR, (uint8_t *)&hmsc->cbw,
USBD_BOT_CBW_LENGTH);
}
/**
-* @brief MSC_BOT_DeInit
-* Deinitialize the BOT Machine
-* @param pdev: device instance
-* @retval None
-*/
+ * @brief MSC_BOT_DeInit
+ * DeInitialize the BOT Machine
+ * @param pdev: device instance
+ * @retval None
+ */
void MSC_BOT_DeInit(USBD_HandleTypeDef *pdev)
{
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
- hmsc->bot_state = USBD_BOT_IDLE;
+
+ if (hmsc != NULL)
+ {
+ hmsc->bot_state = USBD_BOT_IDLE;
+ }
}
/**
-* @brief MSC_BOT_DataIn
-* Handle BOT IN data stage
-* @param pdev: device instance
-* @param epnum: endpoint index
-* @retval None
-*/
+ * @brief MSC_BOT_DataIn
+ * Handle BOT IN data stage
+ * @param pdev: device instance
+ * @param epnum: endpoint index
+ * @retval None
+ */
void MSC_BOT_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum)
{
UNUSED(epnum);
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
+ if (hmsc == NULL)
+ {
+ return;
+ }
+
switch (hmsc->bot_state)
{
- case USBD_BOT_DATA_IN:
- if (SCSI_ProcessCmd(pdev, hmsc->cbw.bLUN, &hmsc->cbw.CB[0]) < 0)
- {
- MSC_BOT_SendCSW(pdev, USBD_CSW_CMD_FAILED);
- }
- break;
+ case USBD_BOT_DATA_IN:
+ if (SCSI_ProcessCmd(pdev, hmsc->cbw.bLUN, &hmsc->cbw.CB[0]) < 0)
+ {
+ MSC_BOT_SendCSW(pdev, USBD_CSW_CMD_FAILED);
+ }
+ break;
- case USBD_BOT_SEND_DATA:
- case USBD_BOT_LAST_DATA_IN:
- MSC_BOT_SendCSW(pdev, USBD_CSW_CMD_PASSED);
- break;
+ case USBD_BOT_SEND_DATA:
+ case USBD_BOT_LAST_DATA_IN:
+ MSC_BOT_SendCSW(pdev, USBD_CSW_CMD_PASSED);
+ break;
- default:
- break;
+ default:
+ break;
}
}
/**
-* @brief MSC_BOT_DataOut
-* Process MSC OUT data
-* @param pdev: device instance
-* @param epnum: endpoint index
-* @retval None
-*/
+ * @brief MSC_BOT_DataOut
+ * Process MSC OUT data
+ * @param pdev: device instance
+ * @param epnum: endpoint index
+ * @retval None
+ */
void MSC_BOT_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum)
{
UNUSED(epnum);
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
+ if (hmsc == NULL)
+ {
+ return;
+ }
+
switch (hmsc->bot_state)
{
case USBD_BOT_IDLE:
@@ -212,15 +236,20 @@ void MSC_BOT_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum)
}
/**
-* @brief MSC_BOT_CBW_Decode
-* Decode the CBW command and set the BOT state machine accordingly
-* @param pdev: device instance
-* @retval None
-*/
+ * @brief MSC_BOT_CBW_Decode
+ * Decode the CBW command and set the BOT state machine accordingly
+ * @param pdev: device instance
+ * @retval None
+ */
static void MSC_BOT_CBW_Decode(USBD_HandleTypeDef *pdev)
{
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
+ if (hmsc == NULL)
+ {
+ return;
+ }
+
hmsc->csw.dTag = hmsc->cbw.dTag;
hmsc->csw.dDataResidue = hmsc->cbw.dDataLength;
@@ -273,19 +302,24 @@ static void MSC_BOT_CBW_Decode(USBD_HandleTypeDef *pdev)
}
/**
-* @brief MSC_BOT_SendData
-* Send the requested data
-* @param pdev: device instance
-* @param buf: pointer to data buffer
-* @param len: Data Length
-* @retval None
-*/
+ * @brief MSC_BOT_SendData
+ * Send the requested data
+ * @param pdev: device instance
+ * @param buf: pointer to data buffer
+ * @param len: Data Length
+ * @retval None
+ */
static void MSC_BOT_SendData(USBD_HandleTypeDef *pdev, uint8_t *pbuf, uint32_t len)
{
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
uint32_t length = MIN(hmsc->cbw.dDataLength, len);
+ if (hmsc == NULL)
+ {
+ return;
+ }
+
hmsc->csw.dDataResidue -= len;
hmsc->csw.bStatus = USBD_CSW_CMD_PASSED;
hmsc->bot_state = USBD_BOT_SEND_DATA;
@@ -294,16 +328,21 @@ static void MSC_BOT_SendData(USBD_HandleTypeDef *pdev, uint8_t *pbuf, uint32_t
}
/**
-* @brief MSC_BOT_SendCSW
-* Send the Command Status Wrapper
-* @param pdev: device instance
-* @param status : CSW status
-* @retval None
-*/
+ * @brief MSC_BOT_SendCSW
+ * Send the Command Status Wrapper
+ * @param pdev: device instance
+ * @param status : CSW status
+ * @retval None
+ */
void MSC_BOT_SendCSW(USBD_HandleTypeDef *pdev, uint8_t CSW_Status)
{
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
+ if (hmsc == NULL)
+ {
+ return;
+ }
+
hmsc->csw.dSignature = USBD_BOT_CSW_SIGNATURE;
hmsc->csw.bStatus = CSW_Status;
hmsc->bot_state = USBD_BOT_IDLE;
@@ -317,16 +356,21 @@ void MSC_BOT_SendCSW(USBD_HandleTypeDef *pdev, uint8_t CSW_Status)
}
/**
-* @brief MSC_BOT_Abort
-* Abort the current transfer
-* @param pdev: device instance
-* @retval status
-*/
+ * @brief MSC_BOT_Abort
+ * Abort the current transfer
+ * @param pdev: device instance
+ * @retval status
+ */
static void MSC_BOT_Abort(USBD_HandleTypeDef *pdev)
{
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
+ if (hmsc == NULL)
+ {
+ return;
+ }
+
if ((hmsc->cbw.bmFlags == 0U) &&
(hmsc->cbw.dDataLength != 0U) &&
(hmsc->bot_status == USBD_BOT_STATUS_NORMAL))
@@ -344,17 +388,22 @@ static void MSC_BOT_Abort(USBD_HandleTypeDef *pdev)
}
/**
-* @brief MSC_BOT_CplClrFeature
-* Complete the clear feature request
-* @param pdev: device instance
-* @param epnum: endpoint index
-* @retval None
-*/
+ * @brief MSC_BOT_CplClrFeature
+ * Complete the clear feature request
+ * @param pdev: device instance
+ * @param epnum: endpoint index
+ * @retval None
+ */
void MSC_BOT_CplClrFeature(USBD_HandleTypeDef *pdev, uint8_t epnum)
{
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
+ if (hmsc == NULL)
+ {
+ return;
+ }
+
if (hmsc->bot_status == USBD_BOT_STATUS_ERROR) /* Bad CBW Signature */
{
(void)USBD_LL_StallEP(pdev, MSC_EPIN_ADDR);