This is a repository for code relating to mbed Fitness Tracker

Dependencies:   mbed PulseSensor2 SCP1000 mbed-rtos 4DGL-uLCD-SE LSM9DS1_Library_cal PinDetect FatFileSystemCpp GP-20U7

Committer:
dyu2021
Date:
Tue Apr 28 20:00:56 2020 +0000
Revision:
43:81f314c92d9f
Parent:
18:9617bd66bdae
Changed serial_USB to output all lines of prev_text, not hard set to 7

Who changed what in which revision?

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