BLE Nano Code.Tested with Integrated mDot code

Dependencies:   BLE_API mbed nRF51822

Fork of eco_Labs_ble_Client by Happiest

Committer:
vidyasagarbhat
Date:
Tue Oct 04 11:05:45 2016 +0000
Revision:
10:09d1a403eb14
Child:
11:b8e687d97537
ble_init and message handler completed

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 */
vidyasagarbhat 10:09d1a403eb14 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"
vidyasagarbhat 10:09d1a403eb14 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)); }
vidyasagarbhat 10:09d1a403eb14 29
vidyasagarbhat 10:09d1a403eb14 30 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 31 /* Global Variables */
vidyasagarbhat 10:09d1a403eb14 32 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 33 bool isDeviceConnected = false;
vidyasagarbhat 10:09d1a403eb14 34
vidyasagarbhat 10:09d1a403eb14 35 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 36 /* Static Variable Declarations */
vidyasagarbhat 10:09d1a403eb14 37 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 38 static BLEDevice ble;
vidyasagarbhat 10:09d1a403eb14 39 static UARTService *uart;
vidyasagarbhat 10:09d1a403eb14 40 static ble_data_ready_callback_t data_ready_cb;
vidyasagarbhat 10:09d1a403eb14 41
vidyasagarbhat 10:09d1a403eb14 42 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 43 /* Static Functions */
vidyasagarbhat 10:09d1a403eb14 44 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 45 /**
vidyasagarbhat 10:09d1a403eb14 46 * @brief Device Connection callback
vidyasagarbhat 10:09d1a403eb14 47 * @param
vidyasagarbhat 10:09d1a403eb14 48 * @retval
vidyasagarbhat 10:09d1a403eb14 49 */
vidyasagarbhat 10:09d1a403eb14 50 static void ble_connectionCallback(const Gap::ConnectionCallbackParams_t *params)
vidyasagarbhat 10:09d1a403eb14 51 {
vidyasagarbhat 10:09d1a403eb14 52 isDeviceConnected = true;
vidyasagarbhat 10:09d1a403eb14 53 }
vidyasagarbhat 10:09d1a403eb14 54
vidyasagarbhat 10:09d1a403eb14 55 /**
vidyasagarbhat 10:09d1a403eb14 56 * @brief Device disconnection callback
vidyasagarbhat 10:09d1a403eb14 57 * @param
vidyasagarbhat 10:09d1a403eb14 58 * @retval
vidyasagarbhat 10:09d1a403eb14 59 */
vidyasagarbhat 10:09d1a403eb14 60 static void ble_disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params)
vidyasagarbhat 10:09d1a403eb14 61 {
vidyasagarbhat 10:09d1a403eb14 62 DEBUG("Disconnected!\n\r");
vidyasagarbhat 10:09d1a403eb14 63 DEBUG("Restarting the advertising process\n\r");
vidyasagarbhat 10:09d1a403eb14 64 isDeviceConnected = false;
vidyasagarbhat 10:09d1a403eb14 65 ble.startAdvertising();
vidyasagarbhat 10:09d1a403eb14 66 }
vidyasagarbhat 10:09d1a403eb14 67
vidyasagarbhat 10:09d1a403eb14 68 /**
vidyasagarbhat 10:09d1a403eb14 69 * @brief onDataWrittenCallback - On data received callback???
vidyasagarbhat 10:09d1a403eb14 70 * @param
vidyasagarbhat 10:09d1a403eb14 71 * @retval
vidyasagarbhat 10:09d1a403eb14 72 */
vidyasagarbhat 10:09d1a403eb14 73 static void ble_dataReceiveCallback(const GattWriteCallbackParams *params)
vidyasagarbhat 10:09d1a403eb14 74 {
vidyasagarbhat 10:09d1a403eb14 75 uint8_t buf[32] = {0};
vidyasagarbhat 10:09d1a403eb14 76 DEBUG("onDataReceiveCallback\n\r");
vidyasagarbhat 10:09d1a403eb14 77
vidyasagarbhat 10:09d1a403eb14 78 memcpy(buf, params->data, params->len);
vidyasagarbhat 10:09d1a403eb14 79
vidyasagarbhat 10:09d1a403eb14 80 if (data_ready_cb != NULL) {
vidyasagarbhat 10:09d1a403eb14 81 data_ready_cb(buf, sizeof(buf));
vidyasagarbhat 10:09d1a403eb14 82 }
vidyasagarbhat 10:09d1a403eb14 83 }
vidyasagarbhat 10:09d1a403eb14 84
vidyasagarbhat 10:09d1a403eb14 85 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 86 /* Global Functions */
vidyasagarbhat 10:09d1a403eb14 87 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 88 /**
vidyasagarbhat 10:09d1a403eb14 89 * @brief Initializes the BLE module
vidyasagarbhat 10:09d1a403eb14 90 * @param none
vidyasagarbhat 10:09d1a403eb14 91 * @retval none
vidyasagarbhat 10:09d1a403eb14 92 */
vidyasagarbhat 10:09d1a403eb14 93 void ble_init(void)
vidyasagarbhat 10:09d1a403eb14 94 {
vidyasagarbhat 10:09d1a403eb14 95 DEBUG("Initialising the nRF51822\n\r");
vidyasagarbhat 10:09d1a403eb14 96 ble.init();
vidyasagarbhat 10:09d1a403eb14 97 ble.onConnection(ble_connectionCallback);
vidyasagarbhat 10:09d1a403eb14 98 ble.onDisconnection(ble_disconnectionCallback);
vidyasagarbhat 10:09d1a403eb14 99 ble.onDataWritten(ble_dataReceiveCallback);
vidyasagarbhat 10:09d1a403eb14 100
vidyasagarbhat 10:09d1a403eb14 101 uart = new UARTService(ble);
vidyasagarbhat 10:09d1a403eb14 102
vidyasagarbhat 10:09d1a403eb14 103 /* setup advertising */
vidyasagarbhat 10:09d1a403eb14 104 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED);
vidyasagarbhat 10:09d1a403eb14 105 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
vidyasagarbhat 10:09d1a403eb14 106 ble.accumulateAdvertisingPayload(GapAdvertisingData::SHORTENED_LOCAL_NAME,
vidyasagarbhat 10:09d1a403eb14 107 (const uint8_t *)"BLE UART", sizeof("BLE UART") - 1);
vidyasagarbhat 10:09d1a403eb14 108 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_128BIT_SERVICE_IDS,
vidyasagarbhat 10:09d1a403eb14 109 (const uint8_t *)UARTServiceUUID_reversed, sizeof(UARTServiceUUID_reversed));
vidyasagarbhat 10:09d1a403eb14 110
vidyasagarbhat 10:09d1a403eb14 111 ble.setAdvertisingInterval(160); /* 100ms; in multiples of 0.625ms. */
vidyasagarbhat 10:09d1a403eb14 112 ble.startAdvertising();
vidyasagarbhat 10:09d1a403eb14 113 }
vidyasagarbhat 10:09d1a403eb14 114
vidyasagarbhat 10:09d1a403eb14 115 /**
vidyasagarbhat 10:09d1a403eb14 116 * @brief Function used to register ble data receive callback
vidyasagarbhat 10:09d1a403eb14 117 * @param none
vidyasagarbhat 10:09d1a403eb14 118 * @retval none
vidyasagarbhat 10:09d1a403eb14 119 */
vidyasagarbhat 10:09d1a403eb14 120 void ble_data_rx_cb_register(ble_data_ready_callback_t data_rx_callback)
vidyasagarbhat 10:09d1a403eb14 121 {
vidyasagarbhat 10:09d1a403eb14 122 data_ready_cb = data_rx_callback;
vidyasagarbhat 10:09d1a403eb14 123 }
vidyasagarbhat 10:09d1a403eb14 124
vidyasagarbhat 10:09d1a403eb14 125 /**
vidyasagarbhat 10:09d1a403eb14 126 * @brief Send data over BLE UART
vidyasagarbhat 10:09d1a403eb14 127 * @param
vidyasagarbhat 10:09d1a403eb14 128 * @retval
vidyasagarbhat 10:09d1a403eb14 129 */
vidyasagarbhat 10:09d1a403eb14 130 eStatus_t ble_send_data(uint8_t *tx_buf, uint8_t length)
vidyasagarbhat 10:09d1a403eb14 131 {
vidyasagarbhat 10:09d1a403eb14 132 eStatus_t ret_code = eSuccess;
vidyasagarbhat 10:09d1a403eb14 133 if (isDeviceConnected) {
vidyasagarbhat 10:09d1a403eb14 134 uart->write(tx_buf, length);
vidyasagarbhat 10:09d1a403eb14 135 } else {
vidyasagarbhat 10:09d1a403eb14 136 ret_code = eFailure;
vidyasagarbhat 10:09d1a403eb14 137 }
vidyasagarbhat 10:09d1a403eb14 138 return ret_code;
vidyasagarbhat 10:09d1a403eb14 139 }
vidyasagarbhat 10:09d1a403eb14 140
vidyasagarbhat 10:09d1a403eb14 141 /**
vidyasagarbhat 10:09d1a403eb14 142 * @brief Wait for the BLE events
vidyasagarbhat 10:09d1a403eb14 143 * @param
vidyasagarbhat 10:09d1a403eb14 144 * @retval
vidyasagarbhat 10:09d1a403eb14 145 */
vidyasagarbhat 10:09d1a403eb14 146 void ble_event_wait(void)
vidyasagarbhat 10:09d1a403eb14 147 {
vidyasagarbhat 10:09d1a403eb14 148 ble.waitForEvent();
vidyasagarbhat 10:09d1a403eb14 149 }
vidyasagarbhat 10:09d1a403eb14 150
vidyasagarbhat 10:09d1a403eb14 151 /******************************************************************************/
vidyasagarbhat 10:09d1a403eb14 152 /* END OF FILE */
vidyasagarbhat 10:09d1a403eb14 153 /******************************************************************************/