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 16:43:52 2015 +0000
Revision:
1:30c83d964f38
Parent:
0:07ed6626e186
Child:
2:c70070f88944
End Point was wrong in both macro and function definition; strill CDC packet disappears

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