a writer program for "DA14580" BLE chip. use LocalFileSystem, so only for mbed-LPC1768/mbed-LPC11U24

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }