Bizan Nishimura / BLE_API

Dependents:   MiniSteer_BLE

Fork of BLE_API by Bluetooth Low Energy

Committer:
ktownsend
Date:
Mon Dec 16 12:46:12 2013 +0000
Revision:
7:5e1f0d7f7c7d
Parent:
3:46de446e82ed
Child:
9:124ae067ae27
More GAP cleanup (Scan Response, etc.)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ktownsend 0:ace2e8d3ce79 1 #include "nrf51822.h"
ktownsend 0:ace2e8d3ce79 2 #include "mbed.h"
ktownsend 0:ace2e8d3ce79 3
ktownsend 0:ace2e8d3ce79 4 /**************************************************************************/
ktownsend 0:ace2e8d3ce79 5 /*!
ktownsend 0:ace2e8d3ce79 6 @brief UART callback function
ktownsend 0:ace2e8d3ce79 7 */
ktownsend 0:ace2e8d3ce79 8 /**************************************************************************/
ktownsend 0:ace2e8d3ce79 9 void nRF51822::uartCallback(void)
ktownsend 0:ace2e8d3ce79 10 {
ktownsend 0:ace2e8d3ce79 11 /* ToDo: Check responses and set a flag for success/error/etc. */
ktownsend 0:ace2e8d3ce79 12
ktownsend 0:ace2e8d3ce79 13 /* Read serial to clear the RX interrupt */
ktownsend 0:ace2e8d3ce79 14 uart.getc();
ktownsend 0:ace2e8d3ce79 15 }
ktownsend 0:ace2e8d3ce79 16
ktownsend 0:ace2e8d3ce79 17 /**************************************************************************/
ktownsend 0:ace2e8d3ce79 18 /*!
ktownsend 0:ace2e8d3ce79 19 @brief Constructor
ktownsend 0:ace2e8d3ce79 20 */
ktownsend 0:ace2e8d3ce79 21 /**************************************************************************/
ktownsend 1:fd3ec64b2345 22 nRF51822::nRF51822() : uart(p9, p10) /* LPC1768 using apps board */
ktownsend 0:ace2e8d3ce79 23 {
ktownsend 0:ace2e8d3ce79 24 /* Setup the nRF UART interface */
ktownsend 0:ace2e8d3ce79 25 uart.baud(9600);
ktownsend 2:ffc5216bd2cc 26
ktownsend 0:ace2e8d3ce79 27 /* Echo data on the debug CDC port */
ktownsend 0:ace2e8d3ce79 28 uart.attach(this, &nRF51822::uartCallback);
ktownsend 0:ace2e8d3ce79 29
ktownsend 0:ace2e8d3ce79 30 /* Add flow control for UART (required by the nRF51822) */
ktownsend 1:fd3ec64b2345 31 uart.set_flow_control(Serial::RTSCTS, p30, p29); /* LPC1768 */
ktownsend 2:ffc5216bd2cc 32
ktownsend 0:ace2e8d3ce79 33 /* Reset the service counter */
ktownsend 0:ace2e8d3ce79 34 serviceCount = 0;
ktownsend 0:ace2e8d3ce79 35 }
ktownsend 0:ace2e8d3ce79 36
ktownsend 0:ace2e8d3ce79 37 /**************************************************************************/
ktownsend 0:ace2e8d3ce79 38 /*!
ktownsend 0:ace2e8d3ce79 39 @brief Destructor
ktownsend 0:ace2e8d3ce79 40 */
ktownsend 0:ace2e8d3ce79 41 /**************************************************************************/
ktownsend 0:ace2e8d3ce79 42 nRF51822::~nRF51822(void)
ktownsend 0:ace2e8d3ce79 43 {
ktownsend 0:ace2e8d3ce79 44 }
ktownsend 0:ace2e8d3ce79 45
ktownsend 0:ace2e8d3ce79 46 /**************************************************************************/
ktownsend 0:ace2e8d3ce79 47 /*!
ktownsend 0:ace2e8d3ce79 48
ktownsend 0:ace2e8d3ce79 49 */
ktownsend 0:ace2e8d3ce79 50 /**************************************************************************/
ktownsend 2:ffc5216bd2cc 51 void nRF51822::test(void)
ktownsend 2:ffc5216bd2cc 52 {
ktownsend 2:ffc5216bd2cc 53 /* Send iBeacon data as a test */
ktownsend 2:ffc5216bd2cc 54 uart.printf("10 0a 00 1e 02 01 04 1A FF 4C 00 02 15 E2 0A 39 F4 73 F5 4B C4 A1 2F 17 D1 AD 07 A9 61 00 00 00 00 C8\r\n");
ktownsend 3:46de446e82ed 55 /* ToDo: Check response */
ktownsend 2:ffc5216bd2cc 56 wait(0.1);
ktownsend 3:46de446e82ed 57
ktownsend 2:ffc5216bd2cc 58 /* Start the radio */
ktownsend 2:ffc5216bd2cc 59 uart.printf("10 03 00 00\r\n");
ktownsend 3:46de446e82ed 60 /* ToDo: Check response */
ktownsend 3:46de446e82ed 61 wait(0.1);
ktownsend 2:ffc5216bd2cc 62 }
ktownsend 0:ace2e8d3ce79 63
ktownsend 0:ace2e8d3ce79 64 /**************************************************************************/
ktownsend 0:ace2e8d3ce79 65 /*!
ktownsend 7:5e1f0d7f7c7d 66 @brief Sets the advertising parameters and payload for the device
ktownsend 0:ace2e8d3ce79 67
ktownsend 7:5e1f0d7f7c7d 68 @param[in] params
ktownsend 7:5e1f0d7f7c7d 69 Basic advertising details, including the advertising
ktownsend 7:5e1f0d7f7c7d 70 delay, timeout and how the device should be advertised
ktownsend 7:5e1f0d7f7c7d 71 @params[in] advData
ktownsend 7:5e1f0d7f7c7d 72 The primary advertising data payload
ktownsend 7:5e1f0d7f7c7d 73 @params[in] scanResponse
ktownsend 7:5e1f0d7f7c7d 74 The optional Scan Response payload if the advertising
ktownsend 7:5e1f0d7f7c7d 75 type is set to \ref GapAdvertisingParams::ADV_SCANNABLE_UNDIRECTED
ktownsend 7:5e1f0d7f7c7d 76 in \ref GapAdveritinngParams
ktownsend 7:5e1f0d7f7c7d 77
ktownsend 7:5e1f0d7f7c7d 78 @returns ble_error_t
ktownsend 7:5e1f0d7f7c7d 79
ktownsend 7:5e1f0d7f7c7d 80 @retval BLE_ERROR_NONE
ktownsend 7:5e1f0d7f7c7d 81 Everything executed properly
ktownsend 7:5e1f0d7f7c7d 82
ktownsend 7:5e1f0d7f7c7d 83 @retval BLE_ERROR_BUFFER_OVERFLOW
ktownsend 7:5e1f0d7f7c7d 84 The proposed action would cause a buffer overflow. All
ktownsend 7:5e1f0d7f7c7d 85 advertising payloads must be <= 31 bytes.
ktownsend 7:5e1f0d7f7c7d 86
ktownsend 7:5e1f0d7f7c7d 87 @section EXAMPLE
ktownsend 7:5e1f0d7f7c7d 88
ktownsend 7:5e1f0d7f7c7d 89 @code
ktownsend 7:5e1f0d7f7c7d 90
ktownsend 7:5e1f0d7f7c7d 91 @endcode
ktownsend 0:ace2e8d3ce79 92 */
ktownsend 0:ace2e8d3ce79 93 /**************************************************************************/
ktownsend 7:5e1f0d7f7c7d 94 ble_error_t nRF51822::setAdvertising(GapAdvertisingParams & params, GapAdvertisingData & advData, GapAdvertisingData & scanResponse)
ktownsend 2:ffc5216bd2cc 95 {
ktownsend 7:5e1f0d7f7c7d 96 uint8_t len = 0;
ktownsend 7:5e1f0d7f7c7d 97 uint8_t *buffer;
ktownsend 7:5e1f0d7f7c7d 98
ktownsend 7:5e1f0d7f7c7d 99 /* ToDo: Send advertising params, Command ID = 0x000x */
ktownsend 7:5e1f0d7f7c7d 100
ktownsend 7:5e1f0d7f7c7d 101 /* Send advertising data, Command ID = 0x000A */
ktownsend 7:5e1f0d7f7c7d 102 len = advData.getPayloadLen();
ktownsend 7:5e1f0d7f7c7d 103 buffer = advData.getPayload();
ktownsend 7:5e1f0d7f7c7d 104
ktownsend 7:5e1f0d7f7c7d 105 if (len > GAP_ADVERTISING_DATA_MAX_PAYLOAD)
ktownsend 7:5e1f0d7f7c7d 106 {
ktownsend 7:5e1f0d7f7c7d 107 return BLE_ERROR_BUFFER_OVERFLOW;
ktownsend 7:5e1f0d7f7c7d 108 }
ktownsend 7:5e1f0d7f7c7d 109
ktownsend 7:5e1f0d7f7c7d 110 uart.printf("10 0A 00 %02X ", len);
ktownsend 7:5e1f0d7f7c7d 111 for (uint16_t i = 0; i < len; i++)
ktownsend 7:5e1f0d7f7c7d 112 {
ktownsend 7:5e1f0d7f7c7d 113 uart.printf(" %02X", buffer[i]);
ktownsend 7:5e1f0d7f7c7d 114 }
ktownsend 7:5e1f0d7f7c7d 115 uart.printf("\r\n");
ktownsend 7:5e1f0d7f7c7d 116
ktownsend 7:5e1f0d7f7c7d 117 /* ToDo: Check response */
ktownsend 7:5e1f0d7f7c7d 118 wait(0.1);
ktownsend 7:5e1f0d7f7c7d 119
ktownsend 7:5e1f0d7f7c7d 120 /* Send scan response data, Command ID = 0x000x */
ktownsend 7:5e1f0d7f7c7d 121 if ((params.getAdvertisingType() == GapAdvertisingParams::ADV_SCANNABLE_UNDIRECTED))
ktownsend 7:5e1f0d7f7c7d 122 {
ktownsend 7:5e1f0d7f7c7d 123 len = advData.getPayloadLen();
ktownsend 7:5e1f0d7f7c7d 124 buffer = advData.getPayload();
ktownsend 7:5e1f0d7f7c7d 125
ktownsend 7:5e1f0d7f7c7d 126 if (len > GAP_ADVERTISING_DATA_MAX_PAYLOAD)
ktownsend 7:5e1f0d7f7c7d 127 {
ktownsend 7:5e1f0d7f7c7d 128 return BLE_ERROR_BUFFER_OVERFLOW;
ktownsend 7:5e1f0d7f7c7d 129 }
ktownsend 7:5e1f0d7f7c7d 130
ktownsend 7:5e1f0d7f7c7d 131 uart.printf("10 0A 00 %02X ", len);
ktownsend 7:5e1f0d7f7c7d 132 for (uint16_t i = 0; i < len; i++)
ktownsend 7:5e1f0d7f7c7d 133 {
ktownsend 7:5e1f0d7f7c7d 134 uart.printf(" %02X", buffer[i]);
ktownsend 7:5e1f0d7f7c7d 135 }
ktownsend 7:5e1f0d7f7c7d 136 uart.printf("\r\n");
ktownsend 7:5e1f0d7f7c7d 137
ktownsend 7:5e1f0d7f7c7d 138 /* ToDo: Check response */
ktownsend 7:5e1f0d7f7c7d 139 wait(0.1);
ktownsend 7:5e1f0d7f7c7d 140 }
ktownsend 7:5e1f0d7f7c7d 141
ktownsend 2:ffc5216bd2cc 142 return BLE_ERROR_NONE;
ktownsend 2:ffc5216bd2cc 143 }
ktownsend 2:ffc5216bd2cc 144
ktownsend 2:ffc5216bd2cc 145 /**************************************************************************/
ktownsend 2:ffc5216bd2cc 146 /*!
ktownsend 7:5e1f0d7f7c7d 147 @brief Adds a new service to the GATT table on the peripheral
ktownsend 7:5e1f0d7f7c7d 148
ktownsend 7:5e1f0d7f7c7d 149 @returns ble_error_t
ktownsend 7:5e1f0d7f7c7d 150
ktownsend 7:5e1f0d7f7c7d 151 @retval BLE_ERROR_NONE
ktownsend 7:5e1f0d7f7c7d 152 Everything executed properly
ktownsend 7:5e1f0d7f7c7d 153
ktownsend 7:5e1f0d7f7c7d 154 @section EXAMPLE
ktownsend 2:ffc5216bd2cc 155
ktownsend 7:5e1f0d7f7c7d 156 @code
ktownsend 7:5e1f0d7f7c7d 157
ktownsend 7:5e1f0d7f7c7d 158 @endcode
ktownsend 2:ffc5216bd2cc 159 */
ktownsend 2:ffc5216bd2cc 160 /**************************************************************************/
ktownsend 2:ffc5216bd2cc 161 ble_error_t nRF51822::addService(GattService & service)
ktownsend 0:ace2e8d3ce79 162 {
ktownsend 0:ace2e8d3ce79 163 /* ToDo: Make sure we don't overflow the array, etc. */
ktownsend 0:ace2e8d3ce79 164 /* ToDo: Make sure this service UUID doesn't already exist (?) */
ktownsend 0:ace2e8d3ce79 165 /* ToDo: Basic validation */
ktownsend 0:ace2e8d3ce79 166
ktownsend 0:ace2e8d3ce79 167 /* Add the service to the nRF51 */
ktownsend 0:ace2e8d3ce79 168 if (service.primaryServiceID.type == UUID::UUID_TYPE_SHORT)
ktownsend 0:ace2e8d3ce79 169 {
ktownsend 0:ace2e8d3ce79 170 /* 16-bit BLE UUID */
ktownsend 0:ace2e8d3ce79 171 uart.printf("10 01 00 04 01 02 %02X %02X\r\n",
ktownsend 0:ace2e8d3ce79 172 service.primaryServiceID.value & 0xFF,
ktownsend 0:ace2e8d3ce79 173 service.primaryServiceID.value >> 8);
ktownsend 0:ace2e8d3ce79 174 }
ktownsend 0:ace2e8d3ce79 175 else
ktownsend 0:ace2e8d3ce79 176 {
ktownsend 0:ace2e8d3ce79 177 /* 128-bit Custom UUID */
ktownsend 0:ace2e8d3ce79 178 uart.printf("10 01 00 12 01 10 %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X %02X\r\n",
ktownsend 0:ace2e8d3ce79 179 service.primaryServiceID.base[0],
ktownsend 0:ace2e8d3ce79 180 service.primaryServiceID.base[1],
ktownsend 0:ace2e8d3ce79 181 service.primaryServiceID.base[2],
ktownsend 0:ace2e8d3ce79 182 service.primaryServiceID.base[3],
ktownsend 0:ace2e8d3ce79 183 service.primaryServiceID.base[4],
ktownsend 0:ace2e8d3ce79 184 service.primaryServiceID.base[5],
ktownsend 0:ace2e8d3ce79 185 service.primaryServiceID.base[6],
ktownsend 0:ace2e8d3ce79 186 service.primaryServiceID.base[7],
ktownsend 0:ace2e8d3ce79 187 service.primaryServiceID.base[8],
ktownsend 0:ace2e8d3ce79 188 service.primaryServiceID.base[9],
ktownsend 0:ace2e8d3ce79 189 service.primaryServiceID.base[10],
ktownsend 0:ace2e8d3ce79 190 service.primaryServiceID.base[11],
ktownsend 0:ace2e8d3ce79 191 service.primaryServiceID.base[12],
ktownsend 0:ace2e8d3ce79 192 service.primaryServiceID.base[13],
ktownsend 0:ace2e8d3ce79 193 service.primaryServiceID.base[14],
ktownsend 0:ace2e8d3ce79 194 service.primaryServiceID.base[15]);
ktownsend 0:ace2e8d3ce79 195 }
ktownsend 0:ace2e8d3ce79 196
ktownsend 0:ace2e8d3ce79 197 /* ToDo: Check response */
ktownsend 0:ace2e8d3ce79 198 wait(0.1);
ktownsend 0:ace2e8d3ce79 199
ktownsend 0:ace2e8d3ce79 200 /* Add characteristics to the service */
ktownsend 0:ace2e8d3ce79 201 for (uint8_t i = 0; i < service.characteristicCount; i++)
ktownsend 0:ace2e8d3ce79 202 {
ktownsend 0:ace2e8d3ce79 203 /* Command ID = 0x0002 */
ktownsend 0:ace2e8d3ce79 204 uart.printf("10 02 00 0F 01 02 %02X %02X 04 02 %02X %02X 05 02 %02X %02X 03 01 %02X\r\n",
ktownsend 0:ace2e8d3ce79 205 service.characteristics[i].id & 0xFF,
ktownsend 0:ace2e8d3ce79 206 service.characteristics[i].id >> 8,
ktownsend 0:ace2e8d3ce79 207 service.characteristics[i].lenMin & 0xFF,
ktownsend 0:ace2e8d3ce79 208 service.characteristics[i].lenMin >> 8,
ktownsend 0:ace2e8d3ce79 209 service.characteristics[i].lenMax & 0xFF,
ktownsend 0:ace2e8d3ce79 210 service.characteristics[i].lenMax >> 8,
ktownsend 0:ace2e8d3ce79 211 service.characteristics[i].properties);
ktownsend 0:ace2e8d3ce79 212
ktownsend 0:ace2e8d3ce79 213 /* ToDo: Check response */
ktownsend 0:ace2e8d3ce79 214 wait(0.1);
ktownsend 0:ace2e8d3ce79 215 }
ktownsend 0:ace2e8d3ce79 216
ktownsend 0:ace2e8d3ce79 217 /* Update the service index value */
ktownsend 0:ace2e8d3ce79 218 service.index = serviceCount;
ktownsend 0:ace2e8d3ce79 219 serviceCount++;
ktownsend 0:ace2e8d3ce79 220
ktownsend 0:ace2e8d3ce79 221 return BLE_ERROR_NONE;
ktownsend 0:ace2e8d3ce79 222 }
ktownsend 0:ace2e8d3ce79 223
ktownsend 0:ace2e8d3ce79 224 /**************************************************************************/
ktownsend 0:ace2e8d3ce79 225 /*!
ktownsend 2:ffc5216bd2cc 226 @brief Reads the value of a characteristic, based on the service
ktownsend 2:ffc5216bd2cc 227 and characteristic index fields
ktownsend 2:ffc5216bd2cc 228
ktownsend 2:ffc5216bd2cc 229 @param[in] service
ktownsend 2:ffc5216bd2cc 230 The GattService to read from
ktownsend 2:ffc5216bd2cc 231 @param[in] characteristic
ktownsend 2:ffc5216bd2cc 232 The GattCharacteristic to read from
ktownsend 2:ffc5216bd2cc 233 @param[in] buffer
ktownsend 2:ffc5216bd2cc 234 Buffer to hold the the characteristic's value
ktownsend 2:ffc5216bd2cc 235 (raw byte array in LSB format)
ktownsend 2:ffc5216bd2cc 236 @param[in] len
ktownsend 2:ffc5216bd2cc 237 The number of bytes read into the buffer
ktownsend 7:5e1f0d7f7c7d 238
ktownsend 7:5e1f0d7f7c7d 239 @returns ble_error_t
ktownsend 7:5e1f0d7f7c7d 240
ktownsend 7:5e1f0d7f7c7d 241 @retval BLE_ERROR_NONE
ktownsend 7:5e1f0d7f7c7d 242 Everything executed properly
ktownsend 7:5e1f0d7f7c7d 243
ktownsend 7:5e1f0d7f7c7d 244 @section EXAMPLE
ktownsend 7:5e1f0d7f7c7d 245
ktownsend 7:5e1f0d7f7c7d 246 @code
ktownsend 7:5e1f0d7f7c7d 247
ktownsend 7:5e1f0d7f7c7d 248 @endcode
ktownsend 2:ffc5216bd2cc 249 */
ktownsend 2:ffc5216bd2cc 250 /**************************************************************************/
ktownsend 2:ffc5216bd2cc 251 ble_error_t nRF51822::readCharacteristic(GattService &service, GattCharacteristic &characteristic, uint8_t buffer[], uint16_t len)
ktownsend 2:ffc5216bd2cc 252 {
ktownsend 2:ffc5216bd2cc 253 /* ToDo */
ktownsend 2:ffc5216bd2cc 254
ktownsend 2:ffc5216bd2cc 255 return BLE_ERROR_NONE;
ktownsend 2:ffc5216bd2cc 256 }
ktownsend 2:ffc5216bd2cc 257
ktownsend 2:ffc5216bd2cc 258 /**************************************************************************/
ktownsend 2:ffc5216bd2cc 259 /*!
ktownsend 0:ace2e8d3ce79 260 @brief Updates the value of a characteristic, based on the service
ktownsend 0:ace2e8d3ce79 261 and characteristic index fields
ktownsend 0:ace2e8d3ce79 262
ktownsend 2:ffc5216bd2cc 263 @param[in] service
ktownsend 2:ffc5216bd2cc 264 The GattService to write to
ktownsend 2:ffc5216bd2cc 265 @param[in] characteristic
ktownsend 2:ffc5216bd2cc 266 The GattCharacteristic to write to
ktownsend 0:ace2e8d3ce79 267 @param[in] buffer
ktownsend 0:ace2e8d3ce79 268 Data to use when updating the characteristic's value
ktownsend 0:ace2e8d3ce79 269 (raw byte array in LSB format)
ktownsend 0:ace2e8d3ce79 270 @param[in] len
ktownsend 0:ace2e8d3ce79 271 The number of bytes in buffer
ktownsend 7:5e1f0d7f7c7d 272
ktownsend 7:5e1f0d7f7c7d 273 @returns ble_error_t
ktownsend 7:5e1f0d7f7c7d 274
ktownsend 7:5e1f0d7f7c7d 275 @retval BLE_ERROR_NONE
ktownsend 7:5e1f0d7f7c7d 276 Everything executed properly
ktownsend 7:5e1f0d7f7c7d 277
ktownsend 7:5e1f0d7f7c7d 278 @section EXAMPLE
ktownsend 7:5e1f0d7f7c7d 279
ktownsend 7:5e1f0d7f7c7d 280 @code
ktownsend 7:5e1f0d7f7c7d 281
ktownsend 7:5e1f0d7f7c7d 282 @endcode
ktownsend 0:ace2e8d3ce79 283 */
ktownsend 0:ace2e8d3ce79 284 /**************************************************************************/
ktownsend 2:ffc5216bd2cc 285 ble_error_t nRF51822::writeCharacteristic(GattService &service, GattCharacteristic &characteristic, uint8_t buffer[], uint16_t len)
ktownsend 0:ace2e8d3ce79 286 {
ktownsend 0:ace2e8d3ce79 287 /* Command ID = 0x0006, Payload = Service ID, Characteristic ID, Value */
ktownsend 2:ffc5216bd2cc 288 uart.printf("10 06 00 %02X %02X %02X", len + 2, characteristic.index, service.index);
ktownsend 0:ace2e8d3ce79 289 for (uint16_t i = 0; i<len; i++)
ktownsend 0:ace2e8d3ce79 290 {
ktownsend 0:ace2e8d3ce79 291 uart.printf(" %02X", buffer[i]);
ktownsend 0:ace2e8d3ce79 292 }
ktownsend 0:ace2e8d3ce79 293 uart.printf("\r\n");
ktownsend 0:ace2e8d3ce79 294
ktownsend 0:ace2e8d3ce79 295 /* ToDo: Check response */
ktownsend 0:ace2e8d3ce79 296 wait(0.1);
ktownsend 0:ace2e8d3ce79 297
ktownsend 0:ace2e8d3ce79 298 return BLE_ERROR_NONE;
ktownsend 0:ace2e8d3ce79 299 }
ktownsend 0:ace2e8d3ce79 300
ktownsend 0:ace2e8d3ce79 301 /**************************************************************************/
ktownsend 0:ace2e8d3ce79 302 /*!
ktownsend 0:ace2e8d3ce79 303 @brief Starts the BLE HW, initialising any services that were
ktownsend 0:ace2e8d3ce79 304 added before this function was called.
ktownsend 0:ace2e8d3ce79 305
ktownsend 0:ace2e8d3ce79 306 @note All services must be added before calling this function!
ktownsend 7:5e1f0d7f7c7d 307
ktownsend 7:5e1f0d7f7c7d 308 @returns ble_error_t
ktownsend 7:5e1f0d7f7c7d 309
ktownsend 7:5e1f0d7f7c7d 310 @retval BLE_ERROR_NONE
ktownsend 7:5e1f0d7f7c7d 311 Everything executed properly
ktownsend 7:5e1f0d7f7c7d 312
ktownsend 7:5e1f0d7f7c7d 313 @section EXAMPLE
ktownsend 7:5e1f0d7f7c7d 314
ktownsend 7:5e1f0d7f7c7d 315 @code
ktownsend 7:5e1f0d7f7c7d 316
ktownsend 7:5e1f0d7f7c7d 317 @endcode
ktownsend 0:ace2e8d3ce79 318 */
ktownsend 0:ace2e8d3ce79 319 /**************************************************************************/
ktownsend 0:ace2e8d3ce79 320 ble_error_t nRF51822::start(void)
ktownsend 0:ace2e8d3ce79 321 {
ktownsend 0:ace2e8d3ce79 322 /* Command ID = 0x0003, No payload */
ktownsend 0:ace2e8d3ce79 323 uart.printf("10 03 00 00\r\n");
ktownsend 0:ace2e8d3ce79 324
ktownsend 0:ace2e8d3ce79 325 /* ToDo: Check response */
ktownsend 0:ace2e8d3ce79 326 wait(0.5);
ktownsend 0:ace2e8d3ce79 327
ktownsend 0:ace2e8d3ce79 328 return BLE_ERROR_NONE;
ktownsend 0:ace2e8d3ce79 329 }
ktownsend 0:ace2e8d3ce79 330
ktownsend 0:ace2e8d3ce79 331 /**************************************************************************/
ktownsend 0:ace2e8d3ce79 332 /*!
ktownsend 0:ace2e8d3ce79 333 @brief Stops the BLE HW and disconnects from any devices
ktownsend 7:5e1f0d7f7c7d 334
ktownsend 7:5e1f0d7f7c7d 335 @returns ble_error_t
ktownsend 7:5e1f0d7f7c7d 336
ktownsend 7:5e1f0d7f7c7d 337 @retval BLE_ERROR_NONE
ktownsend 7:5e1f0d7f7c7d 338 Everything executed properly
ktownsend 7:5e1f0d7f7c7d 339
ktownsend 7:5e1f0d7f7c7d 340 @section EXAMPLE
ktownsend 7:5e1f0d7f7c7d 341
ktownsend 7:5e1f0d7f7c7d 342 @code
ktownsend 7:5e1f0d7f7c7d 343
ktownsend 7:5e1f0d7f7c7d 344 @endcode
ktownsend 0:ace2e8d3ce79 345 */
ktownsend 0:ace2e8d3ce79 346 /**************************************************************************/
ktownsend 0:ace2e8d3ce79 347 ble_error_t nRF51822::stop(void)
ktownsend 0:ace2e8d3ce79 348 {
ktownsend 0:ace2e8d3ce79 349 /* Command ID = 0x0004, No payload */
ktownsend 0:ace2e8d3ce79 350 uart.printf("10 04 00 00\r\n");
ktownsend 0:ace2e8d3ce79 351
ktownsend 0:ace2e8d3ce79 352 /* ToDo: Check response */
ktownsend 0:ace2e8d3ce79 353 wait(0.1);
ktownsend 0:ace2e8d3ce79 354
ktownsend 0:ace2e8d3ce79 355 return BLE_ERROR_NONE;
ktownsend 0:ace2e8d3ce79 356 }
ktownsend 0:ace2e8d3ce79 357
ktownsend 0:ace2e8d3ce79 358 /**************************************************************************/
ktownsend 0:ace2e8d3ce79 359 /*!
ktownsend 0:ace2e8d3ce79 360 @brief Resets the BLE HW, removing any existing services and
ktownsend 0:ace2e8d3ce79 361 characteristics
ktownsend 7:5e1f0d7f7c7d 362
ktownsend 7:5e1f0d7f7c7d 363 @returns ble_error_t
ktownsend 7:5e1f0d7f7c7d 364
ktownsend 7:5e1f0d7f7c7d 365 @retval BLE_ERROR_NONE
ktownsend 7:5e1f0d7f7c7d 366 Everything executed properly
ktownsend 7:5e1f0d7f7c7d 367
ktownsend 7:5e1f0d7f7c7d 368 @section EXAMPLE
ktownsend 7:5e1f0d7f7c7d 369
ktownsend 7:5e1f0d7f7c7d 370 @code
ktownsend 7:5e1f0d7f7c7d 371
ktownsend 7:5e1f0d7f7c7d 372 @endcode
ktownsend 0:ace2e8d3ce79 373 */
ktownsend 0:ace2e8d3ce79 374 /**************************************************************************/
ktownsend 0:ace2e8d3ce79 375 ble_error_t nRF51822::reset(void)
ktownsend 0:ace2e8d3ce79 376 {
ktownsend 0:ace2e8d3ce79 377 /* Command ID = 0x0005, No payload */
ktownsend 0:ace2e8d3ce79 378 uart.printf("10 05 00 00\r\n");
ktownsend 0:ace2e8d3ce79 379
ktownsend 0:ace2e8d3ce79 380 /* Reset the service counter */
ktownsend 0:ace2e8d3ce79 381 serviceCount = 0;
ktownsend 0:ace2e8d3ce79 382
ktownsend 0:ace2e8d3ce79 383 /* Wait for the radio to come back up */
ktownsend 0:ace2e8d3ce79 384 wait(1);
ktownsend 0:ace2e8d3ce79 385
ktownsend 0:ace2e8d3ce79 386 return BLE_ERROR_NONE;
ktownsend 0:ace2e8d3ce79 387 }