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
Diff: main.cpp
- Revision:
- 36:ea2a1b4f51c1
- Parent:
- 35:ba3e3174331a
- Child:
- 37:d310a72115c7
--- a/main.cpp Fri Jul 11 11:07:25 2014 +0100 +++ b/main.cpp Fri Jul 11 11:12:42 2014 +0100 @@ -50,6 +50,9 @@ static const uint16_t uuid16_list[] = {GattService::UUID_HEART_RATE_SERVICE}; +static volatile bool triggerSensorPolling = false; /* set to high periodically to indicate to the main thread that + * polling is necessary. */ + void disconnectionCallback(Gap::Handle_t handle) { DEBUG("Disconnected handle %u!\n\r", handle); @@ -58,23 +61,15 @@ } /** - * Triggered periodically by the 'ticker' interrupt; updates hrmCounter. + * Triggered periodically by the 'ticker' interrupt. */ void periodicCallback(void) { led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */ - - if (ble.getGapState().connected) { - /* Update the HRM measurement */ - /* First byte = 8-bit values, no extra info, Second byte = uint8_t HRM value */ - /* See --> https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.heart_rate_measurement.xml */ - hrmCounter++; - if (hrmCounter == 175) { - hrmCounter = 100; - } - bpm[1] = hrmCounter; - ble.updateCharacteristicValue(hrmRate.getHandle(), bpm, sizeof(bpm)); - } + triggerSensorPolling = true; /* Note that the periodicCallback() executes in + * interrupt context, so it is safer to do + * heavy-weight sensor polling from the main + * thread.*/ } int main(void) @@ -99,6 +94,24 @@ ble.addService(hrmService); while (true) { - ble.waitForEvent(); + if (triggerSensorPolling) { + triggerSensorPolling = false; + + /* Do blocking calls or whatever is necessary for sensor polling. */ + /* In our case, we simply update the dummy HRM measurement. */ + hrmCounter++; + if (hrmCounter == 175) { + hrmCounter = 100; + } + + if (ble.getGapState().connected) { + /* First byte = 8-bit values, no extra info, Second byte = uint8_t HRM value */ + /* See --> https://developer.bluetooth.org/gatt/characteristics/Pages/CharacteristicViewer.aspx?u=org.bluetooth.characteristic.heart_rate_measurement.xml */ + bpm[1] = hrmCounter; + ble.updateCharacteristicValue(hrmRate.getHandle(), bpm, sizeof(bpm)); + } + } else { + ble.waitForEvent(); + } } }