USB composite device example program, drag-and-drop flash writer.
Dependencies: SWD USBDevice mbed BaseDAP
Diff: USBMSD_Drop/RomDisk.h
- Revision:
- 1:ea8e179320d7
diff -r 2385683c867a -r ea8e179320d7 USBMSD_Drop/RomDisk.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/USBMSD_Drop/RomDisk.h Sat Sep 28 03:21:14 2013 +0000 @@ -0,0 +1,65 @@ +// RomDisk.h 2013/9/26 +#pragma once + +#define ATTR_READ_ONLY 0x01 +#define ATTR_HIDDEN 0x02 +#define ATTR_SYSTEM 0x04 +#define ATTR_VOLUME_ID 0x08 +#define ATTR_DIRECTORY 0x10 +#define ATTR_ARCHIVE 0x20 +#define ATTR_LONG_NAME (ATTR_READ_ONLY|ATTR_HIDDEN|ATTR_SYSTEM|ATTR_VOLUME_ID) + +struct DirEntry { + uint8_t name[8+3]; + uint8_t attr; + uint8_t NTres; + uint8_t cDateTime_ms; + uint16_t cTime; + uint16_t cDate; + uint16_t aDate; + uint16_t clusterHI; + uint16_t mTime; + uint16_t mDate; + uint16_t cluster; + uint32_t size; + bool is_free() { + return name[0] == 0xe5 || name[0] == 0x00; + } + bool is_file() { + return is_free() == false && attr == ATTR_ARCHIVE; + } + int cmpDateTime(DirEntry* entry) { + if (mDate > entry->mDate) { + return 1; + } else if (mDate < entry->mDate) { + return -1; + } + if (mTime > entry->mTime) { + return 1; + } else if (mTime < entry->mTime) { + return -1; + } + return 0; + } +} __attribute__((__packed__));; + +struct SectorIndex { + int block; + const uint8_t* data; +}; + +extern const SectorIndex sector_index[]; // RomDiskData.cpp + +class RomDisk { +public: + RomDisk(); + int read(uint8_t * data, uint32_t block); + int write(const uint8_t * data, uint32_t block); + uint32_t sectors(); + bool is_fat(uint32_t sector); + bool is_rootdir(uint32_t sector); + int dir_count(uint32_t sector); + uint32_t cluster_to_sector(uint32_t cluster); +protected: + uint64_t _sectors; +};