Fork of BLE_SecureHeartRate : should this 'work' i.e. require a secure connection on an nRF51-DK? Hopefully I'm just missing something obvious - or is this broken?

Dependencies:   BLE_API mbed nRF51822

Fork of BLE_SecureHeartRate by Bluetooth Low Energy

Committer:
sunsmile2015
Date:
Tue Jun 02 08:09:51 2015 +0000
Revision:
0:4f367a344480
Child:
1:52c48814da8e
First try

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sunsmile2015 0:4f367a344480 1 /* mbed Microcontroller Library
sunsmile2015 0:4f367a344480 2 * Copyright (c) 2006-2013 ARM Limited
sunsmile2015 0:4f367a344480 3 *
sunsmile2015 0:4f367a344480 4 * Licensed under the Apache License, Version 2.0 (the "License");
sunsmile2015 0:4f367a344480 5 * you may not use this file except in compliance with the License.
sunsmile2015 0:4f367a344480 6 * You may obtain a copy of the License at
sunsmile2015 0:4f367a344480 7 *
sunsmile2015 0:4f367a344480 8 * http://www.apache.org/licenses/LICENSE-2.0
sunsmile2015 0:4f367a344480 9 *
sunsmile2015 0:4f367a344480 10 * Unless required by applicable law or agreed to in writing, software
sunsmile2015 0:4f367a344480 11 * distributed under the License is distributed on an "AS IS" BASIS,
sunsmile2015 0:4f367a344480 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
sunsmile2015 0:4f367a344480 13 * See the License for the specific language governing permissions and
sunsmile2015 0:4f367a344480 14 * limitations under the License.
sunsmile2015 0:4f367a344480 15 */
sunsmile2015 0:4f367a344480 16
sunsmile2015 0:4f367a344480 17 #include "mbed.h"
sunsmile2015 0:4f367a344480 18 #include "BLEDevice.h"
sunsmile2015 0:4f367a344480 19 #include "HeartRateService.h"
sunsmile2015 0:4f367a344480 20 #include "DeviceInformationService.h"
sunsmile2015 0:4f367a344480 21
sunsmile2015 0:4f367a344480 22 /* Enable the following if you need to throttle the connection interval. This has
sunsmile2015 0:4f367a344480 23 * the effect of reducing energy consumption after a connection is made;
sunsmile2015 0:4f367a344480 24 * particularly for applications where the central may want a fast connection
sunsmile2015 0:4f367a344480 25 * interval.*/
sunsmile2015 0:4f367a344480 26 #define UPDATE_PARAMS_FOR_LONGER_CONNECTION_INTERVAL 0
sunsmile2015 0:4f367a344480 27
sunsmile2015 0:4f367a344480 28 BLEDevice ble;
sunsmile2015 0:4f367a344480 29 DigitalOut led1(LED1);
sunsmile2015 0:4f367a344480 30
sunsmile2015 0:4f367a344480 31 const static char DEVICE_NAME[] = "HRM1";
sunsmile2015 0:4f367a344480 32 static const uint16_t uuid16_list[] = {GattService::UUID_HEART_RATE_SERVICE,
sunsmile2015 0:4f367a344480 33 GattService::UUID_DEVICE_INFORMATION_SERVICE};
sunsmile2015 0:4f367a344480 34 static volatile bool triggerSensorPolling = false;
sunsmile2015 0:4f367a344480 35
sunsmile2015 0:4f367a344480 36 void disconnectionCallback(Gap::Handle_t handle, Gap::DisconnectionReason_t reason)
sunsmile2015 0:4f367a344480 37 {
sunsmile2015 0:4f367a344480 38 ble.startAdvertising(); // restart advertising
sunsmile2015 0:4f367a344480 39 }
sunsmile2015 0:4f367a344480 40
sunsmile2015 0:4f367a344480 41 void periodicCallback(void)
sunsmile2015 0:4f367a344480 42 {
sunsmile2015 0:4f367a344480 43 led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */
sunsmile2015 0:4f367a344480 44
sunsmile2015 0:4f367a344480 45 /* Note that the periodicCallback() executes in interrupt context, so it is safer to do
sunsmile2015 0:4f367a344480 46 * heavy-weight sensor polling from the main thread. */
sunsmile2015 0:4f367a344480 47 triggerSensorPolling = true;
sunsmile2015 0:4f367a344480 48 }
sunsmile2015 0:4f367a344480 49
sunsmile2015 0:4f367a344480 50 int main(void)
sunsmile2015 0:4f367a344480 51 {
sunsmile2015 0:4f367a344480 52 led1 = 1;
sunsmile2015 0:4f367a344480 53 Ticker ticker;
sunsmile2015 0:4f367a344480 54 ticker.attach(periodicCallback, 1); // blink LED every second
sunsmile2015 0:4f367a344480 55
sunsmile2015 0:4f367a344480 56 ble.init();
sunsmile2015 0:4f367a344480 57 ble.onDisconnection(disconnectionCallback);
sunsmile2015 0:4f367a344480 58
sunsmile2015 0:4f367a344480 59 /* Setup primary service. */
sunsmile2015 0:4f367a344480 60 uint8_t hrmCounter = 100; // init HRM to 100bps
sunsmile2015 0:4f367a344480 61 HeartRateService hrService(ble, hrmCounter, HeartRateService::LOCATION_FINGER);
sunsmile2015 0:4f367a344480 62
sunsmile2015 0:4f367a344480 63 /* Setup auxiliary service. */
sunsmile2015 0:4f367a344480 64 DeviceInformationService deviceInfo(ble, "ARM", "Model1", "SN1", "hw-rev1", "fw-rev1", "soft-rev1");
sunsmile2015 0:4f367a344480 65
sunsmile2015 0:4f367a344480 66 /* Setup advertising. */
sunsmile2015 0:4f367a344480 67 ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE);
sunsmile2015 0:4f367a344480 68 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t *)uuid16_list, sizeof(uuid16_list));
sunsmile2015 0:4f367a344480 69 ble.accumulateAdvertisingPayload(GapAdvertisingData::GENERIC_HEART_RATE_SENSOR);
sunsmile2015 0:4f367a344480 70 ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME));
sunsmile2015 0:4f367a344480 71 ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED);
sunsmile2015 0:4f367a344480 72 ble.setAdvertisingInterval(1000);
sunsmile2015 0:4f367a344480 73 ble.startAdvertising();
sunsmile2015 0:4f367a344480 74
sunsmile2015 0:4f367a344480 75 // infinite loop
sunsmile2015 0:4f367a344480 76 while (1) {
sunsmile2015 0:4f367a344480 77 // check for trigger from periodicCallback()
sunsmile2015 0:4f367a344480 78 if (triggerSensorPolling && ble.getGapState().connected) {
sunsmile2015 0:4f367a344480 79 triggerSensorPolling = false;
sunsmile2015 0:4f367a344480 80
sunsmile2015 0:4f367a344480 81 // Do blocking calls or whatever is necessary for sensor polling.
sunsmile2015 0:4f367a344480 82 // In our case, we simply update the HRM measurement.
sunsmile2015 0:4f367a344480 83 hrmCounter++;
sunsmile2015 0:4f367a344480 84
sunsmile2015 0:4f367a344480 85 // 100 <= HRM bps <=175
sunsmile2015 0:4f367a344480 86 if (hrmCounter == 175) {
sunsmile2015 0:4f367a344480 87 hrmCounter = 100;
sunsmile2015 0:4f367a344480 88 }
sunsmile2015 0:4f367a344480 89
sunsmile2015 0:4f367a344480 90 // update bps
sunsmile2015 0:4f367a344480 91 hrService.updateHeartRate(hrmCounter);
sunsmile2015 0:4f367a344480 92 } else {
sunsmile2015 0:4f367a344480 93 ble.waitForEvent(); // low power wait for event
sunsmile2015 0:4f367a344480 94 }
sunsmile2015 0:4f367a344480 95 }
sunsmile2015 0:4f367a344480 96 }