USBMSD and CDC composite device testing code mixed up from several existing programs/libraries
Dependencies: USBCDCMSC USBDevice USBFileSystem USBSDFileSystem USBSPIFileSystem mbed
main.cpp@0:07ed6626e186, 2015-04-21 (annotated)
- 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?
User | Revision | Line number | New 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 |