a writer program for "DA14580" BLE chip. use LocalFileSystem, so only for mbed-LPC1768/mbed-LPC11U24
main.cpp@2:743581e516f8, 2015-04-09 (annotated)
- Committer:
- k4zuki
- Date:
- Thu Apr 09 09:37:41 2015 +0000
- Revision:
- 2:743581e516f8
- Parent:
- 1:26c972ffac64
- Child:
- 3:39b85cd7e4e0
prints message from device back to host
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
k4zuki | 0:08d27693851c | 1 | #include "mbed.h" |
k4zuki | 0:08d27693851c | 2 | |
k4zuki | 0:08d27693851c | 3 | DigitalOut myled(LED1); |
k4zuki | 0:08d27693851c | 4 | |
k4zuki | 0:08d27693851c | 5 | Serial pc(USBTX,USBRX); |
k4zuki | 0:08d27693851c | 6 | Serial ble(p28,p27); |
k4zuki | 0:08d27693851c | 7 | |
k4zuki | 0:08d27693851c | 8 | LocalFileSystem local( "local" ); |
k4zuki | 0:08d27693851c | 9 | |
k4zuki | 0:08d27693851c | 10 | #define SOURCE_FILE "/local/_bin" |
k4zuki | 0:08d27693851c | 11 | |
k4zuki | 0:08d27693851c | 12 | int file_size( FILE *fp ); |
k4zuki | 1:26c972ffac64 | 13 | enum XMODEM_CONST{ |
k4zuki | 1:26c972ffac64 | 14 | SOH = (0x01), |
k4zuki | 1:26c972ffac64 | 15 | STX = (0x02), |
k4zuki | 1:26c972ffac64 | 16 | EOT = (0x04), |
k4zuki | 1:26c972ffac64 | 17 | ACK = (0x06), |
k4zuki | 1:26c972ffac64 | 18 | DLE = (0x10), |
k4zuki | 1:26c972ffac64 | 19 | NAK = (0x15), |
k4zuki | 1:26c972ffac64 | 20 | CAN = (0x18), |
k4zuki | 1:26c972ffac64 | 21 | }; |
k4zuki | 0:08d27693851c | 22 | |
k4zuki | 0:08d27693851c | 23 | int main() |
k4zuki | 0:08d27693851c | 24 | { |
k4zuki | 2:743581e516f8 | 25 | uint8_t recieve; |
k4zuki | 2:743581e516f8 | 26 | uint8_t read; |
k4zuki | 0:08d27693851c | 27 | int filesize=0; |
k4zuki | 0:08d27693851c | 28 | FILE* fp; |
k4zuki | 0:08d27693851c | 29 | ble.baud(57600); |
k4zuki | 0:08d27693851c | 30 | int crc=0x00; |
k4zuki | 0:08d27693851c | 31 | |
k4zuki | 0:08d27693851c | 32 | if ( NULL == (fp = fopen( SOURCE_FILE, "rb" )) ) { |
k4zuki | 0:08d27693851c | 33 | exit(1); |
k4zuki | 0:08d27693851c | 34 | // return ( ERROR_AT_FILE_OPEN ); |
k4zuki | 0:08d27693851c | 35 | }else{ |
k4zuki | 0:08d27693851c | 36 | filesize=file_size(fp); |
k4zuki | 0:08d27693851c | 37 | pc.printf("0x%04X\n\r",filesize); |
k4zuki | 0:08d27693851c | 38 | } |
k4zuki | 0:08d27693851c | 39 | |
k4zuki | 0:08d27693851c | 40 | while(1) { |
k4zuki | 0:08d27693851c | 41 | recieve=ble.getc(); |
k4zuki | 1:26c972ffac64 | 42 | if(recieve == STX) { |
k4zuki | 1:26c972ffac64 | 43 | ble.putc(SOH); |
k4zuki | 0:08d27693851c | 44 | pc.putc('!'); |
k4zuki | 0:08d27693851c | 45 | break; |
k4zuki | 0:08d27693851c | 46 | } |
k4zuki | 0:08d27693851c | 47 | } |
k4zuki | 0:08d27693851c | 48 | ble.putc(filesize&0xff); |
k4zuki | 0:08d27693851c | 49 | ble.putc( (filesize>>8)&0xff); |
k4zuki | 0:08d27693851c | 50 | while(1) { |
k4zuki | 0:08d27693851c | 51 | recieve=ble.getc(); |
k4zuki | 1:26c972ffac64 | 52 | if(recieve == ACK) { |
k4zuki | 0:08d27693851c | 53 | pc.printf("ok!\n\r"); |
k4zuki | 0:08d27693851c | 54 | // ble.putc(0x01); |
k4zuki | 0:08d27693851c | 55 | break; |
k4zuki | 0:08d27693851c | 56 | } |
k4zuki | 0:08d27693851c | 57 | } |
k4zuki | 0:08d27693851c | 58 | for(int i=0;i<filesize;i++){ |
k4zuki | 0:08d27693851c | 59 | read=getc(fp); |
k4zuki | 0:08d27693851c | 60 | ble.putc(read); |
k4zuki | 0:08d27693851c | 61 | crc=crc^read; |
k4zuki | 0:08d27693851c | 62 | if((i%16)==0){ |
k4zuki | 0:08d27693851c | 63 | pc.printf("\n\r"); |
k4zuki | 0:08d27693851c | 64 | } |
k4zuki | 0:08d27693851c | 65 | pc.printf("%02X ",read); |
k4zuki | 0:08d27693851c | 66 | } |
k4zuki | 0:08d27693851c | 67 | pc.printf("\n\r0x%02X ",crc); |
k4zuki | 0:08d27693851c | 68 | while(1) { |
k4zuki | 0:08d27693851c | 69 | recieve=ble.getc(); |
k4zuki | 0:08d27693851c | 70 | if(recieve == crc) { |
k4zuki | 1:26c972ffac64 | 71 | ble.putc(ACK); |
k4zuki | 0:08d27693851c | 72 | pc.printf("-=-=DONE=-=-\n\r"); |
k4zuki | 0:08d27693851c | 73 | break; |
k4zuki | 0:08d27693851c | 74 | } |
k4zuki | 0:08d27693851c | 75 | } |
k4zuki | 2:743581e516f8 | 76 | fclose(fp); |
k4zuki | 2:743581e516f8 | 77 | myled = 1; |
k4zuki | 0:08d27693851c | 78 | while(1) { |
k4zuki | 2:743581e516f8 | 79 | recieve=ble.getc(); |
k4zuki | 2:743581e516f8 | 80 | pc.putc(recieve); |
k4zuki | 2:743581e516f8 | 81 | wait_ms(20); |
k4zuki | 0:08d27693851c | 82 | } |
k4zuki | 0:08d27693851c | 83 | } |
k4zuki | 0:08d27693851c | 84 | |
k4zuki | 0:08d27693851c | 85 | int file_size( FILE *fp ) |
k4zuki | 0:08d27693851c | 86 | { |
k4zuki | 0:08d27693851c | 87 | int size; |
k4zuki | 0:08d27693851c | 88 | |
k4zuki | 0:08d27693851c | 89 | fseek( fp, 0, SEEK_END ); // seek to end of file |
k4zuki | 0:08d27693851c | 90 | size = ftell( fp ); // get current file pointer |
k4zuki | 0:08d27693851c | 91 | fseek( fp, 0, SEEK_SET ); // seek back to beginning of file |
k4zuki | 0:08d27693851c | 92 | |
k4zuki | 0:08d27693851c | 93 | return size; |
k4zuki | 0:08d27693851c | 94 | } |