test for export
Dependents: F401RE_USBMSD_RAM_copy
Fork of RAM_DISK by
USBMSD_Ram.cpp@2:ee281ece9011, 2014-11-09 (annotated)
- Committer:
- va009039
- Date:
- Sun Nov 09 03:01:44 2014 +0000
- Revision:
- 2:ee281ece9011
- Parent:
- 1:3d0c421fe52b
- Child:
- 3:90186ebbe2c5
update USBDevice
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
samux | 1:3d0c421fe52b | 1 | /* mbed USBMSD_Ram Library |
samux | 0:ba333853266b | 2 | * |
samux | 0:ba333853266b | 3 | * Permission is hereby granted, free of charge, to any person obtaining a copy |
samux | 0:ba333853266b | 4 | * of this software and associated documentation files (the "Software"), to deal |
samux | 0:ba333853266b | 5 | * in the Software without restriction, including without limitation the rights |
samux | 0:ba333853266b | 6 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
samux | 0:ba333853266b | 7 | * copies of the Software, and to permit persons to whom the Software is |
samux | 0:ba333853266b | 8 | * furnished to do so, subject to the following conditions: |
samux | 0:ba333853266b | 9 | * |
samux | 0:ba333853266b | 10 | * The above copyright notice and this permission notice shall be included in |
samux | 0:ba333853266b | 11 | * all copies or substantial portions of the Software. |
samux | 0:ba333853266b | 12 | * |
samux | 0:ba333853266b | 13 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
samux | 0:ba333853266b | 14 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
samux | 0:ba333853266b | 15 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
samux | 0:ba333853266b | 16 | * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
samux | 0:ba333853266b | 17 | * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
samux | 0:ba333853266b | 18 | * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |
samux | 0:ba333853266b | 19 | * THE SOFTWARE. |
samux | 0:ba333853266b | 20 | */ |
samux | 0:ba333853266b | 21 | |
samux | 0:ba333853266b | 22 | #include "USBMSD_Ram.h" |
samux | 0:ba333853266b | 23 | |
samux | 1:3d0c421fe52b | 24 | typedef struct sector { |
samux | 1:3d0c421fe52b | 25 | const char * sect; |
samux | 1:3d0c421fe52b | 26 | unsigned int length; |
samux | 1:3d0c421fe52b | 27 | } SECTOR; |
samux | 0:ba333853266b | 28 | |
samux | 1:3d0c421fe52b | 29 | #define LSByte(x) (x & 0xff) |
samux | 1:3d0c421fe52b | 30 | #define MSByte(x) ((x >> 8) & 0xff) |
samux | 1:3d0c421fe52b | 31 | |
samux | 1:3d0c421fe52b | 32 | const char mbr[] = { |
samux | 0:ba333853266b | 33 | //sector 0: boot sector |
samux | 1:3d0c421fe52b | 34 | 0xEB,0x3C,0x90,0x4D,0x53,0x44,0x4F,0x53,0x35,0x2E,0x30, 0x00,0x02,/*bytes per sector: 512*/ 0x01, /*sectors per cluster*/ 0x01,0x00,/*number of reserved sector*/ |
samux | 1:3d0c421fe52b | 35 | 0x01, /* number of FATs*/ 0x10,0x00, /*Maximum number of root directory entries: 16*/ LSByte(NB_SECTORS),MSByte(NB_SECTORS), /*Total sector count*/ 0xF0, 0x01,0x00,/*sectors per FAT: 1*/ 0x01,0x00,/*Sectors per track*/ 0x01,0x00, /*Number of heads*/ 0x00,0x00,0x00,0x00, |
samux | 0:ba333853266b | 36 | 0x00,0x01,0x00,0x00,0x00,0x00, 0x29, /*boot signature*/ 0x74,0x19,0x02,0x27, /*volume ID*/ 'M','b','e','d',' ', |
samux | 0:ba333853266b | 37 | 'U','S','B',' ',' ',' ', /*volume label: Mbed USB*/ 0x46,0x41,0x54,0x31,0x32,0x20,0x20,0x20,0x33,0xC9, |
samux | 0:ba333853266b | 38 | 0x8E,0xD1,0xBC,0xF0,0x7B,0x8E,0xD9,0xB8,0x00,0x20,0x8E,0xC0,0xFC,0xBD,0x00,0x7C, |
samux | 0:ba333853266b | 39 | 0x38,0x4E,0x24,0x7D,0x24,0x8B,0xC1,0x99,0xE8,0x3C,0x01,0x72,0x1C,0x83,0xEB,0x3A, |
samux | 0:ba333853266b | 40 | 0x66,0xA1,0x1C,0x7C,0x26,0x66,0x3B,0x07,0x26,0x8A,0x57,0xFC,0x75,0x06,0x80,0xCA, |
samux | 0:ba333853266b | 41 | 0x02,0x88,0x56,0x02,0x80,0xC3,0x10,0x73,0xEB,0x33,0xC9,0x8A,0x46,0x10,0x98,0xF7, |
samux | 0:ba333853266b | 42 | 0x66,0x16,0x03,0x46,0x1C,0x13,0x56,0x1E,0x03,0x46,0x0E,0x13,0xD1,0x8B,0x76,0x11, |
samux | 0:ba333853266b | 43 | 0x60,0x89,0x46,0xFC,0x89,0x56,0xFE,0xB8,0x20,0x00,0xF7,0xE6,0x8B,0x5E,0x0B,0x03, |
samux | 0:ba333853266b | 44 | 0xC3,0x48,0xF7,0xF3,0x01,0x46,0xFC,0x11,0x4E,0xFE,0x61,0xBF,0x00,0x00,0xE8,0xE6, |
samux | 0:ba333853266b | 45 | 0x00,0x72,0x39,0x26,0x38,0x2D,0x74,0x17,0x60,0xB1,0x0B,0xBE,0xA1,0x7D,0xF3,0xA6, |
samux | 0:ba333853266b | 46 | 0x61,0x74,0x32,0x4E,0x74,0x09,0x83,0xC7,0x20,0x3B,0xFB,0x72,0xE6,0xEB,0xDC,0xA0, |
samux | 0:ba333853266b | 47 | 0xFB,0x7D,0xB4,0x7D,0x8B,0xF0,0xAC,0x98,0x40,0x74,0x0C,0x48,0x74,0x13,0xB4,0x0E, |
samux | 0:ba333853266b | 48 | 0xBB,0x07,0x00,0xCD,0x10,0xEB,0xEF,0xA0,0xFD,0x7D,0xEB,0xE6,0xA0,0xFC,0x7D,0xEB, |
samux | 0:ba333853266b | 49 | 0xE1,0xCD,0x16,0xCD,0x19,0x26,0x8B,0x55,0x1A,0x52,0xB0,0x01,0xBB,0x00,0x00,0xE8, |
samux | 0:ba333853266b | 50 | 0x3B,0x00,0x72,0xE8,0x5B,0x8A,0x56,0x24,0xBE,0x0B,0x7C,0x8B,0xFC,0xC7,0x46,0xF0, |
samux | 0:ba333853266b | 51 | 0x3D,0x7D,0xC7,0x46,0xF4,0x29,0x7D,0x8C,0xD9,0x89,0x4E,0xF2,0x89,0x4E,0xF6,0xC6, |
samux | 0:ba333853266b | 52 | 0x06,0x96,0x7D,0xCB,0xEA,0x03,0x00,0x00,0x20,0x0F,0xB6,0xC8,0x66,0x8B,0x46,0xF8, |
samux | 0:ba333853266b | 53 | 0x66,0x03,0x46,0x1C,0x66,0x8B,0xD0,0x66,0xC1,0xEA,0x10,0xEB,0x5E,0x0F,0xB6,0xC8, |
samux | 0:ba333853266b | 54 | 0x4A,0x4A,0x8A,0x46,0x0D,0x32,0xE4,0xF7,0xE2,0x03,0x46,0xFC,0x13,0x56,0xFE,0xEB, |
samux | 0:ba333853266b | 55 | 0x4A,0x52,0x50,0x06,0x53,0x6A,0x01,0x6A,0x10,0x91,0x8B,0x46,0x18,0x96,0x92,0x33, |
samux | 0:ba333853266b | 56 | 0xD2,0xF7,0xF6,0x91,0xF7,0xF6,0x42,0x87,0xCA,0xF7,0x76,0x1A,0x8A,0xF2,0x8A,0xE8, |
samux | 0:ba333853266b | 57 | 0xC0,0xCC,0x02,0x0A,0xCC,0xB8,0x01,0x02,0x80,0x7E,0x02,0x0E,0x75,0x04,0xB4,0x42, |
samux | 0:ba333853266b | 58 | 0x8B,0xF4,0x8A,0x56,0x24,0xCD,0x13,0x61,0x61,0x72,0x0B,0x40,0x75,0x01,0x42,0x03, |
samux | 0:ba333853266b | 59 | 0x5E,0x0B,0x49,0x75,0x06,0xF8,0xC3,0x41,0xBB,0x00,0x00,0x60,0x66,0x6A,0x00,0xEB, |
samux | 0:ba333853266b | 60 | 0xB0,0x4E,0x54,0x4C,0x44,0x52,0x20,0x20,0x20,0x20,0x20,0x20,0x0D,0x0A,0x52,0x65, |
samux | 0:ba333853266b | 61 | 0x6D,0x6F,0x76,0x65,0x20,0x64,0x69,0x73,0x6B,0x73,0x20,0x6F,0x72,0x20,0x6F,0x74, |
samux | 0:ba333853266b | 62 | 0x68,0x65,0x72,0x20,0x6D,0x65,0x64,0x69,0x61,0x2E,0xFF,0x0D,0x0A,0x44,0x69,0x73, |
samux | 0:ba333853266b | 63 | 0x6B,0x20,0x65,0x72,0x72,0x6F,0x72,0xFF,0x0D,0x0A,0x50,0x72,0x65,0x73,0x73,0x20, |
samux | 0:ba333853266b | 64 | 0x61,0x6E,0x79,0x20,0x6B,0x65,0x79,0x20,0x74,0x6F,0x20,0x72,0x65,0x73,0x74,0x61, |
samux | 0:ba333853266b | 65 | 0x72,0x74,0x0D,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAC,0xCB,0xD8,0x55,0xAA, |
samux | 1:3d0c421fe52b | 66 | }; |
samux | 1:3d0c421fe52b | 67 | |
samux | 1:3d0c421fe52b | 68 | const char fat[] = { 0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F }; |
samux | 1:3d0c421fe52b | 69 | |
samux | 1:3d0c421fe52b | 70 | const char root_dir[] = { |
samux | 0:ba333853266b | 71 | //sector 3: root directory |
samux | 0:ba333853266b | 72 | //entry 1 |
samux | 0:ba333853266b | 73 | 'M','b','e','d',' ','U','S','B',' ',' ',' ', 0x28,0x00,0x00,0x00,0x00, |
samux | 0:ba333853266b | 74 | 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, |
samux | 0:ba333853266b | 75 | //entry 2 |
samux | 1:3d0c421fe52b | 76 | 'R','E','A','D','M','E',0x20,0x20,'T','X','T', /*readme.txt*/ 0x20,0x00,0x00,0x00,0x00, |
samux | 0:ba333853266b | 77 | 0x21,0x00,0xBB,0x32,0x00,0x00, 0xDC,0x83,/*hour/min/doublesec*/ 0x6A,0x3F,/*year/month/day*/ 0x02,0x00, /*starting cluster*/ 0x1e,0x00,0x00,0x00, /*size*/ |
samux | 1:3d0c421fe52b | 78 | }; |
samux | 1:3d0c421fe52b | 79 | |
samux | 1:3d0c421fe52b | 80 | const char data[] = { |
samux | 0:ba333853266b | 81 | //sector 4: data |
samux | 0:ba333853266b | 82 | 'H','e','l','l','o',' ','f','r','o','m',' ','M','b','e','d','!', |
samux | 1:3d0c421fe52b | 83 | '\r','\n','U','S','B',' ','M','S','D',' ','d','e','m','o',0x00,0x00 |
samux | 0:ba333853266b | 84 | }; |
samux | 0:ba333853266b | 85 | |
samux | 1:3d0c421fe52b | 86 | //3 sectors |
samux | 1:3d0c421fe52b | 87 | SECTOR sectors[4] = { |
samux | 1:3d0c421fe52b | 88 | {mbr , 512}, |
samux | 1:3d0c421fe52b | 89 | {fat, 8}, |
samux | 1:3d0c421fe52b | 90 | {root_dir, 4*16}, |
samux | 0:ba333853266b | 91 | |
samux | 1:3d0c421fe52b | 92 | // contains readme.txt |
samux | 1:3d0c421fe52b | 93 | {data, 2*16} |
samux | 1:3d0c421fe52b | 94 | }; |
samux | 0:ba333853266b | 95 | |
samux | 0:ba333853266b | 96 | USBMSD_Ram::USBMSD_Ram() { |
samux | 1:3d0c421fe52b | 97 | //no init |
samux | 1:3d0c421fe52b | 98 | _status = 0x01; |
samux | 1:3d0c421fe52b | 99 | memset(disk_image, 0, 512*4); |
samux | 1:3d0c421fe52b | 100 | for (uint8_t i = 0; i < 4; i++) { |
samux | 1:3d0c421fe52b | 101 | memcpy(disk_image + 512*i, sectors[i].sect, sectors[i].length); |
samux | 1:3d0c421fe52b | 102 | } |
samux | 1:3d0c421fe52b | 103 | connect(); |
samux | 0:ba333853266b | 104 | } |
samux | 0:ba333853266b | 105 | |
samux | 0:ba333853266b | 106 | int USBMSD_Ram::disk_initialize() { |
samux | 0:ba333853266b | 107 | // OK |
samux | 0:ba333853266b | 108 | _status = 0x00; |
samux | 0:ba333853266b | 109 | return 0; |
samux | 0:ba333853266b | 110 | } |
samux | 0:ba333853266b | 111 | |
va009039 | 2:ee281ece9011 | 112 | int USBMSD_Ram::disk_write(const uint8_t * buffer, uint64_t block_number, uint8_t count) { |
va009039 | 2:ee281ece9011 | 113 | memcpy(disk_image + block_number*512, buffer, 512*count); |
samux | 0:ba333853266b | 114 | return 0; |
samux | 0:ba333853266b | 115 | } |
samux | 0:ba333853266b | 116 | |
va009039 | 2:ee281ece9011 | 117 | int USBMSD_Ram::disk_read(uint8_t * buffer, uint64_t block_number, uint8_t count) { |
va009039 | 2:ee281ece9011 | 118 | memcpy(buffer, disk_image + block_number*512, 512*count); |
samux | 0:ba333853266b | 119 | return 0; |
samux | 0:ba333853266b | 120 | } |
samux | 0:ba333853266b | 121 | |
samux | 0:ba333853266b | 122 | int USBMSD_Ram::disk_status() { return _status; } |
samux | 0:ba333853266b | 123 | int USBMSD_Ram::disk_sync() { return 0; } |
samux | 1:3d0c421fe52b | 124 | uint64_t USBMSD_Ram::disk_sectors() { return NB_SECTORS; } |
samux | 1:3d0c421fe52b | 125 | uint64_t USBMSD_Ram::disk_size() { return NB_SECTORS*512;} |