Simplify settings and add locale submenu, add 12/24 hour option (fix #76), add distance format option, and ensure settings all apply at boot by moving them to the bootloader 'app' (fix #89)

master
Gordon Williams 2020-02-04 16:17:23 +00:00
parent 0e7742d936
commit 527ff57e99
5 changed files with 80 additions and 96 deletions

View File

@ -1,5 +1,24 @@
// This ALWAYS runs at boot // This ALWAYS runs at boot
E.setFlags({pretokenise:1}); E.setFlags({pretokenise:1});
// Load settings...
var s = require('Storage').readJSON('@setting')||{};
if (s.ble!==false) {
if (s.HID) { // Humen interface device
Bangle.HID = E.toUint8Array(atob("BQEJBqEBhQIFBxngKecVACUBdQGVCIEClQF1CIEBlQV1AQUIGQEpBZEClQF1A5EBlQZ1CBUAJXMFBxkAKXOBAAkFFQAm/wB1CJUCsQLABQwJAaEBhQEVACUBdQGVAQm1gQIJtoECCbeBAgm4gQIJzYECCeKBAgnpgQIJ6oECwA=="));
NRF.setServices({}, {uart:true, hid:Bangle.HID});
}
}
// If not programmable, force terminal onto screen
if (s.dev===false) Terminal.setConsole(true);
// we just reset, so BLE should be on
if (s.ble===false) NRF.sleep();
// Set time, vibrate, beep, etc
if (!s.vibrate) Bangle.buzz=Promise.resolve;
if (!s.beep) Bangle.beep=Promise.resolve;
Bangle.setLCDTimeout(s.timeout);
if (!s.timeout) Bangle.setLCDPower(1);
E.setTimeZone(s.timezone);
delete s;
// All of this is just shim for older Bangles // All of this is just shim for older Bangles
if (!Bangle.loadWidgets) { if (!Bangle.loadWidgets) {
Bangle.loadWidgets = function(){ Bangle.loadWidgets = function(){

View File

@ -49,8 +49,6 @@ function drawApp() {
} }
if (next) { if (next) {
if (settings.HIDGestures) {
Bangle.on('aiGesture', (v) => { Bangle.on('aiGesture', (v) => {
switch (v) { switch (v) {
case 'swipeleft': case 'swipeleft':
@ -65,7 +63,6 @@ if (next) {
break; break;
} }
}); });
}
setWatch(function(e) { setWatch(function(e) {
var len = e.time - e.lastTime; var len = e.time - e.lastTime;

View File

@ -1,11 +1,12 @@
{ {
ble: true, // Bluetooth enabled by default ble: true, // Bluetooth enabled by default
dev: true, // Espruino IDE enabled by default dev: true, // Is REPL on Bluetooth - can Espruino IDE be used?
timeout: 10, // Default LCD timeout in seconds timeout: 10, // Default LCD timeout in seconds
vibrate: true, // Vibration enabled by default. App must support vibrate: true, // Vibration enabled by default. App must support
beep: true, // Beep enabled by default. App must support beep: true, // Beep enabled by default. App must support
timezone: 0, // Set the timezone for the device timezone: 0, // Set the timezone for the device
HID : false, // BLE HID mode, off by default HID : false, // BLE HID mode, off by default
HIDGestures: false, clock: null, // a string for the default clock's name
debug: false, // Debug mode disabled by default. App must support "12hour" : false, // 12 or 24 hour clock?
distance : "kilometer" // or "mile"
} }

View File

@ -1,27 +0,0 @@
Bangle.HID = E.toUint8Array(atob("BQEJBqEBhQIFBxngKecVACUBdQGVCIEClQF1CIEBlQV1AQUIGQEpBZEClQF1A5EBlQZ1CBUAJXMFBxkAKXOBAAkFFQAm/wB1CJUCsQLABQwJAaEBhQEVACUBdQGVAQm1gQIJtoECCbeBAgm4gQIJzYECCeKBAgnpgQIJ6oECwA=="));
(function() {
var s = require('Storage').readJSON('@setting');
var adv = { uart: true };
if (s.ble) {
if (s.dev)
Bluetooth.setConsole(true);
else
Terminal.setConsole(true);
if (s.HID) {
adv.hid = Bangle.HID;
} else
delete Bangle.HID;
}
NRF.setServices({}, adv);
// we just reset, so BLE should be on
try { // disable advertising if BLE should be off
if (!s.ble) NRF.sleep();
else NRF.wake();
} catch(e) {}
if (!s.vibrate) Bangle.buzz=Promise.resolve;
if (!s.beep) Bangle.beep=Promise.resolve;
Bangle.setLCDTimeout(s.timeout);
if (!s.timeout) Bangle.setLCDPower(1);
E.setTimeZone(s.timezone);
})()

View File

@ -5,13 +5,7 @@ g.clear();
const storage = require('Storage'); const storage = require('Storage');
let settings; let settings;
function debug(msg, arg) {
if (settings.debug)
console.log(msg, arg);
}
function updateSettings() { function updateSettings() {
debug('updating settings', settings);
//storage.erase('@setting'); // - not needed, just causes extra writes if settings were the same //storage.erase('@setting'); // - not needed, just causes extra writes if settings were the same
storage.write('@setting', settings); storage.write('@setting', settings);
} }
@ -25,9 +19,9 @@ function resetSettings() {
beep: true, beep: true,
timezone: 0, timezone: 0,
HID : false, HID : false,
HIDGestures: false, clock: null,
debug: false, "12hour" : false,
clock: null distance : "kilometer" // or "mile"
}; };
setLCDTimeout(settings.timeout); setLCDTimeout(settings.timeout);
updateSettings(); updateSettings();
@ -43,6 +37,7 @@ const boolFormat = (v) => v ? "On" : "Off";
function showMainMenu() { function showMainMenu() {
const mainmenu = { const mainmenu = {
'': { 'title': 'Settings' }, '': { 'title': 'Settings' },
'Make Connectable': makeConnectable,
'BLE': { 'BLE': {
value: settings.ble, value: settings.ble,
format: boolFormat, format: boolFormat,
@ -93,7 +88,28 @@ function showMainMenu() {
} }
} }
}, },
'Locale': showLocaleMenu,
'Select Clock': showClockMenu, 'Select Clock': showClockMenu,
'HID': {
value: settings.HID,
format: boolFormat,
onchange: () => {
settings.HID = !settings.HID;
updateSettings();
}
},
'Set Time': showSetTimeMenu,
'Reset Settings': showResetMenu,
'Turn Off': Bangle.off,
'< Back': ()=> {load();}
};
return E.showMenu(mainmenu);
}
function showLocaleMenu() {
const localemenu = {
'': { 'title': 'Locale' },
'< Back': showMainMenu,
'Time Zone': { 'Time Zone': {
value: settings.timezone, value: settings.timezone,
min: -11, min: -11,
@ -104,37 +120,24 @@ function showMainMenu() {
updateSettings(); updateSettings();
} }
}, },
'HID': { 'Clock Style': {
value: settings.HID, value: !!settings["12hour"],
format: boolFormat, format : v => v?"12hr":"24hr",
onchange: () => { onchange: v => {
settings.HID = !settings.HID; settings["12hour"] = v;
updateSettings(); updateSettings();
} }
}, },
'HID Gestures': { 'Distance/Speed': {
value: settings.HIDGestures, value: settings.distanceunit=="mile",
format: boolFormat, format: v => v?"mile":"kilometer",
onchange: () => { onchange: v => {
settings.HIDGestures = !settings.HIDGestures; settings.distanceunit = v?"mile":"kilometer";
updateSettings(); updateSettings();
} }
}, },
'Debug': {
value: settings.debug,
format: boolFormat,
onchange: () => {
settings.debug = !settings.debug;
updateSettings();
}
},
'Set Time': showSetTimeMenu,
'Make Connectable': makeConnectable,
'Reset Settings': showResetMenu,
'Turn Off': Bangle.off,
'< Back': ()=> {load();}
}; };
return E.showMenu(mainmenu); return E.showMenu(localemenu);
} }
function showResetMenu() { function showResetMenu() {
@ -149,16 +152,7 @@ function showResetMenu() {
} }
setTimeout(showMainMenu, 50); setTimeout(showMainMenu, 50);
}); });
}, }
// this is include for debugging. remove for production
/*'Erase': () => {
storage.erase('=setting');
storage.erase('-setting');
storage.erase('@setting');
storage.erase('*setting');
storage.erase('+setting');
E.reboot();
}*/
}; };
return E.showMenu(resetmenu); return E.showMenu(resetmenu);
} }