27int msc_bulk_transfer(MSC_T *msc, EP_INFO_T *ep, uint8_t *data_buff,
int data_len,
int timeout_ticks)
33 utr = alloc_utr(msc->iface->udev);
38 utr->buff = data_buff;
39 utr->data_len = data_len;
42 utr->bIsTransferDone = 0;
44 ret = usbh_bulk_xfer(utr);
49 while(utr->bIsTransferDone == 0)
60 msc_debug_msg(
" <BULK> status: %d, xfer_len: %d\n", utr->status, utr->xfer_len);
66static int do_scsi_command(MSC_T *msc, uint8_t *buff, uint32_t data_len,
int bIsDataIn,
int timeout_ticks)
69 struct bulk_cb_wrap *cmd_blk = &msc->cmd_blk;
70 struct bulk_cs_wrap *cmd_status = &msc->cmd_status;;
72 cmd_blk->Signature = MSC_CB_SIGN;
73 cmd_blk->Tag =
__tag++;
74 cmd_blk->DataTransferLength = data_len;
75 cmd_blk->Lun = msc->lun;
77 ret =
msc_bulk_transfer(msc, msc->ep_bulk_out, (uint8_t *)cmd_blk, 31, timeout_ticks);
81 msc_debug_msg(
" [XFER] MSC CMD OK.\n");
91 msc_debug_msg(
" [XFER] MSC DATA OK.\n");
94 ret =
msc_bulk_transfer(msc, msc->ep_bulk_in, (uint8_t *)cmd_status, 13, timeout_ticks);
98 msc_debug_msg(
" [XFER] MSC STATUS OK.\n");
100 if(cmd_status->Status != 0)
102 msc_debug_msg(
" !! CSW status error.\n");
105 msc_debug_msg(
" [CSW] status OK.\n");
107 msc_debug_msg(
"SCSI command 0x%0x done.\n", cmd_blk->CDB[0]);
112int 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.
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.