Wireless Gas Meter Reading System Data Logger

Dependencies:   mbed

Committer:
harrisjunaid
Date:
Tue Apr 17 15:54:02 2012 +0000
Revision:
0:a67cda7c126f

        

Who changed what in which revision?

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