mirror of
https://github.com/iNavFlight/inav.git
synced 2025-07-13 11:29:56 +03:00
h7: enable usb msc and fix middleware compliation
This commit is contained in:
parent
b4ba470244
commit
6855c33d60
4 changed files with 29 additions and 28 deletions
|
@ -189,8 +189,6 @@ function(target_stm32h7xx)
|
||||||
|
|
||||||
OPENOCD_TARGET stm32h7x
|
OPENOCD_TARGET stm32h7x
|
||||||
|
|
||||||
DISABLE_MSC # This should be temporary
|
|
||||||
|
|
||||||
# BOOTLOADER
|
# BOOTLOADER
|
||||||
|
|
||||||
${ARGN}
|
${ARGN}
|
||||||
|
|
|
@ -82,12 +82,13 @@ typedef struct _USBD_STORAGE
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
// bot_data at start of structure to ensure cache alignment
|
||||||
|
uint8_t bot_data[MSC_MEDIA_PACKET];
|
||||||
uint32_t max_lun;
|
uint32_t max_lun;
|
||||||
uint32_t interface;
|
uint32_t interface;
|
||||||
uint8_t bot_state;
|
uint8_t bot_state;
|
||||||
uint8_t bot_status;
|
uint8_t bot_status;
|
||||||
uint16_t bot_data_length;
|
uint16_t bot_data_length;
|
||||||
uint8_t bot_data[MSC_MEDIA_PACKET];
|
|
||||||
USBD_MSC_BOT_CBWTypeDef cbw;
|
USBD_MSC_BOT_CBWTypeDef cbw;
|
||||||
USBD_MSC_BOT_CSWTypeDef csw;
|
USBD_MSC_BOT_CSWTypeDef csw;
|
||||||
|
|
||||||
|
|
|
@ -265,6 +265,8 @@ __ALIGN_BEGIN uint8_t USBD_MSC_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC]
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
static USBD_MSC_BOT_HandleTypeDef ClassData __attribute__((aligned(32)));
|
||||||
|
|
||||||
|
|
||||||
/** @defgroup MSC_CORE_Private_Functions
|
/** @defgroup MSC_CORE_Private_Functions
|
||||||
* @{
|
* @{
|
||||||
|
@ -301,7 +303,7 @@ uint8_t USBD_MSC_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
|
||||||
USBD_LL_OpenEP(pdev, MSC_EPIN_ADDR, USBD_EP_TYPE_BULK, MSC_MAX_FS_PACKET);
|
USBD_LL_OpenEP(pdev, MSC_EPIN_ADDR, USBD_EP_TYPE_BULK, MSC_MAX_FS_PACKET);
|
||||||
pdev->ep_in[MSC_EPIN_ADDR & 0xFU].is_used = 1U;
|
pdev->ep_in[MSC_EPIN_ADDR & 0xFU].is_used = 1U;
|
||||||
}
|
}
|
||||||
pdev->pMSC_ClassData = USBD_malloc(sizeof(USBD_MSC_BOT_HandleTypeDef));
|
pdev->pMSC_ClassData = (void*)&ClassData;
|
||||||
|
|
||||||
if (pdev->pMSC_ClassData == NULL)
|
if (pdev->pMSC_ClassData == NULL)
|
||||||
{
|
{
|
||||||
|
|
|
@ -181,7 +181,7 @@ int8_t SCSI_ProcessCmd(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *cmd)
|
||||||
*/
|
*/
|
||||||
static int8_t SCSI_TestUnitReady(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
|
static int8_t SCSI_TestUnitReady(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
|
||||||
{
|
{
|
||||||
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
|
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pMSC_ClassData;
|
||||||
|
|
||||||
/* case 9 : Hi > D0 */
|
/* case 9 : Hi > D0 */
|
||||||
if (hmsc->cbw.dDataLength != 0U)
|
if (hmsc->cbw.dDataLength != 0U)
|
||||||
|
@ -191,7 +191,7 @@ static int8_t SCSI_TestUnitReady(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((USBD_StorageTypeDef *)pdev->pUserData)->IsReady(lun) != 0)
|
if (((USBD_StorageTypeDef *)pdev->pMSC_UserData)->IsReady(lun) != 0)
|
||||||
{
|
{
|
||||||
SCSI_SenseCode(pdev, lun, NOT_READY, MEDIUM_NOT_PRESENT);
|
SCSI_SenseCode(pdev, lun, NOT_READY, MEDIUM_NOT_PRESENT);
|
||||||
hmsc->bot_state = USBD_BOT_NO_DATA;
|
hmsc->bot_state = USBD_BOT_NO_DATA;
|
||||||
|
@ -214,7 +214,7 @@ static int8_t SCSI_Inquiry(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *par
|
||||||
{
|
{
|
||||||
uint8_t *pPage;
|
uint8_t *pPage;
|
||||||
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;
|
||||||
|
|
||||||
if (params[1] & 0x01U)/*Evpd is set*/
|
if (params[1] & 0x01U)/*Evpd is set*/
|
||||||
{
|
{
|
||||||
|
@ -229,7 +229,7 @@ static int8_t SCSI_Inquiry(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *par
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
pPage = (uint8_t *)(void *) & ((USBD_StorageTypeDef *)pdev->pUserData)->pInquiry[lun * STANDARD_INQUIRY_DATA_LEN];
|
pPage = (uint8_t *)(void *) & ((USBD_StorageTypeDef *)pdev->pMSC_UserData)->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)
|
||||||
|
@ -257,9 +257,9 @@ static int8_t SCSI_Inquiry(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *par
|
||||||
*/
|
*/
|
||||||
static int8_t SCSI_ReadCapacity10(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
|
static int8_t SCSI_ReadCapacity10(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
|
||||||
{
|
{
|
||||||
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
|
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pMSC_ClassData;
|
||||||
|
|
||||||
if (((USBD_StorageTypeDef *)pdev->pUserData)->GetCapacity(lun, &hmsc->scsi_blk_nbr, &hmsc->scsi_blk_size) != 0)
|
if (((USBD_StorageTypeDef *)pdev->pMSC_UserData)->GetCapacity(lun, &hmsc->scsi_blk_nbr, &hmsc->scsi_blk_size) != 0)
|
||||||
{
|
{
|
||||||
SCSI_SenseCode(pdev, lun, NOT_READY, MEDIUM_NOT_PRESENT);
|
SCSI_SenseCode(pdev, lun, NOT_READY, MEDIUM_NOT_PRESENT);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -290,7 +290,7 @@ static int8_t SCSI_ReadCapacity10(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_
|
||||||
*/
|
*/
|
||||||
static int8_t SCSI_ReadFormatCapacity(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
|
static int8_t SCSI_ReadFormatCapacity(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
|
||||||
{
|
{
|
||||||
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
|
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pMSC_ClassData;
|
||||||
|
|
||||||
uint16_t blk_size;
|
uint16_t blk_size;
|
||||||
uint32_t blk_nbr;
|
uint32_t blk_nbr;
|
||||||
|
@ -301,7 +301,7 @@ static int8_t SCSI_ReadFormatCapacity(USBD_HandleTypeDef *pdev, uint8_t lun, ui
|
||||||
hmsc->bot_data[i] = 0U;
|
hmsc->bot_data[i] = 0U;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((USBD_StorageTypeDef *)pdev->pUserData)->GetCapacity(lun, &blk_nbr, &blk_size) != 0U)
|
if (((USBD_StorageTypeDef *)pdev->pMSC_UserData)->GetCapacity(lun, &blk_nbr, &blk_size) != 0U)
|
||||||
{
|
{
|
||||||
SCSI_SenseCode(pdev, lun, NOT_READY, MEDIUM_NOT_PRESENT);
|
SCSI_SenseCode(pdev, lun, NOT_READY, MEDIUM_NOT_PRESENT);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -332,7 +332,7 @@ static int8_t SCSI_ReadFormatCapacity(USBD_HandleTypeDef *pdev, uint8_t lun, ui
|
||||||
*/
|
*/
|
||||||
static int8_t SCSI_ModeSense6(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
|
static int8_t SCSI_ModeSense6(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
|
||||||
{
|
{
|
||||||
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
|
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pMSC_ClassData;
|
||||||
uint16_t len = 8U;
|
uint16_t len = 8U;
|
||||||
hmsc->bot_data_length = len;
|
hmsc->bot_data_length = len;
|
||||||
|
|
||||||
|
@ -354,7 +354,7 @@ static int8_t SCSI_ModeSense6(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *p
|
||||||
static int8_t SCSI_ModeSense10(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
|
static int8_t SCSI_ModeSense10(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
|
||||||
{
|
{
|
||||||
uint16_t len = 8U;
|
uint16_t len = 8U;
|
||||||
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_data_length = len;
|
hmsc->bot_data_length = len;
|
||||||
|
|
||||||
|
@ -378,7 +378,7 @@ static int8_t SCSI_ModeSense10(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *
|
||||||
static int8_t SCSI_RequestSense(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
|
static int8_t SCSI_RequestSense(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
|
||||||
{
|
{
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
|
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pMSC_ClassData;
|
||||||
|
|
||||||
for (i = 0U ; i < REQUEST_SENSE_DATA_LEN; i++)
|
for (i = 0U ; i < REQUEST_SENSE_DATA_LEN; i++)
|
||||||
{
|
{
|
||||||
|
@ -421,7 +421,7 @@ static int8_t SCSI_RequestSense(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t
|
||||||
*/
|
*/
|
||||||
void SCSI_SenseCode(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t sKey, uint8_t ASC)
|
void SCSI_SenseCode(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t sKey, uint8_t ASC)
|
||||||
{
|
{
|
||||||
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
|
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pMSC_ClassData;
|
||||||
|
|
||||||
hmsc->scsi_sense[hmsc->scsi_sense_tail].Skey = sKey;
|
hmsc->scsi_sense[hmsc->scsi_sense_tail].Skey = sKey;
|
||||||
hmsc->scsi_sense[hmsc->scsi_sense_tail].w.ASC = ASC << 8;
|
hmsc->scsi_sense[hmsc->scsi_sense_tail].w.ASC = ASC << 8;
|
||||||
|
@ -440,7 +440,7 @@ void SCSI_SenseCode(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t sKey, uint8_
|
||||||
*/
|
*/
|
||||||
static int8_t SCSI_StartStopUnit(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
|
static int8_t SCSI_StartStopUnit(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
|
||||||
{
|
{
|
||||||
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_data_length = 0U;
|
hmsc->bot_data_length = 0U;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -454,7 +454,7 @@ static int8_t SCSI_StartStopUnit(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t
|
||||||
*/
|
*/
|
||||||
static int8_t SCSI_Read10(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
|
static int8_t SCSI_Read10(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
|
||||||
{
|
{
|
||||||
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_state == USBD_BOT_IDLE) /* Idle */
|
if (hmsc->bot_state == USBD_BOT_IDLE) /* Idle */
|
||||||
{
|
{
|
||||||
|
@ -465,7 +465,7 @@ static int8_t SCSI_Read10(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((USBD_StorageTypeDef *)pdev->pUserData)->IsReady(lun) != 0)
|
if (((USBD_StorageTypeDef *)pdev->pMSC_UserData)->IsReady(lun) != 0)
|
||||||
{
|
{
|
||||||
SCSI_SenseCode(pdev, lun, NOT_READY, MEDIUM_NOT_PRESENT);
|
SCSI_SenseCode(pdev, lun, NOT_READY, MEDIUM_NOT_PRESENT);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -508,7 +508,7 @@ static int8_t SCSI_Read10(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params
|
||||||
|
|
||||||
static int8_t SCSI_Write10(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
|
static int8_t SCSI_Write10(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
|
||||||
{
|
{
|
||||||
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *) pdev->pClassData;
|
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *) pdev->pMSC_ClassData;
|
||||||
uint32_t len;
|
uint32_t len;
|
||||||
|
|
||||||
if (hmsc->bot_state == USBD_BOT_IDLE) /* Idle */
|
if (hmsc->bot_state == USBD_BOT_IDLE) /* Idle */
|
||||||
|
@ -521,14 +521,14 @@ static int8_t SCSI_Write10(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *para
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check whether Media is ready */
|
/* Check whether Media is ready */
|
||||||
if (((USBD_StorageTypeDef *)pdev->pUserData)->IsReady(lun) != 0)
|
if (((USBD_StorageTypeDef *)pdev->pMSC_UserData)->IsReady(lun) != 0)
|
||||||
{
|
{
|
||||||
SCSI_SenseCode(pdev, lun, NOT_READY, MEDIUM_NOT_PRESENT);
|
SCSI_SenseCode(pdev, lun, NOT_READY, MEDIUM_NOT_PRESENT);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Check If media is write-protected */
|
/* Check If media is write-protected */
|
||||||
if (((USBD_StorageTypeDef *)pdev->pUserData)->IsWriteProtected(lun) != 0)
|
if (((USBD_StorageTypeDef *)pdev->pMSC_UserData)->IsWriteProtected(lun) != 0)
|
||||||
{
|
{
|
||||||
SCSI_SenseCode(pdev, lun, NOT_READY, WRITE_PROTECTED);
|
SCSI_SenseCode(pdev, lun, NOT_READY, WRITE_PROTECTED);
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -582,7 +582,7 @@ static int8_t SCSI_Write10(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *para
|
||||||
|
|
||||||
static int8_t SCSI_Verify10(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
|
static int8_t SCSI_Verify10(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *params)
|
||||||
{
|
{
|
||||||
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *) pdev->pClassData;
|
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *) pdev->pMSC_ClassData;
|
||||||
|
|
||||||
if ((params[1] & 0x02U) == 0x02U)
|
if ((params[1] & 0x02U) == 0x02U)
|
||||||
{
|
{
|
||||||
|
@ -610,7 +610,7 @@ static int8_t SCSI_Verify10(USBD_HandleTypeDef *pdev, uint8_t lun, uint8_t *par
|
||||||
static int8_t SCSI_CheckAddressRange(USBD_HandleTypeDef *pdev, uint8_t lun,
|
static int8_t SCSI_CheckAddressRange(USBD_HandleTypeDef *pdev, uint8_t lun,
|
||||||
uint32_t blk_offset, uint32_t blk_nbr)
|
uint32_t blk_offset, uint32_t blk_nbr)
|
||||||
{
|
{
|
||||||
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *) pdev->pClassData;
|
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *) pdev->pMSC_ClassData;
|
||||||
|
|
||||||
if ((blk_offset + blk_nbr) > hmsc->scsi_blk_nbr)
|
if ((blk_offset + blk_nbr) > hmsc->scsi_blk_nbr)
|
||||||
{
|
{
|
||||||
|
@ -628,12 +628,12 @@ static int8_t SCSI_CheckAddressRange(USBD_HandleTypeDef *pdev, uint8_t lun,
|
||||||
*/
|
*/
|
||||||
static int8_t SCSI_ProcessRead(USBD_HandleTypeDef *pdev, uint8_t lun)
|
static int8_t SCSI_ProcessRead(USBD_HandleTypeDef *pdev, uint8_t lun)
|
||||||
{
|
{
|
||||||
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pClassData;
|
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *)pdev->pMSC_ClassData;
|
||||||
uint32_t len = hmsc->scsi_blk_len * hmsc->scsi_blk_size;
|
uint32_t len = hmsc->scsi_blk_len * hmsc->scsi_blk_size;
|
||||||
|
|
||||||
len = MIN(len, MSC_MEDIA_PACKET);
|
len = MIN(len, MSC_MEDIA_PACKET);
|
||||||
|
|
||||||
if (((USBD_StorageTypeDef *)pdev->pUserData)->Read(lun,
|
if (((USBD_StorageTypeDef *)pdev->pMSC_UserData)->Read(lun,
|
||||||
hmsc->bot_data,
|
hmsc->bot_data,
|
||||||
hmsc->scsi_blk_addr,
|
hmsc->scsi_blk_addr,
|
||||||
(len / hmsc->scsi_blk_size)) < 0)
|
(len / hmsc->scsi_blk_size)) < 0)
|
||||||
|
@ -666,12 +666,12 @@ static int8_t SCSI_ProcessRead(USBD_HandleTypeDef *pdev, uint8_t lun)
|
||||||
|
|
||||||
static int8_t SCSI_ProcessWrite(USBD_HandleTypeDef *pdev, uint8_t lun)
|
static int8_t SCSI_ProcessWrite(USBD_HandleTypeDef *pdev, uint8_t lun)
|
||||||
{
|
{
|
||||||
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *) pdev->pClassData;
|
USBD_MSC_BOT_HandleTypeDef *hmsc = (USBD_MSC_BOT_HandleTypeDef *) pdev->pMSC_ClassData;
|
||||||
uint32_t len = hmsc->scsi_blk_len * hmsc->scsi_blk_size;
|
uint32_t len = hmsc->scsi_blk_len * hmsc->scsi_blk_size;
|
||||||
|
|
||||||
len = MIN(len, MSC_MEDIA_PACKET);
|
len = MIN(len, MSC_MEDIA_PACKET);
|
||||||
|
|
||||||
if (((USBD_StorageTypeDef *)pdev->pUserData)->Write(lun, hmsc->bot_data,
|
if (((USBD_StorageTypeDef *)pdev->pMSC_UserData)->Write(lun, hmsc->bot_data,
|
||||||
hmsc->scsi_blk_addr,
|
hmsc->scsi_blk_addr,
|
||||||
(len / hmsc->scsi_blk_size)) < 0)
|
(len / hmsc->scsi_blk_size)) < 0)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue