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)
parent
0e7742d936
commit
527ff57e99
|
|
@ -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(){
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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);
|
|
||||||
})()
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue