test for export

Dependents:   F401RE_USBMSD_RAM_copy

Fork of RAM_DISK by Norimasa Okamoto

Committer:
dreschpe
Date:
Sun Jan 29 12:47:29 2017 +0000
Revision:
3:90186ebbe2c5
Parent:
2:ee281ece9011
test for export;

Who changed what in which revision?

UserRevisionLine numberNew 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
dreschpe 3:90186ebbe2c5 34 0xEB,0x3C,0x90,0x4D,0x53,0x44,0x4F,0x53,0x35,0x2E,0x30, 0x00,0x02,/*bytes per sector: 512*/
dreschpe 3:90186ebbe2c5 35 0x01, /*sectors per cluster*/ 0x01,0x00,/*number of reserved sector*/
dreschpe 3:90186ebbe2c5 36 0x01, /* number of FATs*/
dreschpe 3:90186ebbe2c5 37 0x10,0x00, /*Maximum number of root directory entries: 16*/
dreschpe 3:90186ebbe2c5 38 LSByte(NB_SECTORS),MSByte(NB_SECTORS), /*Total sector count*/
dreschpe 3:90186ebbe2c5 39 0xF0, 0x01,0x00,/*sectors per FAT: 1*/
dreschpe 3:90186ebbe2c5 40 0x01,0x00,/*Sectors per track*/
dreschpe 3:90186ebbe2c5 41 0x01,0x00, /*Number of heads*/
dreschpe 3:90186ebbe2c5 42 0x00,0x00,0x00,0x00,
dreschpe 3:90186ebbe2c5 43 0x00,0x01,0x00,0x00,0x00,0x00, 0x29, /*boot signature*/
dreschpe 3:90186ebbe2c5 44 0x74,0x19,0x02,0x27, /*volume ID*/
dreschpe 3:90186ebbe2c5 45 'M','b','e','d',' ','U','S','B',' ',' ',' ', /*volume label: Mbed USB*/
dreschpe 3:90186ebbe2c5 46 0x46,0x41,0x54,0x31,0x32,0x20,0x20,0x20,0x33,0xC9,
samux 0:ba333853266b 47 0x8E,0xD1,0xBC,0xF0,0x7B,0x8E,0xD9,0xB8,0x00,0x20,0x8E,0xC0,0xFC,0xBD,0x00,0x7C,
samux 0:ba333853266b 48 0x38,0x4E,0x24,0x7D,0x24,0x8B,0xC1,0x99,0xE8,0x3C,0x01,0x72,0x1C,0x83,0xEB,0x3A,
samux 0:ba333853266b 49 0x66,0xA1,0x1C,0x7C,0x26,0x66,0x3B,0x07,0x26,0x8A,0x57,0xFC,0x75,0x06,0x80,0xCA,
samux 0:ba333853266b 50 0x02,0x88,0x56,0x02,0x80,0xC3,0x10,0x73,0xEB,0x33,0xC9,0x8A,0x46,0x10,0x98,0xF7,
samux 0:ba333853266b 51 0x66,0x16,0x03,0x46,0x1C,0x13,0x56,0x1E,0x03,0x46,0x0E,0x13,0xD1,0x8B,0x76,0x11,
samux 0:ba333853266b 52 0x60,0x89,0x46,0xFC,0x89,0x56,0xFE,0xB8,0x20,0x00,0xF7,0xE6,0x8B,0x5E,0x0B,0x03,
samux 0:ba333853266b 53 0xC3,0x48,0xF7,0xF3,0x01,0x46,0xFC,0x11,0x4E,0xFE,0x61,0xBF,0x00,0x00,0xE8,0xE6,
samux 0:ba333853266b 54 0x00,0x72,0x39,0x26,0x38,0x2D,0x74,0x17,0x60,0xB1,0x0B,0xBE,0xA1,0x7D,0xF3,0xA6,
samux 0:ba333853266b 55 0x61,0x74,0x32,0x4E,0x74,0x09,0x83,0xC7,0x20,0x3B,0xFB,0x72,0xE6,0xEB,0xDC,0xA0,
samux 0:ba333853266b 56 0xFB,0x7D,0xB4,0x7D,0x8B,0xF0,0xAC,0x98,0x40,0x74,0x0C,0x48,0x74,0x13,0xB4,0x0E,
samux 0:ba333853266b 57 0xBB,0x07,0x00,0xCD,0x10,0xEB,0xEF,0xA0,0xFD,0x7D,0xEB,0xE6,0xA0,0xFC,0x7D,0xEB,
samux 0:ba333853266b 58 0xE1,0xCD,0x16,0xCD,0x19,0x26,0x8B,0x55,0x1A,0x52,0xB0,0x01,0xBB,0x00,0x00,0xE8,
samux 0:ba333853266b 59 0x3B,0x00,0x72,0xE8,0x5B,0x8A,0x56,0x24,0xBE,0x0B,0x7C,0x8B,0xFC,0xC7,0x46,0xF0,
samux 0:ba333853266b 60 0x3D,0x7D,0xC7,0x46,0xF4,0x29,0x7D,0x8C,0xD9,0x89,0x4E,0xF2,0x89,0x4E,0xF6,0xC6,
samux 0:ba333853266b 61 0x06,0x96,0x7D,0xCB,0xEA,0x03,0x00,0x00,0x20,0x0F,0xB6,0xC8,0x66,0x8B,0x46,0xF8,
samux 0:ba333853266b 62 0x66,0x03,0x46,0x1C,0x66,0x8B,0xD0,0x66,0xC1,0xEA,0x10,0xEB,0x5E,0x0F,0xB6,0xC8,
samux 0:ba333853266b 63 0x4A,0x4A,0x8A,0x46,0x0D,0x32,0xE4,0xF7,0xE2,0x03,0x46,0xFC,0x13,0x56,0xFE,0xEB,
samux 0:ba333853266b 64 0x4A,0x52,0x50,0x06,0x53,0x6A,0x01,0x6A,0x10,0x91,0x8B,0x46,0x18,0x96,0x92,0x33,
samux 0:ba333853266b 65 0xD2,0xF7,0xF6,0x91,0xF7,0xF6,0x42,0x87,0xCA,0xF7,0x76,0x1A,0x8A,0xF2,0x8A,0xE8,
samux 0:ba333853266b 66 0xC0,0xCC,0x02,0x0A,0xCC,0xB8,0x01,0x02,0x80,0x7E,0x02,0x0E,0x75,0x04,0xB4,0x42,
samux 0:ba333853266b 67 0x8B,0xF4,0x8A,0x56,0x24,0xCD,0x13,0x61,0x61,0x72,0x0B,0x40,0x75,0x01,0x42,0x03,
samux 0:ba333853266b 68 0x5E,0x0B,0x49,0x75,0x06,0xF8,0xC3,0x41,0xBB,0x00,0x00,0x60,0x66,0x6A,0x00,0xEB,
samux 0:ba333853266b 69 0xB0,0x4E,0x54,0x4C,0x44,0x52,0x20,0x20,0x20,0x20,0x20,0x20,0x0D,0x0A,0x52,0x65,
samux 0:ba333853266b 70 0x6D,0x6F,0x76,0x65,0x20,0x64,0x69,0x73,0x6B,0x73,0x20,0x6F,0x72,0x20,0x6F,0x74,
samux 0:ba333853266b 71 0x68,0x65,0x72,0x20,0x6D,0x65,0x64,0x69,0x61,0x2E,0xFF,0x0D,0x0A,0x44,0x69,0x73,
samux 0:ba333853266b 72 0x6B,0x20,0x65,0x72,0x72,0x6F,0x72,0xFF,0x0D,0x0A,0x50,0x72,0x65,0x73,0x73,0x20,
samux 0:ba333853266b 73 0x61,0x6E,0x79,0x20,0x6B,0x65,0x79,0x20,0x74,0x6F,0x20,0x72,0x65,0x73,0x74,0x61,
samux 0:ba333853266b 74 0x72,0x74,0x0D,0x0A,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xAC,0xCB,0xD8,0x55,0xAA,
samux 1:3d0c421fe52b 75 };
samux 1:3d0c421fe52b 76
samux 1:3d0c421fe52b 77 const char fat[] = { 0xF8,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x0F };
samux 1:3d0c421fe52b 78
samux 1:3d0c421fe52b 79 const char root_dir[] = {
samux 0:ba333853266b 80 //sector 3: root directory
samux 0:ba333853266b 81 //entry 1
samux 0:ba333853266b 82 'M','b','e','d',' ','U','S','B',' ',' ',' ', 0x28,0x00,0x00,0x00,0x00,
samux 0:ba333853266b 83 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
samux 0:ba333853266b 84 //entry 2
samux 1:3d0c421fe52b 85 'R','E','A','D','M','E',0x20,0x20,'T','X','T', /*readme.txt*/ 0x20,0x00,0x00,0x00,0x00,
samux 0:ba333853266b 86 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 87 };
samux 1:3d0c421fe52b 88
samux 1:3d0c421fe52b 89 const char data[] = {
samux 0:ba333853266b 90 //sector 4: data
samux 0:ba333853266b 91 'H','e','l','l','o',' ','f','r','o','m',' ','M','b','e','d','!',
samux 1:3d0c421fe52b 92 '\r','\n','U','S','B',' ','M','S','D',' ','d','e','m','o',0x00,0x00
samux 0:ba333853266b 93 };
samux 0:ba333853266b 94
samux 1:3d0c421fe52b 95 //3 sectors
samux 1:3d0c421fe52b 96 SECTOR sectors[4] = {
samux 1:3d0c421fe52b 97 {mbr , 512},
samux 1:3d0c421fe52b 98 {fat, 8},
samux 1:3d0c421fe52b 99 {root_dir, 4*16},
samux 0:ba333853266b 100
samux 1:3d0c421fe52b 101 // contains readme.txt
samux 1:3d0c421fe52b 102 {data, 2*16}
samux 1:3d0c421fe52b 103 };
samux 0:ba333853266b 104
samux 0:ba333853266b 105 USBMSD_Ram::USBMSD_Ram() {
samux 1:3d0c421fe52b 106 //no init
samux 1:3d0c421fe52b 107 _status = 0x01;
samux 1:3d0c421fe52b 108 memset(disk_image, 0, 512*4);
samux 1:3d0c421fe52b 109 for (uint8_t i = 0; i < 4; i++) {
samux 1:3d0c421fe52b 110 memcpy(disk_image + 512*i, sectors[i].sect, sectors[i].length);
samux 1:3d0c421fe52b 111 }
samux 1:3d0c421fe52b 112 connect();
samux 0:ba333853266b 113 }
samux 0:ba333853266b 114
samux 0:ba333853266b 115 int USBMSD_Ram::disk_initialize() {
samux 0:ba333853266b 116 // OK
samux 0:ba333853266b 117 _status = 0x00;
samux 0:ba333853266b 118 return 0;
samux 0:ba333853266b 119 }
samux 0:ba333853266b 120
va009039 2:ee281ece9011 121 int USBMSD_Ram::disk_write(const uint8_t * buffer, uint64_t block_number, uint8_t count) {
va009039 2:ee281ece9011 122 memcpy(disk_image + block_number*512, buffer, 512*count);
samux 0:ba333853266b 123 return 0;
samux 0:ba333853266b 124 }
samux 0:ba333853266b 125
va009039 2:ee281ece9011 126 int USBMSD_Ram::disk_read(uint8_t * buffer, uint64_t block_number, uint8_t count) {
va009039 2:ee281ece9011 127 memcpy(buffer, disk_image + block_number*512, 512*count);
samux 0:ba333853266b 128 return 0;
samux 0:ba333853266b 129 }
samux 0:ba333853266b 130
samux 0:ba333853266b 131 int USBMSD_Ram::disk_status() { return _status; }
samux 0:ba333853266b 132 int USBMSD_Ram::disk_sync() { return 0; }
samux 1:3d0c421fe52b 133 uint64_t USBMSD_Ram::disk_sectors() { return NB_SECTORS; }
samux 1:3d0c421fe52b 134 uint64_t USBMSD_Ram::disk_size() { return NB_SECTORS*512;}