MDX-20用の改造

Dependencies:   FatFileSystemCpp

Committer:
suupen
Date:
Mon Oct 15 23:04:07 2018 +0000
Revision:
10:cce9366e2d73
Parent:
9:280ae971e7cb
file open?????????;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
igorsk 0:e294af8d0e07 1 /* USB Mass Storage device file system
igorsk 0:e294af8d0e07 2 * Copyrigh (c) 2010, Igor Skochinsky
igorsk 0:e294af8d0e07 3 * based on SDFileStorage
igorsk 0:e294af8d0e07 4 * Copyright (c) 2008-2009, sford
igorsk 0:e294af8d0e07 5 */
suupen 7:a6b950d25e29 6
igorsk 0:e294af8d0e07 7 /* Introduction
igorsk 0:e294af8d0e07 8 * ------------
igorsk 0:e294af8d0e07 9 * TODO: write one
igorsk 0:e294af8d0e07 10 * we're basically using NXP's USBHotLite sample code, just plugging in our own FAT library
igorsk 0:e294af8d0e07 11 */
suupen 7:a6b950d25e29 12
igorsk 0:e294af8d0e07 13 #include "MSCFileSystem.h"
igorsk 0:e294af8d0e07 14 #include "usbhost_inc.h"
igorsk 0:e294af8d0e07 15
suupen 4:dc14f62cb09f 16 /*
suupen 4:dc14f62cb09f 17 **************************************************************************************************************
suupen 4:dc14f62cb09f 18 * PRINT CONFIGURATION
suupen 4:dc14f62cb09f 19 **************************************************************************************************************
suupen 4:dc14f62cb09f 20 */
suupen 9:280ae971e7cb 21 //#define DEBUG
suupen 4:dc14f62cb09f 22 #ifdef DEBUG
suupen 4:dc14f62cb09f 23 #define DEBUG_PRINT(...) printf(__VA_ARGS__)
suupen 4:dc14f62cb09f 24 #else
suupen 4:dc14f62cb09f 25 #define DEBUG_PRINT(...)
suupen 4:dc14f62cb09f 26 #endif // DEBUG
suupen 4:dc14f62cb09f 27
suupen 4:dc14f62cb09f 28
igorsk 0:e294af8d0e07 29 MSCFileSystem::MSCFileSystem(const char* name) :
suupen 7:a6b950d25e29 30 FATFileSystem(name)
igorsk 0:e294af8d0e07 31 {
igorsk 0:e294af8d0e07 32 }
igorsk 0:e294af8d0e07 33
igorsk 0:e294af8d0e07 34 void print_inquiry(USB_INT08U *inqReply)
igorsk 0:e294af8d0e07 35 {
igorsk 0:e294af8d0e07 36 // see USB Mass Storage Class – UFI Command Specification,
igorsk 0:e294af8d0e07 37 // 4.2 INQUIRY Command
suupen 4:dc14f62cb09f 38 DEBUG_PRINT("Inquiry reply:\n");
igorsk 0:e294af8d0e07 39 uint8_t tmp = inqReply[0]&0x1F;
suupen 4:dc14f62cb09f 40 DEBUG_PRINT("Peripheral device type: %02Xh\n", tmp);
igorsk 0:e294af8d0e07 41 if ( tmp == 0 )
suupen 4:dc14f62cb09f 42 DEBUG_PRINT("\t- Direct access (floppy)\n");
igorsk 0:e294af8d0e07 43 else if ( tmp == 0x1F )
suupen 4:dc14f62cb09f 44 DEBUG_PRINT("\t- none (no FDD connected)\n");
igorsk 0:e294af8d0e07 45 else
suupen 4:dc14f62cb09f 46 DEBUG_PRINT("\t- unknown type\n");
igorsk 0:e294af8d0e07 47 tmp = inqReply[1] >> 7;
suupen 4:dc14f62cb09f 48 DEBUG_PRINT("Removable Media Bit: %d\n", tmp);
igorsk 0:e294af8d0e07 49 tmp = inqReply[2] & 3;
suupen 4:dc14f62cb09f 50 DEBUG_PRINT("ANSI Version: %02Xh\n", tmp);
igorsk 0:e294af8d0e07 51 if ( tmp != 0 )
suupen 4:dc14f62cb09f 52 DEBUG_PRINT("\t- warning! must be 0\n");
igorsk 0:e294af8d0e07 53 tmp = (inqReply[2]>>3) & 3;
suupen 4:dc14f62cb09f 54 DEBUG_PRINT("ECMA Version: %02Xh\n", tmp);
igorsk 0:e294af8d0e07 55 if ( tmp != 0 )
suupen 4:dc14f62cb09f 56 DEBUG_PRINT("\t- warning! should be 0\n");
igorsk 0:e294af8d0e07 57 tmp = inqReply[2]>>6;
suupen 4:dc14f62cb09f 58 DEBUG_PRINT("ISO Version: %02Xh\n", tmp);
igorsk 0:e294af8d0e07 59 if ( tmp != 0 )
suupen 4:dc14f62cb09f 60 DEBUG_PRINT("\t- warning! should be 0\n");
igorsk 0:e294af8d0e07 61 tmp = inqReply[3] & 0xF;
suupen 4:dc14f62cb09f 62 DEBUG_PRINT("Response Data Format: %02Xh\n", tmp);
igorsk 0:e294af8d0e07 63 if ( tmp != 1 )
suupen 4:dc14f62cb09f 64 DEBUG_PRINT("\t- warning! should be 1\n");
igorsk 0:e294af8d0e07 65 tmp = inqReply[4];
suupen 4:dc14f62cb09f 66 DEBUG_PRINT("Additional length: %02Xh\n", tmp);
igorsk 0:e294af8d0e07 67 if ( tmp != 0x1F )
suupen 4:dc14f62cb09f 68 DEBUG_PRINT("\t- warning! should be 1Fh\n");
suupen 4:dc14f62cb09f 69 DEBUG_PRINT("Vendor Information: '%.8s'\n", &inqReply[8]);
suupen 4:dc14f62cb09f 70 DEBUG_PRINT("Product Identification: '%.16s'\n", &inqReply[16]);
suupen 7:a6b950d25e29 71 DEBUG_PRINT("Product Revision: '%.4s'\n", &inqReply[32]);
igorsk 0:e294af8d0e07 72 }
igorsk 0:e294af8d0e07 73
igorsk 0:e294af8d0e07 74 int MSCFileSystem::initialise_msc()
igorsk 0:e294af8d0e07 75 {
igorsk 0:e294af8d0e07 76 USB_INT32S rc;
igorsk 0:e294af8d0e07 77 USB_INT08U inquiryResult[INQUIRY_LENGTH];
suupen 7:a6b950d25e29 78
igorsk 0:e294af8d0e07 79 //print_clock();
igorsk 0:e294af8d0e07 80 Host_Init(); /* Initialize the host controller */
suupen 8:6e23bf867e38 81 rc = Host_EnumDev(); /* Enumerate the device connected ベースでは、USB memoryがつながるまで待っている (HOST_RhscIntr 1:deviceあり 0:なし) */
suupen 7:a6b950d25e29 82 if (rc != OK) {
igorsk 0:e294af8d0e07 83 fprintf(stderr, "Could not enumerate device: %d\n", rc);
igorsk 0:e294af8d0e07 84 return rc;
igorsk 0:e294af8d0e07 85 }
suupen 7:a6b950d25e29 86
suupen 7:a6b950d25e29 87
igorsk 0:e294af8d0e07 88 /* Initialize the mass storage and scsi interfaces */
igorsk 0:e294af8d0e07 89 rc = MS_Init( &_blkSize, &_numBlks, inquiryResult );
suupen 7:a6b950d25e29 90 if (rc != OK) {
igorsk 0:e294af8d0e07 91 fprintf(stderr, "Could not initialize mass storage interface: %d\n", rc);
igorsk 0:e294af8d0e07 92 return rc;
igorsk 0:e294af8d0e07 93 }
suupen 4:dc14f62cb09f 94 DEBUG_PRINT("Successfully initialized mass storage interface; %d blocks of size %d\n", _numBlks, _blkSize);
igorsk 0:e294af8d0e07 95 print_inquiry(inquiryResult);
igorsk 0:e294af8d0e07 96 // FATFileSystem supports only 512-byte blocks
igorsk 0:e294af8d0e07 97 return _blkSize == 512 ? OK : 1;
igorsk 0:e294af8d0e07 98 }
igorsk 0:e294af8d0e07 99
suupen 8:6e23bf867e38 100 /** USBの存在確認
suupen 8:6e23bf867e38 101 * @return 1:ない 0:ない
suupen 8:6e23bf867e38 102 */
suupen 8:6e23bf867e38 103 int MSCFileSystem::disk_usbCheck()
igorsk 0:e294af8d0e07 104 {
suupen 8:6e23bf867e38 105 if(Host_Check() != OK){
igorsk 0:e294af8d0e07 106 return 1;
suupen 8:6e23bf867e38 107 }
suupen 7:a6b950d25e29 108 return 0;
suupen 8:6e23bf867e38 109
suupen 7:a6b950d25e29 110 }
suupen 8:6e23bf867e38 111
suupen 8:6e23bf867e38 112
suupen 8:6e23bf867e38 113 int MSCFileSystem::disk_initialize() // 元からある関数。複
suupen 8:6e23bf867e38 114 {
suupen 7:a6b950d25e29 115 if ( initialise_msc() != OK )
suupen 7:a6b950d25e29 116 return 1;
suupen 7:a6b950d25e29 117
suupen 7:a6b950d25e29 118 return 0;
igorsk 0:e294af8d0e07 119 }
igorsk 0:e294af8d0e07 120
igorsk 0:e294af8d0e07 121 int MSCFileSystem::disk_write(const char *buffer, int block_number)
igorsk 0:e294af8d0e07 122 {
igorsk 0:e294af8d0e07 123 if ( OK == MS_BulkSend(block_number, 1, (USB_INT08U *)buffer) )
igorsk 0:e294af8d0e07 124 return 0;
igorsk 0:e294af8d0e07 125 return 1;
igorsk 0:e294af8d0e07 126 }
igorsk 0:e294af8d0e07 127
igorsk 0:e294af8d0e07 128 int MSCFileSystem::disk_read(char *buffer, int block_number)
igorsk 0:e294af8d0e07 129 {
igorsk 0:e294af8d0e07 130 if ( OK == MS_BulkRecv(block_number, 1, (USB_INT08U *)buffer) )
igorsk 0:e294af8d0e07 131 return 0;
igorsk 0:e294af8d0e07 132 return 1;
igorsk 0:e294af8d0e07 133 }
igorsk 0:e294af8d0e07 134
suupen 7:a6b950d25e29 135 int MSCFileSystem::disk_status()
suupen 7:a6b950d25e29 136 {
suupen 7:a6b950d25e29 137 return 0;
suupen 7:a6b950d25e29 138 }
suupen 7:a6b950d25e29 139 int MSCFileSystem::disk_sync()
suupen 7:a6b950d25e29 140 {
suupen 7:a6b950d25e29 141 return 0;
suupen 7:a6b950d25e29 142 }
suupen 7:a6b950d25e29 143 int MSCFileSystem::disk_sectors()
suupen 7:a6b950d25e29 144 {
suupen 7:a6b950d25e29 145 return _numBlks;
suupen 7:a6b950d25e29 146 }