USBMSD and CDC composite device testing code mixed up from several existing programs/libraries
Dependencies: USBCDCMSC USBDevice USBFileSystem USBSDFileSystem USBSPIFileSystem mbed
main.cpp@4:bbe1bc2eb8fb, 2015-04-22 (annotated)
- 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?
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 | 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 |