BaseUsbHost example program
Dependencies: BaseUsbHost FATFileSystem mbed mbed-rtos
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 };
Generated on Wed Jul 13 2022 00:00:06 by 1.7.2