Heart Rate Monitor example for the BLE API using nRF51822 native mode drivers

Dependencies:   BLE_API mbed nRF51822 X_NUCLEO_IDB0XA1

Fork of BLE_HeartRate by Bluetooth Low Energy

Revision:
52:6bbf62943106
Parent:
50:477004d54431
Child:
53:06a74fd722b8
--- a/main.cpp	Thu Nov 20 14:47:12 2014 +0200
+++ b/main.cpp	Fri Nov 21 10:12:28 2014 +0000
@@ -20,6 +20,12 @@
 #include "BatteryService.h"
 #include "DeviceInformationService.h"
 
+/* Enable the following if you need to throttle the connection interval. This has
+ * the effect of reducing energy consumption after a connection is made;
+ * particularly for applications where the central may want a fast connection
+ * interval.*/
+#define UPDATE_PARAMS_FOR_LONGER_CONNECTION_INTERVAL 0
+
 BLEDevice  ble;
 DigitalOut led1(LED1);
 
@@ -34,6 +40,28 @@
     ble.startAdvertising(); // restart advertising
 }
 
+void onConnectionCallback(Gap::Handle_t handle, Gap::addr_type_t peerAddrType, const Gap::address_t peerAddr, const Gap::ConnectionParams_t *params)
+{
+    #if UPDATE_PARAMS_FOR_LONGER_CONNECTION_INTERVAL
+    /* Updating connection parameters can be attempted only after a connection has been
+     * established. Please note that the ble-Central is still the final arbiter for
+     * the effective parameters; the peripheral can only hope that the request is
+     * honored. Please also be mindful of the constraints that might be enforced by
+     * the BLE stack on the underlying controller.*/
+    #define MIN_CONN_INTERVAL 250  /**< Minimum connection interval (250 ms) */
+    #define MAX_CONN_INTERVAL 350  /**< Maximum connection interval (350 ms). */
+    #define CONN_SUP_TIMEOUT  6000 /**< Connection supervisory timeout (6 seconds). */
+    #define SLAVE_LATENCY     4
+
+        Gap::ConnectionParams_t gap_conn_params;
+        gap_conn_params.minConnectionInterval        = Gap::MSEC_TO_GAP_DURATION_UNITS(MIN_CONN_INTERVAL);
+        gap_conn_params.maxConnectionInterval        = Gap::MSEC_TO_GAP_DURATION_UNITS(MAX_CONN_INTERVAL);
+        gap_conn_params.connectionSupervisionTimeout = Gap::MSEC_TO_GAP_DURATION_UNITS(CONN_SUP_TIMEOUT);
+        gap_conn_params.slaveLatency                 = SLAVE_LATENCY;
+        ble.updateConnectionParams(handle, &gap_conn_params);
+    #endif /* #if UPDATE_PARAMS_FOR_LONGER_CONNECTION_INTERVAL */
+}
+
 void periodicCallback(void)
 {
     led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */
@@ -51,6 +79,9 @@
 
     ble.init();
     ble.onDisconnection(disconnectionCallback);
+#if UPDATE_PARAMS_FOR_LONGER_CONNECTION_INTERVAL
+    ble.onConnection(onConnectionCallback);
+#endif /* #if UPDATE_PARAMS_FOR_LONGER_CONNECTION_INTERVAL */
 
     /* Setup primary service. */
     uint8_t hrmCounter = 100;