Committer:
apm_litoral
Date:
Tue Apr 10 03:33:17 2012 +0000
Revision:
0:fdc81fb10bd5

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
apm_litoral 0:fdc81fb10bd5 1 #include "MSCFileSystem.h"
apm_litoral 0:fdc81fb10bd5 2 #include "usbhost_inc.h"
apm_litoral 0:fdc81fb10bd5 3
apm_litoral 0:fdc81fb10bd5 4 #define EN_On 1
apm_litoral 0:fdc81fb10bd5 5 #define EN_Off 0
apm_litoral 0:fdc81fb10bd5 6 /*
apm_litoral 0:fdc81fb10bd5 7 MSCFileSystem::MSCFileSystem(PinName host, const char* name)
apm_litoral 0:fdc81fb10bd5 8 :_host(host), FATFileSystem(name)
apm_litoral 0:fdc81fb10bd5 9 {
apm_litoral 0:fdc81fb10bd5 10 _host = EN_On ;
apm_litoral 0:fdc81fb10bd5 11 }*/
apm_litoral 0:fdc81fb10bd5 12 MSCFileSystem::MSCFileSystem(const char* name) :
apm_litoral 0:fdc81fb10bd5 13 FATFileSystem(name) {
apm_litoral 0:fdc81fb10bd5 14 }
apm_litoral 0:fdc81fb10bd5 15
apm_litoral 0:fdc81fb10bd5 16 void print_inquiry(USB_INT08U *inqReply) {
apm_litoral 0:fdc81fb10bd5 17 // see USB Mass Storage Class � UFI Command Specification,
apm_litoral 0:fdc81fb10bd5 18 // 4.2 INQUIRY Command
apm_litoral 0:fdc81fb10bd5 19 //printf("Inquiry reply:\n");
apm_litoral 0:fdc81fb10bd5 20 uint8_t tmp = inqReply[0]&0x1F;
apm_litoral 0:fdc81fb10bd5 21 printf("Peripheral device type: %02Xh\n", tmp);
apm_litoral 0:fdc81fb10bd5 22 if ( tmp == 0 )
apm_litoral 0:fdc81fb10bd5 23 printf("\t- Direct access (floppy)\n");
apm_litoral 0:fdc81fb10bd5 24 else if ( tmp == 0x1F )
apm_litoral 0:fdc81fb10bd5 25 printf("\t- none (no FDD connected)\n");
apm_litoral 0:fdc81fb10bd5 26 else
apm_litoral 0:fdc81fb10bd5 27 printf("\t- unknown type\n");
apm_litoral 0:fdc81fb10bd5 28 tmp = inqReply[1] >> 7;
apm_litoral 0:fdc81fb10bd5 29 printf("Removable Media Bit: %d\n", tmp);
apm_litoral 0:fdc81fb10bd5 30 tmp = inqReply[2] & 3;
apm_litoral 0:fdc81fb10bd5 31 printf("ANSI Version: %02Xh\n", tmp);
apm_litoral 0:fdc81fb10bd5 32 if ( tmp != 0 )
apm_litoral 0:fdc81fb10bd5 33 printf("\t- warning! must be 0\n");
apm_litoral 0:fdc81fb10bd5 34 tmp = (inqReply[2]>>3) & 3;
apm_litoral 0:fdc81fb10bd5 35 printf("ECMA Version: %02Xh\n", tmp);
apm_litoral 0:fdc81fb10bd5 36 if ( tmp != 0 )
apm_litoral 0:fdc81fb10bd5 37 printf("\t- warning! should be 0\n");
apm_litoral 0:fdc81fb10bd5 38 tmp = inqReply[2]>>6;
apm_litoral 0:fdc81fb10bd5 39 printf("ISO Version: %02Xh\n", tmp);
apm_litoral 0:fdc81fb10bd5 40 if ( tmp != 0 )
apm_litoral 0:fdc81fb10bd5 41 printf("\t- warning! should be 0\n");
apm_litoral 0:fdc81fb10bd5 42 tmp = inqReply[3] & 0xF;
apm_litoral 0:fdc81fb10bd5 43 printf("Response Data Format: %02Xh\n", tmp);
apm_litoral 0:fdc81fb10bd5 44 if ( tmp != 1 )
apm_litoral 0:fdc81fb10bd5 45 printf("\t- warning! should be 1\n");
apm_litoral 0:fdc81fb10bd5 46 tmp = inqReply[4];
apm_litoral 0:fdc81fb10bd5 47 printf("Additional length: %02Xh\n", tmp);
apm_litoral 0:fdc81fb10bd5 48 if ( tmp != 0x1F )
apm_litoral 0:fdc81fb10bd5 49 printf("\t- warning! should be 1Fh\n");
apm_litoral 0:fdc81fb10bd5 50
apm_litoral 0:fdc81fb10bd5 51 printf("Vendor Information: '%.8s'\n", &inqReply[8]);
apm_litoral 0:fdc81fb10bd5 52 printf("Product Identification: '%.16s'\n", &inqReply[16]);
apm_litoral 0:fdc81fb10bd5 53 printf("Product Revision: '%.4s'\n", &inqReply[32]);
apm_litoral 0:fdc81fb10bd5 54 }
apm_litoral 0:fdc81fb10bd5 55
apm_litoral 0:fdc81fb10bd5 56 int MSCFileSystem::initialise_msc() {
apm_litoral 0:fdc81fb10bd5 57 //_host = EN_On ;//
apm_litoral 0:fdc81fb10bd5 58 USB_INT32S rc;
apm_litoral 0:fdc81fb10bd5 59 USB_INT08U inquiryResult[INQUIRY_LENGTH];
apm_litoral 0:fdc81fb10bd5 60
apm_litoral 0:fdc81fb10bd5 61 //print_clock();
apm_litoral 0:fdc81fb10bd5 62 Host_Init(); /* Initialize the host controller */
apm_litoral 0:fdc81fb10bd5 63 rc = Host_EnumDev(); /* Enumerate the device connected */
apm_litoral 0:fdc81fb10bd5 64 if (rc != OK) {
apm_litoral 0:fdc81fb10bd5 65 fprintf(stderr, "Could not enumerate device: %d\n", rc);
apm_litoral 0:fdc81fb10bd5 66 return rc;
apm_litoral 0:fdc81fb10bd5 67 }
apm_litoral 0:fdc81fb10bd5 68
apm_litoral 0:fdc81fb10bd5 69
apm_litoral 0:fdc81fb10bd5 70 /* Initialize the mass storage and scsi interfaces */
apm_litoral 0:fdc81fb10bd5 71 rc = MS_Init( &_blkSize, &_numBlks, inquiryResult );
apm_litoral 0:fdc81fb10bd5 72 if (rc != OK) {
apm_litoral 0:fdc81fb10bd5 73 fprintf(stderr, "Could not initialize mass storage interface: %d\n", rc);
apm_litoral 0:fdc81fb10bd5 74 return rc;
apm_litoral 0:fdc81fb10bd5 75 }
apm_litoral 0:fdc81fb10bd5 76 //printf("Successfully initialized mass storage interface; %d blocks of size %d\n", _numBlks, _blkSize);
apm_litoral 0:fdc81fb10bd5 77 //print_inquiry(inquiryResult);
apm_litoral 0:fdc81fb10bd5 78 // FATFileSystem supports only 512-byte blocks
apm_litoral 0:fdc81fb10bd5 79 //_host = EN_Off ;
apm_litoral 0:fdc81fb10bd5 80 return _blkSize == 512 ? OK : 1;
apm_litoral 0:fdc81fb10bd5 81 }
apm_litoral 0:fdc81fb10bd5 82
apm_litoral 0:fdc81fb10bd5 83 int MSCFileSystem::disk_initialize() {
apm_litoral 0:fdc81fb10bd5 84 //_host = EN_On ;
apm_litoral 0:fdc81fb10bd5 85 if ( initialise_msc() != OK ) {
apm_litoral 0:fdc81fb10bd5 86 //_host = EN_Off ;
apm_litoral 0:fdc81fb10bd5 87 return 1;
apm_litoral 0:fdc81fb10bd5 88 } else {
apm_litoral 0:fdc81fb10bd5 89 //_host = EN_Off ;
apm_litoral 0:fdc81fb10bd5 90 return 0;
apm_litoral 0:fdc81fb10bd5 91 }
apm_litoral 0:fdc81fb10bd5 92 }
apm_litoral 0:fdc81fb10bd5 93
apm_litoral 0:fdc81fb10bd5 94 int MSCFileSystem::disk_write(const char *buffer, int block_number) {
apm_litoral 0:fdc81fb10bd5 95 //_host = EN_On ;
apm_litoral 0:fdc81fb10bd5 96 if ( OK == MS_BulkSend(block_number, 1, (USB_INT08U *)buffer) ) {
apm_litoral 0:fdc81fb10bd5 97 //_host = EN_Off ;
apm_litoral 0:fdc81fb10bd5 98 return 0;
apm_litoral 0:fdc81fb10bd5 99 } else {
apm_litoral 0:fdc81fb10bd5 100 //_host = EN_Off ;
apm_litoral 0:fdc81fb10bd5 101 return 1;
apm_litoral 0:fdc81fb10bd5 102 }
apm_litoral 0:fdc81fb10bd5 103 }
apm_litoral 0:fdc81fb10bd5 104
apm_litoral 0:fdc81fb10bd5 105 int MSCFileSystem::disk_read(char *buffer, int block_number) {
apm_litoral 0:fdc81fb10bd5 106 //_host = EN_On ;
apm_litoral 0:fdc81fb10bd5 107 if ( OK == MS_BulkRecv(block_number, 1, (USB_INT08U *)buffer) ) {
apm_litoral 0:fdc81fb10bd5 108 //_host = EN_Off ;
apm_litoral 0:fdc81fb10bd5 109 return 0;
apm_litoral 0:fdc81fb10bd5 110 } else {
apm_litoral 0:fdc81fb10bd5 111 //_host = EN_Off ;
apm_litoral 0:fdc81fb10bd5 112 return 1;
apm_litoral 0:fdc81fb10bd5 113 }
apm_litoral 0:fdc81fb10bd5 114 }
apm_litoral 0:fdc81fb10bd5 115
apm_litoral 0:fdc81fb10bd5 116 int MSCFileSystem::disk_status() {
apm_litoral 0:fdc81fb10bd5 117 //_host = EN_On ;
apm_litoral 0:fdc81fb10bd5 118 //_host = EN_Off ;
apm_litoral 0:fdc81fb10bd5 119 return 0;
apm_litoral 0:fdc81fb10bd5 120
apm_litoral 0:fdc81fb10bd5 121 }
apm_litoral 0:fdc81fb10bd5 122 int MSCFileSystem::disk_sync() {
apm_litoral 0:fdc81fb10bd5 123 //_host = EN_On ;
apm_litoral 0:fdc81fb10bd5 124 //_host = EN_Off ;
apm_litoral 0:fdc81fb10bd5 125 return 0;
apm_litoral 0:fdc81fb10bd5 126
apm_litoral 0:fdc81fb10bd5 127 }
apm_litoral 0:fdc81fb10bd5 128 int MSCFileSystem::disk_sectors() {
apm_litoral 0:fdc81fb10bd5 129 //_host = EN_On ;
apm_litoral 0:fdc81fb10bd5 130 //_host = EN_Off ;
apm_litoral 0:fdc81fb10bd5 131 return 0;
apm_litoral 0:fdc81fb10bd5 132 }