Versión de Firmware con funciones de RAM incorporadas.

Dependencies:   mbed

Fork of VmRecorderV1dot1 by virtualmech

Committer:
JuanManuelAmador
Date:
Tue Jul 14 08:34:11 2015 +0000
Revision:
2:e818c80e6d5c
Parent:
0:3d456b8ce449
Funciones de memoria RAM introducidas.

Who changed what in which revision?

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