mirror of https://github.com/espruino/BangleApps
69 lines
1.7 KiB
JavaScript
69 lines
1.7 KiB
JavaScript
(() => {
|
|
function setupHRMAdvertising() {
|
|
/*
|
|
* This function prepares BLE heart rate Advertisement.
|
|
*/
|
|
|
|
require("ble_advert").set(0x180d, undefined, {
|
|
// We need custom Advertisement settings for Apps like OpenTracks
|
|
connectable: true,
|
|
discoverable: true,
|
|
scannable: true,
|
|
whenConnected: true,
|
|
});
|
|
|
|
NRF.setServices({
|
|
0x180D: { // heart_rate
|
|
0x2A37: { // heart_rate_measurement
|
|
notify: true,
|
|
value: [0x06, 0],
|
|
},
|
|
0x2A38: { // Sensor Location: Wrist
|
|
value: 0x02,
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
const keepConnected = (require("Storage").readJSON("gatthrm.settings.json", 1) || {}).keepConnected;
|
|
|
|
function updateBLEHeartRate(hrm) {
|
|
/*
|
|
* Send updated heart rate measurement via BLE
|
|
*/
|
|
if (hrm === undefined || hrm.confidence < 50) return;
|
|
try {
|
|
NRF.updateServices({
|
|
0x180D: {
|
|
0x2A37: {
|
|
value: [0x06, hrm.bpm],
|
|
notify: true
|
|
},
|
|
0x2A38: {
|
|
value: 0x02,
|
|
}
|
|
}
|
|
});
|
|
} catch (error) {
|
|
if (error.message.includes("BLE restart")) {
|
|
/*
|
|
* BLE has to restart after service setup.
|
|
*/
|
|
if(!keepConnected)
|
|
NRF.disconnect();
|
|
}
|
|
else if (error.message.includes("UUID 0x2a37")) {
|
|
/*
|
|
* Setup service if it wasn't setup correctly for some reason
|
|
*/
|
|
setupHRMAdvertising();
|
|
} else {
|
|
console.log("[bootgatthrm]: Unexpected error occured while updating HRM over BLE! Error: " + error.message);
|
|
}
|
|
}
|
|
}
|
|
|
|
setupHRMAdvertising();
|
|
Bangle.on("HRM", updateBLEHeartRate);
|
|
})();
|