From 14f48df813c1ffb576f67d6c60dbe7f57b529f9b Mon Sep 17 00:00:00 2001 From: storm64 Date: Thu, 20 Jan 2022 10:56:11 +0100 Subject: [PATCH] lightswitch: Create lib.js --- apps/lightswitch/lib.js | 124 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100644 apps/lightswitch/lib.js diff --git a/apps/lightswitch/lib.js b/apps/lightswitch/lib.js new file mode 100644 index 000000000..eb720e69a --- /dev/null +++ b/apps/lightswitch/lib.js @@ -0,0 +1,124 @@ +// from boot accassible functions +exports = { + // listener function // + // tap listener to flash backlight + tapListener: function(data) { + // check for double tap and direction + if (data.double) { + // setup shortcut to this widget or load from storage + var w = global.WIDGETS ? WIDGETS.lightswitch : Object.assign({ + unlockSide: "", + tapSide: "right", + tapOn: "always", + }, require("Storage").readJSON("lightswitch.json", true) || {}); + + // cache lock status + var locked = Bangle.isLocked(); + + // check to unlock + if (locked && data.dir === w.unlockSide) Bangle.setLocked(); + + // check to flash + if (data.dir === w.tapSide && (w.tapOn === "always" || locked === (w.tapOn === "locked"))) require("lightswitch.js").flash(); + + // clear variables + w = undefined; + locked = undefined; + } + }, + + // external function // + // function to flash backlight + flash: function(tOut) { + // setup shortcut to this widget or load from storage + var w = global.WIDGETS ? WIDGETS.lightswitch : Object.assign({ + tOut: 3000, + minFlash: 0.2, + value: 1, + isOn: true + }, require("Storage").readJSON("lightswitch.json", true) || {}); + + // chack if locked, backlight off or actual value lower then minimal flash value + if (Bangle.isLocked() || !w.isOn || w.value < w.minFlash) { + + // set inner bulb and brightness + var setBrightness = function(w, value) { + if (w.drawInnerBulb) w.drawInnerBulb(value); + Bangle.setLCDBrightness(value); + }; + + // override timeout if defined + if (!tOut) tOut = w.tOut; + + // check lock state + if (Bangle.isLocked()) { + // cache options + var options = Bangle.getOptions(); + // set shortened lock and backlight timeout + Bangle.setOptions({ + lockTimeout: tOut, + backlightTimeout: tOut + }); + // unlock + Bangle.setLocked(false); + // set timeout to reset options + setTimeout(Bangle.setOptions, tOut + 100, options); + + // clear variable + options = undefined; + } else { + // set timeout to reset backlight + setTimeout((w, funct) => { + if (!Bangle.isLocked()) funct(w, w.isOn ? w.value : 0); + }, tOut, w, setBrightness); + } + + // enable backlight + setTimeout((w, funct) => { + funct(w, w.value < w.minFlash ? w.minFlash : w.value); + }, 10, w, setBrightness); + + // clear variable + setBrightness = undefined; + } + + // clear variable + w = undefined; + }, + + // external access to internal function // + // refference to widget function or set backlight and write to storage if not skipped + changeValue: function(value, skipWrite) { + // check if widgets are loaded + if (global.WIDGETS) { + // execute inside widget + WIDGETS.lightswitch.changeValue(value, skipWrite); + } else { + // load settings from storage + var filename = "lightswitch.json"; + var storage = require("Storage"); + var settings = Object.assign({ + value: 1, + isOn: true + }, storage.readJSON(filename, true) || {}); + + // check value + if (value) { + // set new value + settings.value = value; + } else { + // switch backlight status + settings.isOn = !settings.isOn; + } + // set brightness + Bangle.setLCDBrightness(settings.isOn ? settings.value : 0); + // write changes to storage if not skipped + if (!skipWrite) storage.writeJSON(filename, settings); + + // clear variables + filename = undefined; + storage = undefined; + settings = undefined; + } + } +};