j

Dependencies:   General C12832 FatFileSystemCpp mbed

Fork of 1TestDECAWAVE_plus_others by U of Calegary - Okeef

Committer:
Kekehoho
Date:
Fri Aug 19 17:38:43 2016 +0000
Revision:
2:e28f4414ca2c
Parent:
1:4523d7cda75e
k

Who changed what in which revision?

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