From 745ad8c0a257e2e90c48e42f512584b7fb840338 Mon Sep 17 00:00:00 2001 From: Marco H Date: Wed, 16 Nov 2022 11:48:24 +0100 Subject: [PATCH] Allow configuration of minimum confidence for HRM values --- apps/widhrm/ChangeLog | 1 + apps/widhrm/metadata.json | 8 +++++--- apps/widhrm/settings.js | 36 ++++++++++++++++++++++++++++++++++++ apps/widhrm/widget.js | 16 +++++++++++++++- 4 files changed, 57 insertions(+), 4 deletions(-) create mode 100644 apps/widhrm/settings.js diff --git a/apps/widhrm/ChangeLog b/apps/widhrm/ChangeLog index 93e2eaf66..1b5d6da57 100644 --- a/apps/widhrm/ChangeLog +++ b/apps/widhrm/ChangeLog @@ -3,3 +3,4 @@ 0.03: Ensure redrawing works with variable size widget system 0.04: tag HRM power requests to allow this ot work alongside other widgets/apps (fix #799) 0.05: Use new 'lock' event, not LCD (so it works on Bangle.js 2) +0.06: Allow configuration of minimum confidence for HRM values diff --git a/apps/widhrm/metadata.json b/apps/widhrm/metadata.json index e566142d2..51a7f3392 100644 --- a/apps/widhrm/metadata.json +++ b/apps/widhrm/metadata.json @@ -1,13 +1,15 @@ { "id": "widhrm", "name": "Simple Heart Rate widget", - "version": "0.05", + "version": "0.06", "description": "When the screen is on, the widget turns on the heart rate monitor and displays the current heart rate (or last known in grey). For this to work well you'll need at least a 15 second LCD Timeout.", "icon": "widget.png", "type": "widget", "tags": "health,widget", "supports": ["BANGLEJS","BANGLEJS2"], "storage": [ - {"name":"widhrm.wid.js","url":"widget.js"} - ] + {"name":"widhrm.wid.js","url":"widget.js"}, + {"name":"widhrm.settings.js","url":"settings.js"} + ], + "data": [{"name":"widhrm.json"}] } diff --git a/apps/widhrm/settings.js b/apps/widhrm/settings.js new file mode 100644 index 000000000..0b8c989ac --- /dev/null +++ b/apps/widhrm/settings.js @@ -0,0 +1,36 @@ +/** + * @param {function} back Use back() to return to settings menu + */ +(function(back) { + const SETTINGS_FILE = "widhrm.json"; + const storage = require("Storage"); + + let s = { + confidence: 0 + }; + const saved = storage.readJSON(SETTINGS_FILE, 1) || {}; + for(const key in saved) { + s[key] = saved[key]; + } + + function save(key, value) { + s[key] = value; + storage.write(SETTINGS_FILE, s); + } + + const menu = { + "": {"title": "Simple Heart Rate widget"}, + "< Back": back, + /*LANG*/'min. confidence': { + value: s.confidence, + min: 0, + max : 100, + step: 5, + format: x => { + return x + "%"; + }, + onchange: x => save('confidence', x), + }, + }; + E.showMenu(menu); +}); diff --git a/apps/widhrm/widget.js b/apps/widhrm/widget.js index 7ffe1aa6d..497d9e6ef 100644 --- a/apps/widhrm/widget.js +++ b/apps/widhrm/widget.js @@ -1,5 +1,18 @@ (() => { if (!Bangle.isLocked) return; // old firmware + + const SETTINGS_FILE = 'widhrm.json'; + let settings; + function loadSettings() { + settings = require('Storage').readJSON(SETTINGS_FILE, 1) || {}; + const DEFAULTS = { + 'confidence': 0 + }; + Object.keys(DEFAULTS).forEach(k=>{ + if (settings[k]===undefined) settings[k]=DEFAULTS[k]; + }); + } + var currentBPM; var lastBPM; var isHRMOn = false; @@ -39,7 +52,8 @@ bpm = lastBPM; isCurrent = false; } - if (bpm===undefined) + console.log(bpm, settings); + if (bpm===undefined || (settings && bpm