USB tiny disk

Dependents:   USBTinyDisk_Arch

Committer:
yihui
Date:
Tue Jan 21 08:38:35 2014 +0000
Revision:
0:bc3d724e2ea5
initial

Who changed what in which revision?

UserRevisionLine numberNew 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 }