20200823_Motacon2020_ver5_kikkawa

Dependencies:   mbed FatFileSystemCpp INA226_abc BLDCmotorDriver_20200821_motacon_ver4

Committer:
MPPT51
Date:
Fri Aug 21 08:30:26 2020 +0000
Revision:
1:47c28ece54ea
Parent:
0:3e0c71851fee
20200821_motacon_ver4

Who changed what in which revision?

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