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)

pull/94/head
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
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
if (!Bangle.loadWidgets) {
Bangle.loadWidgets = function(){

View File

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

View File

@ -1,11 +1,12 @@
{
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
vibrate: true, // Vibration enabled by default. App must support
beep: true, // Beep enabled by default. App must support
timezone: 0, // Set the timezone for the device
HID : false, // BLE HID mode, off by default
HIDGestures: false,
debug: false, // Debug mode disabled by default. App must support
clock: null, // a string for the default clock's name
"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');
let settings;
function debug(msg, arg) {
if (settings.debug)
console.log(msg, arg);
}
function updateSettings() {
debug('updating settings', settings);
//storage.erase('@setting'); // - not needed, just causes extra writes if settings were the same
storage.write('@setting', settings);
}
@ -25,9 +19,9 @@ function resetSettings() {
beep: true,
timezone: 0,
HID : false,
HIDGestures: false,
debug: false,
clock: null
clock: null,
"12hour" : false,
distance : "kilometer" // or "mile"
};
setLCDTimeout(settings.timeout);
updateSettings();
@ -43,6 +37,7 @@ const boolFormat = (v) => v ? "On" : "Off";
function showMainMenu() {
const mainmenu = {
'': { 'title': 'Settings' },
'Make Connectable': makeConnectable,
'BLE': {
value: settings.ble,
format: boolFormat,
@ -93,7 +88,28 @@ function showMainMenu() {
}
}
},
'Locale': showLocaleMenu,
'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': {
value: settings.timezone,
min: -11,
@ -104,37 +120,24 @@ function showMainMenu() {
updateSettings();
}
},
'HID': {
value: settings.HID,
format: boolFormat,
onchange: () => {
settings.HID = !settings.HID;
'Clock Style': {
value: !!settings["12hour"],
format : v => v?"12hr":"24hr",
onchange: v => {
settings["12hour"] = v;
updateSettings();
}
},
'HID Gestures': {
value: settings.HIDGestures,
format: boolFormat,
onchange: () => {
settings.HIDGestures = !settings.HIDGestures;
'Distance/Speed': {
value: settings.distanceunit=="mile",
format: v => v?"mile":"kilometer",
onchange: v => {
settings.distanceunit = v?"mile":"kilometer";
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() {
@ -149,16 +152,7 @@ function showResetMenu() {
}
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);
}