DA14580 Bluetooth Smart IC writer library

Dependents:   11u35_usbLocalFilesystem

Committer:
k4zuki
Date:
Fri Mar 04 10:33:45 2016 +0000
Revision:
6:db0ae78150a3
Parent:
5:45e9f3723a08
Child:
7:5f0fe36be5b3
update

Who changed what in which revision?

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