USBMSD and CDC composite device testing code mixed up from several existing programs/libraries

Dependencies:   USBCDCMSC USBDevice USBFileSystem USBSDFileSystem USBSPIFileSystem mbed

Committer:
k4zuki
Date:
Tue Apr 21 09:15:46 2015 +0000
Revision:
0:07ed6626e186
Child:
1:30c83d964f38
[ NEW ] first UNTESTED commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
k4zuki 0:07ed6626e186 1 #include "mbed.h"
k4zuki 0:07ed6626e186 2 #include "USBSDFileSystem.h"
k4zuki 0:07ed6626e186 3 #include "USBCDCMSC.h"
k4zuki 0:07ed6626e186 4
k4zuki 0:07ed6626e186 5 DigitalOut myled(LED1);
k4zuki 0:07ed6626e186 6
k4zuki 0:07ed6626e186 7 USBSDFileSystem sd("sd", p5, p6, p7, p8); // the pinout on the mbed testbed board // mosi, miso, sclk, cs
k4zuki 0:07ed6626e186 8 // P0_9,P0_8,P0_10,P0_7
k4zuki 0:07ed6626e186 9 USBCDCMSC pc(&sd);
k4zuki 0:07ed6626e186 10
k4zuki 0:07ed6626e186 11 //#define BLE
k4zuki 0:07ed6626e186 12 #ifdef BLE
k4zuki 0:07ed6626e186 13 //Serial pc(USBTX,USBRX); //->USBCDCMSC pc(&sd);
k4zuki 0:07ed6626e186 14 Serial ble(p9,p10);
k4zuki 0:07ed6626e186 15 // P0_19,P0_18
k4zuki 0:07ed6626e186 16
k4zuki 0:07ed6626e186 17 //LocalFileSystem local( "local" ); //->USBSDFileSystem sd("sd", p5, p6, p7, p8); // the pinout on the mbed testbed board // mosi, miso, sclk, cs
k4zuki 0:07ed6626e186 18 //#define SOURCE_FILE "/local/_bin"
k4zuki 0:07ed6626e186 19 #define SOURCE_FILE "/sd/_bin"
k4zuki 0:07ed6626e186 20
k4zuki 0:07ed6626e186 21 int file_size( FILE *fp );
k4zuki 0:07ed6626e186 22 enum XMODEM_CONST{
k4zuki 0:07ed6626e186 23 SOH = (0x01),
k4zuki 0:07ed6626e186 24 STX = (0x02),
k4zuki 0:07ed6626e186 25 EOT = (0x04),
k4zuki 0:07ed6626e186 26 ACK = (0x06),
k4zuki 0:07ed6626e186 27 DLE = (0x10),
k4zuki 0:07ed6626e186 28 NAK = (0x15),
k4zuki 0:07ed6626e186 29 CAN = (0x18),
k4zuki 0:07ed6626e186 30 };
k4zuki 0:07ed6626e186 31
k4zuki 0:07ed6626e186 32 int main()
k4zuki 0:07ed6626e186 33 {
k4zuki 0:07ed6626e186 34 uint8_t recieve;
k4zuki 0:07ed6626e186 35 uint8_t read;
k4zuki 0:07ed6626e186 36 int filesize=0;
k4zuki 0:07ed6626e186 37 FILE* fp;
k4zuki 0:07ed6626e186 38 ble.baud(57600);
k4zuki 0:07ed6626e186 39 int crc=0x00;
k4zuki 0:07ed6626e186 40
k4zuki 0:07ed6626e186 41 if ( NULL == (fp = fopen( SOURCE_FILE, "rb" )) ) {
k4zuki 0:07ed6626e186 42 exit(1);
k4zuki 0:07ed6626e186 43 // return ( ERROR_AT_FILE_OPEN );
k4zuki 0:07ed6626e186 44 }else{
k4zuki 0:07ed6626e186 45 filesize=file_size(fp);
k4zuki 0:07ed6626e186 46 pc.printf("0x%04X\n\r",filesize);
k4zuki 0:07ed6626e186 47 }
k4zuki 0:07ed6626e186 48
k4zuki 0:07ed6626e186 49 while(1) {
k4zuki 0:07ed6626e186 50 recieve=ble.getc();
k4zuki 0:07ed6626e186 51 if(recieve == STX) {
k4zuki 0:07ed6626e186 52 ble.putc(SOH);
k4zuki 0:07ed6626e186 53 pc.putc('!');
k4zuki 0:07ed6626e186 54 break;
k4zuki 0:07ed6626e186 55 }
k4zuki 0:07ed6626e186 56 }
k4zuki 0:07ed6626e186 57 ble.putc(filesize&0xff);
k4zuki 0:07ed6626e186 58 ble.putc( (filesize>>8)&0xff);
k4zuki 0:07ed6626e186 59 while(1) {
k4zuki 0:07ed6626e186 60 recieve=ble.getc();
k4zuki 0:07ed6626e186 61 if(recieve == ACK) {
k4zuki 0:07ed6626e186 62 pc.printf("ok!\n\r");
k4zuki 0:07ed6626e186 63 // ble.putc(0x01);
k4zuki 0:07ed6626e186 64 break;
k4zuki 0:07ed6626e186 65 }
k4zuki 0:07ed6626e186 66 }
k4zuki 0:07ed6626e186 67 for(int i=0;i<filesize;i++){
k4zuki 0:07ed6626e186 68 read=getc(fp);
k4zuki 0:07ed6626e186 69 ble.putc(read);
k4zuki 0:07ed6626e186 70 crc=crc^read;
k4zuki 0:07ed6626e186 71 if((i%16)==0){
k4zuki 0:07ed6626e186 72 pc.printf("\n\r");
k4zuki 0:07ed6626e186 73 }
k4zuki 0:07ed6626e186 74 pc.printf("%02X ",read);
k4zuki 0:07ed6626e186 75 }
k4zuki 0:07ed6626e186 76 pc.printf("\n\r0x%02X ",crc);
k4zuki 0:07ed6626e186 77 while(1) {
k4zuki 0:07ed6626e186 78 recieve=ble.getc();
k4zuki 0:07ed6626e186 79 if(recieve == crc) {
k4zuki 0:07ed6626e186 80 ble.putc(ACK);
k4zuki 0:07ed6626e186 81 pc.printf("-=-=DONE=-=-\n\r");
k4zuki 0:07ed6626e186 82 break;
k4zuki 0:07ed6626e186 83 }
k4zuki 0:07ed6626e186 84 }
k4zuki 0:07ed6626e186 85 fclose(fp);
k4zuki 0:07ed6626e186 86 myled = 1;
k4zuki 0:07ed6626e186 87 while(1) {
k4zuki 0:07ed6626e186 88 recieve=ble.getc();
k4zuki 0:07ed6626e186 89 pc.putc(recieve);
k4zuki 0:07ed6626e186 90 wait_ms(20);
k4zuki 0:07ed6626e186 91 }
k4zuki 0:07ed6626e186 92 }
k4zuki 0:07ed6626e186 93
k4zuki 0:07ed6626e186 94 int file_size( FILE *fp )
k4zuki 0:07ed6626e186 95 {
k4zuki 0:07ed6626e186 96 int size;
k4zuki 0:07ed6626e186 97
k4zuki 0:07ed6626e186 98 fseek( fp, 0, SEEK_END ); // seek to end of file
k4zuki 0:07ed6626e186 99 size = ftell( fp ); // get current file pointer
k4zuki 0:07ed6626e186 100 fseek( fp, 0, SEEK_SET ); // seek back to beginning of file
k4zuki 0:07ed6626e186 101
k4zuki 0:07ed6626e186 102 return size;
k4zuki 0:07ed6626e186 103 }
k4zuki 0:07ed6626e186 104
k4zuki 0:07ed6626e186 105 #else //BLE
k4zuki 0:07ed6626e186 106
k4zuki 0:07ed6626e186 107 void mylog (int i)
k4zuki 0:07ed6626e186 108 {
k4zuki 0:07ed6626e186 109 FILE *fp = fopen("/sd/mydir/sdtest.txt", "a");
k4zuki 0:07ed6626e186 110 if(fp == NULL) {
k4zuki 0:07ed6626e186 111 pc.printf("Could not open file for write\n");
k4zuki 0:07ed6626e186 112 } else
k4zuki 0:07ed6626e186 113 {
k4zuki 0:07ed6626e186 114 fprintf(fp, "[%d]Hello fun SD Card World!\n", i);
k4zuki 0:07ed6626e186 115 pc.printf("appending: '[%d]Hello fun SD Card World!'\n", i);
k4zuki 0:07ed6626e186 116 fclose(fp);
k4zuki 0:07ed6626e186 117 }
k4zuki 0:07ed6626e186 118 }
k4zuki 0:07ed6626e186 119
k4zuki 0:07ed6626e186 120 int main()
k4zuki 0:07ed6626e186 121 {
k4zuki 0:07ed6626e186 122 sd.usbMode (1); // allow fopen/fprintf when connected with USB-drive.
k4zuki 0:07ed6626e186 123 pc.printf("Hello World!\n\n");
k4zuki 0:07ed6626e186 124
k4zuki 0:07ed6626e186 125 pc.printf("now a USB drive should appear on your PC\n");
k4zuki 0:07ed6626e186 126 wait (60);
k4zuki 0:07ed6626e186 127
k4zuki 0:07ed6626e186 128 pc.printf("create directory and append to log file\n");
k4zuki 0:07ed6626e186 129 mkdir("/sd/mydir", 0777);
k4zuki 0:07ed6626e186 130 mylog (0);
k4zuki 0:07ed6626e186 131
k4zuki 0:07ed6626e186 132 pc.printf("Entering loop of 1 min cycle time\n");
k4zuki 0:07ed6626e186 133
k4zuki 0:07ed6626e186 134 int i = 1;
k4zuki 0:07ed6626e186 135 while(1) {
k4zuki 0:07ed6626e186 136 myled = 0;
k4zuki 0:07ed6626e186 137 wait(5);
k4zuki 0:07ed6626e186 138 //sd.disconnect ();
k4zuki 0:07ed6626e186 139 mylog (i++);
k4zuki 0:07ed6626e186 140 //sd.connect ();
k4zuki 0:07ed6626e186 141 myled = 1;
k4zuki 0:07ed6626e186 142 wait(55);
k4zuki 0:07ed6626e186 143 }
k4zuki 0:07ed6626e186 144 return 0;
k4zuki 0:07ed6626e186 145 }
k4zuki 0:07ed6626e186 146 #endif //BLE