DA14580 Bluetooth Smart IC writer library

Dependents:   11u35_usbLocalFilesystem

Committer:
k4zuki
Date:
Sat Sep 19 10:19:14 2015 +0000
Revision:
3:a9684679d1ec
Parent:
0:3bdbabca8a09
Child:
5:45e9f3723a08
change to use reset.write(); change header file definition

Who changed what in which revision?

UserRevisionLine numberNew contents of line
k4zuki 0:3bdbabca8a09 1 #include "mbed.h"
k4zuki 0:3bdbabca8a09 2 #include "DA14580.h"
k4zuki 0:3bdbabca8a09 3
k4zuki 0:3bdbabca8a09 4 DA14580::DA14580( PinName TX, PinName RX, PinName RESET ) : _ble(TX,RX), _reset(RESET)
k4zuki 0:3bdbabca8a09 5 {
k4zuki 0:3bdbabca8a09 6 init();
k4zuki 0:3bdbabca8a09 7 }
k4zuki 0:3bdbabca8a09 8
k4zuki 0:3bdbabca8a09 9 DA14580::DA14580( RawSerial &ble, PinName RESET ) : _ble(ble), _reset(RESET)
k4zuki 0:3bdbabca8a09 10 {
k4zuki 0:3bdbabca8a09 11 init();
k4zuki 0:3bdbabca8a09 12 }
k4zuki 0:3bdbabca8a09 13
k4zuki 0:3bdbabca8a09 14 DA14580::~DA14580()
k4zuki 0:3bdbabca8a09 15 {
k4zuki 0:3bdbabca8a09 16 }
k4zuki 0:3bdbabca8a09 17
k4zuki 0:3bdbabca8a09 18 void DA14580::init()
k4zuki 0:3bdbabca8a09 19 {
k4zuki 0:3bdbabca8a09 20
k4zuki 0:3bdbabca8a09 21 _ble.baud(57600);
k4zuki 0:3bdbabca8a09 22 _crc = 0x00;
k4zuki 0:3bdbabca8a09 23 _recieve = 0;
k4zuki 0:3bdbabca8a09 24 _read = 0;
k4zuki 0:3bdbabca8a09 25 _filesize = 0;
k4zuki 3:a9684679d1ec 26 _reset.write(0);
k4zuki 0:3bdbabca8a09 27 _timeout = 100;
k4zuki 0:3bdbabca8a09 28 _status = SUCCESS;
k4zuki 0:3bdbabca8a09 29 }
k4zuki 0:3bdbabca8a09 30
k4zuki 0:3bdbabca8a09 31 int DA14580::load()
k4zuki 0:3bdbabca8a09 32 {
k4zuki 0:3bdbabca8a09 33
k4zuki 0:3bdbabca8a09 34 _status = SUCCESS;
k4zuki 0:3bdbabca8a09 35
k4zuki 0:3bdbabca8a09 36 _fp = fopen( LOADER_FILE, "rb" );
k4zuki 0:3bdbabca8a09 37 if (_fp) {
k4zuki 0:3bdbabca8a09 38 _filesize = file_size(_fp);
k4zuki 3:a9684679d1ec 39 _reset.write(1);
k4zuki 0:3bdbabca8a09 40 while((_timeout--) >0) {
k4zuki 0:3bdbabca8a09 41 if( _ble.readable() ) {
k4zuki 0:3bdbabca8a09 42 _recieve = _ble.getc();
k4zuki 0:3bdbabca8a09 43 if(_recieve == STX) {
k4zuki 0:3bdbabca8a09 44 _ble.putc(SOH);
k4zuki 0:3bdbabca8a09 45 break;
k4zuki 0:3bdbabca8a09 46 }
k4zuki 0:3bdbabca8a09 47 }
k4zuki 0:3bdbabca8a09 48 }
k4zuki 0:3bdbabca8a09 49 if(_timeout <= 0) {
k4zuki 0:3bdbabca8a09 50 _status = E_TIMEOUT_STX;
k4zuki 0:3bdbabca8a09 51 } else {
k4zuki 0:3bdbabca8a09 52 _timeout = 100;
k4zuki 0:3bdbabca8a09 53 _ble.putc(_filesize & 0xff);
k4zuki 0:3bdbabca8a09 54 _ble.putc( (_filesize >> 8) & 0xff);
k4zuki 0:3bdbabca8a09 55 while((_timeout--) >0) {
k4zuki 0:3bdbabca8a09 56 if( _ble.readable() ) {
k4zuki 0:3bdbabca8a09 57 _recieve = _ble.getc();
k4zuki 0:3bdbabca8a09 58 if(_recieve == ACK) {
k4zuki 0:3bdbabca8a09 59 break;
k4zuki 0:3bdbabca8a09 60 }
k4zuki 0:3bdbabca8a09 61 }
k4zuki 0:3bdbabca8a09 62 }
k4zuki 0:3bdbabca8a09 63 if(_timeout <= 0) {
k4zuki 0:3bdbabca8a09 64 _status = E_ACK_NOT_RETURNED;
k4zuki 0:3bdbabca8a09 65 } else {
k4zuki 0:3bdbabca8a09 66 _timeout = 100;
k4zuki 0:3bdbabca8a09 67 for(int i = 0; i < _filesize; i++) {
k4zuki 0:3bdbabca8a09 68 _read = getc(_fp);
k4zuki 0:3bdbabca8a09 69 _ble.putc(_read);
k4zuki 0:3bdbabca8a09 70 _crc = _crc ^ _read;
k4zuki 0:3bdbabca8a09 71 if((i % 16) == 0) {
k4zuki 0:3bdbabca8a09 72 }
k4zuki 0:3bdbabca8a09 73 }
k4zuki 0:3bdbabca8a09 74 while((_timeout--) >0) {
k4zuki 0:3bdbabca8a09 75 if( _ble.readable() ) {
k4zuki 0:3bdbabca8a09 76 _recieve = _ble.getc();
k4zuki 0:3bdbabca8a09 77 if(_recieve == _crc) {
k4zuki 0:3bdbabca8a09 78 _ble.putc(ACK);
k4zuki 0:3bdbabca8a09 79 break;
k4zuki 0:3bdbabca8a09 80 }
k4zuki 0:3bdbabca8a09 81 }
k4zuki 0:3bdbabca8a09 82 }
k4zuki 0:3bdbabca8a09 83 if(_timeout <= 0) {
k4zuki 0:3bdbabca8a09 84 _status = E_ACK_NOT_RETURNED;
k4zuki 0:3bdbabca8a09 85 }
k4zuki 0:3bdbabca8a09 86 }
k4zuki 0:3bdbabca8a09 87 }
k4zuki 0:3bdbabca8a09 88 fclose(_fp);
k4zuki 0:3bdbabca8a09 89 #if defined(__MICROLIB) && defined(__ARMCC_VERSION) // with microlib and ARM compiler
k4zuki 0:3bdbabca8a09 90 #warning "free(_fp)"
k4zuki 0:3bdbabca8a09 91 free(_fp);
k4zuki 0:3bdbabca8a09 92 #endif
k4zuki 0:3bdbabca8a09 93 } else {
k4zuki 0:3bdbabca8a09 94 _status = E_FILE_NOT_FOUND;
k4zuki 0:3bdbabca8a09 95 }
k4zuki 0:3bdbabca8a09 96 return _status;
k4zuki 0:3bdbabca8a09 97
k4zuki 0:3bdbabca8a09 98
k4zuki 0:3bdbabca8a09 99 }
k4zuki 0:3bdbabca8a09 100
k4zuki 0:3bdbabca8a09 101 int DA14580::file_size( FILE *fp )
k4zuki 0:3bdbabca8a09 102 {
k4zuki 0:3bdbabca8a09 103 int size;
k4zuki 0:3bdbabca8a09 104
k4zuki 0:3bdbabca8a09 105 fseek( fp, 0, SEEK_END ); // seek to end of file
k4zuki 0:3bdbabca8a09 106 size = ftell( fp ); // get current file pointer
k4zuki 0:3bdbabca8a09 107 fseek( fp, 0, SEEK_SET ); // seek back to beginning of file
k4zuki 0:3bdbabca8a09 108
k4zuki 0:3bdbabca8a09 109 return size;
k4zuki 0:3bdbabca8a09 110 }
k4zuki 0:3bdbabca8a09 111