DA14580 Bluetooth Smart IC writer library

Dependents:   11u35_usbLocalFilesystem

Committer:
k4zuki
Date:
Wed Aug 19 15:44:39 2015 +0000
Revision:
1:b2d4a4e2f362
Parent:
0:3bdbabca8a09
Child:
2:043522e836ab
update comments

Who changed what in which revision?

UserRevisionLine numberNew contents of line
k4zuki 0:3bdbabca8a09 1 /**
k4zuki 1:b2d4a4e2f362 2 * mbed library for Dialog Semiconductor DA14580 Bluetooth Smart chip
k4zuki 1:b2d4a4e2f362 3 * by Kazuki Yamamoto, or _K4ZUKI_
k4zuki 0:3bdbabca8a09 4 **/
k4zuki 1:b2d4a4e2f362 5
k4zuki 1:b2d4a4e2f362 6 #ifndef __DA1458X_H__
k4zuki 1:b2d4a4e2f362 7 #define __DA1458X_H__
k4zuki 0:3bdbabca8a09 8
k4zuki 0:3bdbabca8a09 9 #include "mbed.h"
k4zuki 0:3bdbabca8a09 10
k4zuki 0:3bdbabca8a09 11 #define LOADER_FILE "/local/loader.bin"
k4zuki 0:3bdbabca8a09 12 #define TARGET_FILE "/local/target.bin"
k4zuki 0:3bdbabca8a09 13
k4zuki 0:3bdbabca8a09 14 /** \class DA14580
k4zuki 1:b2d4a4e2f362 15 * \brief mbed library for Dialog Semiconductor DA14580 Bluetooth Smart chip
k4zuki 0:3bdbabca8a09 16 *
k4zuki 0:3bdbabca8a09 17 * Example:
k4zuki 0:3bdbabca8a09 18 * @code
k4zuki 0:3bdbabca8a09 19 * #include "mbed.h"
k4zuki 0:3bdbabca8a09 20 * #include "DA14580.h"
k4zuki 0:3bdbabca8a09 21 *
k4zuki 0:3bdbabca8a09 22 * DA14580 BLE(P0_18, P0_19, P0_1);
k4zuki 0:3bdbabca8a09 23 * Serial pc(USBTX, USBRX);
k4zuki 0:3bdbabca8a09 24 *
k4zuki 0:3bdbabca8a09 25 * int main()
k4zuki 0:3bdbabca8a09 26 * {
k4zuki 0:3bdbabca8a09 27 * int result=0;
k4zuki 0:3bdbabca8a09 28 * pc.baud(115200);
k4zuki 0:3bdbabca8a09 29 *
k4zuki 0:3bdbabca8a09 30 * wait_ms(1);
k4zuki 0:3bdbabca8a09 31 * fp = fopen( SOURCE_FILE, "rb" );
k4zuki 0:3bdbabca8a09 32 * result = BLE.load(fp);
k4zuki 0:3bdbabca8a09 33 * fclose(fp);
k4zuki 0:3bdbabca8a09 34 #if defined(__MICROLIB) && defined(__ARMCC_VERSION) // with microlib and ARM compiler
k4zuki 0:3bdbabca8a09 35 * free(fp);
k4zuki 0:3bdbabca8a09 36 #endif
k4zuki 0:3bdbabca8a09 37 * pc.printf("Result = %d \n\r",&result);
k4zuki 0:3bdbabca8a09 38 * }
k4zuki 0:3bdbabca8a09 39 * @endcode
k4zuki 0:3bdbabca8a09 40 */
k4zuki 0:3bdbabca8a09 41 class DA14580
k4zuki 0:3bdbabca8a09 42 {
k4zuki 0:3bdbabca8a09 43 public:
k4zuki 1:b2d4a4e2f362 44 /** \enum XMODEM_CONST
k4zuki 1:b2d4a4e2f362 45 \brief Constant number used in XMODEM
k4zuki 1:b2d4a4e2f362 46 @param SOH = 0x01
k4zuki 1:b2d4a4e2f362 47 @param STX = 0x02
k4zuki 1:b2d4a4e2f362 48 @param EOT = 0x04
k4zuki 1:b2d4a4e2f362 49 @param ACK = 0x06
k4zuki 1:b2d4a4e2f362 50 @param DLE = 0x10
k4zuki 1:b2d4a4e2f362 51 @param NAK = 0x15
k4zuki 1:b2d4a4e2f362 52 @param CAN = 0x18
k4zuki 1:b2d4a4e2f362 53 */
k4zuki 1:b2d4a4e2f362 54 enum XMODEM_CONST {
k4zuki 1:b2d4a4e2f362 55 SOH = (0x01),
k4zuki 1:b2d4a4e2f362 56 STX = (0x02),
k4zuki 1:b2d4a4e2f362 57 EOT = (0x04),
k4zuki 1:b2d4a4e2f362 58 ACK = (0x06),
k4zuki 1:b2d4a4e2f362 59 DLE = (0x10),
k4zuki 1:b2d4a4e2f362 60 NAK = (0x15),
k4zuki 1:b2d4a4e2f362 61 CAN = (0x18),
k4zuki 1:b2d4a4e2f362 62 };
k4zuki 1:b2d4a4e2f362 63
k4zuki 1:b2d4a4e2f362 64 /** \enum DA14580_STATUS
k4zuki 1:b2d4a4e2f362 65 \brief Status flags to show write operation is succeeded
k4zuki 1:b2d4a4e2f362 66 SUCCESS = '0'
k4zuki 1:b2d4a4e2f362 67 E_NOT_CONNECTED = '1'
k4zuki 1:b2d4a4e2f362 68 E_FILE_NOT_FOUND = '2'
k4zuki 1:b2d4a4e2f362 69 E_TIMEOUT_STX = '3'
k4zuki 1:b2d4a4e2f362 70 E_ACK_NOT_RETURNED = '4'
k4zuki 1:b2d4a4e2f362 71 E_CRC_MISMATCH = '5'
k4zuki 1:b2d4a4e2f362 72 */
k4zuki 1:b2d4a4e2f362 73 enum DA14580_STATUS {
k4zuki 1:b2d4a4e2f362 74 SUCCESS = '0',
k4zuki 1:b2d4a4e2f362 75 E_NOT_CONNECTED = '1',
k4zuki 1:b2d4a4e2f362 76 E_FILE_NOT_FOUND = '2',
k4zuki 1:b2d4a4e2f362 77 E_TIMEOUT_STX = '3',
k4zuki 1:b2d4a4e2f362 78 E_ACK_NOT_RETURNED = '4',
k4zuki 1:b2d4a4e2f362 79 E_CRC_MISMATCH = '5'
k4zuki 1:b2d4a4e2f362 80 };
k4zuki 1:b2d4a4e2f362 81
k4zuki 1:b2d4a4e2f362 82 /** Constructor
k4zuki 1:b2d4a4e2f362 83 * @param TX UART data output from mbed
k4zuki 1:b2d4a4e2f362 84 * @param RX UART data input from device
k4zuki 1:b2d4a4e2f362 85 * @param RESET LOW-active RESET signal
k4zuki 1:b2d4a4e2f362 86 */
k4zuki 0:3bdbabca8a09 87 DA14580( PinName TX, PinName RX, PinName RESET );
k4zuki 1:b2d4a4e2f362 88
k4zuki 1:b2d4a4e2f362 89 /** Constructor
k4zuki 1:b2d4a4e2f362 90 * @param &ble pointer to RawSerial instance
k4zuki 1:b2d4a4e2f362 91 * @param RESET LOW-active RESET signal
k4zuki 1:b2d4a4e2f362 92 */
k4zuki 0:3bdbabca8a09 93 DA14580( RawSerial &ble, PinName RESET );
k4zuki 1:b2d4a4e2f362 94
k4zuki 1:b2d4a4e2f362 95 /** Destructor
k4zuki 1:b2d4a4e2f362 96 */
k4zuki 0:3bdbabca8a09 97 ~DA14580();
k4zuki 0:3bdbabca8a09 98
k4zuki 1:b2d4a4e2f362 99 /** Initialise internal variables
k4zuki 1:b2d4a4e2f362 100 */
k4zuki 0:3bdbabca8a09 101 void init();
k4zuki 1:b2d4a4e2f362 102
k4zuki 1:b2d4a4e2f362 103 /** Load binary executable into device through UART
k4zuki 1:b2d4a4e2f362 104 */
k4zuki 0:3bdbabca8a09 105 int load();
k4zuki 1:b2d4a4e2f362 106
k4zuki 1:b2d4a4e2f362 107 /** Returns file size: copied from ika_shouyu_poppoyaki
k4zuki 1:b2d4a4e2f362 108 * @param *fp File pointer
k4zuki 1:b2d4a4e2f362 109 */
k4zuki 1:b2d4a4e2f362 110 int file_size( FILE *fp );
k4zuki 1:b2d4a4e2f362 111
k4zuki 0:3bdbabca8a09 112 RawSerial _ble;
k4zuki 0:3bdbabca8a09 113
k4zuki 0:3bdbabca8a09 114 private:
k4zuki 0:3bdbabca8a09 115 uint8_t _recieve;
k4zuki 0:3bdbabca8a09 116 uint8_t _read;
k4zuki 0:3bdbabca8a09 117 int _filesize;
k4zuki 0:3bdbabca8a09 118 int _timeout;
k4zuki 0:3bdbabca8a09 119 int _status;
k4zuki 0:3bdbabca8a09 120 FILE* _fp;
k4zuki 0:3bdbabca8a09 121 int _crc;
k4zuki 0:3bdbabca8a09 122 DigitalOut _reset;
k4zuki 0:3bdbabca8a09 123 };
k4zuki 0:3bdbabca8a09 124
k4zuki 1:b2d4a4e2f362 125 #endif //__DA1458X_H__