commit
ab2cb24385
|
|
@ -4262,8 +4262,8 @@
|
||||||
"id": "cliclockJS2Enhanced",
|
"id": "cliclockJS2Enhanced",
|
||||||
"name": "Commandline-Clock JS2 Enhanced",
|
"name": "Commandline-Clock JS2 Enhanced",
|
||||||
"shortName": "CLI-Clock JS2",
|
"shortName": "CLI-Clock JS2",
|
||||||
"version": "0.1",
|
"version": "0.2",
|
||||||
"description": "Simple CLI-Styled Clock with enhancements. Modes that are hard to use and unneded are removed (BPM, battery info, memory ect) credit to hughbarney for the original code and design",
|
"description": "Simple CLI-Styled Clock with enhancements. Modes that are hard to use and unneded are removed (BPM, battery info, memory ect) credit to hughbarney for the original code and design. Also added HID media controlls, just swipe on the clock face to controll the media! Gadgetbride support coming soon(hopefully) Thanks to t0m1o1 for media controls!",
|
||||||
"icon": "app.png",
|
"icon": "app.png",
|
||||||
"screenshots": [{"url":"screengrab.png"}],
|
"screenshots": [{"url":"screengrab.png"}],
|
||||||
"type": "clock",
|
"type": "clock",
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
0.01: Submitted to App Loader
|
||||||
|
0.02: Removed unneded code, added HID controlls thanks to t0m1o1 for his code :p
|
||||||
|
|
@ -4,24 +4,96 @@ var fontsizeTime = g.getWidth()>200 ? 4 : 4;
|
||||||
var fontheight = 10*fontsize;
|
var fontheight = 10*fontsize;
|
||||||
var fontheightTime = 10*fontsizeTime;
|
var fontheightTime = 10*fontsizeTime;
|
||||||
var locale = require("locale");
|
var locale = require("locale");
|
||||||
var marginTop = 40;
|
var marginTop = 25;
|
||||||
var flag = false;
|
var flag = false;
|
||||||
|
|
||||||
var hrtOn = false;
|
var storage = require('Storage');
|
||||||
var hrtStr = "Hrt: ??? bpm";
|
|
||||||
|
|
||||||
const NONE_MODE = "none";
|
const settings = storage.readJSON('setting.json',1) || { HID: false };
|
||||||
const ID_MODE = "id";
|
|
||||||
const VER_MODE = "ver";
|
var sendHid, next, prev, toggle, up, down, profile;
|
||||||
const BATT_MODE = "batt";
|
var lasty = 0;
|
||||||
const MEM_MODE = "mem";
|
var lastx = 0;
|
||||||
const STEPS_MODE = "step";
|
|
||||||
const HRT_MODE = "hrt";
|
if (settings.HID=="kbmedia") {
|
||||||
const NONE_FN_MODE = "no_fn";
|
profile = 'Music';
|
||||||
const HRT_FN_MODE = "fn_hrt";
|
sendHid = function (code, cb) {
|
||||||
|
try {
|
||||||
|
NRF.sendHIDReport([1,code], () => {
|
||||||
|
NRF.sendHIDReport([1,0], () => {
|
||||||
|
if (cb) cb();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} catch(e) {
|
||||||
|
print(e);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
next = function (cb) { sendHid(0x01, cb); };
|
||||||
|
prev = function (cb) { sendHid(0x02, cb); };
|
||||||
|
toggle = function (cb) { sendHid(0x10, cb); };
|
||||||
|
up = function (cb) {sendHid(0x40, cb); };
|
||||||
|
down = function (cb) { sendHid(0x80, cb); };
|
||||||
|
} else {
|
||||||
|
E.showPrompt("Enable HID?",{title:"HID disabled"}).then(function(enable) {
|
||||||
|
if (enable) {
|
||||||
|
settings.HID = "kbmedia";
|
||||||
|
require("Storage").write('setting.json', settings);
|
||||||
|
setTimeout(load, 1000, "hidmsicswipe.app.js");
|
||||||
|
} else setTimeout(load, 1000);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
if (next) {
|
||||||
|
setWatch(function(e) {
|
||||||
|
var len = e.time - e.lastTime;
|
||||||
|
E.showMessage('lock');
|
||||||
|
setTimeout(drawApp, 1000);
|
||||||
|
Bangle.setLocked(true);
|
||||||
|
}, BTN1, { edge:"falling",repeat:true,debounce:50});
|
||||||
|
Bangle.on('drag', function(e) {
|
||||||
|
if(!e.b){
|
||||||
|
console.log(lasty);
|
||||||
|
console.log(lastx);
|
||||||
|
if(lasty > 40){
|
||||||
|
writeLine('Down', 3);
|
||||||
|
// setTimeout(drawApp, 1000);
|
||||||
|
// Bluetooth.println(JSON.stringify({t:"music", n:"volumedown"}));
|
||||||
|
down(() => {});
|
||||||
|
}
|
||||||
|
else if(lasty < -40){
|
||||||
|
writeLine('Up', 3);
|
||||||
|
// setTimeout(drawApp, 1000);
|
||||||
|
//Bluetooth.println(JSON.stringify({t:"music", n:"volumeup"}));
|
||||||
|
|
||||||
|
up(() => {});
|
||||||
|
} else if(lastx < -40){
|
||||||
|
writeLine('Prev', 3);
|
||||||
|
// setTimeout(drawApp, 1000);
|
||||||
|
// Bluetooth.println(JSON.stringify({t:"music", n:"previous"}));
|
||||||
|
prev(() => {});
|
||||||
|
} else if(lastx > 40){
|
||||||
|
writeLine('Next', 3);
|
||||||
|
// setTimeout(drawApp, 1000);
|
||||||
|
// Bluetooth.println(JSON.stringify({t:"music", n:"next"}));
|
||||||
|
next(() => {});
|
||||||
|
} else if(lastx==0 && lasty==0){
|
||||||
|
writeLine('play/pause', 3);
|
||||||
|
//setTimeout(drawApp, 1000);
|
||||||
|
// Bluetooth.println(JSON.stringify({t:"music", n:"play"}));
|
||||||
|
|
||||||
|
toggle(() => {});
|
||||||
|
}
|
||||||
|
lastx = 0;
|
||||||
|
lasty = 0;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
lastx = lastx + e.dx;
|
||||||
|
lasty = lasty + e.dy;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
let infoMode = NONE_MODE;
|
|
||||||
let functionMode = NONE_FN_MODE;
|
|
||||||
|
|
||||||
let textCol = g.theme.dark ? "#0f0" : "#080";
|
let textCol = g.theme.dark ? "#0f0" : "#080";
|
||||||
|
|
||||||
|
|
@ -33,13 +105,12 @@ function drawAll(){
|
||||||
function updateRest(now){
|
function updateRest(now){
|
||||||
writeLine(locale.dow(now),1);
|
writeLine(locale.dow(now),1);
|
||||||
writeLine(locale.date(now,1),2);
|
writeLine(locale.date(now,1),2);
|
||||||
drawInfo(5);
|
|
||||||
}
|
}
|
||||||
function updateTime(){
|
function updateTime(){
|
||||||
if (!Bangle.isLCDOn()) return;
|
if (!Bangle.isLCDOn()) return;
|
||||||
let now = new Date();
|
let now = new Date();
|
||||||
writeLine(locale.time(now,1),0);
|
writeLine(locale.time(now,1),0);
|
||||||
writeLine(flag?" ":"_",3);
|
writeLine(flag?" ":"_ ",3);
|
||||||
flag = !flag;
|
flag = !flag;
|
||||||
if(now.getMinutes() == 0)
|
if(now.getMinutes() == 0)
|
||||||
updateRest(now);
|
updateRest(now);
|
||||||
|
|
@ -65,142 +136,13 @@ function writeLine(str,line){
|
||||||
var y = marginTop+(line-1)*fontheight+fontheightTime;
|
var y = marginTop+(line-1)*fontheight+fontheightTime;
|
||||||
g.setFont("6x8",fontsize);
|
g.setFont("6x8",fontsize);
|
||||||
g.setColor(textCol).setFontAlign(-1,-1);
|
g.setColor(textCol).setFontAlign(-1,-1);
|
||||||
g.clearRect(0,y,((str.length+1)*20),y+fontheight-1);
|
g.clearRect(0,y,((str.length+10)*40),y+fontheightTime-1);
|
||||||
writeLineStart(line);
|
writeLineStart(line);
|
||||||
g.drawString(str,25,y);
|
g.drawString(str,25,y);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function drawInfo(line) {
|
|
||||||
let val;
|
|
||||||
let str = "";
|
|
||||||
let col = textCol; // green
|
|
||||||
|
|
||||||
//console.log("drawInfo(), infoMode=" + infoMode + " funcMode=" + functionMode);
|
|
||||||
|
|
||||||
switch(functionMode) {
|
|
||||||
case NONE_FN_MODE:
|
|
||||||
break;
|
|
||||||
case HRT_FN_MODE:
|
|
||||||
col = g.theme.dark ? "#0ff": "#088"; // cyan
|
|
||||||
str = "HRM: " + (hrtOn ? "ON" : "OFF");
|
|
||||||
drawModeLine(line,str,col);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch(infoMode) {
|
|
||||||
case NONE_MODE:
|
|
||||||
col = g.theme.bg;
|
|
||||||
str = "";
|
|
||||||
break;
|
|
||||||
case HRT_MODE:
|
|
||||||
str = hrtStr;
|
|
||||||
break;
|
|
||||||
case STEPS_MODE:
|
|
||||||
str = "Steps: " + stepsWidget().getSteps();
|
|
||||||
break;
|
|
||||||
case ID_MODE:
|
|
||||||
val = NRF.getAddress().split(":");
|
|
||||||
str = "Id: " + val[4] + val[5];
|
|
||||||
break;
|
|
||||||
case VER_MODE:
|
|
||||||
str = "Fw: " + process.env.VERSION;
|
|
||||||
break;
|
|
||||||
case MEM_MODE:
|
|
||||||
val = process.memory();
|
|
||||||
str = "Memory: " + Math.round(val.usage*100/val.total) + "%";
|
|
||||||
break;
|
|
||||||
case BATT_MODE:
|
|
||||||
default:
|
|
||||||
str = "Battery: " + E.getBattery() + "%";
|
|
||||||
}
|
|
||||||
|
|
||||||
drawModeLine(line,str,col);
|
|
||||||
}
|
|
||||||
|
|
||||||
function drawModeLine(line, str, col) {
|
|
||||||
g.setColor(col);
|
|
||||||
var y = marginTop+line*fontheight;
|
|
||||||
g.fillRect(0, y, 239, y+fontheight-1);
|
|
||||||
g.setColor(g.theme.bg).setFontAlign(0, 0);
|
|
||||||
g.drawString(str, g.getWidth()/2, y+fontheight/2);
|
|
||||||
}
|
|
||||||
|
|
||||||
function changeInfoMode() {
|
|
||||||
switch(functionMode) {
|
|
||||||
case NONE_FN_MODE:
|
|
||||||
break;
|
|
||||||
case HRT_FN_MODE:
|
|
||||||
hrtOn = !hrtOn;
|
|
||||||
Bangle.buzz();
|
|
||||||
Bangle.setHRMPower(hrtOn ? 1 : 0);
|
|
||||||
if (hrtOn) infoMode = HRT_MODE;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch(infoMode) {
|
|
||||||
case NONE_MODE:
|
|
||||||
if (stepsWidget() !== undefined)
|
|
||||||
infoMode = hrtOn ? HRT_MODE : STEPS_MODE;
|
|
||||||
else
|
|
||||||
infoMode = VER_MODE;
|
|
||||||
break;
|
|
||||||
case HRT_MODE:
|
|
||||||
if (stepsWidget() !== undefined)
|
|
||||||
infoMode = STEPS_MODE;
|
|
||||||
else
|
|
||||||
infoMode = VER_MODE;
|
|
||||||
break;
|
|
||||||
case STEPS_MODE:
|
|
||||||
infoMode = ID_MODE;
|
|
||||||
break;
|
|
||||||
case ID_MODE:
|
|
||||||
infoMode = VER_MODE;
|
|
||||||
break;
|
|
||||||
case VER_MODE:
|
|
||||||
infoMode = BATT_MODE;
|
|
||||||
break;
|
|
||||||
case BATT_MODE:
|
|
||||||
infoMode = MEM_MODE;
|
|
||||||
break;
|
|
||||||
case MEM_MODE:
|
|
||||||
default:
|
|
||||||
infoMode = NONE_MODE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function changeFunctionMode() {
|
|
||||||
//console.log("changeFunctionMode()");
|
|
||||||
switch(functionMode) {
|
|
||||||
case NONE_FN_MODE:
|
|
||||||
functionMode = HRT_FN_MODE;
|
|
||||||
break;
|
|
||||||
case HRT_FN_MODE:
|
|
||||||
default:
|
|
||||||
functionMode = NONE_FN_MODE;
|
|
||||||
}
|
|
||||||
//console.log(functionMode);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function stepsWidget() {
|
|
||||||
if (WIDGETS.activepedom !== undefined) {
|
|
||||||
return WIDGETS.activepedom;
|
|
||||||
} else if (WIDGETS.wpedom !== undefined) {
|
|
||||||
return WIDGETS.wpedom;
|
|
||||||
}
|
|
||||||
return undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
Bangle.on('HRM', function(hrm) {
|
|
||||||
if(hrm.confidence > 90){
|
|
||||||
hrtStr = "Hrt: " + hrm.bpm + " bpm";
|
|
||||||
} else {
|
|
||||||
hrtStr = "Hrt: ??? bpm";
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
g.clear();
|
g.clear();
|
||||||
Bangle.loadWidgets();
|
Bangle.loadWidgets();
|
||||||
Bangle.drawWidgets();
|
Bangle.drawWidgets();
|
||||||
|
|
@ -211,6 +153,5 @@ Bangle.on('lcdPower',function(on) {
|
||||||
var click = setInterval(updateTime, 1000);
|
var click = setInterval(updateTime, 1000);
|
||||||
// Show launcher when button pressed
|
// Show launcher when button pressed
|
||||||
Bangle.setUI("clockupdown", btn=>{
|
Bangle.setUI("clockupdown", btn=>{
|
||||||
if (btn<0) changeInfoMode();
|
|
||||||
drawAll();
|
drawAll();
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue