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

Dependencies:   USBCDCMSC USBDevice USBFileSystem USBSDFileSystem USBSPIFileSystem mbed

Committer:
k4zuki
Date:
Wed Apr 22 16:44:50 2015 +0000
Revision:
4:bbe1bc2eb8fb
Parent:
2:c70070f88944
added erled; USBCDCMSC update; will be mounted after writing message 5 times

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