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

Dependencies:   mbed

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?

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