USB tiny disk
USBTinyDisk.cpp@0:bc3d724e2ea5, 2014-01-21 (annotated)
- Committer:
- yihui
- Date:
- Tue Jan 21 08:38:35 2014 +0000
- Revision:
- 0:bc3d724e2ea5
initial
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
yihui | 0:bc3d724e2ea5 | 1 | |
yihui | 0:bc3d724e2ea5 | 2 | #include <stdint.h> |
yihui | 0:bc3d724e2ea5 | 3 | #include "USBTinyDisk.h" |
yihui | 0:bc3d724e2ea5 | 4 | |
yihui | 0:bc3d724e2ea5 | 5 | #include "DiskImage.c" // include DiskImage[] |
yihui | 0:bc3d724e2ea5 | 6 | |
yihui | 0:bc3d724e2ea5 | 7 | // Min size of a disk recognized by windows is 8192 bytes |
yihui | 0:bc3d724e2ea5 | 8 | #define DISK_SIZE_MIN 8192 |
yihui | 0:bc3d724e2ea5 | 9 | #define DISK_SIZE() ((sizeof(DiskImage) > DISK_SIZE_MIN) ? sizeof(DiskImage) : DISK_SIZE_MIN) |
yihui | 0:bc3d724e2ea5 | 10 | |
yihui | 0:bc3d724e2ea5 | 11 | USBTinyDisk::USBTinyDisk(uint16_t vendor_id, uint16_t product_id, uint16_t product_release) : USBMSD(vendor_id, product_id, product_release) { |
yihui | 0:bc3d724e2ea5 | 12 | |
yihui | 0:bc3d724e2ea5 | 13 | } |
yihui | 0:bc3d724e2ea5 | 14 | |
yihui | 0:bc3d724e2ea5 | 15 | int USBTinyDisk::disk_read(uint8_t * data, uint64_t block) { |
yihui | 0:bc3d724e2ea5 | 16 | int offset = 512 * block; |
yihui | 0:bc3d724e2ea5 | 17 | if (offset < sizeof(DiskImage)) { |
yihui | 0:bc3d724e2ea5 | 18 | memcpy(data, DiskImage + offset, 512); |
yihui | 0:bc3d724e2ea5 | 19 | } else { |
yihui | 0:bc3d724e2ea5 | 20 | memset(data, 0, 512); |
yihui | 0:bc3d724e2ea5 | 21 | } |
yihui | 0:bc3d724e2ea5 | 22 | return 0; |
yihui | 0:bc3d724e2ea5 | 23 | } |
yihui | 0:bc3d724e2ea5 | 24 | |
yihui | 0:bc3d724e2ea5 | 25 | int USBTinyDisk::disk_write(const uint8_t * data, uint64_t block) { |
yihui | 0:bc3d724e2ea5 | 26 | return 1; |
yihui | 0:bc3d724e2ea5 | 27 | } |
yihui | 0:bc3d724e2ea5 | 28 | |
yihui | 0:bc3d724e2ea5 | 29 | int USBTinyDisk::disk_initialize() { |
yihui | 0:bc3d724e2ea5 | 30 | return 0; |
yihui | 0:bc3d724e2ea5 | 31 | } |
yihui | 0:bc3d724e2ea5 | 32 | |
yihui | 0:bc3d724e2ea5 | 33 | uint64_t USBTinyDisk::disk_sectors() { |
yihui | 0:bc3d724e2ea5 | 34 | |
yihui | 0:bc3d724e2ea5 | 35 | return DISK_SIZE() / 512; |
yihui | 0:bc3d724e2ea5 | 36 | } |
yihui | 0:bc3d724e2ea5 | 37 | |
yihui | 0:bc3d724e2ea5 | 38 | uint64_t USBTinyDisk::disk_size() { |
yihui | 0:bc3d724e2ea5 | 39 | return DISK_SIZE(); |
yihui | 0:bc3d724e2ea5 | 40 | } |
yihui | 0:bc3d724e2ea5 | 41 | |
yihui | 0:bc3d724e2ea5 | 42 | int USBTinyDisk::disk_status() { |
yihui | 0:bc3d724e2ea5 | 43 | return 4; |
yihui | 0:bc3d724e2ea5 | 44 | } |
yihui | 0:bc3d724e2ea5 | 45 | |
yihui | 0:bc3d724e2ea5 | 46 | uint8_t * USBTinyDisk::stringImanufacturerDesc() { |
yihui | 0:bc3d724e2ea5 | 47 | static uint8_t stringImanufacturerDescriptor[] = { |
yihui | 0:bc3d724e2ea5 | 48 | 0x0C, //bLength |
yihui | 0:bc3d724e2ea5 | 49 | STRING_DESCRIPTOR, //bDescriptorType 0x03 |
yihui | 0:bc3d724e2ea5 | 50 | 'S',0,'E',0,'E',0,'E',0,'D',0 //bString iVendor- Seeed |
yihui | 0:bc3d724e2ea5 | 51 | }; |
yihui | 0:bc3d724e2ea5 | 52 | return stringImanufacturerDescriptor; |
yihui | 0:bc3d724e2ea5 | 53 | } |
yihui | 0:bc3d724e2ea5 | 54 | |
yihui | 0:bc3d724e2ea5 | 55 | uint8_t * USBTinyDisk::stringIproductDesc() { |
yihui | 0:bc3d724e2ea5 | 56 | static uint8_t stringIproductDescriptor[] = { |
yihui | 0:bc3d724e2ea5 | 57 | 0x12, //bLength |
yihui | 0:bc3d724e2ea5 | 58 | STRING_DESCRIPTOR, //bDescriptorType 0x03 |
yihui | 0:bc3d724e2ea5 | 59 | 'A',0,'r',0,'c',0,'h',0,' ',0,'P',0,'r',0,'o',0 //bString iProduct - Arch |
yihui | 0:bc3d724e2ea5 | 60 | }; |
yihui | 0:bc3d724e2ea5 | 61 | return stringIproductDescriptor; |
yihui | 0:bc3d724e2ea5 | 62 | } |
yihui | 0:bc3d724e2ea5 | 63 | |
yihui | 0:bc3d724e2ea5 | 64 | uint8_t * USBTinyDisk::stringIserialDesc() { |
yihui | 0:bc3d724e2ea5 | 65 | static uint8_t stringIserialDescriptor[] = { |
yihui | 0:bc3d724e2ea5 | 66 | 0x12, //bLength |
yihui | 0:bc3d724e2ea5 | 67 | STRING_DESCRIPTOR, //bDescriptorType 0x03 |
yihui | 0:bc3d724e2ea5 | 68 | '2',0,'0',0,'1',0,'3',0,'0',0,'9',0,'2',0,'2',0,'A',0 //bString iSerial - 20130620A |
yihui | 0:bc3d724e2ea5 | 69 | }; |
yihui | 0:bc3d724e2ea5 | 70 | return stringIserialDescriptor; |
yihui | 0:bc3d724e2ea5 | 71 | } |