⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msscsi.c

📁 MSTAR03的数码相框的代码
💻 C
📖 第 1 页 / 共 2 页
字号:
    //SCSI_CLT_T scsi_clt_P;
    MSD_CB cmd_blk;
    __s8 status;

#if 0
	  for(i=0;i<MSD_BOT_CBW_CB_LENGTH;i++)
	     otgCBWCB[i]=0;
#else
    usbMem_Set((void *)usbCBWCB_Addr,0,MSD_BOT_CBW_CB_LENGTH);
#endif
#ifdef Artemis_DEBUG2
     printf("\r\n inquiry",0);
#endif

    /*Fill the CBWCB*/
    *((__u8 *)usbCBWCB_Addr+0) = SCSI_CMD_INQUIRY;
    *((__u8 *)usbCBWCB_Addr+1) = lun<<5;
    *((__u8 *)usbCBWCB_Addr+2) = 0x00;
    *((__u8 *)usbCBWCB_Addr+3) = 0x00;
    *((__u8 *)usbCBWCB_Addr+4) = SCSI_CMD_INQ_DATA_LEN;//0x00;
    *((__u8 *)usbCBWCB_Addr+5) = 0x00;

    /* Fill the command block */
    cmd_blk.data_buf_P = usbMass_Data_Buffer_Addr;
    cmd_blk.buf_length = SCSI_CMD_INQ_DATA_LEN;
    cmd_blk.direction  = USB_DATA_DIR_IN;
    cmd_blk.cmd_length = SCSI_CMD_LENGTH06;
    cmd_blk.lun=lun;
    cmd_blk.signature=MSD_BOT_CBW_SIGNATURE;
    cmd_blk.tag=MSD_BOT_CBW_TAG;


    //USB_SCSI_Fill_CMD(&scsi_clt_P, lun, SCSI_CMD_INQ_DATA_LEN, 0, SCSI_CMD_INQUIRY, otgMass_Data_Buffer_Addr, USB_DATA_DIR_IN);
    //USB_SCSI_Prepare_6Byte_CMD(&cmd_blk, scsi_clt_P,(__u8 *)otgCBWCB_Addr);

    status=usbMSD_BOT_Transport(cmd_blk);

    if(status == USB_SUCCESS)
    {
        if((*((__u8 *)usbMass_Data_Buffer_Addr) & 0x1F) == 0x00)
            status = YES;
        else
            status = NO;

      //printf("\r\n byte1=%x", *((__u8 *)usbMass_Data_Buffer_Addr+1));
	  //printf("\r\n byte0=%x", *((__u8 *)usbMass_Data_Buffer_Addr));
	 *RMB=*((__u8 *)usbMass_Data_Buffer_Addr+1)&0x80;
	 *DeviceType=(*((__u8 *)usbMass_Data_Buffer_Addr) & 0x1F);

    }
    else if(status == USB_FAILURE)
        status = NO;
#ifdef Artemis_DEBUG
     //printf("\r\n Einquiry=%x",status);
#endif
    return status;
}

__s8 ReqSen_Command(__u8 lun)
{
    //SCSI_CLT_T scsi_clt_P;
    MSD_CB cmd_blk;
    __s8 status;
#ifdef Artemis_DEBUG2
    printf("\r\n ReqSen",0);
#endif
#if 0
	  for(i=0;i<MSD_BOT_CBW_CB_LENGTH;i++)
	     otgCBWCB[i]=0;
#else
    usbMem_Set((void *)usbCBWCB_Addr,0,MSD_BOT_CBW_CB_LENGTH);
#endif

   /*Fill the CBWCB*/
    *((__u8 *)usbCBWCB_Addr+0) = SCSI_CMD_REQSNS;
    *((__u8 *)usbCBWCB_Addr+1) = lun<<5;
    *((__u8 *)usbCBWCB_Addr+2) = 0x00;
    *((__u8 *)usbCBWCB_Addr+3) = 0x00;
    *((__u8 *)usbCBWCB_Addr+4) = SCSI_CMD_REQ_SENSE_LEN;//0x00;
    *((__u8 *)usbCBWCB_Addr+5) = 0x00;

    /* Fill the command block */
    cmd_blk.data_buf_P = usbMass_Data_Buffer_Addr;
    cmd_blk.buf_length = SCSI_CMD_REQ_SENSE_LEN;
    cmd_blk.direction  = USB_DATA_DIR_IN;
    cmd_blk.cmd_length = SCSI_CMD_LENGTH06;
    cmd_blk.lun=lun;
    cmd_blk.signature=MSD_BOT_CBW_SIGNATURE;
    cmd_blk.tag=MSD_BOT_CBW_TAG;

   // USB_SCSI_Fill_CMD(&scsi_clt_P, lun, SCSI_CMD_REQ_SENSE_LEN, 0, SCSI_CMD_REQSNS,otgMass_Data_Buffer_Addr, USB_DATA_DIR_IN);
   // USB_SCSI_Prepare_6Byte_CMD(&cmd_blk, scsi_clt_P,(__u8 *)otgCBWCB_Addr);
    status=usbMSD_BOT_Transport(cmd_blk);
    if(status == USB_SUCCESS)
    {
        usbSenseKey = *((__u8 *)usbMass_Data_Buffer_Addr+2);
        usbASC= *((__u8 *)usbMass_Data_Buffer_Addr+12);
        usbASCQ = *((__u8 *)usbMass_Data_Buffer_Addr+13);
    }

    return status;
}


__s8 Rd10_Command(__u8 lun,__u16 count,__u32 sector)
{
    //SCSI_CLT_T scsi_clt_P;
    MSD_CB cmd_blk;
    __s8 status;
#ifdef Artemis_DEBUG5
    printf("\r\n Rd10",0);
#endif
#if 0
	  for(i=0;i<MSD_BOT_CBW_CB_LENGTH;i++)
	     otgCBWCB[i]=0;
#else
    usbMem_Set((void *)usbCBWCB_Addr,0,MSD_BOT_CBW_CB_LENGTH);
#endif
    /*Fill the CBWCB*/
    *((__u8 *)usbCBWCB_Addr+0) = SCSI_CMD_READ10;
    *((__u8 *)usbCBWCB_Addr+1) = lun<<5;
    *((__u8 *)usbCBWCB_Addr+2) = sector >> 24;
    *((__u8 *)usbCBWCB_Addr+3) = sector >> 16;
    *((__u8 *)usbCBWCB_Addr+4) = sector >> 8;
    *((__u8 *)usbCBWCB_Addr+5) = sector;
    *((__u8 *)usbCBWCB_Addr+6) = 0x00;
    *((__u8 *)usbCBWCB_Addr+7) = count >> 8;
    *((__u8 *)usbCBWCB_Addr+8) = count;
    *((__u8 *)usbCBWCB_Addr+9) = 0x00;

    /* Fill the command block */
    cmd_blk.data_buf_P = usbMass_Data_Buffer_Addr;
    cmd_blk.buf_length = ((__u32)count) * MaxBlockSize; //MSD_DRIVE_SECTOR_SIZE;
    cmd_blk.direction  = USB_DATA_DIR_IN;
    cmd_blk.cmd_length = SCSI_CMD_LENGTH10;
    cmd_blk.lun=lun;
    cmd_blk.signature=MSD_BOT_CBW_SIGNATURE;
    cmd_blk.tag=MSD_BOT_CBW_TAG;


    //USB_SCSI_Fill_CMD(&scsi_clt_P, lun, count, sector, SCSI_CMD_READ10, otgMass_Data_Buffer_Addr, USB_DATA_DIR_IN);
    //USB_SCSI_Prepare_10Byte_CMD(&cmd_blk, scsi_clt_P,(__u8 *)otgCBWCB_Addr);
    status=usbMSD_BOT_Transport(cmd_blk);
#ifdef Artemis_DEBUG
    printf("\r\n ExRd10",0);
#endif
    return status;
}

__s8 Wt10_Command(__u8 lun,__u16 count,__u32 sector)
{
    //SCSI_CLT_T scsi_clt_P;
    MSD_CB cmd_blk;
    __s8 status;
#ifdef Artemis_DEBUG5
    printf("\r\n Wt10",0);
#endif
#if 0
	  for(i=0;i<MSD_BOT_CBW_CB_LENGTH;i++)
	     otgCBWCB[i]=0;
#else
    usbMem_Set((void *)usbCBWCB_Addr,0,MSD_BOT_CBW_CB_LENGTH);
#endif
    /*Fill the CBWCB*/
    *((__u8 *)usbCBWCB_Addr+0) = SCSI_CMD_WRITE10;
    *((__u8 *)usbCBWCB_Addr+1) = lun<<5;
    *((__u8 *)usbCBWCB_Addr+2) = sector >> 24;
    *((__u8 *)usbCBWCB_Addr+3) = sector >> 16;
    *((__u8 *)usbCBWCB_Addr+4) = sector >> 8;
    *((__u8 *)usbCBWCB_Addr+5) = sector;
    *((__u8 *)usbCBWCB_Addr+6) = 0x00;
    *((__u8 *)usbCBWCB_Addr+7) = count >> 8;
    *((__u8 *)usbCBWCB_Addr+8) = count;
    *((__u8 *)usbCBWCB_Addr+9) = 0x00;

    /* Fill the command block */
    cmd_blk.data_buf_P = usbMass_Data_Buffer_Addr;
    cmd_blk.buf_length = ((__u32)count) * MaxBlockSize; //MSD_DRIVE_SECTOR_SIZE;
    cmd_blk.direction  = USB_DATA_DIR_OUT;
    cmd_blk.cmd_length = SCSI_CMD_LENGTH10;
    cmd_blk.lun=lun;
    cmd_blk.signature=MSD_BOT_CBW_SIGNATURE;
    cmd_blk.tag=MSD_BOT_CBW_TAG;

    //USB_SCSI_Fill_CMD(&scsi_clt_P, lun, count, sector, SCSI_CMD_WRITE10, otgMass_Data_Buffer_Addr, USB_DATA_DIR_OUT);
    //USB_SCSI_Prepare_10Byte_CMD(&cmd_blk, scsi_clt_P,(__u8 *)otgCBWCB_Addr);
    status=usbMSD_BOT_Transport(cmd_blk);
#ifdef Artemis_DEBUG
    printf("\r\n ExWt10",0);
#endif
    return status;
}


__s8 RdFmtCap_Command(__u8 lun,__u32 *noblock,__u32 *blocksize)
{
    //SCSI_CLT_T scsi_clt_P;
    MSD_CB cmd_blk;
    __s8 status;
    __u8 dcount;
    __u32 numblock,blksize;

    blocksize=0;
#ifdef Artemis_DEBUG2
    printf("\r\n RdFmtCap",0);
#endif
#if 0
	  for(i=0;i<MSD_BOT_CBW_CB_LENGTH;i++)
	     otgCBWCB[i]=0;
#else
    usbMem_Set((void *)usbCBWCB_Addr,0,MSD_BOT_CBW_CB_LENGTH);
#endif

    /*Fill the CBWCB*/
    *((__u8 *)usbCBWCB_Addr+0) =SCSI_CMD_READ_FMT_CPC;
    *((__u8 *)usbCBWCB_Addr+1) = lun<<5;
    *((__u8 *)usbCBWCB_Addr+2) = 0x0;
    *((__u8 *)usbCBWCB_Addr+3) = 0x0;
    *((__u8 *)usbCBWCB_Addr+4) = 0x0;
    *((__u8 *)usbCBWCB_Addr+5) = 0x0;
    *((__u8 *)usbCBWCB_Addr+6) = 0x00;
    *((__u8 *)usbCBWCB_Addr+7) = 0x0;
    *((__u8 *)usbCBWCB_Addr+8) = 0x0;
    *((__u8 *)usbCBWCB_Addr+9) = 0x00;

    /* Fill the command block */
    cmd_blk.data_buf_P = usbMass_Data_Buffer_Addr;
    cmd_blk.buf_length =SCSI_CMD_RDFMTCPC_DATA_LEN;
    cmd_blk.direction  = USB_DATA_DIR_IN;
    cmd_blk.cmd_length = SCSI_CMD_LENGTH10;
    cmd_blk.lun=lun;
    cmd_blk.signature=MSD_BOT_CBW_SIGNATURE;
    cmd_blk.tag=MSD_BOT_CBW_TAG;

    //USB_SCSI_Fill_CMD(&scsi_clt_P, lun, SCSI_CMD_RDFMTCPC_DATA_LEN, 0, SCSI_CMD_READ_FMT_CPC, otgMass_Data_Buffer_Addr, USB_DATA_DIR_IN);
    //USB_SCSI_Prepare_10Byte_CMD(&cmd_blk, scsi_clt_P,(__u8 *)otgCBWCB_Addr);
    //USB_SCSI_Prepare_6Byte_CMD(&cmd_blk, scsi_clt_P,otgCBWCB);  //?
    status=usbMSD_BOT_Transport(cmd_blk);
    if (status == USB_SUCCESS)
    {
    	dcount=*((__u8 *)usbMass_Data_Buffer_Addr+3);
        *((__u8 *)&numblock+3)=*((__u8 *)usbMass_Data_Buffer_Addr+4);
        *((__u8 *)&numblock+2)=*((__u8 *)usbMass_Data_Buffer_Addr+5);
        *((__u8 *)&numblock+1)=*((__u8 *)usbMass_Data_Buffer_Addr+6);
        *((__u8 *)&numblock+0)=*((__u8 *)usbMass_Data_Buffer_Addr+7);
        *((__u8 *)&blksize+2)=*((__u8 *)usbMass_Data_Buffer_Addr+9);
        *((__u8 *)&blksize+1)=*((__u8 *)usbMass_Data_Buffer_Addr+10);
        *((__u8 *)&blksize+0)=*((__u8 *)usbMass_Data_Buffer_Addr+11);
        noblock=&numblock;
        blocksize=&blksize;
    }

    return status;
}

__s8 Removal_Command(__u8 lun)
{
    //SCSI_CLT_T scsi_clt_P;
    MSD_CB cmd_blk;
    __s8 status;
#ifdef Artemis_DEBUG4
    printf("\r\n Removal",0);
#endif
#if 0
	  for(i=0;i<MSD_BOT_CBW_CB_LENGTH;i++)
	     otgCBWCB[i]=0;
#else
    usbMem_Set((void *)usbCBWCB_Addr,0,MSD_BOT_CBW_CB_LENGTH);
#endif

    /*Fill the CBWCB*/
    *((__u8 *)usbCBWCB_Addr+0) = SCSI_CMD_REMOVAL;
    *((__u8 *)usbCBWCB_Addr+1) = lun<<5;
    *((__u8 *)usbCBWCB_Addr+2) = 0x00;
    *((__u8 *)usbCBWCB_Addr+3) = 0x00;
    *((__u8 *)usbCBWCB_Addr+4) = 0x00;
    *((__u8 *)usbCBWCB_Addr+5) = 0x00;

    /* Fill the command block */
    cmd_blk.data_buf_P = NULL;
    cmd_blk.buf_length = 0;
    cmd_blk.direction  = USB_DATA_DIR_OUT;
    cmd_blk.cmd_length = SCSI_CMD_LENGTH06;
    cmd_blk.lun=lun;
    cmd_blk.signature=MSD_BOT_CBW_SIGNATURE;
    cmd_blk.tag=MSD_BOT_CBW_TAG;

    //USB_SCSI_Fill_CMD(&scsi_clt_P, lun, 0, 0, SCSI_CMD_TSTUNTRDY, NULL,USB_DATA_DIR_IN);
    //USB_SCSI_Prepare_6Byte_CMD(&cmd_blk, scsi_clt_P,(__u8 *)otgCBWCB_Addr);
    status=usbMSD_BOT_Transport(cmd_blk);
    return status;
}

#endif //#if (ENABLE_OTG_HOST == ENABLE)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -