DA14580 Bluetooth Smart IC writer library

Dependents:   11u35_usbLocalFilesystem

Committer:
k4zuki
Date:
Tue Nov 10 01:12:06 2015 +0000
Revision:
5:45e9f3723a08
Parent:
3:a9684679d1ec
Child:
6:db0ae78150a3
add debug actions(to be removed)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
k4zuki 5:45e9f3723a08 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 5:45e9f3723a08 39 /*
k4zuki 5:45e9f3723a08 40 while( _ble.readable() ) {
k4zuki 5:45e9f3723a08 41 _recieve = _ble.getc();
k4zuki 5:45e9f3723a08 42 }
k4zuki 5:45e9f3723a08 43 */
k4zuki 0:3bdbabca8a09 44 _fp = fopen( LOADER_FILE, "rb" );
k4zuki 0:3bdbabca8a09 45 if (_fp) {
k4zuki 0:3bdbabca8a09 46 _filesize = file_size(_fp);
k4zuki 0:3bdbabca8a09 47 } else {
k4zuki 0:3bdbabca8a09 48 _status = E_FILE_NOT_FOUND;
k4zuki 0:3bdbabca8a09 49 }
k4zuki 5:45e9f3723a08 50 if(_status == SUCCESS) {
k4zuki 5:45e9f3723a08 51 _reset.write(_BOOT);
k4zuki 5:45e9f3723a08 52 wait_us(1);
k4zuki 5:45e9f3723a08 53 while(1) {
k4zuki 5:45e9f3723a08 54 // if( _ble.readable() ) {
k4zuki 5:45e9f3723a08 55 while( _ble.readable() ) {
k4zuki 5:45e9f3723a08 56 _recieve = _ble.getc();
k4zuki 5:45e9f3723a08 57 }
k4zuki 5:45e9f3723a08 58 wait_us(150); //DEBUG
k4zuki 5:45e9f3723a08 59 if(_recieve == STX) {
k4zuki 5:45e9f3723a08 60 _ble.putc(SOH);
k4zuki 5:45e9f3723a08 61 wait_us(150); //DEBUG
k4zuki 5:45e9f3723a08 62 _ble.putc(_filesize & 0xff);
k4zuki 5:45e9f3723a08 63 wait_us(150); //DEBUG
k4zuki 5:45e9f3723a08 64 _ble.putc( (_filesize >> 8) & 0xff);
k4zuki 5:45e9f3723a08 65 wait_us(150); //DEBUG
k4zuki 5:45e9f3723a08 66 _reset.write(_RESET); //DEBUG
k4zuki 5:45e9f3723a08 67 _reset.write(_BOOT); //DEBUG
k4zuki 5:45e9f3723a08 68 _reset.write(_RESET); //DEBUG
k4zuki 5:45e9f3723a08 69 break;
k4zuki 5:45e9f3723a08 70 }
k4zuki 5:45e9f3723a08 71 // }
k4zuki 5:45e9f3723a08 72 }
k4zuki 5:45e9f3723a08 73
k4zuki 5:45e9f3723a08 74 // _ble.putc(_filesize & 0xff);
k4zuki 5:45e9f3723a08 75 // _ble.putc( (_filesize >> 8) & 0xff);
k4zuki 5:45e9f3723a08 76 while(1) {
k4zuki 5:45e9f3723a08 77 // if( _ble.readable() ) {
k4zuki 5:45e9f3723a08 78 _recieve = _ble.getc();
k4zuki 5:45e9f3723a08 79 if(_recieve == ACK) {
k4zuki 5:45e9f3723a08 80 break;
k4zuki 5:45e9f3723a08 81 } else {
k4zuki 5:45e9f3723a08 82 _status = E_ACK_NOT_RETURNED;
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 if(_status == SUCCESS) {
k4zuki 5:45e9f3723a08 89 for(int i = 0; i < _filesize; i++) {
k4zuki 5:45e9f3723a08 90 _read = getc(_fp);
k4zuki 5:45e9f3723a08 91 _ble.putc(_read);
k4zuki 5:45e9f3723a08 92 _crc = _crc ^ _read;
k4zuki 5:45e9f3723a08 93 wait_us(150); //DEBUG
k4zuki 5:45e9f3723a08 94 }
k4zuki 5:45e9f3723a08 95 while(1) {
k4zuki 5:45e9f3723a08 96 // if( _ble.readable() ) {
k4zuki 5:45e9f3723a08 97 _recieve = _ble.getc();
k4zuki 5:45e9f3723a08 98 if(_recieve == _crc) {
k4zuki 5:45e9f3723a08 99 _ble.putc(ACK);
k4zuki 5:45e9f3723a08 100 wait_us(150); //DEBUG
k4zuki 5:45e9f3723a08 101 break;
k4zuki 5:45e9f3723a08 102 } else {
k4zuki 5:45e9f3723a08 103 _status = E_CRC_MISMATCH;
k4zuki 5:45e9f3723a08 104 break;
k4zuki 5:45e9f3723a08 105 }
k4zuki 5:45e9f3723a08 106 // }
k4zuki 5:45e9f3723a08 107 }
k4zuki 5:45e9f3723a08 108 }
k4zuki 5:45e9f3723a08 109 }
k4zuki 5:45e9f3723a08 110 fclose(_fp);
k4zuki 5:45e9f3723a08 111 #if defined(__MICROLIB) && defined(__ARMCC_VERSION) // with microlib and ARM compiler
k4zuki 5:45e9f3723a08 112 #warning "free(_fp)"
k4zuki 5:45e9f3723a08 113 free(_fp);
k4zuki 5:45e9f3723a08 114 #endif
k4zuki 0:3bdbabca8a09 115 return _status;
k4zuki 0:3bdbabca8a09 116
k4zuki 0:3bdbabca8a09 117
k4zuki 0:3bdbabca8a09 118 }
k4zuki 0:3bdbabca8a09 119
k4zuki 0:3bdbabca8a09 120 int DA14580::file_size( FILE *fp )
k4zuki 0:3bdbabca8a09 121 {
k4zuki 0:3bdbabca8a09 122 int size;
k4zuki 0:3bdbabca8a09 123
k4zuki 0:3bdbabca8a09 124 fseek( fp, 0, SEEK_END ); // seek to end of file
k4zuki 0:3bdbabca8a09 125 size = ftell( fp ); // get current file pointer
k4zuki 0:3bdbabca8a09 126 fseek( fp, 0, SEEK_SET ); // seek back to beginning of file
k4zuki 0:3bdbabca8a09 127
k4zuki 0:3bdbabca8a09 128 return size;
k4zuki 0:3bdbabca8a09 129 }
k4zuki 0:3bdbabca8a09 130