BaseUsbHost example program

Dependencies:   BaseUsbHost FATFileSystem mbed mbed-rtos

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers UsbFlashDrive.h Source File

UsbFlashDrive.h

00001 // usbFlashDrive.h 2013/1/8
00002 #pragma once
00003 
00004 #include "FATFileSystem.h"
00005 
00006 #define  SCSI_CMD_REQUEST_SENSE      0x03
00007 #define  SCSI_CMD_TEST_UNIT_READY    0x00
00008 #define  SCSI_CMD_INQUIRY            0x12
00009 #define  SCSI_CMD_READ_10            0x28
00010 #define  SCSI_CMD_READ_CAPACITY      0x25
00011 #define  SCSI_CMD_WRITE_10           0x2A
00012 
00013 #pragma pack(push,1)
00014 struct CBW {
00015     uint32_t dCBWSignature;
00016     uint32_t dCBWTag;
00017     uint32_t dCBWDataTraansferLength;
00018     uint8_t bmCBWFlags;
00019     uint8_t bCBWLUN;
00020     uint8_t bCBWCBLength;
00021     uint8_t CBWCB[16];
00022 };
00023 
00024 struct CSW {
00025     uint32_t dCSWSignature;
00026     uint32_t dCSWTag;
00027     uint32_t dCSWDataResidue;
00028     uint8_t  bCSWStatus;
00029 };
00030 #pragma pack(pop)
00031 
00032 class UsbFlashDrive : public FATFileSystem {
00033 public:
00034     UsbFlashDrive(const char* name, ControlEp* ctlEp = NULL);
00035     static bool check(ControlEp* ctlEp);
00036     virtual int disk_initialize();
00037     virtual int disk_write(const uint8_t* buffer, uint64_t sector);
00038     virtual int disk_read(uint8_t* buffer, uint64_t sector);    
00039     virtual int disk_status();
00040     virtual int disk_sync();
00041     virtual uint64_t disk_sectors();
00042 private:
00043     int setup(ControlEp* ctlEp, int timeout = 9000);
00044     int ParseConfiguration(ControlEp* ctlEp);
00045     int BulkOnlyMassStorageReset(ControlEp* ctlEp);
00046     int GetMaxLUN(ControlEp* ctlEp);
00047     int ReadCapacity();
00048     int GetSenseInfo();
00049     int TestUnitReady();
00050     int Inquire();
00051     int MS_BulkRecv(uint32_t block_number, int num_blocks, uint8_t* user_buffer);
00052     int MS_BulkSend(uint32_t block_number, int num_blocks, const uint8_t* user_buffer);
00053     int CommandTransport(const uint8_t* cdb, int size);
00054     int StatusTransport();
00055     int _bulkRecv(uint8_t* buf, int size);
00056     int _bulkSend(const uint8_t* buf, int size);
00057     const char* m_name;
00058     int m_drive;
00059     uint32_t m_numBlocks;
00060     int m_BlockSize;
00061     int m_lun;
00062     int m_MaxLUN;
00063     int m_interface;
00064     uint32_t m_tag;
00065     CBW m_CBW;
00066     CSW m_CSW;
00067     // endpoint
00068     BulkEp* m_pEpBulkIn;
00069     BulkEp* m_pEpBulkOut;
00070     // report
00071     uint32_t m_report_disk_write;
00072     uint32_t m_report_disk_read;
00073     uint32_t m_report_disk_status;
00074     uint32_t m_report_disk_sync;
00075 };