USB composite device example program, drag-and-drop flash writer.

Dependencies:   SWD USBDevice mbed BaseDAP

Committer:
va009039
Date:
Sat Sep 28 03:21:14 2013 +0000
Revision:
1:ea8e179320d7
add USBMSD_Drop class. add CDC(Virtual COM) and HID(for example CMSIS-DAP), but KL25Z not work.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
va009039 1:ea8e179320d7 1 // RomDisk.h 2013/9/26
va009039 1:ea8e179320d7 2 #pragma once
va009039 1:ea8e179320d7 3
va009039 1:ea8e179320d7 4 #define ATTR_READ_ONLY 0x01
va009039 1:ea8e179320d7 5 #define ATTR_HIDDEN 0x02
va009039 1:ea8e179320d7 6 #define ATTR_SYSTEM 0x04
va009039 1:ea8e179320d7 7 #define ATTR_VOLUME_ID 0x08
va009039 1:ea8e179320d7 8 #define ATTR_DIRECTORY 0x10
va009039 1:ea8e179320d7 9 #define ATTR_ARCHIVE 0x20
va009039 1:ea8e179320d7 10 #define ATTR_LONG_NAME (ATTR_READ_ONLY|ATTR_HIDDEN|ATTR_SYSTEM|ATTR_VOLUME_ID)
va009039 1:ea8e179320d7 11
va009039 1:ea8e179320d7 12 struct DirEntry {
va009039 1:ea8e179320d7 13 uint8_t name[8+3];
va009039 1:ea8e179320d7 14 uint8_t attr;
va009039 1:ea8e179320d7 15 uint8_t NTres;
va009039 1:ea8e179320d7 16 uint8_t cDateTime_ms;
va009039 1:ea8e179320d7 17 uint16_t cTime;
va009039 1:ea8e179320d7 18 uint16_t cDate;
va009039 1:ea8e179320d7 19 uint16_t aDate;
va009039 1:ea8e179320d7 20 uint16_t clusterHI;
va009039 1:ea8e179320d7 21 uint16_t mTime;
va009039 1:ea8e179320d7 22 uint16_t mDate;
va009039 1:ea8e179320d7 23 uint16_t cluster;
va009039 1:ea8e179320d7 24 uint32_t size;
va009039 1:ea8e179320d7 25 bool is_free() {
va009039 1:ea8e179320d7 26 return name[0] == 0xe5 || name[0] == 0x00;
va009039 1:ea8e179320d7 27 }
va009039 1:ea8e179320d7 28 bool is_file() {
va009039 1:ea8e179320d7 29 return is_free() == false && attr == ATTR_ARCHIVE;
va009039 1:ea8e179320d7 30 }
va009039 1:ea8e179320d7 31 int cmpDateTime(DirEntry* entry) {
va009039 1:ea8e179320d7 32 if (mDate > entry->mDate) {
va009039 1:ea8e179320d7 33 return 1;
va009039 1:ea8e179320d7 34 } else if (mDate < entry->mDate) {
va009039 1:ea8e179320d7 35 return -1;
va009039 1:ea8e179320d7 36 }
va009039 1:ea8e179320d7 37 if (mTime > entry->mTime) {
va009039 1:ea8e179320d7 38 return 1;
va009039 1:ea8e179320d7 39 } else if (mTime < entry->mTime) {
va009039 1:ea8e179320d7 40 return -1;
va009039 1:ea8e179320d7 41 }
va009039 1:ea8e179320d7 42 return 0;
va009039 1:ea8e179320d7 43 }
va009039 1:ea8e179320d7 44 } __attribute__((__packed__));;
va009039 1:ea8e179320d7 45
va009039 1:ea8e179320d7 46 struct SectorIndex {
va009039 1:ea8e179320d7 47 int block;
va009039 1:ea8e179320d7 48 const uint8_t* data;
va009039 1:ea8e179320d7 49 };
va009039 1:ea8e179320d7 50
va009039 1:ea8e179320d7 51 extern const SectorIndex sector_index[]; // RomDiskData.cpp
va009039 1:ea8e179320d7 52
va009039 1:ea8e179320d7 53 class RomDisk {
va009039 1:ea8e179320d7 54 public:
va009039 1:ea8e179320d7 55 RomDisk();
va009039 1:ea8e179320d7 56 int read(uint8_t * data, uint32_t block);
va009039 1:ea8e179320d7 57 int write(const uint8_t * data, uint32_t block);
va009039 1:ea8e179320d7 58 uint32_t sectors();
va009039 1:ea8e179320d7 59 bool is_fat(uint32_t sector);
va009039 1:ea8e179320d7 60 bool is_rootdir(uint32_t sector);
va009039 1:ea8e179320d7 61 int dir_count(uint32_t sector);
va009039 1:ea8e179320d7 62 uint32_t cluster_to_sector(uint32_t cluster);
va009039 1:ea8e179320d7 63 protected:
va009039 1:ea8e179320d7 64 uint64_t _sectors;
va009039 1:ea8e179320d7 65 };