for rex

Dependencies:   FatFileSystem mbed

Fork of SnakeGame by Pujun Bhatnagar

Committer:
superlova
Date:
Sat Aug 08 09:32:56 2015 +0000
Revision:
1:4222a8f9ca88
for rexry

Who changed what in which revision?

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