Simple HRM
Dependencies: BLE_API mbed nRF51822
main.cpp
- Committer:
- FranKP2138
- Date:
- 2016-06-02
- Revision:
- 0:aa3968526b8c
File content as of revision 0:aa3968526b8c:
/* * * Copyright (c) 2016 RedBear * * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS * IN THE SOFTWARE. */ /** * @note This demo is Nordic HRM example. * You could use nRF toolbox tool to test it. */ #include "mbed.h" #include "ble/BLE.h" #include "GattCallbackParamTypes.h" //#include "ble/DiscoveredCharacteristic.h" //#include "ble/DiscoveredService.h" //#include "ble/GapScanningParams.h" //#include "ble_radio_notification.h" //#include "ble_gap.h" #define DEVICE_NAME "Nordic_HRM" BLE ble; Ticker ticker_task1; Serial pc(USBTX, USBRX); static uint8_t hrmCounter = 100; static uint8_t bpm[2] = {0x00, hrmCounter}; static const uint8_t location = 0x03; static uint32_t cnt; static const uint16_t uuid16_list[] = {GattService::UUID_HEART_RATE_SERVICE}; // Create characteristic and service GattCharacteristic hrmRate(GattCharacteristic::UUID_HEART_RATE_MEASUREMENT_CHAR, bpm, sizeof(bpm), sizeof(bpm), GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY); GattCharacteristic hrmLocation(GattCharacteristic::UUID_BODY_SENSOR_LOCATION_CHAR,(uint8_t *)&location, sizeof(location), sizeof(location),GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ); GattCharacteristic *hrmChars[] = {&hrmRate, &hrmLocation, }; GattService hrmService(GattService::UUID_HEART_RATE_SERVICE, hrmChars, sizeof(hrmChars) / sizeof(GattCharacteristic *)); void disconnectionCallback(const Gap::DisconnectionCallbackParams_t *params) { pc.printf("Disconnected ! \r\n"); pc.printf("Restart advertising progress \r\n"); ble.startAdvertising(); } void periodicCallback() { pc.printf("periodicCallback ! \r\n"); 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.getValueAttribute().getHandle(), bpm, sizeof(bpm)); } } int main(void) { // DElete //Ticker ticker; //ticker.attach_us(m_status_check_handle, 200000); pc.baud(9600); //wait(8.0); pc.printf("start\r\n"); pc.printf("Nordic_HRM Demo \r\n"); // Init timer task ticker_task1.attach(periodicCallback, 1); ble.init(); ble.onDisconnection(disconnectionCallback); // setup adv_data and srp_data ble.accumulateAdvertisingPayload(GapAdvertisingData::BREDR_NOT_SUPPORTED | GapAdvertisingData::LE_GENERAL_DISCOVERABLE); ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LIST_16BIT_SERVICE_IDS, (uint8_t*)uuid16_list, sizeof(uuid16_list)); ble.accumulateAdvertisingPayload(GapAdvertisingData::HEART_RATE_SENSOR_HEART_RATE_BELT); ble.accumulateAdvertisingPayload(GapAdvertisingData::COMPLETE_LOCAL_NAME, (uint8_t *)DEVICE_NAME, sizeof(DEVICE_NAME)); // set adv_type ble.setAdvertisingType(GapAdvertisingParams::ADV_CONNECTABLE_UNDIRECTED); // add service ble.addService(hrmService); // set device name ble.setDeviceName((const uint8_t *)DEVICE_NAME); // set tx power,valid values are -40, -20, -16, -12, -8, -4, 0, 4 ble.setTxPower(4); // 100ms; in multiples of 0.625ms. ble.setAdvertisingInterval(160); //ble.addService(uartService); // set adv_timeout, in seconds ble.setAdvertisingTimeout(0); ble.startAdvertising(); pc.printf("Advertising Start \r\n"); /*while(1) { pc.printf("wait for event \r\n"); ble.waitForEvent(); }*/ }