DA14580 Bluetooth Smart IC writer library

Dependents:   11u35_usbLocalFilesystem

Committer:
k4zuki
Date:
Sat Sep 19 10:19:14 2015 +0000
Revision:
3:a9684679d1ec
Parent:
2:043522e836ab
Child:
4:b66f3d100c82
change to use reset.write(); change header file definition

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