DA14580 Bluetooth Smart IC writer library

Dependents:   11u35_usbLocalFilesystem

Committer:
k4zuki
Date:
Fri Aug 12 06:34:58 2016 +0000
Revision:
9:e2e84de053fc
Parent:
8:af5210dbfe64
load() handles filename

Who changed what in which revision?

UserRevisionLine numberNew contents of line
k4zuki 6:db0ae78150a3 1 /** mbed library for Dialog Semiconductor DA14580 Bluetooth Smart chip
k4zuki 1:b2d4a4e2f362 2 * by Kazuki Yamamoto, or _K4ZUKI_
k4zuki 0:3bdbabca8a09 3 **/
k4zuki 1:b2d4a4e2f362 4
k4zuki 3:a9684679d1ec 5 #ifndef __DA14580_H__
k4zuki 3:a9684679d1ec 6 #define __DA14580_H__
k4zuki 0:3bdbabca8a09 7
k4zuki 0:3bdbabca8a09 8 #include "mbed.h"
k4zuki 8:af5210dbfe64 9 #include "W25X40BV.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 6:db0ae78150a3 13 #define _RESET 0
k4zuki 6:db0ae78150a3 14 #define _BOOT 1
k4zuki 5:45e9f3723a08 15 #define _TIMEOUT 10000
k4zuki 0:3bdbabca8a09 16
k4zuki 5:45e9f3723a08 17 /** mbed library for Dialog Semiconductor DA14580 Bluetooth Smart chip
k4zuki 0:3bdbabca8a09 18 *
k4zuki 0:3bdbabca8a09 19 * Example:
k4zuki 0:3bdbabca8a09 20 * @code
k4zuki 0:3bdbabca8a09 21 * #include "mbed.h"
k4zuki 0:3bdbabca8a09 22 * #include "DA14580.h"
k4zuki 0:3bdbabca8a09 23 *
k4zuki 0:3bdbabca8a09 24 * DA14580 BLE(P0_18, P0_19, P0_1);
k4zuki 0:3bdbabca8a09 25 * Serial pc(USBTX, USBRX);
k4zuki 3:a9684679d1ec 26 * LocalFileSystem local( "local" );
k4zuki 0:3bdbabca8a09 27 *
k4zuki 4:b66f3d100c82 28 * #undef LOADER_FILE
k4zuki 4:b66f3d100c82 29 * #define LOADER_FILE "/local/loader_bin"
k4zuki 4:b66f3d100c82 30 *
k4zuki 4:b66f3d100c82 31 * #undef TARGET_FILE
k4zuki 4:b66f3d100c82 32 * #define TARGET_FILE "/local/target_bin"
k4zuki 4:b66f3d100c82 33 *
k4zuki 0:3bdbabca8a09 34 * int main()
k4zuki 0:3bdbabca8a09 35 * {
k4zuki 0:3bdbabca8a09 36 * int result=0;
k4zuki 0:3bdbabca8a09 37 * pc.baud(115200);
k4zuki 0:3bdbabca8a09 38 *
k4zuki 0:3bdbabca8a09 39 * wait_ms(1);
k4zuki 4:b66f3d100c82 40 * result = BLE.load();
k4zuki 0:3bdbabca8a09 41 * pc.printf("Result = %d \n\r",&result);
k4zuki 0:3bdbabca8a09 42 * }
k4zuki 0:3bdbabca8a09 43 * @endcode
k4zuki 0:3bdbabca8a09 44 */
k4zuki 0:3bdbabca8a09 45 class DA14580
k4zuki 0:3bdbabca8a09 46 {
k4zuki 0:3bdbabca8a09 47 public:
k4zuki 1:b2d4a4e2f362 48 /** \enum XMODEM_CONST
k4zuki 1:b2d4a4e2f362 49 \brief Constant number used in XMODEM
k4zuki 1:b2d4a4e2f362 50 @param SOH = 0x01
k4zuki 1:b2d4a4e2f362 51 @param STX = 0x02
k4zuki 1:b2d4a4e2f362 52 @param EOT = 0x04
k4zuki 1:b2d4a4e2f362 53 @param ACK = 0x06
k4zuki 1:b2d4a4e2f362 54 @param DLE = 0x10
k4zuki 1:b2d4a4e2f362 55 @param NAK = 0x15
k4zuki 1:b2d4a4e2f362 56 @param CAN = 0x18
k4zuki 1:b2d4a4e2f362 57 */
k4zuki 1:b2d4a4e2f362 58 enum XMODEM_CONST {
k4zuki 1:b2d4a4e2f362 59 SOH = (0x01),
k4zuki 1:b2d4a4e2f362 60 STX = (0x02),
k4zuki 1:b2d4a4e2f362 61 EOT = (0x04),
k4zuki 1:b2d4a4e2f362 62 ACK = (0x06),
k4zuki 1:b2d4a4e2f362 63 DLE = (0x10),
k4zuki 1:b2d4a4e2f362 64 NAK = (0x15),
k4zuki 1:b2d4a4e2f362 65 CAN = (0x18),
k4zuki 1:b2d4a4e2f362 66 };
k4zuki 1:b2d4a4e2f362 67
k4zuki 1:b2d4a4e2f362 68 /** \enum DA14580_STATUS
k4zuki 1:b2d4a4e2f362 69 \brief Status flags to show write operation is succeeded
k4zuki 2:043522e836ab 70 @param SUCCESS = '0'
k4zuki 2:043522e836ab 71 @param E_NOT_CONNECTED = '1'
k4zuki 2:043522e836ab 72 @param E_FILE_NOT_FOUND = '2'
k4zuki 2:043522e836ab 73 @param E_TIMEOUT_STX = '3'
k4zuki 2:043522e836ab 74 @param E_ACK_NOT_RETURNED = '4'
k4zuki 2:043522e836ab 75 @param E_CRC_MISMATCH = '5'
k4zuki 1:b2d4a4e2f362 76 */
k4zuki 1:b2d4a4e2f362 77 enum DA14580_STATUS {
k4zuki 9:e2e84de053fc 78 // SUCCESS = '0',
k4zuki 9:e2e84de053fc 79 // E_NOT_CONNECTED = '1',
k4zuki 9:e2e84de053fc 80 // E_FILE_NOT_FOUND = '2',
k4zuki 9:e2e84de053fc 81 // E_TIMEOUT_STX = '3',
k4zuki 9:e2e84de053fc 82 // E_ACK_NOT_RETURNED = '4',
k4zuki 9:e2e84de053fc 83 // E_CRC_MISMATCH = '5'
k4zuki 9:e2e84de053fc 84 SUCCESS = 0,
k4zuki 9:e2e84de053fc 85 E_NOT_CONNECTED = 1,
k4zuki 9:e2e84de053fc 86 E_FILE_NOT_FOUND = 2,
k4zuki 9:e2e84de053fc 87 E_TIMEOUT_STX = 3,
k4zuki 9:e2e84de053fc 88 E_ACK_NOT_RETURNED = 4,
k4zuki 9:e2e84de053fc 89 E_CRC_MISMATCH = 5
k4zuki 1:b2d4a4e2f362 90 };
k4zuki 1:b2d4a4e2f362 91
k4zuki 1:b2d4a4e2f362 92 /** Constructor
k4zuki 1:b2d4a4e2f362 93 * @param TX UART data output from mbed
k4zuki 1:b2d4a4e2f362 94 * @param RX UART data input from device
k4zuki 1:b2d4a4e2f362 95 * @param RESET LOW-active RESET signal
k4zuki 1:b2d4a4e2f362 96 */
k4zuki 0:3bdbabca8a09 97 DA14580( PinName TX, PinName RX, PinName RESET );
k4zuki 1:b2d4a4e2f362 98
k4zuki 1:b2d4a4e2f362 99 /** Constructor
k4zuki 1:b2d4a4e2f362 100 * @param &ble pointer to RawSerial instance
k4zuki 1:b2d4a4e2f362 101 * @param RESET LOW-active RESET signal
k4zuki 1:b2d4a4e2f362 102 */
k4zuki 0:3bdbabca8a09 103 DA14580( RawSerial &ble, PinName RESET );
k4zuki 1:b2d4a4e2f362 104
k4zuki 1:b2d4a4e2f362 105 /** Destructor
k4zuki 1:b2d4a4e2f362 106 */
k4zuki 0:3bdbabca8a09 107 ~DA14580();
k4zuki 0:3bdbabca8a09 108
k4zuki 1:b2d4a4e2f362 109 /** Initialise internal variables
k4zuki 1:b2d4a4e2f362 110 */
k4zuki 0:3bdbabca8a09 111 void init();
k4zuki 1:b2d4a4e2f362 112
k4zuki 4:b66f3d100c82 113 /** copy application executable into external SPI flash memory
k4zuki 4:b66f3d100c82 114 */
k4zuki 8:af5210dbfe64 115 void copy_to_flash(W25X40BV* flash);
k4zuki 5:45e9f3723a08 116
k4zuki 4:b66f3d100c82 117 /** Load bootloader executable into device through UART
k4zuki 4:b66f3d100c82 118 * the target binary should be defined by LOADER_FILE
k4zuki 1:b2d4a4e2f362 119 */
k4zuki 9:e2e84de053fc 120 int load(char *filename = LOADER_FILE);
k4zuki 1:b2d4a4e2f362 121
k4zuki 1:b2d4a4e2f362 122 /** Returns file size: copied from ika_shouyu_poppoyaki
k4zuki 1:b2d4a4e2f362 123 * @param *fp File pointer
k4zuki 1:b2d4a4e2f362 124 */
k4zuki 1:b2d4a4e2f362 125 int file_size( FILE *fp );
k4zuki 1:b2d4a4e2f362 126
k4zuki 0:3bdbabca8a09 127 RawSerial _ble;
k4zuki 0:3bdbabca8a09 128
k4zuki 0:3bdbabca8a09 129 private:
k4zuki 0:3bdbabca8a09 130 uint8_t _recieve;
k4zuki 0:3bdbabca8a09 131 uint8_t _read;
k4zuki 0:3bdbabca8a09 132 int _filesize;
k4zuki 8:af5210dbfe64 133 int _loadersize;
k4zuki 0:3bdbabca8a09 134 int _timeout;
k4zuki 0:3bdbabca8a09 135 int _status;
k4zuki 0:3bdbabca8a09 136 FILE* _fp;
k4zuki 0:3bdbabca8a09 137 int _crc;
k4zuki 0:3bdbabca8a09 138 DigitalOut _reset;
k4zuki 0:3bdbabca8a09 139 };
k4zuki 0:3bdbabca8a09 140
k4zuki 3:a9684679d1ec 141 #endif //__DA14580_H__