PIDs and fun

Dependencies:   btbee m3pi_ng mbed FatFileSystemCpp

Committer:
crmackey
Date:
Fri May 29 14:08:07 2015 +0000
Revision:
20:e844f2e48691
Parent:
9:43be0dea44f0
Works now for real

Who changed what in which revision?

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