test1

Dependencies:   mbed HTTPServer EthernetNetIf FatFileSystemCpp

Committer:
solarca2
Date:
Wed Sep 02 05:58:09 2020 +0000
Revision:
0:0ca3ad47fc8e
test1
;

Who changed what in which revision?

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