I have errors with this program.

Dependencies:   mbed FATFileSystem

Committer:
carlos_nascimento08
Date:
Sun Jul 22 20:01:51 2012 +0000
Revision:
0:ebf86c956c58
Error debug

Who changed what in which revision?

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