Read GPS MT3329

Dependencies:   FatFileSystem mbed

Committer:
belloula
Date:
Sun Mar 29 14:43:22 2015 +0000
Revision:
0:9611b40fec6f
Read from MT3329 GPS and print on Pc (usb serial pc)

Who changed what in which revision?

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