DA14580 Bluetooth Smart IC writer library
Dependents: 11u35_usbLocalFilesystem
DA14580.cpp
- Committer:
- k4zuki
- Date:
- 2015-09-19
- Revision:
- 3:a9684679d1ec
- Parent:
- 0:3bdbabca8a09
- Child:
- 5:45e9f3723a08
File content as of revision 3:a9684679d1ec:
#include "mbed.h" #include "DA14580.h" DA14580::DA14580( PinName TX, PinName RX, PinName RESET ) : _ble(TX,RX), _reset(RESET) { init(); } DA14580::DA14580( RawSerial &ble, PinName RESET ) : _ble(ble), _reset(RESET) { init(); } DA14580::~DA14580() { } void DA14580::init() { _ble.baud(57600); _crc = 0x00; _recieve = 0; _read = 0; _filesize = 0; _reset.write(0); _timeout = 100; _status = SUCCESS; } int DA14580::load() { _status = SUCCESS; _fp = fopen( LOADER_FILE, "rb" ); if (_fp) { _filesize = file_size(_fp); _reset.write(1); while((_timeout--) >0) { if( _ble.readable() ) { _recieve = _ble.getc(); if(_recieve == STX) { _ble.putc(SOH); break; } } } if(_timeout <= 0) { _status = E_TIMEOUT_STX; } else { _timeout = 100; _ble.putc(_filesize & 0xff); _ble.putc( (_filesize >> 8) & 0xff); while((_timeout--) >0) { if( _ble.readable() ) { _recieve = _ble.getc(); if(_recieve == ACK) { break; } } } if(_timeout <= 0) { _status = E_ACK_NOT_RETURNED; } else { _timeout = 100; for(int i = 0; i < _filesize; i++) { _read = getc(_fp); _ble.putc(_read); _crc = _crc ^ _read; if((i % 16) == 0) { } } while((_timeout--) >0) { if( _ble.readable() ) { _recieve = _ble.getc(); if(_recieve == _crc) { _ble.putc(ACK); break; } } } if(_timeout <= 0) { _status = E_ACK_NOT_RETURNED; } } } fclose(_fp); #if defined(__MICROLIB) && defined(__ARMCC_VERSION) // with microlib and ARM compiler #warning "free(_fp)" free(_fp); #endif } else { _status = E_FILE_NOT_FOUND; } return _status; } int DA14580::file_size( FILE *fp ) { int size; fseek( fp, 0, SEEK_END ); // seek to end of file size = ftell( fp ); // get current file pointer fseek( fp, 0, SEEK_SET ); // seek back to beginning of file return size; }