DA14580 Bluetooth Smart IC writer library
Dependents: 11u35_usbLocalFilesystem
DA14580.cpp@0:3bdbabca8a09, 2015-08-19 (annotated)
- Committer:
- k4zuki
- Date:
- Wed Aug 19 14:41:13 2015 +0000
- Revision:
- 0:3bdbabca8a09
- Child:
- 3:a9684679d1ec
DA14580 Bluetooth Smart IC writer library: first version
Who changed what in which revision?
User | Revision | Line number | New 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 | 0:3bdbabca8a09 | 26 | _reset = 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 | 0:3bdbabca8a09 | 39 | while((_timeout--) >0) { |
k4zuki | 0:3bdbabca8a09 | 40 | if( _ble.readable() ) { |
k4zuki | 0:3bdbabca8a09 | 41 | _recieve = _ble.getc(); |
k4zuki | 0:3bdbabca8a09 | 42 | if(_recieve == STX) { |
k4zuki | 0:3bdbabca8a09 | 43 | _ble.putc(SOH); |
k4zuki | 0:3bdbabca8a09 | 44 | break; |
k4zuki | 0:3bdbabca8a09 | 45 | } |
k4zuki | 0:3bdbabca8a09 | 46 | } |
k4zuki | 0:3bdbabca8a09 | 47 | } |
k4zuki | 0:3bdbabca8a09 | 48 | if(_timeout <= 0) { |
k4zuki | 0:3bdbabca8a09 | 49 | _status = E_TIMEOUT_STX; |
k4zuki | 0:3bdbabca8a09 | 50 | } else { |
k4zuki | 0:3bdbabca8a09 | 51 | _timeout = 100; |
k4zuki | 0:3bdbabca8a09 | 52 | _ble.putc(_filesize & 0xff); |
k4zuki | 0:3bdbabca8a09 | 53 | _ble.putc( (_filesize >> 8) & 0xff); |
k4zuki | 0:3bdbabca8a09 | 54 | while((_timeout--) >0) { |
k4zuki | 0:3bdbabca8a09 | 55 | if( _ble.readable() ) { |
k4zuki | 0:3bdbabca8a09 | 56 | _recieve = _ble.getc(); |
k4zuki | 0:3bdbabca8a09 | 57 | if(_recieve == ACK) { |
k4zuki | 0:3bdbabca8a09 | 58 | break; |
k4zuki | 0:3bdbabca8a09 | 59 | } |
k4zuki | 0:3bdbabca8a09 | 60 | } |
k4zuki | 0:3bdbabca8a09 | 61 | } |
k4zuki | 0:3bdbabca8a09 | 62 | if(_timeout <= 0) { |
k4zuki | 0:3bdbabca8a09 | 63 | _status = E_ACK_NOT_RETURNED; |
k4zuki | 0:3bdbabca8a09 | 64 | } else { |
k4zuki | 0:3bdbabca8a09 | 65 | _timeout = 100; |
k4zuki | 0:3bdbabca8a09 | 66 | for(int i = 0; i < _filesize; i++) { |
k4zuki | 0:3bdbabca8a09 | 67 | _read = getc(_fp); |
k4zuki | 0:3bdbabca8a09 | 68 | _ble.putc(_read); |
k4zuki | 0:3bdbabca8a09 | 69 | _crc = _crc ^ _read; |
k4zuki | 0:3bdbabca8a09 | 70 | if((i % 16) == 0) { |
k4zuki | 0:3bdbabca8a09 | 71 | } |
k4zuki | 0:3bdbabca8a09 | 72 | } |
k4zuki | 0:3bdbabca8a09 | 73 | while((_timeout--) >0) { |
k4zuki | 0:3bdbabca8a09 | 74 | if( _ble.readable() ) { |
k4zuki | 0:3bdbabca8a09 | 75 | _recieve = _ble.getc(); |
k4zuki | 0:3bdbabca8a09 | 76 | if(_recieve == _crc) { |
k4zuki | 0:3bdbabca8a09 | 77 | _ble.putc(ACK); |
k4zuki | 0:3bdbabca8a09 | 78 | break; |
k4zuki | 0:3bdbabca8a09 | 79 | } |
k4zuki | 0:3bdbabca8a09 | 80 | } |
k4zuki | 0:3bdbabca8a09 | 81 | } |
k4zuki | 0:3bdbabca8a09 | 82 | if(_timeout <= 0) { |
k4zuki | 0:3bdbabca8a09 | 83 | _status = E_ACK_NOT_RETURNED; |
k4zuki | 0:3bdbabca8a09 | 84 | } |
k4zuki | 0:3bdbabca8a09 | 85 | } |
k4zuki | 0:3bdbabca8a09 | 86 | } |
k4zuki | 0:3bdbabca8a09 | 87 | fclose(_fp); |
k4zuki | 0:3bdbabca8a09 | 88 | #if defined(__MICROLIB) && defined(__ARMCC_VERSION) // with microlib and ARM compiler |
k4zuki | 0:3bdbabca8a09 | 89 | #warning "free(_fp)" |
k4zuki | 0:3bdbabca8a09 | 90 | free(_fp); |
k4zuki | 0:3bdbabca8a09 | 91 | #endif |
k4zuki | 0:3bdbabca8a09 | 92 | } else { |
k4zuki | 0:3bdbabca8a09 | 93 | _status = E_FILE_NOT_FOUND; |
k4zuki | 0:3bdbabca8a09 | 94 | } |
k4zuki | 0:3bdbabca8a09 | 95 | return _status; |
k4zuki | 0:3bdbabca8a09 | 96 | |
k4zuki | 0:3bdbabca8a09 | 97 | |
k4zuki | 0:3bdbabca8a09 | 98 | } |
k4zuki | 0:3bdbabca8a09 | 99 | |
k4zuki | 0:3bdbabca8a09 | 100 | int DA14580::file_size( FILE *fp ) |
k4zuki | 0:3bdbabca8a09 | 101 | { |
k4zuki | 0:3bdbabca8a09 | 102 | int size; |
k4zuki | 0:3bdbabca8a09 | 103 | |
k4zuki | 0:3bdbabca8a09 | 104 | fseek( fp, 0, SEEK_END ); // seek to end of file |
k4zuki | 0:3bdbabca8a09 | 105 | size = ftell( fp ); // get current file pointer |
k4zuki | 0:3bdbabca8a09 | 106 | fseek( fp, 0, SEEK_SET ); // seek back to beginning of file |
k4zuki | 0:3bdbabca8a09 | 107 | |
k4zuki | 0:3bdbabca8a09 | 108 | return size; |
k4zuki | 0:3bdbabca8a09 | 109 | } |
k4zuki | 0:3bdbabca8a09 | 110 |