DA14580 Bluetooth Smart IC writer library

Dependents:   11u35_usbLocalFilesystem

Committer:
k4zuki
Date:
Mon Oct 05 04:51:58 2015 +0000
Revision:
4:b66f3d100c82
Parent:
3:a9684679d1ec
Child:
5:45e9f3723a08
fixed library document; [ NEW ] add copy_to_flash()

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