Merge branch 'master' into feat/sleep-detection-improvements

master
Ishidres 2024-03-11 17:52:57 +01:00
commit 1aa6474974
626 changed files with 4535 additions and 1389 deletions

View File

@ -11,10 +11,10 @@ jobs:
uses: actions/checkout@v3
with:
submodules: recursive
- name: Use Node.js 16.x
- name: Use Node.js 18.x
uses: actions/setup-node@v3
with:
node-version: 16.x
node-version: 18.x
- name: Install testing dependencies
run: npm ci
- name: Test all apps and widgets

View File

@ -1,4 +1,6 @@
{
const lintExemptions = require("./lint_exemptions.js");
module.exports = {
"env": {
// TODO: "espruino": false
// TODO: "banglejs": false
@ -154,8 +156,14 @@
"no-useless-catch": "warn",
// TODO: "no-undef": "warn",
"no-undef": "off",
"no-unused-vars": "off",
"no-unused-vars": ["warn", { "args": "none" } ],
"no-useless-escape": "off",
"no-control-regex" : "off"
}
},
overrides: [
...Object.entries(lintExemptions).map(([filePath, {rules}]) => ({
files: [filePath],
rules: Object.fromEntries(rules.map(rule => [rule, "off"])),
})),
],
}

View File

@ -122,13 +122,13 @@
}
}
function swipeHandler() {
/*function swipeHandler() {
}
}*/
function buttonHandler() {
/*function buttonHandler() {
}
}*/
var twok = new TwoK();
twok.addDigit(); twok.addDigit();

View File

@ -1,3 +1,4 @@
0.01: New app!
0.02: Better support for watch themes
0.03: Workaround minifier bug
0.03: Workaround minifier bug
0.04: Minor code improvements

View File

@ -2,7 +2,7 @@
"name": "2047pp",
"shortName":"2047pp",
"icon": "app.png",
"version":"0.03",
"version": "0.04",
"description": "Bangle version of a tile shifting game",
"supports" : ["BANGLEJS","BANGLEJS2"],
"allow_emulator": true,

View File

@ -1 +1,2 @@
0.01: New App!
0.01: New App!
0.02: Minor code improvements

View File

@ -80,7 +80,7 @@ function refreshBattery() {
}
// Only update displayed battery level every minute as it fluctuates a lot
var batteryInterval = setInterval(refreshBattery, 60000);
setInterval(refreshBattery, 60000);
Bangle.setUI("clock");
Bangle.setLocked(false);

View File

@ -1,7 +1,7 @@
{
"id": "2ofthemclk",
"name": "two of them clock",
"version": "0.01",
"version": "0.02",
"description": "You can now wear teh memez on your wrist.",
"readme": "README.md",
"icon": "app.png",

View File

@ -282,7 +282,7 @@ function drawWidgeds() {
//print(BluetoothDevice.connected);
var x1Bt = 160;
var y1Bt = 0;
var x2Bt = x1Bt + 30;
//var x2Bt = x1Bt + 30;
var y2Bt = y2Bt;
if (NRF.getSecurityStatus().connected)
@ -391,4 +391,4 @@ Bangle.on('lock', function(on) {
SetFull(Bangle.isLocked());
var secondInterval = setInterval(draw, 1000);
/*var secondInterval =*/ setInterval(draw, 1000);

View File

@ -1,3 +1,4 @@
0.01: Initial version for upload
0.02: Better theme support, configurable colors, small improvements
0.03: Use `messages` library to check for new messages
0.03: Use `messages` library to check for new messages
0.04: Minor code improvements

View File

@ -1,7 +1,7 @@
{ "id": "7x7dotsclock",
"name": "7x7 Dots Clock",
"shortName":"7x7 Dots Clock",
"version":"0.03",
"version": "0.04",
"description": "A clock with a big 7x7 dots Font",
"icon": "dotsfontclock.png",
"tags": "clock",

View File

@ -4,3 +4,4 @@
0.04: Set 00:00 to 12:00 for 12 hour time
0.05: Display time, even on Thursday
0.06: Fix light theme issue, where widgets would end up on a light strip
0.07: Minor code improvements

View File

@ -8,7 +8,7 @@ var imgBg = require("heatshrink").decompress(atob("2GwgJC/AH4A/AH4A/AH4A/AH4A/AC
// reg number first char 48 28 by 41
var fontNum = atob("AAAAAAAAAAAAAA//8D//g//8P/+I//8//44//w//j4//A/+P4/8A/4/4AAAAD/4AAAAP/wAAAAf/gAAAA//AAAAB/+AAAAD/8AAAAH/4AAAAP/wAAAAf/gAAAA//AAAAB/+AAAAD/8AAAAH/wAAAAH/H/gH/H8f/gf/Hx//h//HH//n//Ef/+H//B//4H//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/wB/4AP/4H/4A//4f/4D//5//4P//h//4//+B//4AAAAAAAAAAAAAAAAAf/+AAAB//4gAAD//jgAAD/+PgABj/4/gAHj/j/gAfgAP/gA/AA//AB+AB/+AD8AD/8AH4AH/4APwAP/wAfgAf/gA/AA//AB+AB/+AD8AD/8AH4AH/4APwAP/wAfgAf/AA/AAf8f88AAfx/8wAAfH/8AAAcf/8AAAR//4AAAH//gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAA4AAAAAD4AAYAAP4AD8AA/4AH4AD/4APwAP/wAfgAf/gA/AA//AB+AB/+AD8AD/8AH4AH/4APwAP/wAfgAf/gA/AA//AB+AB/+AD8AD/8AH4AH/wAHgAH/H/GH/H8f/gf/Hx//h//HH//n//Ef/+H//B//4H//AAAAAAAAAAAAAAP//AAAAP//AAAAP//AAAAP/8AAAAP/2AAAAP/eAAAAAB+AAAAAD8AAAAAH4AAAAAPwAAAAAfgAAAAA/AAAAAB+AAAAAD8AAAAAH4AAAAAPwAAAAAfgAAAAA/AAAAAB+AAAAAD8AAAB/7x/4AH/7H/4Af/4f/4B//5//4H//h//4f/+B//4AAAAAAAAAAAAAD//wAAAD//wAAAj//gAADj/+AAAPj/5gAA/j/ngAD/gAfgAP/gA/AA//AB+AB/+AD8AD/8AH4AH/4APwAP/wAfgAf/gA/AA//AB+AB/+AD8AD/8AH4AH/4APwAP/wAfgAf/AA/AAf8AA8f8fwAAx/8fAAAH/8cAAAf/8QAAA//8AAAA//8AAAAAAAAAAAAAA//8D//g//8P/+I//8//44//0//j4//Y/+P4/94/4/4AH4AD/4APwAP/wAfgAf/gA/AA//AB+AB/+AD8AD/8AH4AH/4APwAP/wAfgAf/gA/AA//AB+AB/+AD8AD/8AH4AH/wAPwAH/AAPH/H8AAMf/HwAAB//HAAAH//EAAAH//AAAAH//AAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAGAAAAAAOAAAAAAeAAAAAA+AAAAAB+AAAAAD8AAAAAH4AAAAAPwAAAAAfgAAAAA/AAAAAB+AAAAAD8AAAAAH4AAAAAPwAAAAAfgAAAAA/AAAAAB8AAAAADx/4B/4HH/4H/4Mf/4f/4R//5//4H//h//4f/+B//4AAAAAAAAAAAAAD//wP/+D//w//4j//z//jj//T/+Pj/9j/4/j/3j/j/gAfgAP/gA/AA//AB+AB/+AD8AD/8AH4AH/4APwAP/wAfgAf/gA/AA//AB+AB/+AD8AD/8AH4AH/4APwAP/wAfgAf/AA/AAf8f+8f8fx/+x/8fH/+H/8cf/+f/8R//4f/8H//gf/8AAAAAAAAAAAAAA//8AAAA//8AAAI//8AAA4//0AAD4//YAAP4/94AA/4AH4AD/4APwAP/wAfgAf/gA/AA//AB+AB/+AD8AD/8AH4AH/4APwAP/wAfgAf/gA/AA//AB+AB/+AD8AD/8AH4AH/wAPwAH/H/vH/H8f/sf/Hx//h//HH//n//Ef/+H//B//4H//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
// tiny font for percentage first char 48 6 by 8
var fontTiny = atob("AH6BgYF+ACFB/wEBAGGDhYlxAEKBkZFuAAx0hP8EAPqRkZGOAH6RkZFOAICHmKDAAG6RkZFuAHKJiYl+AAAAAAAAAAAAAAAA");
//var fontTiny = atob("AH6BgYF+ACFB/wEBAGGDhYlxAEKBkZFuAAx0hP8EAPqRkZGOAH6RkZFOAICHmKDAAG6RkZFuAHKJiYl+AAAAAAAAAAAAAAAA");
// date font first char 48 12 by 15
var fontDate = atob("AAAAAfv149wAeADwAeADwAeADvHr9+AAAAAAAAAAAAAAAAAAAAAAAAAPHn9/AAAAAAP0A9wweGDwweGDwweGDvAL8AAAAAAAAAAAgwOGDwweGDwweGDvHp98AAAAA/gB6AAwAGAAwAGAAwAGAPHj9/AAAAAfgF6BwweGDwweGDwweGDgHoB+AAAAAfv169wweGDwweGDwweGDgHoB+AAAAAAAAAAgAGAAwAGAAwAGAAvHh9/AAAAAfv169wweGDwweGDwweGDvHr9+AAAAAfgF6BwweGDwweGDwweGDvHr9+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
@ -25,7 +25,7 @@ var imgSun = E.toArrayBuffer(atob("Ig8BwHf7D7Ac/MHD/z8wMP/PzMQ/8/M/D/z8z8QPf7f6A
// define icons
var imgSep = E.toArrayBuffer(atob("BhsBAAAAAA///////////////AAAAAAA"));
var imgPercent = E.toArrayBuffer(atob("BwcBuq7ffbqugA=="));
//var imgPercent = E.toArrayBuffer(atob("BwcBuq7ffbqugA=="));
var img24hr = E.toArrayBuffer(atob("EwgBj7vO53na73tcDtu9uDev7vA93g=="));
var imgPM = E.toArrayBuffer(atob("EwgB+HOfdnPu1X3ar4dV9+q+/bfftg=="));

View File

@ -3,7 +3,7 @@
"shortName":"93 Dub",
"icon": "93dub.png",
"screenshots": [{"url":"screenshot.png"}],
"version":"0.06",
"version": "0.07",
"description": "Fan recreation of orviwan's 91 Dub app for the Pebble smartwatch. Uses assets from his 91-Dub-v2.0 repo",
"tags": "clock",
"type": "clock",

View File

@ -1 +1,2 @@
0.01: New App!
0.02: Minor code improvements

View File

@ -25,7 +25,7 @@ declare global variables for the toggle button
statuses; if you add an additional toggle button
you should declare it and initiase it here */
var status_spk = {value: true};
//var status_spk = {value: true};
var status_face = {value: true};
var status_iris_light = {value: false};
var status_iris = {value: false};

View File

@ -2,7 +2,7 @@
"id": "BLEcontroller",
"name": "BLE Customisable Controller with Joystick",
"shortName": "BLE Controller",
"version": "0.01",
"version": "0.02",
"description": "A configurable controller for BLE devices and robots, with a basic four direction joystick. Designed to be easy to customise so you can add your own menus.",
"icon": "BLEcontroller.png",
"tags": "tool,bluetooth",

View File

@ -1 +1,2 @@
0.01: 1st ver, defining a common UI/UX
0.02: Minor code improvements

View File

@ -5,7 +5,7 @@ identify device and dimensions
max printable position max_x-1 i.e 239
*/
var colbackg='#111111';//black
//var colbackg='#111111';//black
var colorange='#e56e06'; //RGB format rrggbb
var v_color_lines=0xFFFF; //White hex format
var v_color_b_area='#111111';
@ -13,13 +13,13 @@ max printable position max_x-1 i.e 239
var v_font1size=10; //out of quotes
var v_font2size=12;
var v_font_banner_size=30;
var v_clicks=0;
//var v_clicks=0;
//pend identify widget area dinamically
var v_model=process.env.BOARD;
console.log("device="+v_model);
var x_max_screen=g.getWidth();//240;
var y_max_screen=g.getHeight(); //240;
//var y_max_screen=g.getHeight(); //240;
var y_wg_bottom=g.getHeight()-25;
var y_wg_top=25;
if (v_model=='BANGLEJS') {

View File

@ -2,7 +2,7 @@
"id": "UI4swatch",
"name": "UI 4 swatch",
"shortName": "UI 4 swatch",
"version": "0.01",
"version": "0.02",
"description": "A UI/UX for espruino smartwatches, displays dinamically calc. x,y coordinates.",
"icon": "app.png",
"tags": "Color,input,buttons,touch,UI",

View File

@ -1,3 +1,4 @@
0.01: New App!
0.02: Increased Legibility, GUI rework
0.03: 13 new chords
0.04: Minor code improvements

View File

@ -176,8 +176,6 @@ const b7 = [
var index = 0;
var chords = [];
var menu = {
"" : { "title" : "Uke Chords" },
"C" : function() { draw(cc); },

View File

@ -1,7 +1,7 @@
{ "id": "Uke",
"name": "Uke Chords",
"shortName":"Uke",
"version":"0.03",
"version": "0.04",
"description": "Wrist mounted ukulele chords",
"icon": "app.png",
"tags": "uke, chords",

View File

@ -1,4 +1,5 @@
0.01: Beta version for Bangle 2 (2021/11/28)
0.02: Shows night time on the map (2022/12/28)
0.03: Add 1 minute timer with upper taps (2023/01/05)
1.00: Page to set up custom time zones (2023/01/06)
1.00: Page to set up custom time zones (2023/01/06)
1.01: Minor code improvements

View File

@ -2,7 +2,7 @@
function getImg() {
return require("heatshrink").decompress(atob("2FRgP/ABnxBRP5BJH+gEfBZHghnAv4JFmA+Bj0PBIn3//4h3An4oDAQJWEEIf8AwMEuFOCofAh/QjAWEg4VEwEAnw2DDoKEHEYPwAoUBmgrDhgUHS4XgAwUD/gVC/g+FAAZgEwEf4YqC/EQFQ4NDFgV/4Z3C/EcCo1974VCLAV/V4d7Co9/Co0PCoX+vk4Ko/HCosCRYX5nwTFkEAr/nCokICoL+B/aCGCoMHCoq3EdoraGCosPz4HBcILEJCocBwEHOwQrIgQrHgoHCFYMEgwVJYoMBsEnCofAnkMNQJXH4D4EbQMPkF/xwrEj+/HIkAoAVDj8QueHCoorDCoUDLwd96J0BKwgrHh4VDv+9CosDx6QCCo4HB//8VwvvXgQVDJIYSBCo/sBwaZBgF/NoYVHgH8V4qYDAwUYlAVFEYbFDDgwAGConogf9Zg8DCpP4cIh0Dg0BGAgVE+gVIgUA+AVI+wVE/xAEh5HDEgn+CpEAbgJCCHQoVBn4VJ/ED4ANDAAQVJ4EPPQPAt4VF4BeDColgj/8h/gFYwJBCpF//k//ANDCAYVIcgP+CpH/54VHCAIVB/4VIwYECCocIAwIVBx4VG9+AMITbCYAYJB34VG/UAj4VI7/9Cgw9CJYXAmBtDMAQsIfYhvCCofyvywGB4QFFgYGC/d+agYVLSgf8+ArG/APBD4QVBgh0CAwNwv/fCo4PCCo94s7VDCohnDAoI7Enlv8BZECoRCDAggAB3/3/gzDMAIVFY4IVE4IPBOoZ9DCpXwCoMvCqKxB//3bYywD4BtFAAPfDooVFFYIVGw4VFB4KZFngNE/uPCovgFYgEBuK+Fg4zFCoIrFCovwgQVF+AVFgPxEYzFEbgQVD4EDCoozBYogVCgYVE8bpGCo4HDCoPzBgoVIL4fAg4MGgAIHCofgCszND8BOHK4x2BCofwXgv4h6vGCps/Co6uDAA/7RgIjDDwTaDABPA//9FaAtDCop0FC5YVDLwoAH8//94GD/wVNCYKNECpwPBQggVPNggVBNp4VFFZwAGCquHCqnzCB4"));
}
var IMAGEWIDTH = 176;
//var IMAGEWIDTH = 176;
var IMAGEHEIGHT = 81;
Graphics.prototype.setFontMichroma36 = function() {

View File

@ -1,7 +1,7 @@
{
"id": "a_clock_timer",
"name": "A Clock with Timer",
"version": "1.00",
"version": "1.01",
"description": "A Clock with Timer, Map and Time Zones",
"icon": "app.png",
"screenshots": [{"url":"screenshot.png"},{"url":"screenshot-1.png"}],

View File

@ -1 +1,2 @@
0.01: Initial version
0.02: Add settings page; Add line break to update message

View File

@ -1,10 +1,13 @@
# a_dndtoggle - Toggle Quiet Mode of the watch
When Quiet mode is off, just start this app to set quiet mode. Start it again to turn off quiet mode.
Use the app settings to choose which quiet mode you prefer ("Alarms" or "Silent"). Default is "Silent".
Work in progress.
#ToDo
Settings page, current status indicator.
Current status indicator
## Creator

View File

@ -6,11 +6,14 @@ let current = 0|bSettings.quiet;
//1 alarms
//2 silent
const dndSettings =
require('Storage').readJSON("a_dndtoggle.settings.json", true) || {};
console.log("old: " + current);
switch (current) {
case 0:
bSettings.quiet = 2;
bSettings.quiet = dndSettings.mode || 2;
Bangle.buzz();
setTimeout('Bangle.buzz();',500);
break;
@ -29,7 +32,7 @@ switch (current) {
console.log("new: " + bSettings.quiet);
E.showMessage(modeNames[current] + " -> " + modeNames[bSettings.quiet]);
E.showMessage(modeNames[current] + " -> \n" + modeNames[bSettings.quiet]);
setTimeout('exitApp();', 2000);

View File

@ -2,14 +2,18 @@
"id": "a_dndtoggle",
"name": "a_dndtoggle - Toggle Quiet Mode of the watch",
"shortName": "A_DND Toggle",
"version": "0.01",
"version": "0.02",
"description": "Toggle Quiet Mode of the watch just by starting this app.",
"icon": "a_dndtoggle.png",
"type": "app",
"tags": "tool",
"supports": ["BANGLEJS","BANGLEJS2"],
"data" : [
{"name":"a_dndtoggle.settings.json"}
],
"storage": [
{"name":"a_dndtoggle.app.js","url":"a_dndtoggle.app.js"},
{"name":"a_dndtoggle.settings.js","url":"settings.js"},
{"name":"a_dndtoggle.img","url":"app-icon.js","evaluate":true}
],
"readme": "README.md"

View File

@ -0,0 +1,33 @@
(function(back) {
const settings =
require('Storage').readJSON("a_dndtoggle.settings.json", true) || {};
function updateSettings() {
require('Storage').writeJSON("a_dndtoggle.settings.json", settings);
}
function buildMainMenu(){
// 0-Noisy is only a placeholder so that the other values map to the Bangle quiet mode options
const modes = [/*LANG*/"Noisy",/*LANG*/"Alarms",/*LANG*/"Silent"];
let mainmenu = {
'': { 'title': 'A_DND Toggle' },
'< Back': back,
/*LANG*/"Quiet Mode": {
value: settings.mode || 2,
min: 1, // don't allow choosing 0-Noisy
max: modes.length - 1,
format: v => modes[v],
onchange: v => {
settings.mode = v;
updateSettings();
}
}
};
return mainmenu;
}
E.showMenu(buildMainMenu());
});

View File

@ -1,3 +1,4 @@
1.00: Release (2021/12/01)
1.01: Grey font when timer is frozen (2021/12/04)
1.02: Force light theme, since the app is not designed for dark theme (2022/12/28)
1.03: Minor code improvements

View File

@ -124,7 +124,6 @@ Bangle.on('swipe',(swiperight, swipedown)=>{
}
});
var drawTimeout;
var showInstructions = true;
function draw() {

View File

@ -2,7 +2,7 @@
"id":"a_speech_timer",
"name":"Speech Timer",
"icon": "app.png",
"version":"1.02",
"version": "1.03",
"description": "A timer designed to help keeping your speeches and presentations to time.",
"tags": "tool,timer",
"readme":"README.md",

View File

@ -12,3 +12,4 @@
0.12: Actual pixels as of 29th Nov 2021
0.13: Bangle.js 2: Use setUI to add software back button
0.14: Add automatic translation of more strings
0.15: Minor code improvements

View File

@ -20,11 +20,11 @@ function getVersion(name,file) {
return v?(name+" "+(v?"v"+v:"Unknown")):"NO "+name;
}
var versions = [
/*var versions = [
getVersion("Bootloader","boot.info"),
getVersion("Launcher","launch.info"),
getVersion("Settings","setting.info")
];
];*/
var logo = E.toArrayBuffer(atob("PBwBAAAAAAAB/gAAAAAAAB/gAAAAAAAB/gAAAAAAAB/gAAAAAAAB/gAAAAAAAB/gAAAAAAAD/w+AAAAQAHA4hAAAAQAMAMhAAAAQAYBmhAAAAQAYBGiAAAAQAQCD/H74+R4wGDhoKJCSEwEDgoKJCT8wFDgoKJCSAwHDhoKJCSEQHj/H6I+R4YHmAAAACAAYEGAAABCAAMEMAAAA8AAHA4AAAAAAAD/wAAAAAAAB/gAAAAAAAB/gAAAAAAAB/gAAAAAAAB/gAAAAAAAB/gAAAAAAAB/g"));
var imageTop = 24;

View File

@ -1,7 +1,7 @@
{
"id": "about",
"name": "About",
"version": "0.14",
"version": "0.15",
"description": "Bangle.js About page - showing software version, stats, and a collaborative mural from the Bangle.js KickStarter backers",
"icon": "app.png",
"tags": "tool,system",

View File

@ -2,4 +2,5 @@
0.02: Increase record time to 5 second
Calculate the time moving in graph display
Trigger on 1.04g now, and record 10 samples before trigger
0.03: Bangle.js 2 compatibility
0.03: Bangle.js 2 compatibility
0.04: Minor code improvements

View File

@ -1,4 +1,4 @@
var acc;
//var acc;
var HZ = 100;
var SAMPLES = 5*HZ; // 5 seconds
var SCALE = 5000;

View File

@ -2,7 +2,7 @@
"id": "accelrec",
"name": "Acceleration Recorder",
"shortName": "Accel Rec",
"version": "0.03",
"version": "0.04",
"description": "This app puts the Bangle's accelerometer into 100Hz mode and reads 2 seconds worth of data after movement starts. The data can then be exported back to the PC.",
"icon": "app.png",
"tags": "",

View File

@ -1,3 +1,4 @@
0.01: New App!
0.02: Faster maze generation
0.03: Avoid clearing bottom widgets
0.04: Minor code improvements

View File

@ -54,7 +54,7 @@ function Maze(n) {
// Abort if BTN1 pressed [grace period for menu]
// (for some reason setWatch() fails inside constructor)
if (ngroups<n*n-16 && digitalRead(BTN1)) {
aborting = true;
//aborting = true;
return;
}
from_group = to_group = -1;
@ -243,7 +243,7 @@ function timeToText(t) { // Courtesy of stopwatch app
return text;
}
let aborting = false;
//let aborting = false;
let start_time = 0;
let duration = 0;
let maze=null;
@ -261,13 +261,13 @@ Bangle.drawWidgets();
Bangle.setLocked(false);
Bangle.setLCDTimeout(0);
E.showMenu(mazeMenu);
let maze_interval = setInterval(
/*let maze_interval =*/ setInterval(
function() {
if (maze) {
if (digitalRead(BTN1) || maze.status==STATUS_ABORTED) {
maze = null;
start_time = duration = 0;
aborting = false;
//aborting = false;
setTimeout(function() {E.showMenu(mazeMenu); }, 100);
return;
}

View File

@ -1,7 +1,7 @@
{ "id": "acmaze",
"name": "AccelaMaze",
"shortName":"AccelaMaze",
"version":"0.03",
"version": "0.04",
"description": "Tilt the watch to roll a ball through a maze.",
"icon": "app.png",
"tags": "game",

View File

@ -7,3 +7,4 @@
0.07: Added settings to be able to hide line1 and line2 so there is no visible widget
0.08: Fixed zero steps issue caused by 0.07
0.09: Prettied up user interface, decluttered graphs
0.10: Minor code improvements

View File

@ -136,7 +136,7 @@
function drawMenu() {
var x = 100;
var y = 24;
var stps ="-";
//var stps ="-";
var y_inc = 25;
g.clear();

View File

@ -2,7 +2,7 @@
"id": "activepedom",
"name": "Active Pedometer",
"shortName": "Active Pedometer",
"version": "0.09",
"version": "0.10",
"description": "(NOT RECOMMENDED) Pedometer that filters out arm movement and displays a step goal progress. Steps are saved to a daily file and can be viewed as graph. The `Health` app now provides step logging and graphs.",
"icon": "app.png",
"tags": "outdoors,widget",

View File

@ -3,7 +3,7 @@
var startTimeStep = new Date(); //set start time
var stopTimeStep = 0; //Time after one step
var timerResetActive = 0; //timer to reset active
var timerStoreData = 0; //timer to store data
//var timerStoreData = 0; //timer to store data
var steps = 0; //steps taken
var stepsCounted = 0; //active steps counted
var active = 0; //x steps in y seconds achieved
@ -234,7 +234,7 @@
pedomdata = 0; //reset pedomdata to save memory
setStepSensitivity(setting('stepSensitivity')); //set step sensitivity (80 is standard, 400 is muss less sensitive)
timerStoreData = setInterval(storeData, storeDataInterval); //store data regularly
/*timerStoreData =*/ setInterval(storeData, storeDataInterval); //store data regularly
//Add widget, use: WIDGETS.activepedom.getSteps() inside another App to return todays step count
WIDGETS["activepedom"]={area:"tl",width:width,draw:draw, getSteps:()=>stepsCounted};
})();

View File

@ -14,3 +14,4 @@
0.12: Added color field and updating clkinfo periodically (running events)
0.13: Show day of the week in date
0.14: Fixed "Today" and "Yesterday" wrongly displayed for allDay events on some time zones
0.15: Minor code improvements

View File

@ -15,14 +15,14 @@
Bangle.loadWidgets();
Bangle.drawWidgets();
var FILE = "android.calendar.json";
//var FILE = "android.calendar.json";
var Locale = require("locale");
var fontSmall = "6x8";
//var fontSmall = "6x8";
var fontMedium = g.getFonts().includes("6x15")?"6x15":"6x8:2";
var fontBig = g.getFonts().includes("12x20")?"12x20":"6x8:2";
var fontLarge = g.getFonts().includes("6x15")?"6x15:2":"6x8:4";
//var fontLarge = g.getFonts().includes("6x15")?"6x15:2":"6x8:4";
//FIXME maybe write the end from GB already? Not durationInSeconds here (or do while receiving?)
var CALENDAR = require("Storage").readJSON("android.calendar.json",true)||[];

View File

@ -1,7 +1,7 @@
{
"id": "agenda",
"name": "Agenda",
"version": "0.14",
"version": "0.15",
"description": "Simple agenda",
"icon": "agenda.png",
"screenshots": [{"url":"screenshot_agenda_overview.png"}, {"url":"screenshot_agenda_event1.png"}, {"url":"screenshot_agenda_event2.png"}],

View File

@ -1,2 +1,3 @@
0.01: New App!
0.02: Added adjustment for Bangle.js magnetometer heading fix
0.03: Minor code improvements

View File

@ -145,7 +145,7 @@ Bangle.setCompassPower(1);
Bangle.setGPSPower(1);
g.clear();
process_GPS();
var poll_GPS = setInterval(process_GPS, 9000);
/*var poll_GPS =*/ setInterval(process_GPS, 9000);
setWatch(function () {
if (!button_lock) {

View File

@ -1,7 +1,7 @@
{
"id": "alpinenav",
"name": "Alpine Nav",
"version": "0.02",
"version": "0.03",
"description": "App that performs GPS monitoring to track and display position relative to a given origin in realtime",
"icon": "app-icon.png",
"tags": "outdoors,gps",

View File

@ -33,3 +33,4 @@
0.31: Implement API for activity fetching
0.32: Added support for loyalty cards from gadgetbridge
0.33: Fix alarms created in Gadgetbridge not repeating
0.34: Implement API for activity tracks fetching (Recorder app logs).

View File

@ -16,10 +16,12 @@
if (settings.vibrate == undefined) settings.vibrate = "..";
require('Storage').writeJSON("android.settings.json", settings);
var _GB = global.GB;
let fetchRecInterval;
global.GB = (event) => {
// feed a copy to other handlers if there were any
if (_GB) setTimeout(_GB,0,Object.assign({},event));
/* TODO: Call handling, fitness */
var HANDLERS = {
// {t:"notify",id:int, src,title,subject,body,sender,tel:string} add
@ -230,6 +232,49 @@
}
gbSend({t: "actfetch", state: "end", count: actCount});
},
//{t:"listRecs", id:"20230616a"}
"listRecs": function() {
let recs = require("Storage").list(/^recorder\.log.*\.csv$/,{sf:true}).map(s => s.slice(12, 21));
if (event.id.length > 2) { // Handle if there was no id supplied. Then we send a list all available recorder logs back.
let firstNonsyncedIdx = recs.findIndex((logId) => logId > event.id);
if (-1 == firstNonsyncedIdx) {
recs = []
} else {
recs = recs.slice(firstNonsyncedIdx);
}
}
gbSend({t:"actTrksList", list: recs}); // TODO: split up in multiple transmissions?
},
//{t:"fetchRec", id:"20230616a"}
"fetchRec": function() {
// TODO: Decide on what names keys should have.
if (fetchRecInterval) {
clearInterval(fetchRecInterval);
fetchRecInterval = undefined;
}
if (event.id=="stop") {
return
} else {
let log = require("Storage").open("recorder.log"+event.id+".csv","r");
let lines = "init";// = log.readLine();
let pkgcnt = 0;
gbSend({t:"actTrk", log:event.id, lines:"erase", cnt:pkgcnt}); // "erase" will prompt Gadgetbridge to erase the contents of a already fetched log so we can rewrite it without keeping lines from the previous (probably failed) fetch.
let sendlines = ()=>{
lines = log.readLine();
for (var i = 0; i < 3; i++) {
let line = log.readLine();
if (line) lines += line;
}
pkgcnt++;
gbSend({t:"actTrk", log:event.id, lines:lines, cnt:pkgcnt});
if (!lines && fetchRecInterval) {
clearInterval(fetchRecInterval);
fetchRecInterval = undefined;
}
}
fetchRecInterval = setInterval(sendlines, 50)
}
},
"nav": function() {
event.id="nav";
if (event.instr) {

View File

@ -2,7 +2,7 @@
"id": "android",
"name": "Android Integration",
"shortName": "Android",
"version": "0.33",
"version": "0.34",
"description": "Display notifications/music/etc sent from the Gadgetbridge app on Android. This replaces the old 'Gadgetbridge' Bangle.js widget.",
"icon": "app.png",
"tags": "tool,system,messages,notifications,gadgetbridge",

View File

@ -1 +1,2 @@
0.01: New App!
0.01: New App!
0.02: Minor code improvements

View File

@ -4,8 +4,6 @@ var avrAngle = undefined;
var history = [];
var R = Bangle.appRect;
var W = g.getWidth();
var H = g.getHeight();
var relativeTo = undefined;
function draw(v) {

View File

@ -2,7 +2,7 @@
"id": "angles",
"name": "Angles (Spirit Level)",
"shortName": "Angles",
"version": "0.01",
"version": "0.02",
"description": "Shows Angle or Relative angle in degrees (Digital Protractor/Inclinometer). Place Bangle sideways against a surface with the button facing away for best readings.",
"icon": "icon.png",
"screenshots": [{"url":"screenshot.png"}],

View File

@ -3,3 +3,4 @@
0.03: Update to use setUI
0.04: Tell clock widgets to hide. Move loadWidgets() so it only runs on
startup and not on every draw.
0.05: Minor code improvements

View File

@ -16,7 +16,6 @@ var is12Hour = (require("Storage").readJSON("setting.json",1)||{})["12hour"];
var IX = 80, IY = 10, IBPP = 1;
var IW = 174, IH = 45, OY = 24;
var inf = {align:0};
var bgoptions;
require("Font7x11Numeric7Seg").add(Graphics);
var cg = Graphics.createArrayBuffer(IW,IH,IBPP,{msb:true});

View File

@ -2,7 +2,7 @@
"id": "animclk",
"name": "Animated Clock",
"shortName": "Anim Clock",
"version": "0.04",
"version": "0.05",
"description": "An animated clock face using Mark Ferrari's amazing 8 bit game art and palette cycling: http://www.markferrari.com/art/8bit-game-art",
"icon": "app.png",
"type": "clock",

View File

@ -1,4 +1,5 @@
0.1: Initial release
0.2: Added more descriptive approximations
0.2f: Bug fixes: Incorrect hour drawn after 50 mins, incorrect quarter minute drawn after 50 mins
0.3: Added touch interaction to display exact time and date.
0.3: Added touch interaction to display exact time and date.
0.04: Minor code improvements

View File

@ -93,7 +93,7 @@ const drawTimeExact = () => {
var dateTime = Date();
var hours = dateTime.getHours();
var minutes = dateTime.getMinutes().toString().padStart(2,0);
var day = dateTime.getDay();
//var day = dateTime.getDay();
var date = dateTime.getDate();
var month = dateTime.getMonth();
var year = dateTime.getFullYear();

View File

@ -1,7 +1,7 @@
{ "id": "approxclock",
"name": "Approximate Clock",
"shortName" : "Approx Clock",
"version": "0.3",
"version": "0.04",
"icon": "app.png",
"description": "A really basic spelled out time display for people looking for the vague time at a glance.",
"readme": "readme.md",

View File

@ -4,3 +4,4 @@
0.04: removed LED1.write() as it was keeping LCD on
0.05: Turn compass off when screen off
Calibrate at start if no info
0.06: Minor code improvements

View File

@ -20,9 +20,11 @@ function flip2(x,y) {
buf2.clear();
}
/*
function radians(d) {
return (d*Math.PI) / 180;
}
*/
// takes 32ms
function drawCompass(hd) {
@ -60,7 +62,7 @@ function newHeading(m,h){
// takes approx 7ms
function tiltfixread(O,S){
var start = Date.now();
//var start = Date.now();
var m = Bangle.getCompass();
var g = Bangle.getAccel();
m.dx =(m.x-O.x)*S.x; m.dy=(m.y-O.y)*S.y; m.dz=(m.z-O.z)*S.z;

View File

@ -1,7 +1,7 @@
{
"id": "arrow",
"name": "Arrow Compass",
"version": "0.05",
"version": "0.06",
"description": "Moving arrow compass that points North, shows heading, with tilt correction. Based on jeffmer's Navigation Compass",
"icon": "arrow.png",
"type": "app",

View File

@ -4,3 +4,4 @@
0.04: Compatibility with Bangle.js 2, get location from My Location
0.05: Enable widgets
0.06: Fix azimuth (bug #2651), only show degrees
0.07: Minor code improvements

View File

@ -10,7 +10,6 @@
*/
const SunCalc = require("suncalc"); // from modules folder
const storage = require("Storage");
function drawMoon(phase, x, y) {
const moonImgFiles = [
@ -52,7 +51,7 @@ function drawTitle(key) {
const x = 0;
const x2 = g.getWidth() - 1;
const y = fontHeight + 26;
const y2 = g.getHeight() - 1;
//const y2 = g.getHeight() - 1;
const title = titlizeKey(key);
g.setFont("6x8", 2);

View File

@ -1,7 +1,7 @@
{
"id": "astrocalc",
"name": "Astrocalc",
"version": "0.06",
"version": "0.07",
"description": "Calculates interesting information on the sun like sunset and sunrise and moon cycles for the current day based on your location from MyLocation app",
"icon": "astrocalc.png",
"tags": "app,sun,moon,cycles,tool,outdoors",

View File

@ -1,2 +1,3 @@
0.01: New App!
0.02: Set LCD timeout for Espruino 2v10 compatibility
0.02: Set LCD timeout for Espruino 2v10 compatibility
0.03: Minor code improvements

View File

@ -25,6 +25,7 @@
10: "Medium", 16: "Small", 20: "Tiny", 40: "Trivial",
};
// even size 1 actually works, but larger mazes take forever to generate
// TODO: should `sizes`, `minSize` and `defaultSize` have been declared outside the if block?
if (!BANGLEJS2) {
const sizes = [1, 2, 4, 5, 8, 10, 16, 20, 40].reverse(), minSize = 4, defaultSize = 10;
} else {

View File

@ -1,7 +1,7 @@
{
"id": "ballmaze",
"name": "Ball Maze",
"version": "0.02",
"version": "0.03",
"description": "Navigate a ball through a maze by tilting your watch.",
"icon": "icon.png",
"type": "app",

View File

@ -0,0 +1,2 @@
0.01: New app!
0.02: Minor code improvements

View File

@ -2,7 +2,7 @@
"id": "banglebridge",
"name": "BangleBridge",
"shortName": "BangleBridge",
"version": "0.01",
"version": "0.02",
"description": "Widget that allows Bangle Js to record pair and end data using Bluetooth Low Energy in combination with the BangleBridge Android App",
"icon": "widget.png",
"type": "widget",

View File

@ -11,13 +11,13 @@
g.setFont("Vector", 100);
//variabangle.Sensorss
let acclS, bttS, compssS, gpsS, hrmS, stepS; //Strings
//let acclS, bttS, compssS, gpsS, hrmS, stepS; //Strings
let accelN, compssN, gpsN, hrmN, stepN; //Num
let prueba = 1;
//let prueba = 1;
let data = [0, 0, 0, 0, 0, 0];
//Constants for redabangle.Sensors code
let storage = require('Storage');
let deCom = require('heatshrink');
//let deCom = require('heatshrink');
@ -129,10 +129,10 @@
finalS = s;
}
var z = d.getMilliseconds();
var zFinal = new String(z);
zFinal = zFinal.replace('.', '');
//var zFinal = new String(z);
//zFinal = zFinal.replace('.', '');
var completeTime = year + "-" + finalMonth + "-" + finalDay + "T" + finalh + ":" + finalM + ":" + finalS + "." + z + "Z";
var time = h + ":" + ("0" + m).substr(-2);
//var time = h + ":" + ("0" + m).substr(-2);
gpsN.time = completeTime;
data[5] = gpsN;
}, 2 * 1000);

View File

@ -3,3 +3,4 @@
Add more feedback to the user about the exercises
Clean up code
0.03: Add software back button on main menu
0.04: Minor code improvements

View File

@ -11,7 +11,7 @@ let historySlopeY = [];
let historySlopeZ = [];
let lastZeroPassCameFromPositive;
let lastZeroPassTime = 0;
//let lastZeroPassTime = 0;
let lastExerciseCompletionTime = 0;
let lastExerciseHalfCompletionTime = 0;
@ -198,7 +198,7 @@ function isValidExercise(slope, t) {
}
lastZeroPassCameFromPositive = true;
lastZeroPassTime = t;
//lastZeroPassTime = t;
}
if (p2 > 0 && p1 < 0) {
if (lastZeroPassCameFromPositive == true) {
@ -256,7 +256,7 @@ function isValidExercise(slope, t) {
}
lastZeroPassCameFromPositive = false;
lastZeroPassTime = t;
//lastZeroPassTime = t;
}
}
}
@ -272,7 +272,7 @@ function reset() {
historySlopeZ = [];
lastZeroPassCameFromPositive = undefined;
lastZeroPassTime = 0;
//lastZeroPassTime = 0;
lastExerciseHalfCompletionTime = 0;
lastExerciseCompletionTime = 0;
exerciseCounter = 0;

View File

@ -1,7 +1,7 @@
{ "id": "banglexercise",
"name": "BanglExercise",
"shortName":"BanglExercise",
"version":"0.03",
"version": "0.04",
"description": "Can automatically track exercises while wearing the Bangle.js watch.",
"icon": "app.png",
"screenshots": [{"url":"screenshot.png"}],

View File

@ -8,3 +8,4 @@
0.08: Step count stored in memory to survive reloads. Now shows step count daily and since last reboot.
0.09: NOW it really should reset daily (instead of every other day...)
0.10: Tell clock widgets to hide.
0.11: Minor code improvements

View File

@ -8,8 +8,8 @@ let digitBarHeight = 100;
let textBarWidth = 56;
let textBarHeight = 20;
let textWidth = 14;
let textHeight = 20;
//let textWidth = 14;
//let textHeight = 20;
/* Offsets */
var startOffsetX = 17;
@ -39,7 +39,7 @@ let rightBarsStartY = upperTextBarRightOffsetY + textBarHeight;
/* Utilities */
let stepCount = require("Storage").readJSON("stepCount",1);
if(stepCount === undefined) stepCount = 0;
let intCaster = num => Number(num);
//let intCaster = num => Number(num);
var drawTimeout;
@ -50,7 +50,7 @@ function renderWatch(l) {
var d = new Date();
var h = d.getHours(), m = d.getMinutes();
var time = h + ":" + ("0"+m).substr(-2);
//var time = h + ":" + ("0"+m).substr(-2);
//var month = ("0" + (d.getMonth()+1)).slice(-2);
var dayOfMonth = ('0' + d.getDate()).slice(-2);
var dayOfWeek = d.getDay() || 7;

View File

@ -2,7 +2,7 @@
"name": "Barcode clock",
"shortName":"Barcode clock",
"icon": "barcode.icon.png",
"version":"0.10",
"version": "0.11",
"description": "EAN-8 compatible barcode clock.",
"tags": "barcode,ean,ean-8,watchface,clock,clockface",
"type": "clock",

View File

@ -10,3 +10,4 @@
0.10: Remove widget icon and improve listener and setInterval handling for widget (might help with https://github.com/espruino/BangleApps/issues/381)
0.11: Initial port to the BangleJS2
0.12: Remove debug log
0.13: Minor code improvements

View File

@ -146,7 +146,7 @@ function renderData(dataArray) {
const belowMinIndicatorValue = minTemperature - 1;
const aboveMaxIndicatorValue = maxTemparature + 1;
var allConsumers = switchableConsumers.none | switchableConsumers.lcd | switchableConsumers.compass | switchableConsumers.bluetooth | switchableConsumers.gps | switchableConsumers.hrm;
//var allConsumers = switchableConsumers.none | switchableConsumers.lcd | switchableConsumers.compass | switchableConsumers.bluetooth | switchableConsumers.gps | switchableConsumers.hrm;
for (let i = 0; i < dataArray.length; i++) {
const element = dataArray[i];

View File

@ -2,7 +2,7 @@
"id": "batchart",
"name": "Battery Chart",
"shortName": "Battery Chart",
"version": "0.12",
"version": "0.13",
"description": "A widget and an app for recording and visualizing battery percentage over time.",
"icon": "app.png",
"tags": "app,widget,battery,time,record,chart,tool",

View File

@ -11,10 +11,10 @@
hrm: 16
};
var batChartFile; // file for battery percentage recording
//var batChartFile; // file for battery percentage recording
const recordingInterval10Min = 60 * 10 * 1000;
const recordingInterval1Min = 60 * 1000; //For testing
const recordingInterval10S = 10 * 1000; //For testing
//const recordingInterval1Min = 60 * 1000; //For testing
//const recordingInterval10S = 10 * 1000; //For testing
var compassEventReceived = false;
var gpsEventReceived = false;

View File

@ -1 +1,2 @@
0.01: New App!
0.02: Minor code improvements

View File

@ -1,6 +1,6 @@
const FIELD_WIDTH = [11, 11, 15]; // for each phase
const FIELD_HEIGHT = FIELD_WIDTH;
const FIELD_LINE_WIDTH = 2;
//const FIELD_LINE_WIDTH = 2;
const FIELD_MARGIN = 2;
const FIELD_COUNT_X = 10;
const FIELD_COUNT_Y = FIELD_COUNT_X;

View File

@ -1,7 +1,7 @@
{
"id": "battleship",
"name": "Battleship",
"version": "0.01",
"version": "0.02",
"description": "The classic game of battleship",
"icon": "battleship-icon.png",
"tags": "game",

View File

@ -4,3 +4,4 @@
0.04: Update to use Bangle.setUI instead of setWatch
0.05: Avoid 'loadWidgets' at LCD on, which will cause memory leak
Avoid clearTimeout() usage, as it may break other widgets
0.06: Minor code improvements

View File

@ -108,10 +108,10 @@ for (let h=1; h<=12; h++) {
// so we buffer once and minute, and draw the second hand dynamically
// (with a bit of flicker)
const drawFace = (G) => {
const fw = R1 * 2;
const fh = R1 * 2;
const fw2 = R1;
const fh2 = R1;
//const fw = R1 * 2;
//const fh = R1 * 2;
//const fw2 = R1;
//const fh2 = R1;
let hs = [];
// Wipe the image and start with white
@ -182,7 +182,7 @@ const drawAll = (force) => {
if (!faceImg) force = true;
let face_changed = force;
let date_changed = false;
//let date_changed = false;
tmp = hours;
hours = now.getHours();
@ -214,7 +214,7 @@ const drawAll = (force) => {
tmp = date;
date = now.getDate();
if (tmp !== date) {
date_changed = true;
//date_changed = true;
face_changed = true; // Should have changed anyway with hour/minute rollover
}
}

View File

@ -1,7 +1,7 @@
{
"id": "beebclock",
"name": "Beeb Clock",
"version": "0.05",
"version": "0.06",
"description": "Clock face that may be coincidentally familiar to BBC viewers",
"icon": "beebclock.png",
"type": "clock",

View File

@ -5,4 +5,5 @@
Now show widgets
Make compatible with themes, and Bangle.js 2
0.06: Enable fastloading
0.07: Adds fullscreen mode setting
0.07: Adds fullscreen mode setting
0.08: Minor code improvements

View File

@ -9,7 +9,6 @@ let fullscreen = !!settings.fullscreen;
let show_date = false;
let show_time = false;
let yy = 0;
let rowlights = [];
let time_digit = [];

View File

@ -1,7 +1,7 @@
{
"id": "berlinc",
"name": "Berlin Clock",
"version": "0.07",
"version": "0.08",
"description": "Berlin Clock (see https://en.wikipedia.org/wiki/Mengenlehreuhr)",
"icon": "berlin-clock.png",
"type": "clock",

View File

@ -2,3 +2,4 @@
0.02: Removed unneeded squares
0.03: Added setting for fullscreen option
0.04: Added settings to hide unused squares and show date
0.05: Minor code improvements

View File

@ -63,7 +63,7 @@ function draw() {
g.clear();
draw();
var secondInterval = setInterval(draw, 60000);
/*var secondInterval =*/ setInterval(draw, 60000);
Bangle.setUI("clock");
if (!settings.fullscreen) {
Bangle.loadWidgets();

View File

@ -1,7 +1,7 @@
{
"id": "binaryclk",
"name": "Bin Clock",
"version": "0.04",
"version": "0.05",
"description": "Clock face to show binary time in 24 hour format",
"icon": "app-icon.png",
"screenshots": [{"url":"screenshot.png"}],

View File

@ -4,3 +4,4 @@
0.04: corrected format of background image (raw binary)
0.05: move setUI() up before draw() as to not have a false positive 'sanity
check' when building on github.
0.06: Minor code improvements

Some files were not shown because too many files have changed in this diff Show More