BLE Nano Code.Tested with Integrated mDot code

Dependencies:   BLE_API mbed nRF51822

Fork of eco_Labs_ble_Client by Happiest

Committer:
jinu
Date:
Fri Dec 16 11:32:53 2016 +0000
Revision:
35:b2af2293635a
Parent:
33:17b8c186eb07
BLE name chnage and local name fix

Who changed what in which revision?

UserRevisionLine numberNew contents of line
vidyasagarbhat 10:09d1a403eb14 1 /**
vidyasagarbhat 10:09d1a403eb14 2 ******************************************************************************
vidyasagarbhat 10:09d1a403eb14 3 * @file ble_uart.cpp
vidyasagarbhat 10:09d1a403eb14 4 * @author Happiesstminds Firmware Team
vidyasagarbhat 10:09d1a403eb14 5 * @version v1.0
vidyasagarbhat 10:09d1a403eb14 6 * @date 4-Oct-2016
vidyasagarbhat 10:09d1a403eb14 7 * @brief
vidyasagarbhat 10:09d1a403eb14 8 *
vidyasagarbhat 10:09d1a403eb14 9 ******************************************************************************
vidyasagarbhat 10:09d1a403eb14 10 * @attention
vidyasagarbhat 10:09d1a403eb14 11 *
vidyasagarbhat 10:09d1a403eb14 12 *
vidyasagarbhat 10:09d1a403eb14 13 ******************************************************************************
vidyasagarbhat 10:09d1a403eb14 14 */
jinu 15:67fbed00edf2 15
vidyasagarbhat 10:09d1a403eb14 16 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 17 /* Include Files*/
vidyasagarbhat 10:09d1a403eb14 18 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 19 #include <string.h>
vidyasagarbhat 10:09d1a403eb14 20 #include "mbed.h"
vidyasagarbhat 10:09d1a403eb14 21 #include "BLE.h"
vidyasagarbhat 10:09d1a403eb14 22 #include "ble_types.h"
jinu 33:17b8c186eb07 23 #include "spi_slave.h"
vidyasagarbhat 10:09d1a403eb14 24 #include "UARTService.h"
jinu 35:b2af2293635a 25 #include "ble_gap.h"
vidyasagarbhat 10:09d1a403eb14 26 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 27 /* Local Defines */
vidyasagarbhat 10:09d1a403eb14 28 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 29 #define DEBUG(STR) { if (uart) uart->write(STR, strlen(STR)); }
jinu 33:17b8c186eb07 30 //const static uint8_t AdvData[] = {"advdata"};
jinu 33:17b8c186eb07 31 const static uint8_t LocName[] ={"EcolabICE"};
vidyasagarbhat 10:09d1a403eb14 32 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 33 /* Global Variables */
vidyasagarbhat 10:09d1a403eb14 34 /******************************************************************************/
jinu 16:79b149aae10a 35 extern void enable_interrupt_line(bool status,uint8_t pin_num );
jinu 12:c7a8a7fe76fd 36 void spi_slave_tx_data(uint8_t *tx_buf, uint8_t len);
vidyasagarbhat 10:09d1a403eb14 37 bool isDeviceConnected = false;
jinu 22:7980e0aa7938 38 bool init_success =false;
jinu 15:67fbed00edf2 39
jinu 11:b8e687d97537 40 #define DEBUG(STR) { if (uart) uart->write(STR, strlen(STR)); }
jinu 15:67fbed00edf2 41
vidyasagarbhat 10:09d1a403eb14 42 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 43 /* Static Variable Declarations */
vidyasagarbhat 10:09d1a403eb14 44 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 45 static BLEDevice ble;
vidyasagarbhat 10:09d1a403eb14 46 static UARTService *uart;
vidyasagarbhat 10:09d1a403eb14 47 static ble_data_ready_callback_t data_ready_cb;
jinu 15:67fbed00edf2 48
vidyasagarbhat 10:09d1a403eb14 49 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 50 /* Static Functions */
vidyasagarbhat 10:09d1a403eb14 51 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 52 /**
vidyasagarbhat 10:09d1a403eb14 53 * @brief Device Connection callback
vidyasagarbhat 10:09d1a403eb14 54 * @param
vidyasagarbhat 10:09d1a403eb14 55 * @retval
vidyasagarbhat 10:09d1a403eb14 56 */
vidyasagarbhat 10:09d1a403eb14 57 static void ble_connectionCallback(const Gap::ConnectionCallbackParams_t *params)
jinu 11:b8e687d97537 58 {
jinu 12:c7a8a7fe76fd 59 uint8_t tx_buf[4];
jinu 12:c7a8a7fe76fd 60 tx_buf[0] = 0x01;
jinu 12:c7a8a7fe76fd 61 tx_buf[1] = 0xA3;
jinu 12:c7a8a7fe76fd 62 tx_buf[2] = 0x00;
jinu 12:c7a8a7fe76fd 63 tx_buf[3] = 0x04;
jinu 14:dc3e3d327d7c 64 spi_slave_tx_data(tx_buf, 4);
vidyasagarbhat 10:09d1a403eb14 65 isDeviceConnected = true;
jinu 14:dc3e3d327d7c 66 toggle_led();
vidyasagarbhat 10:09d1a403eb14 67 }
jinu 15:67fbed00edf2 68
vidyasagarbhat 10:09d1a403eb14 69 /**
vidyasagarbhat 10:09d1a403eb14 70 * @brief Device disconnection callback
vidyasagarbhat 10:09d1a403eb14 71 * @param
vidyasagarbhat 10:09d1a403eb14 72 * @retval
vidyasagarbhat 10:09d1a403eb14 73 */
vidyasagarbhat 10:09d1a403eb14 74 static void ble_disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
jinu 11:b8e687d97537 75 {
jinu 12:c7a8a7fe76fd 76 uint8_t tx_buf[4];
jinu 12:c7a8a7fe76fd 77 tx_buf[0] = 0x01;
jinu 17:3fb1aafa4436 78 tx_buf[1] = 0xA8;
jinu 12:c7a8a7fe76fd 79 tx_buf[2] = 0x00;
jinu 12:c7a8a7fe76fd 80 tx_buf[3] = 0x04;
jinu 25:96044c55f844 81 spi_slave_tx_data(tx_buf, 4);
vidyasagarbhat 10:09d1a403eb14 82 isDeviceConnected = false;
vidyasagarbhat 10:09d1a403eb14 83 ble.startAdvertising();
vidyasagarbhat 10:09d1a403eb14 84 }
jinu 15:67fbed00edf2 85
vidyasagarbhat 10:09d1a403eb14 86 /**
vidyasagarbhat 10:09d1a403eb14 87 * @brief onDataWrittenCallback - On data received callback???
vidyasagarbhat 10:09d1a403eb14 88 * @param
vidyasagarbhat 10:09d1a403eb14 89 * @retval
vidyasagarbhat 10:09d1a403eb14 90 */
jinu 12:c7a8a7fe76fd 91 eStatus_t ble_send_data(uint8_t *tx_buf, uint8_t length);
jinu 12:c7a8a7fe76fd 92
vidyasagarbhat 10:09d1a403eb14 93 static void ble_dataReceiveCallback(const GattWriteCallbackParams *params)
vidyasagarbhat 10:09d1a403eb14 94 {
jinu 33:17b8c186eb07 95 uint8_t buf[SPI_TX_BUF_SIZE] = {0};
jinu 33:17b8c186eb07 96 if(params->len<=SPI_TX_BUF_SIZE)
jinu 33:17b8c186eb07 97 {
jinu 33:17b8c186eb07 98 memcpy(buf, params->data, params->len);
jinu 33:17b8c186eb07 99 data_ready_cb(buf, params->len);
jinu 33:17b8c186eb07 100 }
vidyasagarbhat 10:09d1a403eb14 101 }
jinu 15:67fbed00edf2 102
vidyasagarbhat 10:09d1a403eb14 103 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 104 /* Global Functions */
vidyasagarbhat 10:09d1a403eb14 105 /******************************************************************************/
jinu 11:b8e687d97537 106 void print(const char *msg)
jinu 11:b8e687d97537 107 {
jinu 11:b8e687d97537 108 DEBUG(msg);
jinu 11:b8e687d97537 109 }
vidyasagarbhat 10:09d1a403eb14 110 /**
vidyasagarbhat 10:09d1a403eb14 111 * @brief Initializes the BLE module
vidyasagarbhat 10:09d1a403eb14 112 * @param none
vidyasagarbhat 10:09d1a403eb14 113 * @retval none
vidyasagarbhat 10:09d1a403eb14 114 */
jinu 31:d25111c2fa21 115 void ble_init(uint8_t *tx_buf, uint8_t length)
jinu 11:b8e687d97537 116 {
vidyasagarbhat 10:09d1a403eb14 117 ble.init();
vidyasagarbhat 10:09d1a403eb14 118 ble.onConnection(ble_connectionCallback);
vidyasagarbhat 10:09d1a403eb14 119 ble.onDisconnection(ble_disconnectionCallback);
vidyasagarbhat 10:09d1a403eb14 120 ble.onDataWritten(ble_dataReceiveCallback);
jinu 15:67fbed00edf2 121
vidyasagarbhat 10:09d1a403eb14 122 uart = new UARTService(ble);
jinu 35:b2af2293635a 123
jinu 35:b2af2293635a 124 ble_gap_conn_sec_mode_t sec_mode;
jinu 35:b2af2293635a 125
jinu 35:b2af2293635a 126 BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sec_mode);
jinu 35:b2af2293635a 127 sd_ble_gap_device_name_set(&sec_mode,(const uint8_t *)tx_buf,length);
jinu 35:b2af2293635a 128
jinu 13:c42bd4ebbbfa 129 /* Setup advertising */
jinu 13:c42bd4ebbbfa 130 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
jinu 13:c42bd4ebbbfa 131 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
jinu 35:b2af2293635a 132 // ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME,
jinu 35:b2af2293635a 133 // (const uint8_t *)tx_buf, length);
jinu 33:17b8c186eb07 134 // ble.accumulateAdvertisingPayload(GapAdvertisingData::INCOMPLETE_LIST_128BIT_SERVICE_IDS,
jinu 33:17b8c186eb07 135 // (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
jinu 33:17b8c186eb07 136 // ble.accumulateAdvertisingPayload(GapAdvertisingData::INCOMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
jinu 33:17b8c186eb07 137 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,LocName, sizeof(LocName));
jinu 13:c42bd4ebbbfa 138 ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
vidyasagarbhat 10:09d1a403eb14 139 ble.startAdvertising();
jinu 22:7980e0aa7938 140
jinu 22:7980e0aa7938 141 init_success=true;
vidyasagarbhat 10:09d1a403eb14 142 }
jinu 15:67fbed00edf2 143
vidyasagarbhat 10:09d1a403eb14 144 /**
vidyasagarbhat 10:09d1a403eb14 145 * @brief Function used to register ble data receive callback
vidyasagarbhat 10:09d1a403eb14 146 * @param none
vidyasagarbhat 10:09d1a403eb14 147 * @retval none
vidyasagarbhat 10:09d1a403eb14 148 */
vidyasagarbhat 10:09d1a403eb14 149 void ble_data_rx_cb_register(ble_data_ready_callback_t data_rx_callback)
vidyasagarbhat 10:09d1a403eb14 150 {
vidyasagarbhat 10:09d1a403eb14 151 data_ready_cb = data_rx_callback;
vidyasagarbhat 10:09d1a403eb14 152 }
jinu 15:67fbed00edf2 153
vidyasagarbhat 10:09d1a403eb14 154 /**
vidyasagarbhat 10:09d1a403eb14 155 * @brief Send data over BLE UART
vidyasagarbhat 10:09d1a403eb14 156 * @param
vidyasagarbhat 10:09d1a403eb14 157 * @retval
vidyasagarbhat 10:09d1a403eb14 158 */
vidyasagarbhat 10:09d1a403eb14 159 eStatus_t ble_send_data(uint8_t *tx_buf, uint8_t length)
vidyasagarbhat 10:09d1a403eb14 160 {
vidyasagarbhat 10:09d1a403eb14 161 eStatus_t ret_code = eSuccess;
vidyasagarbhat 10:09d1a403eb14 162 if (isDeviceConnected) {
vidyasagarbhat 10:09d1a403eb14 163 uart->write(tx_buf, length);
vidyasagarbhat 10:09d1a403eb14 164 } else {
vidyasagarbhat 10:09d1a403eb14 165 ret_code = eFailure;
vidyasagarbhat 10:09d1a403eb14 166 }
vidyasagarbhat 10:09d1a403eb14 167 return ret_code;
vidyasagarbhat 10:09d1a403eb14 168 }
jinu 15:67fbed00edf2 169
vidyasagarbhat 10:09d1a403eb14 170 /**
vidyasagarbhat 10:09d1a403eb14 171 * @brief Wait for the BLE events
vidyasagarbhat 10:09d1a403eb14 172 * @param
vidyasagarbhat 10:09d1a403eb14 173 * @retval
vidyasagarbhat 10:09d1a403eb14 174 */
vidyasagarbhat 10:09d1a403eb14 175 void ble_event_wait(void)
vidyasagarbhat 10:09d1a403eb14 176 {
vidyasagarbhat 10:09d1a403eb14 177 ble.waitForEvent();
vidyasagarbhat 10:09d1a403eb14 178 }
jinu 15:67fbed00edf2 179
vidyasagarbhat 10:09d1a403eb14 180 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 181 /* END OF FILE */
vidyasagarbhat 10:09d1a403eb14 182 /******************************************************************************/
jinu 15:67fbed00edf2 183