DA14580 Bluetooth Smart IC writer library

Dependents:   11u35_usbLocalFilesystem

Committer:
k4zuki
Date:
Fri Mar 04 10:33:45 2016 +0000
Revision:
6:db0ae78150a3
Parent:
5:45e9f3723a08
Child:
8:af5210dbfe64
update

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