28int msc_bulk_transfer(MSC_T *msc, EP_INFO_T *ep, uint8_t *data_buff,
int data_len,
int timeout_ticks)
34 utr = alloc_utr(msc->iface->udev);
39 utr->buff = data_buff;
40 utr->data_len = data_len;
43 utr->bIsTransferDone = 0;
45 ret = usbh_bulk_xfer(utr);
50 while (utr->bIsTransferDone == 0)
61 msc_debug_msg(
" <BULK> status: %d, xfer_len: %d\n", utr->status, utr->xfer_len);
67static int do_scsi_command(MSC_T *msc, uint8_t *buff, uint32_t data_len,
int bIsDataIn,
int timeout_ticks)
70 struct bulk_cb_wrap *cmd_blk = &msc->cmd_blk;
71 struct bulk_cs_wrap *cmd_status = &msc->cmd_status;;
73 cmd_blk->Signature = MSC_CB_SIGN;
74 cmd_blk->Tag =
__tag++;
75 cmd_blk->DataTransferLength = data_len;
76 cmd_blk->Lun = msc->lun;
78 ret =
msc_bulk_transfer(msc, msc->ep_bulk_out, (uint8_t *)cmd_blk, 31, timeout_ticks);
82 msc_debug_msg(
" [XFER] MSC CMD OK.\n");
92 msc_debug_msg(
" [XFER] MSC DATA OK.\n");
95 ret =
msc_bulk_transfer(msc, msc->ep_bulk_in, (uint8_t *)cmd_status, 13, timeout_ticks);
99 msc_debug_msg(
" [XFER] MSC STATUS OK.\n");
101 if (cmd_status->Status != 0)
103 msc_debug_msg(
" !! CSW status error.\n");
106 msc_debug_msg(
" [CSW] status OK.\n");
108 msc_debug_msg(
"SCSI command 0x%0x done.\n", cmd_blk->CDB[0]);
113int run_scsi_command(MSC_T *msc, uint8_t *buff, uint32_t data_len,
int bIsDataIn,
int timeout_ticks)
NuMicro peripheral access layer header file.
#define UMAS_ERR_CMD_STATUS
#define USBH_ERR_MEMORY_OUT
uint32_t get_ticks(void)
A function return current tick count.
M480 MCU USB Host mass storage class header.
static void bulk_xfer_done(UTR_T *utr)
static int do_scsi_command(MSC_T *msc, uint8_t *buff, uint32_t data_len, int bIsDataIn, int timeout_ticks)
int msc_bulk_transfer(MSC_T *msc, EP_INFO_T *ep, uint8_t *data_buff, int data_len, int timeout_ticks)
int run_scsi_command(MSC_T *msc, uint8_t *buff, uint32_t data_len, int bIsDataIn, int timeout_ticks)
USB Host library header file.