BLE Nano Code.Tested with Integrated mDot code

Dependencies:   BLE_API mbed nRF51822

Fork of eco_Labs_ble_Client by Happiest

Committer:
jinu
Date:
Tue Oct 11 09:49:14 2016 +0000
Revision:
15:67fbed00edf2
Parent:
14:dc3e3d327d7c
Child:
16:79b149aae10a
BLE read tested

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"
vidyasagarbhat 10:09d1a403eb14 23 #include "UARTService.h"
jinu 15:67fbed00edf2 24
vidyasagarbhat 10:09d1a403eb14 25 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 26 /* Local Defines */
vidyasagarbhat 10:09d1a403eb14 27 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 28 #define DEBUG(STR) { if (uart) uart->write(STR, strlen(STR)); }
jinu 15:67fbed00edf2 29
jinu 11:b8e687d97537 30 #define BLE_DEVICE_NAME "Ecolab-ICE"
jinu 15:67fbed00edf2 31
vidyasagarbhat 10:09d1a403eb14 32 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 33 /* Global Variables */
vidyasagarbhat 10:09d1a403eb14 34 /******************************************************************************/
jinu 15:67fbed00edf2 35
jinu 11:b8e687d97537 36 extern void enable_interrupt_line(bool status );
jinu 12:c7a8a7fe76fd 37 extern void enable_interrupt_line(bool status );
jinu 12:c7a8a7fe76fd 38 void spi_slave_tx_data(uint8_t *tx_buf, uint8_t len);
vidyasagarbhat 10:09d1a403eb14 39 bool isDeviceConnected = false;
jinu 15:67fbed00edf2 40
jinu 15:67fbed00edf2 41
jinu 11:b8e687d97537 42 #define DEBUG(STR) { if (uart) uart->write(STR, strlen(STR)); }
jinu 15:67fbed00edf2 43
vidyasagarbhat 10:09d1a403eb14 44 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 45 /* Static Variable Declarations */
vidyasagarbhat 10:09d1a403eb14 46 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 47 static BLEDevice ble;
vidyasagarbhat 10:09d1a403eb14 48 static UARTService *uart;
vidyasagarbhat 10:09d1a403eb14 49 static ble_data_ready_callback_t data_ready_cb;
jinu 15:67fbed00edf2 50
vidyasagarbhat 10:09d1a403eb14 51 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 52 /* Static Functions */
vidyasagarbhat 10:09d1a403eb14 53 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 54 /**
vidyasagarbhat 10:09d1a403eb14 55 * @brief Device Connection callback
vidyasagarbhat 10:09d1a403eb14 56 * @param
vidyasagarbhat 10:09d1a403eb14 57 * @retval
vidyasagarbhat 10:09d1a403eb14 58 */
vidyasagarbhat 10:09d1a403eb14 59 static void ble_connectionCallback(const Gap::ConnectionCallbackParams_t *params)
jinu 11:b8e687d97537 60 {
jinu 12:c7a8a7fe76fd 61 uint8_t tx_buf[4];
jinu 12:c7a8a7fe76fd 62 tx_buf[0] = 0x01;
jinu 12:c7a8a7fe76fd 63 tx_buf[1] = 0xA3;
jinu 12:c7a8a7fe76fd 64 tx_buf[2] = 0x00;
jinu 12:c7a8a7fe76fd 65 tx_buf[3] = 0x04;
jinu 14:dc3e3d327d7c 66 spi_slave_tx_data(tx_buf, 4);
vidyasagarbhat 10:09d1a403eb14 67 isDeviceConnected = true;
jinu 12:c7a8a7fe76fd 68 // enable_interrupt_line(true);
jinu 14:dc3e3d327d7c 69 toggle_led();
vidyasagarbhat 10:09d1a403eb14 70 }
jinu 15:67fbed00edf2 71
vidyasagarbhat 10:09d1a403eb14 72 /**
vidyasagarbhat 10:09d1a403eb14 73 * @brief Device disconnection callback
vidyasagarbhat 10:09d1a403eb14 74 * @param
vidyasagarbhat 10:09d1a403eb14 75 * @retval
vidyasagarbhat 10:09d1a403eb14 76 */
vidyasagarbhat 10:09d1a403eb14 77 static void ble_disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
jinu 11:b8e687d97537 78 {
jinu 12:c7a8a7fe76fd 79 uint8_t tx_buf[4];
jinu 12:c7a8a7fe76fd 80 tx_buf[0] = 0x01;
jinu 12:c7a8a7fe76fd 81 tx_buf[1] = 0xA6;
jinu 12:c7a8a7fe76fd 82 tx_buf[2] = 0x00;
jinu 12:c7a8a7fe76fd 83 tx_buf[3] = 0x04;
jinu 12:c7a8a7fe76fd 84 spi_slave_tx_data(tx_buf, 4);
jinu 12:c7a8a7fe76fd 85
vidyasagarbhat 10:09d1a403eb14 86 isDeviceConnected = false;
jinu 11:b8e687d97537 87 //toggle_led();
jinu 12:c7a8a7fe76fd 88 // enable_interrupt_line(false);
vidyasagarbhat 10:09d1a403eb14 89 ble.startAdvertising();
vidyasagarbhat 10:09d1a403eb14 90 }
jinu 15:67fbed00edf2 91
vidyasagarbhat 10:09d1a403eb14 92 /**
vidyasagarbhat 10:09d1a403eb14 93 * @brief onDataWrittenCallback - On data received callback???
vidyasagarbhat 10:09d1a403eb14 94 * @param
vidyasagarbhat 10:09d1a403eb14 95 * @retval
vidyasagarbhat 10:09d1a403eb14 96 */
jinu 12:c7a8a7fe76fd 97 eStatus_t ble_send_data(uint8_t *tx_buf, uint8_t length);
jinu 12:c7a8a7fe76fd 98
vidyasagarbhat 10:09d1a403eb14 99 static void ble_dataReceiveCallback(const GattWriteCallbackParams *params)
vidyasagarbhat 10:09d1a403eb14 100 {
jinu 15:67fbed00edf2 101
jinu 15:67fbed00edf2 102 #if 1
vidyasagarbhat 10:09d1a403eb14 103 uint8_t buf[32] = {0};
vidyasagarbhat 10:09d1a403eb14 104
vidyasagarbhat 10:09d1a403eb14 105 memcpy(buf, params->data, params->len);
vidyasagarbhat 10:09d1a403eb14 106
jinu 15:67fbed00edf2 107 // if (data_ready_cb != NULL) {
jinu 15:67fbed00edf2 108 data_ready_cb(buf, params->len);
jinu 15:67fbed00edf2 109 // }
jinu 15:67fbed00edf2 110 // spi_slave_tx_data(buf, (params->len));
jinu 15:67fbed00edf2 111 // ble_send_data((uint8_t *)params->data, params->len);
jinu 15:67fbed00edf2 112 #endif
jinu 15:67fbed00edf2 113 #if 0
jinu 15:67fbed00edf2 114 uint8_t tx_buf[10];
jinu 15:67fbed00edf2 115 tx_buf[0] = 0x01;
jinu 15:67fbed00edf2 116 tx_buf[1] = 0xA5;
jinu 15:67fbed00edf2 117 tx_buf[2] = 0x06;
jinu 15:67fbed00edf2 118 tx_buf[3] = 0x0B;
jinu 15:67fbed00edf2 119 tx_buf[4] = 0x04;
jinu 15:67fbed00edf2 120
jinu 15:67fbed00edf2 121 // spi_slave_tx_data(tx_buf, 6);
jinu 15:67fbed00edf2 122
jinu 15:67fbed00edf2 123
jinu 15:67fbed00edf2 124 if (data_ready_cb != NULL) {
jinu 15:67fbed00edf2 125 data_ready_cb(tx_buf, 6);
vidyasagarbhat 10:09d1a403eb14 126 }
jinu 12:c7a8a7fe76fd 127
jinu 15:67fbed00edf2 128 ble_send_data(tx_buf, 6);
jinu 15:67fbed00edf2 129 #endif
vidyasagarbhat 10:09d1a403eb14 130 }
jinu 15:67fbed00edf2 131
vidyasagarbhat 10:09d1a403eb14 132 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 133 /* Global Functions */
vidyasagarbhat 10:09d1a403eb14 134 /******************************************************************************/
jinu 11:b8e687d97537 135 void print(const char *msg)
jinu 11:b8e687d97537 136 {
jinu 11:b8e687d97537 137 DEBUG(msg);
jinu 11:b8e687d97537 138 }
vidyasagarbhat 10:09d1a403eb14 139 /**
vidyasagarbhat 10:09d1a403eb14 140 * @brief Initializes the BLE module
vidyasagarbhat 10:09d1a403eb14 141 * @param none
vidyasagarbhat 10:09d1a403eb14 142 * @retval none
vidyasagarbhat 10:09d1a403eb14 143 */
vidyasagarbhat 10:09d1a403eb14 144 void ble_init(void)
jinu 11:b8e687d97537 145 {
vidyasagarbhat 10:09d1a403eb14 146 ble.init();
vidyasagarbhat 10:09d1a403eb14 147 ble.onConnection(ble_connectionCallback);
vidyasagarbhat 10:09d1a403eb14 148 ble.onDisconnection(ble_disconnectionCallback);
vidyasagarbhat 10:09d1a403eb14 149 ble.onDataWritten(ble_dataReceiveCallback);
jinu 15:67fbed00edf2 150
vidyasagarbhat 10:09d1a403eb14 151 uart = new UARTService(ble);
jinu 13:c42bd4ebbbfa 152 #if 0
vidyasagarbhat 10:09d1a403eb14 153 /* setup advertising */
vidyasagarbhat 10:09d1a403eb14 154 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
vidyasagarbhat 10:09d1a403eb14 155 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
vidyasagarbhat 10:09d1a403eb14 156 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
jinu 11:b8e687d97537 157 (const uint8_t *)BLE_DEVICE_NAME, sizeof(BLE_DEVICE_NAME) - 1);
vidyasagarbhat 10:09d1a403eb14 158 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
vidyasagarbhat 10:09d1a403eb14 159 (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
jinu 15:67fbed00edf2 160
vidyasagarbhat 10:09d1a403eb14 161 ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
jinu 13:c42bd4ebbbfa 162 #endif
jinu 15:67fbed00edf2 163
jinu 13:c42bd4ebbbfa 164 /* Setup advertising */
jinu 13:c42bd4ebbbfa 165 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
jinu 13:c42bd4ebbbfa 166 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
jinu 13:c42bd4ebbbfa 167 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
jinu 13:c42bd4ebbbfa 168 (const uint8_t *)"BLE UART", sizeof("BLE UART") - 1);
jinu 13:c42bd4ebbbfa 169 ble.accumulateAdvertisingPayload(GapAdvertisingData::INCOMPLETE_LIST_128BIT_SERVICE_IDS,
jinu 13:c42bd4ebbbfa 170 (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
jinu 13:c42bd4ebbbfa 171 ble.accumulateAdvertisingPayload(GapAdvertisingData::INCOMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
jinu 13:c42bd4ebbbfa 172 ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
vidyasagarbhat 10:09d1a403eb14 173 ble.startAdvertising();
vidyasagarbhat 10:09d1a403eb14 174 }
jinu 15:67fbed00edf2 175
vidyasagarbhat 10:09d1a403eb14 176 /**
vidyasagarbhat 10:09d1a403eb14 177 * @brief Function used to register ble data receive callback
vidyasagarbhat 10:09d1a403eb14 178 * @param none
vidyasagarbhat 10:09d1a403eb14 179 * @retval none
vidyasagarbhat 10:09d1a403eb14 180 */
vidyasagarbhat 10:09d1a403eb14 181 void ble_data_rx_cb_register(ble_data_ready_callback_t data_rx_callback)
vidyasagarbhat 10:09d1a403eb14 182 {
vidyasagarbhat 10:09d1a403eb14 183 data_ready_cb = data_rx_callback;
vidyasagarbhat 10:09d1a403eb14 184 }
jinu 15:67fbed00edf2 185
vidyasagarbhat 10:09d1a403eb14 186 /**
vidyasagarbhat 10:09d1a403eb14 187 * @brief Send data over BLE UART
vidyasagarbhat 10:09d1a403eb14 188 * @param
vidyasagarbhat 10:09d1a403eb14 189 * @retval
vidyasagarbhat 10:09d1a403eb14 190 */
vidyasagarbhat 10:09d1a403eb14 191 eStatus_t ble_send_data(uint8_t *tx_buf, uint8_t length)
vidyasagarbhat 10:09d1a403eb14 192 {
vidyasagarbhat 10:09d1a403eb14 193 eStatus_t ret_code = eSuccess;
vidyasagarbhat 10:09d1a403eb14 194 if (isDeviceConnected) {
vidyasagarbhat 10:09d1a403eb14 195 uart->write(tx_buf, length);
vidyasagarbhat 10:09d1a403eb14 196 } else {
vidyasagarbhat 10:09d1a403eb14 197 ret_code = eFailure;
vidyasagarbhat 10:09d1a403eb14 198 }
vidyasagarbhat 10:09d1a403eb14 199 return ret_code;
vidyasagarbhat 10:09d1a403eb14 200 }
jinu 15:67fbed00edf2 201
vidyasagarbhat 10:09d1a403eb14 202 /**
vidyasagarbhat 10:09d1a403eb14 203 * @brief Wait for the BLE events
vidyasagarbhat 10:09d1a403eb14 204 * @param
vidyasagarbhat 10:09d1a403eb14 205 * @retval
vidyasagarbhat 10:09d1a403eb14 206 */
vidyasagarbhat 10:09d1a403eb14 207 void ble_event_wait(void)
vidyasagarbhat 10:09d1a403eb14 208 {
vidyasagarbhat 10:09d1a403eb14 209 ble.waitForEvent();
vidyasagarbhat 10:09d1a403eb14 210 }
jinu 15:67fbed00edf2 211
vidyasagarbhat 10:09d1a403eb14 212 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 213 /* END OF FILE */
vidyasagarbhat 10:09d1a403eb14 214 /******************************************************************************/
jinu 15:67fbed00edf2 215