a writer program for "DA14580" BLE chip. use LocalFileSystem, so only for mbed-LPC1768/mbed-LPC11U24
main.cpp@3:39b85cd7e4e0, 2015-09-06 (annotated)
- Committer:
- k4zuki
- Date:
- Sun Sep 06 23:49:20 2015 +0000
- Revision:
- 3:39b85cd7e4e0
- Parent:
- 2:743581e516f8
pinout; use TARGET_FILE macro; remove nunecessary comments
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 | 3:39b85cd7e4e0 | 6 | Serial ble(p9,p10); |
k4zuki | 0:08d27693851c | 7 | |
k4zuki | 0:08d27693851c | 8 | LocalFileSystem local( "local" ); |
k4zuki | 0:08d27693851c | 9 | |
k4zuki | 3:39b85cd7e4e0 | 10 | #define TARGET_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 | 3:39b85cd7e4e0 | 31 | |
k4zuki | 3:39b85cd7e4e0 | 32 | fp = fopen( TARGET_FILE, "rb" ); |
k4zuki | 3:39b85cd7e4e0 | 33 | if ( fp) { |
k4zuki | 0:08d27693851c | 34 | filesize=file_size(fp); |
k4zuki | 0:08d27693851c | 35 | pc.printf("0x%04X\n\r",filesize); |
k4zuki | 0:08d27693851c | 36 | } |
k4zuki | 0:08d27693851c | 37 | |
k4zuki | 0:08d27693851c | 38 | while(1) { |
k4zuki | 0:08d27693851c | 39 | recieve=ble.getc(); |
k4zuki | 1:26c972ffac64 | 40 | if(recieve == STX) { |
k4zuki | 1:26c972ffac64 | 41 | ble.putc(SOH); |
k4zuki | 0:08d27693851c | 42 | pc.putc('!'); |
k4zuki | 0:08d27693851c | 43 | break; |
k4zuki | 0:08d27693851c | 44 | } |
k4zuki | 0:08d27693851c | 45 | } |
k4zuki | 0:08d27693851c | 46 | ble.putc(filesize&0xff); |
k4zuki | 0:08d27693851c | 47 | ble.putc( (filesize>>8)&0xff); |
k4zuki | 0:08d27693851c | 48 | while(1) { |
k4zuki | 0:08d27693851c | 49 | recieve=ble.getc(); |
k4zuki | 1:26c972ffac64 | 50 | if(recieve == ACK) { |
k4zuki | 0:08d27693851c | 51 | pc.printf("ok!\n\r"); |
k4zuki | 0:08d27693851c | 52 | // ble.putc(0x01); |
k4zuki | 0:08d27693851c | 53 | break; |
k4zuki | 0:08d27693851c | 54 | } |
k4zuki | 0:08d27693851c | 55 | } |
k4zuki | 0:08d27693851c | 56 | for(int i=0;i<filesize;i++){ |
k4zuki | 0:08d27693851c | 57 | read=getc(fp); |
k4zuki | 0:08d27693851c | 58 | ble.putc(read); |
k4zuki | 0:08d27693851c | 59 | crc=crc^read; |
k4zuki | 0:08d27693851c | 60 | if((i%16)==0){ |
k4zuki | 0:08d27693851c | 61 | pc.printf("\n\r"); |
k4zuki | 0:08d27693851c | 62 | } |
k4zuki | 0:08d27693851c | 63 | pc.printf("%02X ",read); |
k4zuki | 0:08d27693851c | 64 | } |
k4zuki | 0:08d27693851c | 65 | pc.printf("\n\r0x%02X ",crc); |
k4zuki | 0:08d27693851c | 66 | while(1) { |
k4zuki | 0:08d27693851c | 67 | recieve=ble.getc(); |
k4zuki | 0:08d27693851c | 68 | if(recieve == crc) { |
k4zuki | 1:26c972ffac64 | 69 | ble.putc(ACK); |
k4zuki | 0:08d27693851c | 70 | pc.printf("-=-=DONE=-=-\n\r"); |
k4zuki | 0:08d27693851c | 71 | break; |
k4zuki | 0:08d27693851c | 72 | } |
k4zuki | 0:08d27693851c | 73 | } |
k4zuki | 2:743581e516f8 | 74 | fclose(fp); |
k4zuki | 2:743581e516f8 | 75 | myled = 1; |
k4zuki | 0:08d27693851c | 76 | while(1) { |
k4zuki | 2:743581e516f8 | 77 | recieve=ble.getc(); |
k4zuki | 2:743581e516f8 | 78 | pc.putc(recieve); |
k4zuki | 2:743581e516f8 | 79 | wait_ms(20); |
k4zuki | 0:08d27693851c | 80 | } |
k4zuki | 0:08d27693851c | 81 | } |
k4zuki | 0:08d27693851c | 82 | |
k4zuki | 0:08d27693851c | 83 | int file_size( FILE *fp ) |
k4zuki | 0:08d27693851c | 84 | { |
k4zuki | 0:08d27693851c | 85 | int size; |
k4zuki | 0:08d27693851c | 86 | |
k4zuki | 0:08d27693851c | 87 | fseek( fp, 0, SEEK_END ); // seek to end of file |
k4zuki | 0:08d27693851c | 88 | size = ftell( fp ); // get current file pointer |
k4zuki | 0:08d27693851c | 89 | fseek( fp, 0, SEEK_SET ); // seek back to beginning of file |
k4zuki | 0:08d27693851c | 90 | |
k4zuki | 0:08d27693851c | 91 | return size; |
k4zuki | 0:08d27693851c | 92 | } |