Diff: MSCFileSystem.cpp
- Revision:
- 0:fdc81fb10bd5
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/MSCFileSystem.cpp Tue Apr 10 03:33:17 2012 +0000
@@ -0,0 +1,132 @@
+#include "MSCFileSystem.h"
+#include "usbhost_inc.h"
+
+#define EN_On 1
+#define EN_Off 0
+/*
+MSCFileSystem::MSCFileSystem(PinName host, const char* name)
+ :_host(host), FATFileSystem(name)
+ {
+ _host = EN_On ;
+}*/
+MSCFileSystem::MSCFileSystem(const char* name) :
+ FATFileSystem(name) {
+}
+
+void print_inquiry(USB_INT08U *inqReply) {
+ // see USB Mass Storage Class � UFI Command Specification,
+ // 4.2 INQUIRY Command
+ //printf("Inquiry reply:\n");
+ uint8_t tmp = inqReply[0]&0x1F;
+ printf("Peripheral device type: %02Xh\n", tmp);
+ if ( tmp == 0 )
+ printf("\t- Direct access (floppy)\n");
+ else if ( tmp == 0x1F )
+ printf("\t- none (no FDD connected)\n");
+ else
+ printf("\t- unknown type\n");
+ tmp = inqReply[1] >> 7;
+ printf("Removable Media Bit: %d\n", tmp);
+ tmp = inqReply[2] & 3;
+ printf("ANSI Version: %02Xh\n", tmp);
+ if ( tmp != 0 )
+ printf("\t- warning! must be 0\n");
+ tmp = (inqReply[2]>>3) & 3;
+ printf("ECMA Version: %02Xh\n", tmp);
+ if ( tmp != 0 )
+ printf("\t- warning! should be 0\n");
+ tmp = inqReply[2]>>6;
+ printf("ISO Version: %02Xh\n", tmp);
+ if ( tmp != 0 )
+ printf("\t- warning! should be 0\n");
+ tmp = inqReply[3] & 0xF;
+ printf("Response Data Format: %02Xh\n", tmp);
+ if ( tmp != 1 )
+ printf("\t- warning! should be 1\n");
+ tmp = inqReply[4];
+ printf("Additional length: %02Xh\n", tmp);
+ if ( tmp != 0x1F )
+ printf("\t- warning! should be 1Fh\n");
+
+ printf("Vendor Information: '%.8s'\n", &inqReply[8]);
+ printf("Product Identification: '%.16s'\n", &inqReply[16]);
+ printf("Product Revision: '%.4s'\n", &inqReply[32]);
+}
+
+int MSCFileSystem::initialise_msc() {
+ //_host = EN_On ;//
+ USB_INT32S rc;
+ USB_INT08U inquiryResult[INQUIRY_LENGTH];
+
+ //print_clock();
+ Host_Init(); /* Initialize the host controller */
+ rc = Host_EnumDev(); /* Enumerate the device connected */
+ if (rc != OK) {
+ fprintf(stderr, "Could not enumerate device: %d\n", rc);
+ return rc;
+ }
+
+
+ /* Initialize the mass storage and scsi interfaces */
+ rc = MS_Init( &_blkSize, &_numBlks, inquiryResult );
+ if (rc != OK) {
+ fprintf(stderr, "Could not initialize mass storage interface: %d\n", rc);
+ return rc;
+ }
+ //printf("Successfully initialized mass storage interface; %d blocks of size %d\n", _numBlks, _blkSize);
+ //print_inquiry(inquiryResult);
+ // FATFileSystem supports only 512-byte blocks
+ //_host = EN_Off ;
+ return _blkSize == 512 ? OK : 1;
+}
+
+int MSCFileSystem::disk_initialize() {
+ //_host = EN_On ;
+ if ( initialise_msc() != OK ) {
+ //_host = EN_Off ;
+ return 1;
+ } else {
+ //_host = EN_Off ;
+ return 0;
+ }
+}
+
+int MSCFileSystem::disk_write(const char *buffer, int block_number) {
+ //_host = EN_On ;
+ if ( OK == MS_BulkSend(block_number, 1, (USB_INT08U *)buffer) ) {
+ //_host = EN_Off ;
+ return 0;
+ } else {
+ //_host = EN_Off ;
+ return 1;
+ }
+}
+
+int MSCFileSystem::disk_read(char *buffer, int block_number) {
+ //_host = EN_On ;
+ if ( OK == MS_BulkRecv(block_number, 1, (USB_INT08U *)buffer) ) {
+ //_host = EN_Off ;
+ return 0;
+ } else {
+ //_host = EN_Off ;
+ return 1;
+ }
+}
+
+int MSCFileSystem::disk_status() {
+ //_host = EN_On ;
+ //_host = EN_Off ;
+ return 0;
+
+}
+int MSCFileSystem::disk_sync() {
+ //_host = EN_On ;
+ //_host = EN_Off ;
+ return 0;
+
+}
+int MSCFileSystem::disk_sectors() {
+ //_host = EN_On ;
+ //_host = EN_Off ;
+ return 0;
+}