Squashed commit of the following:
commitmastera385c09922Author: Gordon Williams <gw@pur3.co.uk> Date: Fri Dec 3 12:04:40 2021 +0000 openstmap .10: Improve scale factor calculation to fix scaling issues (#984) commit052eb41ebcAuthor: Gordon Williams <gw@pur3.co.uk> Date: Fri Dec 3 09:20:13 2021 +0000 Stop crypto polyfill being pulled in - fix http://forum.espruino.com/conversations/369197/#comment16294286 commit6baddd3b43Author: Gordon Williams <gw@pur3.co.uk> Date: Fri Dec 3 09:15:37 2021 +0000 Add gbdebug app commitb5fa5fb64eAuthor: Gordon Williams <gw@pur3.co.uk> Date: Fri Dec 3 08:24:12 2021 +0000 tweak for lint errors - still some assignment warnings commitd504017782Merge:e2ae57fa633cad5cAuthor: Gordon Williams <gw@pur3.co.uk> Date: Fri Dec 3 08:18:47 2021 +0000 Merge pull request #986 from stephenPspackman/master pooq Roman - a watch face commite2ae57faa4Merge:79f37b2b3595fab0Author: Gordon Williams <gw@pur3.co.uk> Date: Fri Dec 3 08:13:52 2021 +0000 Merge pull request #951 from rigrig/qmsched-clean Move Quiet Mode LCD options from global settings to the Quiet Mode Schedule app commit79f37b2bfaMerge:56b9e04fb595e603Author: Gordon Williams <gw@pur3.co.uk> Date: Fri Dec 3 08:12:21 2021 +0000 Merge pull request #987 from hughbarney/master Pebble: use LECO1976 font, update boot icon, redo screenshots commit633cad5cd3Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Fri Dec 3 00:11:07 2021 -0800 Update app.js Fix (hopefully) time zone issues and boundaries in the event scanner. commitb595e60333Author: hughbarney <hughbarney@googlemail.com> Date: Thu Dec 2 22:17:00 2021 +0000 Pebble: switched to LECO1976 font and slanting boot icon commit3595fab079Author: Richard de Boer <git@tubul.net> Date: Fri Nov 26 20:05:40 2021 +0100 qmsched: manage LCD options Also migrates old settings file: we now store options in qmsched.json, instead of in the global setting.json. commitd743b2266aAuthor: Richard de Boer <git@tubul.net> Date: Tue Nov 23 21:27:37 2021 +0100 boot: remove Quiet Mode options Updating these will be handled by the Quiet Mode Schedule app (qmsched) commitc24f67b06bAuthor: Richard de Boer <git@tubul.net> Date: Tue Nov 23 21:25:26 2021 +0100 settings: remove Quiet Mode LCD options Updating these will be handled by the Quiet Mode Schedule app (qmsched) commit32980bf3beAuthor: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 13:04:29 2021 -0800 Update apps.json Declare pooqroman.json, our private config file. commitade94521b7Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 12:57:25 2021 -0800 Update README.md Github flubs UTF-8? Really? commit2906e228baAuthor: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 12:54:03 2021 -0800 Update apps.json commit9c8fd93783Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 12:53:18 2021 -0800 Create README.md commit6ed4565ee1Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 12:16:53 2021 -0800 Add files via upload Upload the right file this time :-}. commit98bb9c28b3Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 12:02:15 2021 -0800 Add files via upload commit4803365ab3Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 11:49:28 2021 -0800 Update app.js Conform to filename conventions for our settings file—it is json. commit8ff08cbaabAuthor: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 11:35:39 2021 -0800 Create resourcer.js commitad96a97ae9Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 11:34:25 2021 -0800 Create app-icon.js commit2fc3cee139Author: stephenPspackman <93166870+stephenPspackman@users.noreply.github.com> Date: Thu Dec 2 11:27:53 2021 -0800 Create app.js commit43a68fb908Author: hughbarney <hughbarney@googlemail.com> Date: Thu Dec 2 19:01:40 2021 +0000 Pebble: 0.03 changed font to Leco1976, updated screenshots commit56b9e04ff0Author: Gordon Williams <gw@pur3.co.uk> Date: Thu Dec 2 10:37:08 2021 +0000 new core commit9d26a6448eAuthor: Gordon Williams <gw@pur3.co.uk> Date: Thu Dec 2 10:28:38 2021 +0000 launcher 0.09: Bangle.js 2 - pressing the button goes back to clock (fix #971) After 10s of being locked, the launcher goes back to the clock screen commit5b967184b6Author: Gordon Williams <gw@pur3.co.uk> Date: Thu Dec 2 10:07:45 2021 +0000 0.03: Fix unfreed memory, and clearInterval that disabled all clocks at midnight (fix #946) Fix app icon Change menu order so 'back' is at the top commitce2d182247Author: Gordon Williams <gw@pur3.co.uk> Date: Thu Dec 2 09:43:03 2021 +0000 tweak 2v11 firmware mentions commit829ee9129aMerge:0cb1dfbb7a1bb02bAuthor: Gordon Williams <gw@pur3.co.uk> Date: Thu Dec 2 09:06:21 2021 +0000 Merge pull request #983 from hughbarney/master Pebble: deploy settings file, updated README commit0cb1dfbb82Merge:e0018a493baa465fAuthor: Gordon Williams <gw@pur3.co.uk> Date: Thu Dec 2 09:06:07 2021 +0000 Merge pull request #982 from rigrig/delete-settings-library remove Settings module commite0018a495cMerge:7218acf0cb8ee706Author: Gordon Williams <gw@pur3.co.uk> Date: Thu Dec 2 08:12:16 2021 +0000 Merge pull request #981 from andrewgoz/master New icon, improved UI commitcb8ee70625Author: Andrew Gregory <andrew.gregory@gmail.com> Date: Thu Dec 2 16:05:36 2021 +0800 Update app.js commit012982e910Author: Andrew Gregory <andrew.gregory@gmail.com> Date: Thu Dec 2 16:03:22 2021 +0800 Update README.md commit7a1bb02bceAuthor: hughbarney <hughbarney@googlemail.com> Date: Wed Dec 1 21:07:41 2021 +0000 Pebble: updated README commitbd8bb638d4Author: hughbarney <hughbarney@googlemail.com> Date: Wed Dec 1 20:29:34 2021 +0000 Pebble: deploy pebble.settings.js in apps.json commit3baa465f01Author: Richard de Boer <git@tubul.net> Date: Wed Dec 1 19:34:52 2021 +0100 remove Settings module Better not to have this at all than to have a library that you can't actually use in widgets/boot/settings code commitb848c45ce4Author: Andrew Gregory <andrew.gregory@gmail.com> Date: Wed Dec 1 23:42:17 2021 +0800 Improve token display Limit label length. Reduce digits font size until it fits. commit86ea0554b3Author: Andrew Gregory <andrew.gregory@gmail.com> Date: Wed Dec 1 23:26:45 2021 +0800 Colour icon commit3305a5db6aAuthor: Andrew Gregory <andrew.gregory@gmail.com> Date: Wed Dec 1 23:23:44 2021 +0800 Colour icon commit26cc978a40Author: Andrew Gregory <andrew.gregory@gmail.com> Date: Wed Dec 1 22:29:37 2021 +0800 Update README.md commit21961edf42Author: Andrew Gregory <andrew.gregory@gmail.com> Date: Wed Dec 1 22:26:01 2021 +0800 Update ChangeLog commit4d239bf71eAuthor: Andrew Gregory <andrew.gregory@gmail.com> Date: Wed Dec 1 22:24:43 2021 +0800 Version 0.03 commit16f20970d9Author: Andrew Gregory <andrew.gregory@gmail.com> Date: Wed Dec 1 22:21:21 2021 +0800 Limit scanned label length Fixed #5 commitd4ddf22399Author: Andrew Gregory <andrew.gregory@gmail.com> Date: Wed Dec 1 22:15:55 2021 +0800 Try new JSON settings format commit60a8c487adAuthor: Andrew Gregory <andrew.gregory@gmail.com> Date: Wed Dec 1 22:05:53 2021 +0800 Support updated settings file commit7a9b64a7fdMerge:dfd7a02e7218acf0Author: Andrew Gregory <andrew.gregory@gmail.com> Date: Wed Dec 1 21:28:07 2021 +0800 Merge branch 'espruino:master' into master commit7218acf0b4Merge:adca628ea789e0beAuthor: Gordon Williams <gw@pur3.co.uk> Date: Wed Dec 1 13:26:44 2021 +0000 Merge pull request #980 from myxor/poweroff-icon-color-fix Poweroff: icon color fix & README improvement commitdfd7a02e12Author: Andrew Gregory <andrew.gregory@gmail.com> Date: Wed Dec 1 21:26:41 2021 +0800 Show placeholder "Calculating" Fixes #2 commita789e0bea4Author: Marco H <myxor@users.noreply.github.com> Date: Wed Dec 1 13:55:25 2021 +0100 Icon white with 1px black border commitca6b73e3e4Author: Marco H <myxor@users.noreply.github.com> Date: Wed Dec 1 13:54:49 2021 +0100 Icon white with 1px black border commit871c345ceaAuthor: Marco H <myxor@users.noreply.github.com> Date: Wed Dec 1 13:49:25 2021 +0100 Update README.md commite2a4428be2Author: Marco H <myxor@users.noreply.github.com> Date: Wed Dec 1 13:48:03 2021 +0100 Fix gramar and link in README commit2d190278f2Author: Marco H <myxor@users.noreply.github.com> Date: Wed Dec 1 13:45:24 2021 +0100 Change app icon color to white commitf3dffdb3e1Author: Marco H <myxor@users.noreply.github.com> Date: Wed Dec 1 13:44:12 2021 +0100 Change app icon to white commitadca628e2cMerge:38c6e160edec2442Author: Gordon Williams <gw@pur3.co.uk> Date: Wed Dec 1 12:06:47 2021 +0000 Merge branch 'master' of github.com:espruino/BangleApps commitedec24429aMerge:013d770443312a78Author: Gordon Williams <gw@pur3.co.uk> Date: Wed Dec 1 09:37:09 2021 +0000 Merge pull request #978 from myxor/mylocation-spelling Spelling issue in mylocation README commit43312a782aAuthor: Marco H <myxor@users.noreply.github.com> Date: Wed Dec 1 10:23:07 2021 +0100 Update README.md Fix spelling of the Scottish capital city in the README :) commit013d7704a9Merge:527bbf8ea9530f64Author: Gordon Williams <gw@pur3.co.uk> Date: Wed Dec 1 09:00:19 2021 +0000 Merge pull request #973 from rigrig/widbars New widget: Widbars commita9530f64eaMerge:8580952e527bbf8eAuthor: Gordon Williams <gw@pur3.co.uk> Date: Wed Dec 1 09:00:08 2021 +0000 Merge branch 'master' into widbars commit527bbf8e59Merge:68b73d2ea44d5420Author: Gordon Williams <gw@pur3.co.uk> Date: Wed Dec 1 08:59:27 2021 +0000 Merge pull request #974 from rigrig/widbatpc-fix widbatpc: Fix drawing the bar when charging commit68b73d2e17Merge:097a31531108983cAuthor: Gordon Williams <gw@pur3.co.uk> Date: Wed Dec 1 08:58:35 2021 +0000 Merge pull request #977 from alainsaas/master New app: A Speech Timer commit1108983cbaMerge:3c7d6b79097a3153Author: Gordon Williams <gw@pur3.co.uk> Date: Wed Dec 1 08:58:30 2021 +0000 Merge branch 'master' into master commit097a315395Merge:3ddd169624e2b01eAuthor: Gordon Williams <gw@pur3.co.uk> Date: Wed Dec 1 08:51:48 2021 +0000 Merge pull request #975 from hughbarney/master Mylocation (APP), Pastel sunrise, sunset, A Pebble Clock to keep the revolution going commit3c7d6b795dAuthor: Alain Saas <alainsaas@gmail.com> Date: Wed Dec 1 15:28:23 2021 +0900 Update apps.json commit3507dcde45Author: Alain Saas <alainsaas@gmail.com> Date: Wed Dec 1 15:26:52 2021 +0900 Update apps.json commit541adf4c16Author: Alain Saas <alainsaas@gmail.com> Date: Wed Dec 1 15:22:44 2021 +0900 Update README.md commit8f0856d871Author: Alain Saas <alainsaas@gmail.com> Date: Wed Dec 1 15:21:21 2021 +0900 Update README.md commit13b01fe829Author: Alain Saas <alainsaas@gmail.com> Date: Wed Dec 1 15:20:52 2021 +0900 Add files via upload commit18c3461e6eAuthor: Alain Saas <alainsaas@gmail.com> Date: Wed Dec 1 15:20:41 2021 +0900 Create README.md commitda133e2ccdAuthor: Alain Saas <alainsaas@gmail.com> Date: Wed Dec 1 15:09:06 2021 +0900 Create ChangeLog commit9033db08bfAuthor: Alain Saas <alainsaas@gmail.com> Date: Wed Dec 1 15:03:45 2021 +0900 Create app-icon.js commit673fa8820fAuthor: Alain Saas <alainsaas@gmail.com> Date: Wed Dec 1 15:01:48 2021 +0900 Add files via upload commit312bed6491Author: Alain Saas <alainsaas@gmail.com> Date: Wed Dec 1 15:00:58 2021 +0900 Create app.js commit24e2b01e22Merge:7785c7ea3ddd1696Author: hughbarney <hughbarney@googlemail.com> Date: Tue Nov 30 23:45:24 2021 +0000 Merge remote-tracking branch 'upstream/master' commit7785c7ea56Author: hughbarney <hughbarney@googlemail.com> Date: Tue Nov 30 23:38:29 2021 +0000 Mylocation: make into an app commit848ccd2be9Author: hughbarney <hughbarney@googlemail.com> Date: Tue Nov 30 23:16:56 2021 +0000 Mylocation: make into an app commit8ad8ed15dcAuthor: hughbarney <hughbarney@googlemail.com> Date: Tue Nov 30 23:15:45 2021 +0000 Mylocation: make into an app commit8e56dce22cAuthor: hughbarney <hughbarney@googlemail.com> Date: Tue Nov 30 23:10:36 2021 +0000 Mylocation: make into an app commit4cbd7e8ea6Author: hughbarney <hughbarney@googlemail.com> Date: Tue Nov 30 22:46:37 2021 +0000 Mylocation: make into an app commite3745f94fcAuthor: hughbarney <hughbarney@googlemail.com> Date: Tue Nov 30 22:43:45 2021 +0000 Mylocation: make into an app commita44d542053Author: Richard de Boer <git@tubul.net> Date: Tue Nov 30 22:30:28 2021 +0100 widbatpc: Fix drawing the bar when charging commit8580952e69Author: Richard de Boer <git@tubul.net> Date: Tue Nov 30 21:06:23 2021 +0100 widbars: comment out HRM/temperature They didn't seem very useful commit7caac64a86Author: Richard de Boer <git@tubul.net> Date: Tue Nov 30 20:40:33 2021 +0100 widbars: new widget commit4669099645Author: hughbarney <hughbarney@googlemail.com> Date: Tue Nov 30 18:11:08 2021 +0000 MyLocation added mylocation.app.js commit3ddd169612Merge:a20a2e4231eaeadeAuthor: Gordon Williams <gw@pur3.co.uk> Date: Tue Nov 30 17:14:26 2021 +0000 Merge pull request #972 from andrewgoz/master Fix JSON save format commit31eaeadee2Author: Andrew Gregory <andrew.gregory@gmail.com> Date: Wed Dec 1 00:26:39 2021 +0800 Update Authentiwatch version commitf094cc6e35Author: Andrew Gregory <andrew.gregory@gmail.com> Date: Wed Dec 1 00:25:00 2021 +0800 Update ChangeLog commite1c67cf345Author: Andrew Gregory <andrew.gregory@gmail.com> Date: Wed Dec 1 00:22:23 2021 +0800 Save in new JSON format too commit989dc5ccd4Author: Andrew Gregory <andrew.gregory@gmail.com> Date: Wed Dec 1 00:18:44 2021 +0800 Use new JSON format. commit51c91bf9eeAuthor: Andrew Gregory <andrew.gregory@gmail.com> Date: Wed Dec 1 00:17:26 2021 +0800 Rename variable commitf127bef66bAuthor: Andrew Gregory <andrew.gregory@gmail.com> Date: Wed Dec 1 00:14:47 2021 +0800 Load new JSON format commit0e3b17be67Author: hughbarney <hughbarney@googlemail.com> Date: Tue Nov 30 16:12:47 2021 +0000 Added icon for mylocation commitc1a48e7b48Author: Andrew Gregory <andrew.gregory@gmail.com> Date: Wed Dec 1 00:09:52 2021 +0800 Try different JSON format commit78c3791c1eAuthor: hughbarney <hughbarney@googlemail.com> Date: Tue Nov 30 13:48:20 2021 +0000 Pebble screenshot updated commit5b7bbd83dbAuthor: hughbarney <hughbarney@googlemail.com> Date: Tue Nov 30 13:30:13 2021 +0000 Pebble: added README, battery warning if below 30% commit4cf5d86083Merge:ac1425caa20a2e42Author: hughbarney <hughbarney@googlemail.com> Date: Tue Nov 30 13:18:27 2021 +0000 merged upstream commitac1425ca7cAuthor: hughbarney <hughbarney@googlemail.com> Date: Tue Nov 30 13:07:56 2021 +0000 set mylocation to an app commita20a2e4292Merge:dec4ec8cc30ee355Author: Gordon Williams <gw@pur3.co.uk> Date: Tue Nov 30 08:28:19 2021 +0000 Merge pull request #967 from myxor/poweroff-app Poweroff app commitc30ee355bbMerge:bd1fa974dec4ec8cAuthor: Gordon Williams <gw@pur3.co.uk> Date: Tue Nov 30 08:28:14 2021 +0000 Merge branch 'master' into poweroff-app commitdec4ec8c19Merge:c1dd7c6cd2cb4be4Author: Gordon Williams <gw@pur3.co.uk> Date: Tue Nov 30 08:27:16 2021 +0000 Merge pull request #966 from reelyactive/master Added SensiBLE app commitbd1fa974d1Author: Marco H <myxor@users.noreply.github.com> Date: Tue Nov 30 09:04:43 2021 +0100 Update ChangeLog commit31dba4df49Author: Marco H <myxor@users.noreply.github.com> Date: Tue Nov 30 08:59:37 2021 +0100 Change icon to black commitffd7eebf25Author: Marco H <myxor@users.noreply.github.com> Date: Tue Nov 30 08:59:20 2021 +0100 Change icon to black commit4a852e7138Author: Marco H <myxor@users.noreply.github.com> Date: Tue Nov 30 08:52:47 2021 +0100 Rename Readme.md to README.md commita08a8d8a24Author: Marco H <myxor@users.noreply.github.com> Date: Tue Nov 30 08:52:29 2021 +0100 Update apps.json commit166994311eAuthor: Marco H <myxor@users.noreply.github.com> Date: Tue Nov 30 08:46:04 2021 +0100 Add app to apps.json commitea10cea706Author: Marco H <myxor@users.noreply.github.com> Date: Tue Nov 30 08:44:45 2021 +0100 Update Readme.md commitf73055253eAuthor: Marco H <myxor@users.noreply.github.com> Date: Tue Nov 30 08:42:30 2021 +0100 Add files via upload commiteef1569c99Author: Marco H <myxor@users.noreply.github.com> Date: Tue Nov 30 08:41:49 2021 +0100 Create app-icon.js commiteeb3206a09Author: Marco H <myxor@users.noreply.github.com> Date: Tue Nov 30 08:39:36 2021 +0100 Create Readme.md commitc822b62789Author: Marco H <myxor@users.noreply.github.com> Date: Tue Nov 30 08:36:28 2021 +0100 Create app.js commit8775a6f339Author: Marco H <myxor@users.noreply.github.com> Date: Tue Nov 30 08:24:43 2021 +0100 Create ChangeLog commitd2cb4be4b4Author: jeffyactive <jeff@reelyactive.com> Date: Mon Nov 29 21:48:30 2021 -0500 Corrected variable initialisation commit4d107148c7Author: jeffyactive <jeff@reelyactive.com> Date: Mon Nov 29 21:31:53 2021 -0500 Added SensiBLE app commit6642b21606Author: hughbarney <hughbarney@googlemail.com> Date: Mon Nov 29 20:27:25 2021 +0000 added pebble icon commitb50faa919aAuthor: hughbarney <hughbarney@googlemail.com> Date: Mon Nov 29 20:12:25 2021 +0000 Pebble - long live the rebellion commit3fa435e57dAuthor: hughbarney <hughbarney@googlemail.com> Date: Mon Nov 29 19:58:19 2021 +0000 Pastel, MyLocation updated README files commit6510e4b7d2Author: hughbarney <hughbarney@googlemail.com> Date: Mon Nov 29 19:02:01 2021 +0000 Pastel added dependancy on widpedom commit784f7f8492Merge:22d06c8cc1dd7c6cAuthor: hughbarney <hughbarney@googlemail.com> Date: Mon Nov 29 18:57:56 2021 +0000 resolved apps.json conflict commit22d06c8cf6Author: hughbarney <hughbarney@googlemail.com> Date: Mon Nov 29 18:45:44 2021 +0000 Pastel changed dependancy on MyLocation to type app commit38c6e16010Author: Gordon Williams <gw@pur3.co.uk> Date: Mon Nov 29 16:29:34 2021 +0000 new about pixels commitc1dd7c6cabMerge:c2b70103616afad0Author: Gordon Williams <gw@pur3.co.uk> Date: Mon Nov 29 11:37:02 2021 +0000 Merge pull request #957 from JamesLMilner/minor-style-updates Tweak styling to give a more aligned and spaced out layout commitc2b70103a6Merge:cd0de0913e1c90e4Author: Gordon Williams <gw@pur3.co.uk> Date: Mon Nov 29 10:54:30 2021 +0000 Merge pull request #955 from alainsaas/master New app: A Clock with Timer, v0.01 commit3e1c90e485Merge:17e13a63cd0de091Author: Gordon Williams <gw@pur3.co.uk> Date: Mon Nov 29 10:54:23 2021 +0000 Merge branch 'master' into master commitcd0de091f3Merge:0dd006356fc1e738Author: Gordon Williams <gw@pur3.co.uk> Date: Mon Nov 29 10:52:43 2021 +0000 Merge pull request #956 from JamesLMilner/mandlebrotclock Add Mandlebrot Clock app commit0dd00635b8Merge:72d3c44fba506741Author: Gordon Williams <gw@pur3.co.uk> Date: Mon Nov 29 10:50:28 2021 +0000 Merge pull request #959 from dratini0/recorder-fixes Assorted bugfixes to the recorder apps commit72d3c44ffdMerge:33ce71f20d45f2c2Author: Gordon Williams <gw@pur3.co.uk> Date: Mon Nov 29 10:09:47 2021 +0000 Merge branch 'master' of github.com:espruino/BangleApps commit0d45f2c2e8Merge:c4238eba075d7a84Author: Gordon Williams <gw@pur3.co.uk> Date: Mon Nov 29 10:08:07 2021 +0000 Merge pull request #962 from myxor/myxor-temperature-app Update degree Celsius temperature app commit33ce71f279Author: Gordon Williams <gw@pur3.co.uk> Date: Mon Nov 29 10:06:21 2021 +0000 fix for sanity test errors commitc4238ebae7Merge:d4f1e7d310d170d3Author: Gordon Williams <gw@pur3.co.uk> Date: Mon Nov 29 10:01:40 2021 +0000 Merge pull request #950 from jg76379/master Add new Interval Timer App commit10d170d31eMerge:4f5ec608d4f1e7d3Author: Gordon Williams <gw@pur3.co.uk> Date: Mon Nov 29 10:00:29 2021 +0000 Merge branch 'master' into master commitd4f1e7d3cbAuthor: Gordon Williams <gw@pur3.co.uk> Date: Mon Nov 29 09:52:47 2021 +0000 minor fixes for #952 commit795d2b83ecMerge:d1534bdc99ec40cdAuthor: Gordon Williams <gw@pur3.co.uk> Date: Mon Nov 29 09:51:51 2021 +0000 Merge branch 'master' of github.com:espruino/BangleApps commit99ec40cd8eMerge:30e421e26220a88dAuthor: Gordon Williams <gw@pur3.co.uk> Date: Mon Nov 29 09:48:20 2021 +0000 Merge pull request #952 from rigrig/locale-12h locale: Apply 12hour setting to time commit075d7a840cAuthor: Marco H <myxor@users.noreply.github.com> Date: Mon Nov 29 10:43:42 2021 +0100 Update apps.json commitc9d0a19947Author: Marco H <myxor@users.noreply.github.com> Date: Mon Nov 29 10:40:32 2021 +0100 Add space after temperature value Add space after temperature value commitbaba42ae25Author: Marco H <myxor@users.noreply.github.com> Date: Mon Nov 29 10:36:31 2021 +0100 Fix changelog syntax commitcd67486547Author: Marco H <myxor@users.noreply.github.com> Date: Mon Nov 29 10:25:14 2021 +0100 Update ChangeLog commit765a683c89Author: Marco H <myxor@users.noreply.github.com> Date: Mon Nov 29 10:23:54 2021 +0100 Update app.js Improving messages and added Celsius sign commit30e421e225Merge:94f8b4bc918dcba6Author: Gordon Williams <gw@pur3.co.uk> Date: Mon Nov 29 08:38:52 2021 +0000 Merge pull request #960 from leer10/master Add 93 Dub Watchface commit918dcba633Merge:bb537b17050b9c2bAuthor: leer10 <brandon.abbott@charter.net> Date: Sun Nov 28 14:58:18 2021 -0800 Merge pull request #1 from leer10/style-cleanup style cleanup commit050b9c2b80Author: leer10 <brandon.abbott@charter.net> Date: Sun Nov 28 14:56:18 2021 -0800 Update apps.json commitada93e894dAuthor: leer10 <brandon.abbott@charter.net> Date: Sun Nov 28 14:55:46 2021 -0800 Update ChangeLog commit590f022a91Author: leer10 <brandon.abbott@charter.net> Date: Sun Nov 28 14:55:32 2021 -0800 Update ChangeLog commitf423a6b91bAuthor: leer10 <brandon.abbott@charter.net> Date: Sun Nov 28 14:54:17 2021 -0800 Update app.js commitbb537b1738Author: leer10 <brandon.abbott@charter.net> Date: Sun Nov 28 14:27:14 2021 -0800 Update ChangeLog commit656ca2ecaaAuthor: leer10 <brandon.abbott@charter.net> Date: Sun Nov 28 14:25:23 2021 -0800 Update apps.json added new version in json commit438885ae92Author: leer10 <brandon.abbott@charter.net> Date: Sun Nov 28 14:24:18 2021 -0800 Add files via upload commitb9b7cfb50cAuthor: leer10 <brandon.abbott@charter.net> Date: Sun Nov 28 14:23:49 2021 -0800 Delete screenshot.png commit36aead94e7Author: leer10 <brandon.abbott@charter.net> Date: Sun Nov 28 14:23:24 2021 -0800 Create ChangeLog commitb2cb4e7c0aAuthor: leer10 <brandon.abbott@charter.net> Date: Sun Nov 28 14:22:04 2021 -0800 Add files via upload commitb25ad7573eAuthor: leer10 <brandon.abbott@charter.net> Date: Sun Nov 28 14:21:57 2021 -0800 Delete screenshot.png commitc3fac095b8Author: leer10 <brandon.abbott@charter.net> Date: Sun Nov 28 14:19:21 2021 -0800 Update app.js add discominotaur's adjustments (cause a battery on the watchface isn't useful when the widget does the work anyways) maybe i'll do it as a setting later commit426ec0350fAuthor: leer10 <brandon.abbott@charter.net> Date: Sun Nov 28 14:10:47 2021 -0800 Update README.md added credits commitba50674173Author: Balint Kovacs <dratini0@gmail.com> Date: Sun Nov 28 18:58:26 2021 +0000 Update app versions and changelog commit1a118a6037Author: Balint Kovacs <dratini0@gmail.com> Date: Sun Nov 28 18:44:47 2021 +0000 Recorded: Slightly improve plot altitude if data has NaNs commit22fa78ff8dAuthor: Balint Kovacs <dratini0@gmail.com> Date: Sun Nov 28 18:43:44 2021 +0000 Even out x axis grid points commit466fd2155cAuthor: Balint Kovacs <dratini0@gmail.com> Date: Sun Nov 28 18:18:18 2021 +0000 Remove superfluous semicolon commita622781628Author: Balint Kovacs <dratini0@gmail.com> Date: Sun Nov 28 16:46:01 2021 +0000 Make the recorder handle missing coordinates in plot speed commit69c6a34eadAuthor: Balint Kovacs <dratini0@gmail.com> Date: Sun Nov 28 15:46:02 2021 +0000 Fix some text overflowing the screen in recorder and gpsrec On Bangle.js 2 commit616afad056Author: James <jamesmilner22@hotmail.com> Date: Sun Nov 28 14:10:29 2021 +0000 Title indent again commit41c80ae767Author: James <jamesmilner22@hotmail.com> Date: Sun Nov 28 14:08:30 2021 +0000 Indent logo slightly to line up more accurately commit617ed688c5Author: James <jamesmilner22@hotmail.com> Date: Sun Nov 28 14:05:49 2021 +0000 Use rem commita28b3b78e4Author: James <jamesmilner22@hotmail.com> Date: Sun Nov 28 13:58:41 2021 +0000 Add spacing to layout, small css tweaks commit6fc1e738f1Author: James <jamesmilner22@hotmail.com> Date: Sun Nov 28 13:22:42 2021 +0000 Add mandlebrot clock app commit89e88e7172Author: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 23:39:51 2021 -0800 Update app-icon.js hopefully fix launcher icon commit40d19aad2eAuthor: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 22:29:57 2021 -0800 Update apps.json added screenshot to app store listing commitd87930e4d3Author: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 22:27:51 2021 -0800 Update apps.json commit6eb7a844d6Author: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 22:26:36 2021 -0800 Update app.js fix battery graphics commitda41d04d26Author: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 22:20:21 2021 -0800 Update apps.json commit47c8edba4fAuthor: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 22:19:25 2021 -0800 Add files via upload commitb28986c249Author: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 22:19:09 2021 -0800 Delete app.png commit9e897dfd50Author: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 22:13:21 2021 -0800 Update app.js removed other nonfunctional comment block commit6fd7a0eb63Author: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 22:11:06 2021 -0800 Update app.js battery icon actually works now commit4a3e1bbe28Author: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 21:52:13 2021 -0800 Update app.js 12 hr/24 hr specific behavior now from settings instead of hardcoded commit3d03895b9dAuthor: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 21:44:49 2021 -0800 Update README.md commit0d5892769dAuthor: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 21:42:19 2021 -0800 Add files via upload add screenshot for 93dub commit82e515e0e5Author: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 21:39:55 2021 -0800 Create README.md added dub93's readme commit8a3f9f848aAuthor: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 21:36:48 2021 -0800 Update app.js stripped license and info block of text since it's already enclosed in an MIT-licensed repo commit4294a27279Author: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 21:31:41 2021 -0800 Update apps.json apps.json updates commit251ceb9dd1Author: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 21:27:35 2021 -0800 Update apps.json oops comma commitb49223d5b9Author: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 21:24:09 2021 -0800 Update apps.json commit2d21ce7445Author: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 21:21:29 2021 -0800 Add files via upload commitc0e5d4432eAuthor: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 21:19:34 2021 -0800 Create app-icon.js added icon commit0d6bfc7c13Author: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 20:59:32 2021 -0800 Update app.js redid background, adjusted graphics to look nice on bangle 2 commit17e13a6325Author: Alain Saas <alainsaas@gmail.com> Date: Sun Nov 28 13:43:31 2021 +0900 Update apps.json commita19da85de7Author: Alain Saas <alainsaas@gmail.com> Date: Sun Nov 28 13:41:56 2021 +0900 Update README.md commit9d4c251b73Author: Alain Saas <alainsaas@gmail.com> Date: Sun Nov 28 13:39:41 2021 +0900 Update apps.json commitf9fa4a7df1Author: Alain Saas <alainsaas@gmail.com> Date: Sun Nov 28 13:32:58 2021 +0900 Update apps.json commitff95dd3b2cAuthor: Alain Saas <alainsaas@gmail.com> Date: Sun Nov 28 13:29:06 2021 +0900 Create README.md commitc23960c12cAuthor: Alain Saas <alainsaas@gmail.com> Date: Sun Nov 28 13:20:48 2021 +0900 Add files via upload commitd9d6133559Author: Alain Saas <alainsaas@gmail.com> Date: Sun Nov 28 13:20:15 2021 +0900 Create ChangeLog commitde4d744e26Author: Alain Saas <alainsaas@gmail.com> Date: Sun Nov 28 13:19:15 2021 +0900 Create app-icon.js commitde9a526517Author: Alain Saas <alainsaas@gmail.com> Date: Sun Nov 28 13:14:06 2021 +0900 Add files via upload commit662963b208Author: Alain Saas <alainsaas@gmail.com> Date: Sun Nov 28 13:06:47 2021 +0900 Create app.js commit56f3044e5eAuthor: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 12:02:34 2021 -0800 Update app.js background needed redraw after notification background redraw broke widgets, so temp fix commit228a3664c7Author: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 11:41:39 2021 -0800 Update apps.json commit33b3e91869Author: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 11:40:13 2021 -0800 Update apps.json commit7d646945dfAuthor: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 11:37:56 2021 -0800 Update apps.json commitdabaa06efbAuthor: leer10 <brandon.abbott@charter.net> Date: Sat Nov 27 11:33:19 2021 -0800 Create app.js commit3fbb46b046Author: hughbarney <hughbarney@googlemail.com> Date: Sat Nov 27 11:23:03 2021 +0000 Pastel, recalc sunrise,sunset every hour commit21fe6e7ea4Author: hughbarney <hughbarney@googlemail.com> Date: Fri Nov 26 21:52:05 2021 +0000 Pastel added dependancy on MyLocation app, display sunrise,sunset times commitb426c479a3Author: hughbarney <hughbarney@googlemail.com> Date: Fri Nov 26 21:29:46 2021 +0000 Pastel added dependancy on MyLocation app, display sunrise,sunset times commit070558a0a6Author: hughbarney <hughbarney@googlemail.com> Date: Fri Nov 26 20:48:27 2021 +0000 MyLocation - adds menu to set preferred city or setup from GPS commit6220a88d29Author: Richard de Boer <git@tubul.net> Date: Fri Nov 26 21:29:58 2021 +0100 locale: Apply 12hour setting to time Fixes #892 commitce0e50ed94Author: hughbarney <hughbarney@googlemail.com> Date: Fri Nov 26 20:25:28 2021 +0000 MyLocation - adds menu to set preferred city or setup from GPS commit4f5ec608deAuthor: James G <me@jgough.net> Date: Fri Nov 26 12:48:20 2021 -0500 fix formatting in README for interval timer app commit2ae9585193Author: James G <me@jgough.net> Date: Fri Nov 26 12:43:36 2021 -0500 rename intervalTimer.app.js to app.js commitbff43e662dAuthor: James G <me@jgough.net> Date: Fri Nov 26 12:42:13 2021 -0500 Fix url for intervalTimer.app.js in app.json commitfc6ecaccceAuthor: James G <me@jgough.net> Date: Fri Nov 26 12:35:35 2021 -0500 Add new Interval Timer app. commitd1534bdcbfAuthor: Gordon Williams <gw@pur3.co.uk> Date: Fri Nov 26 15:05:05 2021 +0000 comment commit94f8b4bca7Merge:dc8edba04cfbe11eAuthor: Gordon Williams <gw@pur3.co.uk> Date: Fri Nov 26 12:01:01 2021 +0000 Merge pull request #947 from peerdavid/master [LCARS clock] Alarm works also if clock is closed and opened again. commitdc8edba00dMerge:db1c5b74fa4fd118Author: Gordon Williams <gw@pur3.co.uk> Date: Fri Nov 26 11:59:41 2021 +0000 Merge pull request #948 from Smooklu/master Updated fd6fdetect commitdb1c5b7481Merge:a4299586045251f5Author: Gordon Williams <gw@pur3.co.uk> Date: Fri Nov 26 11:59:15 2021 +0000 Merge pull request #949 from johan-m-o/master Update Spirit Level to work on Bangle.js 2 commit045251f55fAuthor: johan-m-o <85756863+johan-m-o@users.noreply.github.com> Date: Fri Nov 26 11:50:19 2021 +0100 Update spiritlevel.js commitb6e5175675Author: johan-m-o <85756863+johan-m-o@users.noreply.github.com> Date: Fri Nov 26 11:44:21 2021 +0100 Update spiritlevel.js commit6f300299b5Author: johan-m-o <85756863+johan-m-o@users.noreply.github.com> Date: Fri Nov 26 11:34:52 2021 +0100 Update apps.json commitfe5ca8bc76Author: johan-m-o <85756863+johan-m-o@users.noreply.github.com> Date: Fri Nov 26 11:33:49 2021 +0100 Update spiritlevel.js commita89dd4d544Author: johan-m-o <85756863+johan-m-o@users.noreply.github.com> Date: Fri Nov 26 11:23:43 2021 +0100 Update ChangeLog commita4299586e8Author: Gordon Williams <gw@pur3.co.uk> Date: Fri Nov 26 10:04:02 2021 +0000 cscsensor 0.06: Now read wheel rev as well as cadence sensor Improve connection code commitfa4fd118e2Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:20:52 2021 -0600 Update apps.json commit43b447f81cAuthor: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:17:35 2021 -0600 Update apps.json commit1ea1706e61Merge:08fd95ab095165c5Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:04:40 2021 -0600 Merge branch 'espruino:master' into master commit08fd95ab9aAuthor: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:04:09 2021 -0600 Update README.md commitbc27677f5eAuthor: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:02:43 2021 -0600 Update apps.json commitf9286cbee9Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:00:48 2021 -0600 Update README.md commita1a56601c0Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:00:38 2021 -0600 Update README.md commit4cfbe11e45Author: David Peer <david.peer@outlook.com> Date: Thu Nov 25 20:00:36 2021 +0100 Show text for each icon. commit4fb4d12ba4Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 13:00:28 2021 -0600 Update README.md commit6508ed8b3fAuthor: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 12:57:25 2021 -0600 Update apps.json commit85b7115c73Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 12:54:33 2021 -0600 Update README.md commit6482297881Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 12:53:16 2021 -0600 Update ChangeLog commitf5940b5bdbAuthor: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 12:52:27 2021 -0600 Update README.md commit9f00293401Author: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 12:50:35 2021 -0600 Update README.md commit2818a63e2cAuthor: Smooklu <37220586+Smooklu@users.noreply.github.com> Date: Thu Nov 25 12:48:36 2021 -0600 Create README.md commit95f845ad4eAuthor: David Peer <david.peer@outlook.com> Date: Thu Nov 25 19:10:05 2021 +0100 New icon for alarm commitca3453440cMerge:dcee49cd4a530371Author: David Peer <david.peer@outlook.com> Date: Thu Nov 25 19:01:24 2021 +0100 Merge branch 'master' of https://github.com/peerdavid/BangleApps commitdcee49cdc8Author: David Peer <david.peer@outlook.com> Date: Thu Nov 25 19:01:22 2021 +0100 New GPS Icon commit4a5303714dMerge:93e2a88a095165c5Author: Peer David <4281901+peerdavid@users.noreply.github.com> Date: Thu Nov 25 18:52:23 2021 +0100 Merge branch 'espruino:master' into master commit93e2a88a4cAuthor: David Peer <david.peer@outlook.com> Date: Thu Nov 25 18:51:20 2021 +0100 Updated screenshot commitd99cea9ae0Merge:232dcc4b7e1b0422Author: David Peer <david.peer@outlook.com> Date: Thu Nov 25 18:49:46 2021 +0100 Merge branch 'master' of https://github.com/peerdavid/BangleApps commit232dcc4b9dAuthor: David Peer <david.peer@outlook.com> Date: Thu Nov 25 18:49:44 2021 +0100 Real icons - its an image of the real planet :) commit095165c5c9Author: Gordon Williams <gw@pur3.co.uk> Date: Thu Nov 25 16:33:45 2021 +0000 oops - fix uncommitted file! commitbf964ce3e4Author: Gordon Williams <gw@pur3.co.uk> Date: Thu Nov 25 16:06:26 2021 +0000 The 'update all' button shouldn't update apps that require 'custom.html' (fix #748) commit7e1b042255Merge:ccce57ae944b24e6Author: Peer David <4281901+peerdavid@users.noreply.github.com> Date: Thu Nov 25 16:56:53 2021 +0100 Merge branch 'espruino:master' into master commitccce57ae89Merge:a99d9d5ec381e7efAuthor: David Peer <david.peer@outlook.com> Date: Thu Nov 25 16:56:35 2021 +0100 Merge branch 'master' of https://github.com/peerdavid/BangleApps commita99d9d5e7cAuthor: David Peer <david.peer@outlook.com> Date: Thu Nov 25 16:56:32 2021 +0100 Store alarm in settings commit944b24e6c3Merge:e8264cc81b9477beAuthor: Gordon Williams <gw@pur3.co.uk> Date: Thu Nov 25 15:52:25 2021 +0000 Merge branch 'master' of github.com:espruino/BangleApps commite8264cc8f8Author: Gordon Williams <gw@pur3.co.uk> Date: Thu Nov 25 15:50:07 2021 +0000 messages 0.07: Added settings menu with option to choose vibrate pattern and frequency (fix #909) commit5f5ca64cb4Author: Gordon Williams <gw@pur3.co.uk> Date: Thu Nov 25 15:21:59 2021 +0000 android 0.04: Android icon now goes to settings page with 'find phone' commit6aa6bcf179Author: Gordon Williams <gw@pur3.co.uk> Date: Thu Nov 25 15:12:04 2021 +0000 messages 0.06: New messages now go at the start (fix #898) Answering true/false now exits the messages app if no new messages Back now marks a message as read Clicking top-left opens a menu which allows you to delete a message or mark unread commit1b9477be5dMerge:e28f9c152b7091bdAuthor: Gordon Williams <gw@pur3.co.uk> Date: Thu Nov 25 12:19:48 2021 +0000 Merge pull request #945 from nlisgo/improve-ux-add-timer Cube Scramble: Improved UX and display solve time commit2b7091bd6bAuthor: nlisgo <nathan@aeopus.com> Date: Thu Nov 25 11:40:37 2021 +0000 Set default title for showPrompt commitc381e7ef21Merge:1ab98707e28f9c15Author: Peer David <4281901+peerdavid@users.noreply.github.com> Date: Thu Nov 25 11:41:01 2021 +0100 Merge branch 'espruino:master' into master commite28f9c157bMerge:e040cc4ecb9866ffAuthor: Gordon Williams <gw@pur3.co.uk> Date: Thu Nov 25 08:55:39 2021 +0000 Merge pull request #932 from hughbarney/master Pastel: created font modules commit1ab98707edAuthor: David Peer <david.peer@outlook.com> Date: Thu Nov 25 09:17:25 2021 +0100 Minor changes commit9940b38bbdAuthor: nlisgo <nathan@aeopus.com> Date: Thu Nov 25 00:13:06 2021 +0000 Force LCD on commitf175f4c48cAuthor: nlisgo <nathan@aeopus.com> Date: Thu Nov 25 00:06:02 2021 +0000 Update screenshots commitf6c689eeedAuthor: nlisgo <nathan@aeopus.com> Date: Wed Nov 24 23:56:47 2021 +0000 Amend app description commit3c984f1feeAuthor: nlisgo <nathan@aeopus.com> Date: Wed Nov 24 23:52:28 2021 +0000 Cube Scramble: Improved UX and display solve time commitcb9866ffe2Author: hughbarney <hughbarney@googlemail.com> Date: Wed Nov 24 21:11:47 2021 +0000 Pastel: updated screenshots and README commit8b46634c9bAuthor: hughbarney <hughbarney@googlemail.com> Date: Wed Nov 24 21:05:45 2021 +0000 Pastel: updated screenshots and README commitcbb38ec1ceAuthor: hughbarney <hughbarney@googlemail.com> Date: Wed Nov 24 20:18:29 2021 +0000 Pastel: added cycle through info items to bottom of screen commit469c329640Merge:37ca6251e040cc4eAuthor: hughbarney <hughbarney@googlemail.com> Date: Wed Nov 24 19:59:57 2021 +0000 Merge remote-tracking branch 'upstream/master' commit37ca625174Author: hughbarney <hughbarney@googlemail.com> Date: Wed Nov 24 19:59:46 2021 +0000 Pastel: added cycle through info items to bottom of screen commitc6096675fbAuthor: hughbarney <hughbarney@googlemail.com> Date: Wed Nov 24 19:06:06 2021 +0000 Pastel: added cycle through info items to bottom of screen commita537e98116Author: David Peer <david.peer@outlook.com> Date: Wed Nov 24 18:04:59 2021 +0100 Font improvements commit59692c8ca1Merge:657e64b0e040cc4eAuthor: Peer David <4281901+peerdavid@users.noreply.github.com> Date: Wed Nov 24 17:52:48 2021 +0100 Merge branch 'espruino:master' into master commit657e64b078Author: David Peer <david.peer@outlook.com> Date: Wed Nov 24 17:52:25 2021 +0100 Added readme also to app.json commite040cc4e24Author: Gordon Williams <gw@pur3.co.uk> Date: Wed Nov 24 15:22:16 2021 +0000 replace tabs! commit60c2fa710cMerge:38b2e417f3cb7e9aAuthor: Gordon Williams <gw@pur3.co.uk> Date: Wed Nov 24 13:29:46 2021 +0000 Merge pull request #942 from madman2021/master Add new TimeCal app commit38b2e417bfMerge:94bd895b43b38cc8Author: Gordon Williams <gw@pur3.co.uk> Date: Wed Nov 24 13:26:43 2021 +0000 Merge pull request #943 from peerdavid/master [LCARS Clock] Shows icons for charging and out of battery commit94bd895bafAuthor: Gordon Williams <gw@pur3.co.uk> Date: Wed Nov 24 12:56:56 2021 +0000 welcome 0.14: Turn off and run later to use softOff to time is set right plus other minor tweaks commit43b38cc8abAuthor: David Peer <david.peer@outlook.com> Date: Wed Nov 24 13:40:47 2021 +0100 New screenshot. Updated version. commit34c6589f06Author: David Peer <david.peer@outlook.com> Date: Wed Nov 24 13:37:07 2021 +0100 Minor improvement commitc403a5af67Author: David Peer <david.peer@outlook.com> Date: Wed Nov 24 13:36:21 2021 +0100 New design. Removed png icon files - only converted icons are needed. commit19655ea327Merge:274b705cb1fb0e6bAuthor: David Peer <david.peer@outlook.com> Date: Wed Nov 24 13:22:44 2021 +0100 Merge branch 'master' of https://github.com/peerdavid/BangleApps commit274b705c1eAuthor: David Peer <david.peer@outlook.com> Date: Wed Nov 24 13:22:37 2021 +0100 More lcars style commitf3cb7e9a0bAuthor: Jordan Coulam <madman2021@users.noreply.github.com> Date: Wed Nov 24 10:53:14 2021 +0000 Remove Icon as it renders massive commit1a9f537555Author: Jordan Coulam <madman2021@users.noreply.github.com> Date: Wed Nov 24 10:46:03 2021 +0000 Add missing supports tag for TimeCal commit3738bde22aAuthor: Jordan Coulam <madman2021@users.noreply.github.com> Date: Wed Nov 24 10:43:38 2021 +0000 Add TimeCal to the app library Add TimeCal to the app library commitb1fb0e6b7dMerge:559e8208dabc22c2Author: Peer David <4281901+peerdavid@users.noreply.github.com> Date: Wed Nov 24 11:10:36 2021 +0100 Merge branch 'espruino:master' into master commitdabc22c2d7Author: Gordon Williams <gw@pur3.co.uk> Date: Wed Nov 24 09:54:11 2021 +0000 custom code works on bangle2 commit2e83a511d2Author: Gordon Williams <gw@pur3.co.uk> Date: Wed Nov 24 08:51:20 2021 +0000 metronome supports bangle 2 now commitcea51d06d0Merge:cd1daba04eee3f05Author: Gordon Williams <gw@pur3.co.uk> Date: Wed Nov 24 08:50:24 2021 +0000 Merge pull request #938 from bengwalker/master Add Bangle.js 2 support for metronome app commitcd1daba0c5Author: Gordon Williams <gw@pur3.co.uk> Date: Wed Nov 24 08:46:13 2021 +0000 0.25: Fix issue where if Bangle.js 2 got a GPS fix but no reported time, errors could be caused by the widget (fix #935) commitc03ab08687Merge:1750c72ef10bf240Author: Gordon Williams <gw@pur3.co.uk> Date: Wed Nov 24 08:40:53 2021 +0000 Merge pull request #939 from Ronin0000/master Add Screenshots to Many Apps commit1750c72e94Merge:5eeb11811def233dAuthor: Gordon Williams <gw@pur3.co.uk> Date: Wed Nov 24 08:38:06 2021 +0000 Merge pull request #936 from Vingelar/master Binwatch: re-format background images commit559e820880Author: David Peer <david.peer@outlook.com> Date: Wed Nov 24 07:14:04 2021 +0100 Minor design change commitd24b8c80daAuthor: David Peer <david.peer@outlook.com> Date: Wed Nov 24 07:12:25 2021 +0100 Minor design chnges commitf10bf24018Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 17:04:07 2021 -0800 Update apps.json commitc66b098236Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:53:48 2021 -0800 Update apps.json commit638fea73c7Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:24:10 2021 -0800 Add files via upload commit4e79c896c6Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:23:33 2021 -0800 Add files via upload commit33809d8cdfAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:22:58 2021 -0800 Add files via upload commit6cb83284a7Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:22:45 2021 -0800 Add files via upload commit7e521d0d29Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:22:17 2021 -0800 Add files via upload commit9985ff03f2Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:22:00 2021 -0800 Add files via upload commit6f437c3986Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:21:15 2021 -0800 Add files via upload commitffe218a004Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:20:56 2021 -0800 Add files via upload commit9400133dd4Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:20:39 2021 -0800 Add files via upload commit76463d9279Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:19:37 2021 -0800 Add files via upload commit4011accb47Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:19:19 2021 -0800 Add files via upload commitbc5960d61aAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:19:07 2021 -0800 Add files via upload commitda5634bedaAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:18:51 2021 -0800 Add files via upload commitb9c4640f85Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:18:25 2021 -0800 Add files via upload commitd27a605a24Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:18:07 2021 -0800 Add files via upload commit52baa42e69Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:17:48 2021 -0800 Add files via upload commitdb3b6a58e4Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:17:16 2021 -0800 Add files via upload commitf0de0d8a9dAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:16:52 2021 -0800 Add files via upload commit6d4cb98ba8Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:16:34 2021 -0800 Add files via upload commit5f434d9d32Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:16:23 2021 -0800 Add files via upload commit6e72349f05Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:15:37 2021 -0800 Add files via upload commit03e4d0d7c0Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:15:21 2021 -0800 Add files via upload commitead12a1c11Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:14:54 2021 -0800 Add files via upload commita1ed32c913Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:14:30 2021 -0800 Add files via upload commitfae08d7a73Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:13:57 2021 -0800 Add files via upload commitb889e431edAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:13:32 2021 -0800 Add files via upload commitf177480160Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:13:02 2021 -0800 Add files via upload commita2fe8c3722Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:11:42 2021 -0800 Add files via upload commitc1cdf15bf5Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:10:49 2021 -0800 Add files via upload commitfb1c5529f0Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:10:11 2021 -0800 Add files via upload commit530089e083Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:09:35 2021 -0800 Add files via upload commit3556e66856Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:09:12 2021 -0800 Add files via upload commite1e32772e4Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:08:56 2021 -0800 Add files via upload commit8084bb92b7Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:08:37 2021 -0800 Add files via upload commit2c997d2964Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:08:18 2021 -0800 Add files via upload commit747626b66cAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:07:24 2021 -0800 Add files via upload commited36fae0acAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:06:59 2021 -0800 Add files via upload commite8baad3c37Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:06:33 2021 -0800 Add files via upload commit1efcebe84aAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:06:16 2021 -0800 Add files via upload commit082d3d1e95Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:05:21 2021 -0800 Add files via upload commitb10f62a6c5Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:04:58 2021 -0800 Add files via upload commit24b41c2c6fAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:04:42 2021 -0800 Add files via upload commit19a2ef1a44Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:04:01 2021 -0800 Add files via upload commit7089d6e74cAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 16:03:38 2021 -0800 Add files via upload commit431824f828Merge:15aa41c75eeb1181Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 15:15:57 2021 -0800 Merge branch 'espruino:master' into master commit5eeb1181d0Merge:546a0b166b05d928Author: Gordon Williams <gw@pur3.co.uk> Date: Tue Nov 23 20:29:18 2021 +0000 Merge pull request #937 from rigrig/barclock-b2 Barclock works fine on the Bangle.js 2 :-) commit15aa41c766Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 12:23:03 2021 -0800 Add files via upload commit6a93494e3fMerge:12443640546a0b16Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 12:22:27 2021 -0800 Merge branch 'espruino:master' into master commit546a0b16ccMerge:cb6e14f618fbd289Author: Gordon Williams <gw@pur3.co.uk> Date: Tue Nov 23 20:20:55 2021 +0000 Merge branch 'master' of github.com:espruino/BangleApps commitcb6e14f6c1Author: Gordon Williams <gw@pur3.co.uk> Date: Tue Nov 23 20:20:37 2021 +0000 messages, start of call handling and message responses, fix for scroll issue when only 2 menu items commit12443640c9Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:54:22 2021 -0800 Update apps.json commit9bdc07f861Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:47:36 2021 -0800 Update apps.json commit4eee3f05e9Merge:aafc93f018fbd289Author: bengwalker <63957296+bengwalker@users.noreply.github.com> Date: Tue Nov 23 20:46:32 2021 +0100 Merge branch 'master' into master commit298fa47cd8Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:42:50 2021 -0800 Update apps.json commit52c07f6dc8Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:40:42 2021 -0800 Update apps.json commitfe340d75bbAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:39:31 2021 -0800 Update apps.json commitaafc93f09aAuthor: bengwalker <63957296+bengwalker@users.noreply.github.com> Date: Tue Nov 23 20:35:35 2021 +0100 Update README.md update README commitbd80ea5ca0Author: bengwalker <63957296+bengwalker@users.noreply.github.com> Date: Tue Nov 23 20:31:33 2021 +0100 Update metronome.js print instructuions for banglejs2 commit51afd5ef04Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:29:27 2021 -0800 Add files via upload commitff62b603a2Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:28:51 2021 -0800 Add files via upload commitffbd331c13Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:28:29 2021 -0800 Add files via upload commit93c113a95aAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:27:25 2021 -0800 Add files via upload commitb2be26fcceAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:27:07 2021 -0800 Add files via upload commit899e78539cAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:26:06 2021 -0800 Add files via upload commit50a88d41cdAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:25:35 2021 -0800 Add files via upload commitb1d636bac2Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 11:25:10 2021 -0800 Add files via upload commit6b05d92875Author: Richard de Boer <git@tubul.net> Date: Tue Nov 23 19:42:12 2021 +0100 barclock: Fix time/date disappearing after fullscreen notification By forcing a complete redraw at lcdPower-on commit32e3d326aaAuthor: Richard de Boer <git@tubul.net> Date: Sat Nov 20 17:13:36 2021 +0100 barclock works fine on the Bangle.js 2 :-) commit1def233de2Author: Vingelar <Vingelar@mantisse.de> Date: Tue Nov 23 19:09:16 2021 +0100 changed format of bg images to binary raw format (export from emulator commite021aa2c9dAuthor: Vingelar <vingelar@weltherrschaft.at> Date: Tue Nov 23 17:59:49 2021 +0100 Update app.js binwatch: adapted names of bg images commit3dd723d10bAuthor: Vingelar <vingelar@weltherrschaft.at> Date: Tue Nov 23 17:58:48 2021 +0100 Update apps.json binwatch: shorten names of background images commit275402344eMerge:cf027b3718fbd289Author: Vingelar <vingelar@weltherrschaft.at> Date: Tue Nov 23 17:36:45 2021 +0100 Merge branch 'espruino:master' into master commit18fbd2898dMerge:5be6981adf364babAuthor: Gordon Williams <gw@pur3.co.uk> Date: Tue Nov 23 16:34:15 2021 +0000 Merge pull request #933 from peerdavid/master [LCARS Clock] Added lcars icon to watch face. commitcf027b3783Author: Vingelar <vingelar@weltherrschaft.at> Date: Tue Nov 23 17:34:13 2021 +0100 Update app.js changed names of background images commit5be6981acdAuthor: Gordon Williams <gw@pur3.co.uk> Date: Tue Nov 23 16:31:42 2021 +0000 oops - named stub wrong commitd328d94d34Author: Vingelar <vingelar@weltherrschaft.at> Date: Tue Nov 23 17:30:20 2021 +0100 Add files via upload added background files exported from Emulator commitc36fb16a68Author: Vingelar <vingelar@weltherrschaft.at> Date: Tue Nov 23 17:28:54 2021 +0100 Delete Background240_center.js removed background240_center.js (wrong format) commit4719fada28Author: Gordon Williams <gw@pur3.co.uk> Date: Tue Nov 23 16:28:34 2021 +0000 Android Remove messages on disconnect, Fix music control (ref #909) commitf431bd8a2cAuthor: Vingelar <vingelar@weltherrschaft.at> Date: Tue Nov 23 17:28:25 2021 +0100 Delete Background176_center.js remove backgounrd176_center.js (wrong format) commit1b548c9bbbAuthor: Vingelar <vingelar@weltherrschaft.at> Date: Tue Nov 23 17:27:33 2021 +0100 Update apps.json adapted naming for image files commitdf364bababMerge:d28517b2a1eeadfcAuthor: Peer David <4281901+peerdavid@users.noreply.github.com> Date: Tue Nov 23 17:16:00 2021 +0100 Merge branch 'espruino:master' into master commitd28517b2a5Merge:cd93a201465c93d8Author: David Peer <david.peer@outlook.com> Date: Tue Nov 23 17:15:18 2021 +0100 Merge branch 'master' of https://github.com/peerdavid/BangleApps commitcd93a201f8Author: David Peer <david.peer@outlook.com> Date: Tue Nov 23 17:15:15 2021 +0100 Moved logo commitdd2bb22f07Author: Vingelar <vingelar@weltherrschaft.at> Date: Tue Nov 23 17:08:57 2021 +0100 Update apps.json use .js files as background images commit03c5f996f4Author: Vingelar <vingelar@weltherrschaft.at> Date: Tue Nov 23 17:07:21 2021 +0100 Add files via upload added background files as js commit7d81bfe2bbAuthor: Vingelar <vingelar@weltherrschaft.at> Date: Tue Nov 23 16:53:40 2021 +0100 Update apps.json added missing "url" to background storage commit51b73894e4Author: Vingelar <vingelar@weltherrschaft.at> Date: Tue Nov 23 16:51:40 2021 +0100 Update app.js use background images from storage commitdab36d05a7Author: Vingelar <vingelar@weltherrschaft.at> Date: Tue Nov 23 16:48:50 2021 +0100 Update apps.json added background images to stroage commit31f2809341Author: Gordon Williams <gw@pur3.co.uk> Date: Tue Nov 23 15:44:49 2021 +0000 Fix https://github.com/espruino/BangleApps/issues/927 - App loader offers to update unknown apps commita1eeadfc22Merge:684294830a695e51Author: Gordon Williams <gw@pur3.co.uk> Date: Tue Nov 23 15:40:09 2021 +0000 Merge pull request #934 from Ronin0000/master Fix School Calendar Bug commit0a695e5143Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 07:09:14 2021 -0800 Update custom.html fix bug that was for testing commitcfecc24f42Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 23 07:05:47 2021 -0800 Delete boot.js commit684294830dAuthor: Gordon Williams <gw@pur3.co.uk> Date: Tue Nov 23 13:57:46 2021 +0000 app manager works in bjs2 commit465c93d830Merge:d20f5e593ba779eeAuthor: Peer David <4281901+peerdavid@users.noreply.github.com> Date: Tue Nov 23 14:53:47 2021 +0100 Merge branch 'espruino:master' into master commitd20f5e597eAuthor: David Peer <david.peer@outlook.com> Date: Tue Nov 23 14:53:27 2021 +0100 Updated screenshot commita283cf58fbAuthor: David Peer <david.peer@outlook.com> Date: Tue Nov 23 14:51:55 2021 +0100 Included lcars logo commitbe3345d143Merge:e3310ffc3ba779eeAuthor: hughbarney <hughbarney@googlemail.com> Date: Tue Nov 23 13:22:30 2021 +0000 Merge remote-tracking branch 'upstream/master' commite3310ffc32Author: hughbarney <hughbarney@googlemail.com> Date: Tue Nov 23 13:13:17 2021 +0000 Pastel: architect font module commit3ba779ee58Author: Gordon Williams <gw@pur3.co.uk> Date: Tue Nov 23 11:48:34 2021 +0000 Fix bangleapps after recent PRs commitaaf06b113cMerge:a035138106a6b72dAuthor: Gordon Williams <gw@pur3.co.uk> Date: Tue Nov 23 11:42:26 2021 +0000 Merge branch 'master' of github.com:espruino/BangleApps commit9600f16671Author: David Peer <david.peer@outlook.com> Date: Tue Nov 23 11:19:48 2021 +0100 Updated changelog commit98577b6269Merge:1ccabca0d3cd47f9Author: David Peer <david.peer@outlook.com> Date: Tue Nov 23 11:18:52 2021 +0100 Merge branch 'master' of https://github.com/peerdavid/BangleApps commit1ccabca0c6Author: David Peer <david.peer@outlook.com> Date: Tue Nov 23 11:18:50 2021 +0100 No hrm icon - its shown too much. commitd3cd47f957Merge:2e18795c06a6b72dAuthor: Peer David <4281901+peerdavid@users.noreply.github.com> Date: Tue Nov 23 11:12:43 2021 +0100 Merge branch 'espruino:master' into master commit2e18795c57Author: David Peer <david.peer@outlook.com> Date: Tue Nov 23 11:11:33 2021 +0100 Fixed string commit36edd449c5Author: David Peer <david.peer@outlook.com> Date: Tue Nov 23 11:10:33 2021 +0100 Minor change commit06a6b72d42Merge:a39d4102be083113Author: Gordon Williams <gw@pur3.co.uk> Date: Tue Nov 23 10:03:45 2021 +0000 Merge pull request #925 from Ronin0000/master Add School Calendar commita39d410296Merge:ab2cb243930cfa13Author: Gordon Williams <gw@pur3.co.uk> Date: Tue Nov 23 10:02:41 2021 +0000 Merge pull request #928 from peerdavid/master [LCARS Clock] Icons for different states such as GPS or HRM. commit5c3b0468d4Author: Vingelar <vingelar@weltherrschaft.at> Date: Tue Nov 23 10:59:26 2021 +0100 Update apps.json corrected format commit336501059dAuthor: Vingelar <vingelar@weltherrschaft.at> Date: Tue Nov 23 10:56:25 2021 +0100 Update apps.json removed background image commit3f4c49a8aeAuthor: Vingelar <vingelar@weltherrschaft.at> Date: Tue Nov 23 10:55:07 2021 +0100 Update app.js integrated BG image into app commitff3223e1b9Author: Vingelar <vingelar@weltherrschaft.at> Date: Tue Nov 23 10:51:02 2021 +0100 Update app.js added "require" for bg image commitab2cb24385Merge:adadf7ef162dc1f2Author: Gordon Williams <gw@pur3.co.uk> Date: Tue Nov 23 09:51:01 2021 +0000 Merge pull request #929 from weeurey/master Update app commitadadf7efd3Merge:b7f403e70f9d938fAuthor: Gordon Williams <gw@pur3.co.uk> Date: Tue Nov 23 09:49:26 2021 +0000 Merge pull request #931 from reelyactive/master emojuino@0.02 commitb7f403e79bMerge:f4e997d446383d4dAuthor: Gordon Williams <gw@pur3.co.uk> Date: Tue Nov 23 09:49:12 2021 +0000 Merge pull request #930 from rigrig/gbmusic-fix gbmusic: fix "previous" button image commita035138129Author: Gordon Williams <gw@pur3.co.uk> Date: Tue Nov 23 09:44:24 2021 +0000 fix download icon on android commitb128f5c155Author: Vingelar <vingelar@weltherrschaft.at> Date: Tue Nov 23 10:38:02 2021 +0100 Update apps.json added background image to upload commit930cfa1331Author: David Peer <david.peer@outlook.com> Date: Tue Nov 23 09:43:24 2021 +0100 New HRM Icon commit7f3f7b9eeeAuthor: David Peer <david.peer@outlook.com> Date: Tue Nov 23 08:26:37 2021 +0100 Currently, no confidence > 80 is reached... commit1fb861b82cAuthor: David Peer <david.peer@outlook.com> Date: Tue Nov 23 08:25:11 2021 +0100 HRM confidence of 80 to display commit7d95221e16Author: David Peer <david.peer@outlook.com> Date: Tue Nov 23 08:24:15 2021 +0100 Minor change commit6d8d98fb03Author: David Peer <david.peer@outlook.com> Date: Tue Nov 23 08:21:41 2021 +0100 Show HRM commita0cc4c633eAuthor: David Peer <david.peer@outlook.com> Date: Tue Nov 23 08:10:00 2021 +0100 Minor changes commitbe08311331Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Nov 22 19:11:40 2021 -0800 Update custom.html commit0664a44c45Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Nov 22 18:52:43 2021 -0800 Update apps.json commitb032ca0fc1Merge:7fd37f7ef1f063fdAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Nov 22 18:49:27 2021 -0800 Merge branch 'espruino-master' commitf1f063fd1aMerge:7fd37f7ef4e997d4Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Nov 22 18:49:09 2021 -0800 merge3 commit0f9d938fa6Author: jeffyactive <jeff@reelyactive.com> Date: Mon Nov 22 20:23:17 2021 -0500 Version bump commit5a01047cd0Author: jeffyactive <jeff@reelyactive.com> Date: Mon Nov 22 20:21:29 2021 -0500 Added screenshots commitae55c2d39fAuthor: jeffyactive <jeff@reelyactive.com> Date: Mon Nov 22 20:09:26 2021 -0500 Allow emulator, specify type as app commit58f9e7cd5bAuthor: jeffyactive <jeff@reelyactive.com> Date: Mon Nov 22 20:03:18 2021 -0500 Upgrade to emoji images and supporting text commit1a75f0813bAuthor: hughbarney <hughbarney@googlemail.com> Date: Mon Nov 22 22:50:27 2021 +0000 Pastel: font modules commitd450758f1aAuthor: hughbarney <hughbarney@googlemail.com> Date: Mon Nov 22 22:09:52 2021 +0000 Pastel: font modules commitcf66db35a9Author: hughbarney <hughbarney@googlemail.com> Date: Mon Nov 22 22:08:47 2021 +0000 Pastel: font modules commit29ecb8daa2Author: hughbarney <hughbarney@googlemail.com> Date: Mon Nov 22 22:08:19 2021 +0000 Pastel: font modules commita29bba62cbAuthor: hughbarney <hughbarney@googlemail.com> Date: Mon Nov 22 21:29:26 2021 +0000 Pastel: f_orbitron font module commit8576d90e50Author: hughbarney <hughbarney@googlemail.com> Date: Mon Nov 22 21:24:27 2021 +0000 Pastel: f_orbitron font module commit723e1a6cb2Author: hughbarney <hughbarney@googlemail.com> Date: Mon Nov 22 21:17:50 2021 +0000 Pastel: f_orbitron font module commitec7f9ac69dAuthor: hughbarney <hughbarney@googlemail.com> Date: Mon Nov 22 21:13:48 2021 +0000 Pastel: f_orbitron font module commitd68bcf1ff1Author: hughbarney <hughbarney@googlemail.com> Date: Mon Nov 22 21:05:28 2021 +0000 Pastel: f_orbitron font module commitff1d5f2d76Author: hughbarney <hughbarney@googlemail.com> Date: Mon Nov 22 21:03:53 2021 +0000 Pastel: f_orbitron font module commit7fd37f7e4eAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Nov 22 12:18:44 2021 -0800 Update custom.html commit84d9ca4b33Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Nov 22 10:57:14 2021 -0800 Update boot.js commit740f4a9566Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Nov 22 10:52:27 2021 -0800 Create boot.js not part of the current merge commitd3538a03f1Author: David Peer <david.peer@outlook.com> Date: Mon Nov 22 19:12:50 2021 +0100 Added raster commit20310fdb75Author: David Peer <david.peer@outlook.com> Date: Mon Nov 22 19:02:27 2021 +0100 Smaller icons commit3863be1830Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Nov 22 09:06:52 2021 -0800 Delete apps/schoolCalendar/fullcalendar/interaction/src directory commit5d8c13a7e6Author: David Peer <david.peer@outlook.com> Date: Mon Nov 22 17:56:29 2021 +0100 Updated screenshot accordingly commit21134a1dcdAuthor: David Peer <david.peer@outlook.com> Date: Mon Nov 22 17:55:21 2021 +0100 Better background commitcab3d43085Author: David Peer <david.peer@outlook.com> Date: Mon Nov 22 17:39:48 2021 +0100 Better alarm - shown only in icon so we can display more data. commitdb22bac0ecAuthor: David Peer <david.peer@outlook.com> Date: Mon Nov 22 17:11:15 2021 +0100 Use correct alarm icon commit162dc1f293Author: weeurey <liamure@yahoo.co.uk> Date: Mon Nov 22 16:11:07 2021 +0000 Update apps.json commitdc24ae9bfbAuthor: David Peer <david.peer@outlook.com> Date: Mon Nov 22 17:10:58 2021 +0100 Better HRM Icon commit8e688d144aMerge:741f7aabf4e997d4Author: weeurey <liamure@yahoo.co.uk> Date: Mon Nov 22 16:09:43 2021 +0000 Merge branch 'espruino:master' into master commit741f7aab52Author: weeurey <liamure@yahoo.co.uk> Date: Mon Nov 22 16:08:38 2021 +0000 Update apps.json commit247ed9faa2Author: weeurey <liamure@yahoo.co.uk> Date: Mon Nov 22 16:07:39 2021 +0000 Create ChangeLog commitd878d46d4cAuthor: weeurey <liamure@yahoo.co.uk> Date: Mon Nov 22 16:05:57 2021 +0000 Update app.js commitc720fc314bAuthor: David Peer <david.peer@outlook.com> Date: Mon Nov 22 17:03:21 2021 +0100 New alarm icon commit75fbd6882dAuthor: David Peer <david.peer@outlook.com> Date: Mon Nov 22 16:37:48 2021 +0100 Added icon for alarm commiteb20f15537Author: David Peer <david.peer@outlook.com> Date: Mon Nov 22 16:33:42 2021 +0100 Compeletely new design with icons for GPS, HRM and Compass. All Icons are open source and mentioned in the Readme.md file. commit46383d4d55Author: Richard de Boer <git@tubul.net> Date: Mon Nov 22 13:18:01 2021 +0100 gbmusic: fix "previous" button image commit1bf5132a5cAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 21:07:49 2021 -0800 Update custom.html commit618c5b7a10Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 21:02:29 2021 -0800 Update custom.html commitadfeb5e535Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 21:00:21 2021 -0800 Update custom.html commitf950fd2ee8Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 20:57:52 2021 -0800 Update custom.html commit3ee0e9bae6Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 20:49:48 2021 -0800 Update apps.json commit387bd30236Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 20:48:14 2021 -0800 Rename ChangeLog.md to ChangeLog commit6e07f282b8Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 20:41:26 2021 -0800 Add files via upload commitfea37b4992Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 20:37:40 2021 -0800 Update apps.json commit939d8f6a9aAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 20:37:21 2021 -0800 Add files via upload commit854ae5361dAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 20:34:28 2021 -0800 Update README.md commit426768eb11Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 20:32:14 2021 -0800 Update custom.html commitbf994d9accAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 18:24:29 2021 -0800 Update apps.json commit7c74c5d43fAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 18:15:40 2021 -0800 Update apps.json commit8981aa3f61Merge:e878e547100384f2Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 18:12:19 2021 -0800 Merge branch 'espruino:master' into master commite878e54787Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 18:11:43 2021 -0800 merge commit3bde4d2e48Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 16:12:16 2021 -0800 Update custom.html commit5f3c93df8cAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:37:41 2021 -0800 Update custom.html commit26bd9e35beAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:35:47 2021 -0800 Update custom.html commit8f2cc6e213Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:34:09 2021 -0800 Update custom.html commit66f0611123Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:32:48 2021 -0800 Update custom.html commit87a9504912Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:30:44 2021 -0800 Update custom.html commit626498da9dAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:24:01 2021 -0800 Update custom.html commit3472ca355aAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:21:57 2021 -0800 Update custom.html commit529b0cb463Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:19:53 2021 -0800 Update custom.html commite77d998002Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:18:21 2021 -0800 Update custom.html update commita712c37c76Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:17:58 2021 -0800 Update custom.html commit4d9d6abb9eAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:14:02 2021 -0800 Update custom.html commitf35b248448Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:09:44 2021 -0800 Update custom.html commitd0336b2854Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:06:56 2021 -0800 Update custom.html commit640c8e491eAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:03:42 2021 -0800 Update custom.html commit604153cb24Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 08:01:45 2021 -0800 Update custom.html commit0f8f1e38e8Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:58:44 2021 -0800 Update custom.html commit7f7dcb0bcfAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:58:22 2021 -0800 Update custom.html commitd42fe03dc8Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:55:08 2021 -0800 Update custom.html commit98f172fad4Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:53:01 2021 -0800 Update custom.html commitdaf8dde32bAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:49:25 2021 -0800 Update custom.html commit408bd24080Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:48:38 2021 -0800 Update custom.html commit68db21acbbAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:44:30 2021 -0800 Update custom.html commit45feb1b2ffAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:39:42 2021 -0800 Update custom.html commit3bc5fd87b6Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:39:12 2021 -0800 Update custom.html commitc3eede9868Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:37:42 2021 -0800 Update custom.html commit8426356c01Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:35:55 2021 -0800 Update custom.html commit93f09c216aAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:27:39 2021 -0800 Update apps.json commitcb748a251dAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Nov 21 07:27:20 2021 -0800 Update custom.html commita994ed6630Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 19:53:38 2021 -0800 Update custom.html commitb76bb48973Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 19:50:08 2021 -0800 Update custom.html commitf99ce683e9Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 19:46:32 2021 -0800 Update custom.html commitddfdd94ff8Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 19:42:51 2021 -0800 Update custom.html commit52675f7effAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 18:48:03 2021 -0800 Update custom.html commitd491103414Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 18:44:23 2021 -0800 Update custom.html commit71ff5959aeAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 18:42:58 2021 -0800 Update custom.html commitdaba705b37Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 18:42:16 2021 -0800 Update custom.html commit19cb5fc749Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 18:39:15 2021 -0800 Update apps.json commit6c20945898Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 18:37:41 2021 -0800 Update custom.html commitff519bdc0dAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 18:15:29 2021 -0800 Update custom.html commit34843d703aAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 18:11:54 2021 -0800 Update custom.html commit4da82197f3Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 18:01:20 2021 -0800 Update custom.html commita9c5a32bc1Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 17:56:54 2021 -0800 Update custom.html commit352fea3479Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 17:53:38 2021 -0800 Update apps.json commitab6f56c381Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 17:52:34 2021 -0800 Update custom.html commita65742ce34Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 17:48:25 2021 -0800 Update apps.json commita1a387dd60Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 17:47:52 2021 -0800 Update custom.html commit180e88e0e4Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 17:46:50 2021 -0800 Update custom.html commit0099736b8cAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 17:46:14 2021 -0800 Update apps.json commit1fdf4e954eAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 17:44:43 2021 -0800 Update apps.json commitfaa5b6b21aAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 17:44:10 2021 -0800 Update custom.html commitd617803c13Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 16:37:44 2021 -0800 Update apps.json commitdc669254bcAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 16:37:10 2021 -0800 Update custom.html commit303247fb4eAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 16:25:00 2021 -0800 Update custom.html commitd836cbd2baAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 16:15:16 2021 -0800 Update custom.html commite206bd4e1cAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 16:08:00 2021 -0800 Update custom.html commit1a6c1acce5Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 16:04:06 2021 -0800 Update custom.html commitaa20fac50eAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 16:02:52 2021 -0800 Update apps.json commit5625414e90Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:34:30 2021 -0800 Update apps.json commitebc2d80961Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:33:27 2021 -0800 Update custom.html commit6c43de3766Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:21:11 2021 -0800 Update apps.json commit37da3c68aeAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:19:46 2021 -0800 Update custom.html commit92707b9d13Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:12:50 2021 -0800 Update ChangeLog.md commitd3ca682cffAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:09:56 2021 -0800 Update apps.json commitdfd9e59993Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:08:52 2021 -0800 Update custom.html commit5d24a09ffaAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:04:41 2021 -0800 Update apps.json commite965bd7d96Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:02:43 2021 -0800 Update custom.html commit345d9c1551Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:02:12 2021 -0800 Delete schoolCalendar.js commitdc9db8a476Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:01:58 2021 -0800 Update schoolCalendar.js commit58df0a5ca2Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 15:01:03 2021 -0800 Update apps.json commit65ad4979e8Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 13:27:10 2021 -0800 Update custom.html commit9c07800c5eAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 13:07:38 2021 -0800 Update custom.html commitb108bc45fbAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 12:58:24 2021 -0800 Update custom.html commitd871855f8eAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 12:55:58 2021 -0800 Update apps.json commit99112920b2Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 12:47:34 2021 -0800 Update apps.json commit37f4329ec5Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 12:39:49 2021 -0800 Update apps.json commitba2aee642bAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 12:39:06 2021 -0800 Update custom.html commit98048dc23cAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 12:37:23 2021 -0800 Update apps.json commit1a53e8d34aAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 12:33:43 2021 -0800 Update custom.html commit993bb7298cAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 12:31:41 2021 -0800 Rename interface.html to custom.html commit3a3962bfdcAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 12:30:12 2021 -0800 Rename custom.html to interface.html commitc8ad92a3dcAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 12:20:33 2021 -0800 Update apps.json commitae85c1cee7Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Nov 20 12:14:33 2021 -0800 Update custom.html commitc1b467ba8eAuthor: weeurey <liamure@yahoo.co.uk> Date: Sat Nov 20 18:14:50 2021 +0000 Update app.js commit438537ace2Author: weeurey <liamure@yahoo.co.uk> Date: Sat Nov 20 18:10:03 2021 +0000 Update app.js commite6d736860dAuthor: weeurey <liamure@yahoo.co.uk> Date: Sat Nov 20 17:57:57 2021 +0000 Update app.js commite1add5e2b2Author: weeurey <liamure@yahoo.co.uk> Date: Sat Nov 20 17:45:02 2021 +0000 Update app.js commit09be008dfaAuthor: weeurey <liamure@yahoo.co.uk> Date: Sat Nov 20 17:39:48 2021 +0000 Update app.js commit9f26994f5cAuthor: weeurey <liamure@yahoo.co.uk> Date: Sat Nov 20 17:33:47 2021 +0000 Update app.js commit0cf4c5d70aAuthor: weeurey <liamure@yahoo.co.uk> Date: Sat Nov 20 17:10:31 2021 +0000 Update app.js commitcfdb944395Author: weeurey <liamure@yahoo.co.uk> Date: Sat Nov 20 16:32:34 2021 +0000 Update app.js Add Media controls commite3cd8f5607Author: weeurey <liamure@yahoo.co.uk> Date: Sat Nov 20 16:16:37 2021 +0000 Update app.js Removed extra unneeded code commitceed8a1238Author: weeurey <liamure@yahoo.co.uk> Date: Sat Nov 20 15:05:28 2021 +0000 Update app.js commit721a3f2608Author: weeurey <liamure@yahoo.co.uk> Date: Sat Nov 20 14:39:30 2021 +0000 Update app.js commita16bfe4d73Author: weeurey <liamure@yahoo.co.uk> Date: Sat Nov 20 14:32:57 2021 +0000 Update app.js commite72bf84a7aAuthor: bengwalker <63957296+bengwalker@users.noreply.github.com> Date: Wed Nov 17 21:29:57 2021 +0100 use dark theme for metronome commit071a7a7e68Author: bengwalker <63957296+bengwalker@users.noreply.github.com> Date: Wed Nov 17 20:46:18 2021 +0100 add support for Bangle.js 2 commit7a7175fa48Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Nov 4 16:00:41 2021 -0700 Update custom.html commite292849869Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Wed Nov 3 08:22:32 2021 -0700 Rename interface.html to custom.html commitcd7579269eAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Wed Nov 3 08:22:04 2021 -0700 Update apps.json commitdf7f9cc530Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Wed Nov 3 08:20:09 2021 -0700 Update interface.html commitada94b11cfAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Wed Nov 3 08:06:50 2021 -0700 Update interface.html commit08fc58deb5Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 2 20:20:57 2021 -0700 Update interface.html commit04b9e74a4dAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 2 20:10:58 2021 -0700 Update interface.html commitbe7af68455Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 2 20:08:24 2021 -0700 Update interface.html commitaaee5f3c06Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 2 19:13:08 2021 -0700 Update interface.html commit73819933eeAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 2 18:52:09 2021 -0700 Update schoolCalendar.js commitfa5cbd71c6Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 2 18:49:22 2021 -0700 Update README.md commitfa392008d1Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 2 18:45:24 2021 -0700 Update README.md commitc280e41560Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Nov 2 18:42:39 2021 -0700 Update README.md commit6b84a8eb30Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 18 19:43:26 2021 -0700 Update schoolCalendar.js commit5bbfb11099Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 18 19:43:11 2021 -0700 Update interface.html update interface commit6660dad4c0Merge:8c003cf61e0f6cd6Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 18 07:35:54 2021 -0700 Merge branch 'espruino:master' into master commit8c003cf6ffMerge:5c11881ff1ce196aAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Fri Oct 15 07:33:21 2021 -0700 Merge branch 'espruino:master' into master commit5c11881f75Merge:8c149dbebe34e2b0Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Oct 14 17:14:45 2021 -0700 Merge branch 'espruino:master' into master commit8c149dbea1Merge:7888cc6c300ed35bAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Wed Oct 13 07:46:16 2021 -0700 Merge branch 'espruino:master' into master commit7888cc6ce0Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 11 17:43:59 2021 -0700 Create README.md commit36a52b8b00Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 11 17:43:52 2021 -0700 Update README.md commit4f5558c41eMerge:5db16d1968cc9fbdAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 11 16:43:12 2021 -0700 Merge branch 'espruino:master' into master commit5db16d190bMerge:e799550554d98db6Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 11 07:03:23 2021 -0700 Merge branch 'espruino:master' into master commite799550544Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Oct 7 17:02:57 2021 -0700 Update schoolCalendar.js commit89f82a5043Merge:7107d510f3712e66Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Oct 7 17:02:38 2021 -0700 Merge branch 'espruino:master' into master commit7107d510a5Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 4 20:06:28 2021 -0700 Update schoolCalendar.js commita618797532Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 4 19:55:30 2021 -0700 Update schoolCalendar.js commit3c9e46c216Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 4 15:59:03 2021 -0700 Update apps.json commit941bc852c1Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 4 15:57:53 2021 -0700 Add files via upload commit4cbfac212eAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 4 15:57:26 2021 -0700 Delete apps/schoolCalender directory commitc7b723f87eMerge:8d2f4cccba08863bAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Oct 4 07:31:25 2021 -0700 Merge branch 'espruino:master' into master commit8d2f4ccca7Merge:7846b48c44aa03e4Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Fri Oct 1 07:31:42 2021 -0700 Merge branch 'espruino:master' into master commit7846b48cf6Merge:59aa9909d0fd2f01Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 30 17:22:33 2021 -0700 Merge branch 'espruino:master' into master commit59aa99092dMerge:9061acee03bbe1d2Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Wed Sep 29 08:06:54 2021 -0700 Merge branch 'espruino:master' into master commit9061acee5dAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Sep 28 17:44:12 2021 -0700 Update interface.html commit79bacc4593Merge:bb5fcdaa48bb819bAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Sep 28 07:12:44 2021 -0700 Merge branch 'espruino:master' into master commitbb5fcdaafcMerge:814fbdd628bd9e83Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Sep 27 16:15:07 2021 -0700 Merge branch 'espruino:master' into master commit814fbdd61eMerge:83d88a1ef3fd0f25Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Sep 25 08:01:44 2021 -0700 Merge branch 'espruino:master' into master commit83d88a1ea1Merge:c9bed74e71471d37Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Fri Sep 24 19:35:52 2021 -0700 Merge branch 'espruino:master' into master commitc9bed74ec2Merge:1f130c5316fe8470Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 23 15:21:18 2021 -0700 Merge branch 'espruino:master' into master commit1f130c53b4Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Wed Sep 22 07:25:41 2021 -0700 Update interface.html commit3d8ebe82c2Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Sep 21 21:07:20 2021 -0700 Update interface.html commit2ca58d2cc4Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Sep 21 21:02:14 2021 -0700 Update custom.html commitd8c149073fAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Sep 21 21:01:31 2021 -0700 Update apps.json commitceab5d46a2Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Sep 21 20:58:01 2021 -0700 Rename schoolCalender.js to app.js commit9b344eb1ecMerge:ec453c0e3b15a7f9Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Tue Sep 21 07:24:54 2021 -0700 Merge branch 'espruino:master' into master commitec453c0e10Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Sep 20 19:45:50 2021 -0700 Update README.md commita8f7fe7292Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Sep 20 07:31:41 2021 -0700 Update interface.html commit51c41d5c48Merge:b7a4ecb550ec8d97Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Mon Sep 20 07:25:50 2021 -0700 Merge branch 'espruino:master' into master commitb7a4ecb578Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Sep 19 16:48:24 2021 -0700 Update interface.html commit82320ab073Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Sep 19 16:40:43 2021 -0700 Update interface.html commit27d025bf82Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Sep 19 14:01:04 2021 -0700 Update interface.html commitbd92c0e67fAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Sep 19 13:51:31 2021 -0700 Update interface.html commitf0c596d14fAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Sep 19 13:40:29 2021 -0700 Update interface.html commitd6542bac6dAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Sep 19 07:29:46 2021 -0700 Update interface.html commit7a2ee0f711Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Sep 19 07:15:29 2021 -0700 Update interface.html commitc65ddbfc52Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sun Sep 19 07:05:32 2021 -0700 Update interface.html commit43c684f389Merge:ddd1a83c5f5b5c0dAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Sep 18 19:45:25 2021 -0700 Merge branch 'espruino-master' commit5f5b5c0dc2Merge:ddd1a83ccc2e1bbdAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Sat Sep 18 19:42:47 2021 -0700 Merge branch 'master' of git://github.com/espruino/BangleApps into espruino-master commitddd1a83c61Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Fri Sep 17 18:27:57 2021 -0700 Update interface.html commit632c98f8beAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Fri Sep 17 15:13:46 2021 -0700 Update interface.html commitc252f74e16Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Fri Sep 17 07:31:16 2021 -0700 Update interface.html commitb9b0a43e99Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 16 19:28:35 2021 -0700 Update interface.html commitafafd449fbAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 16 19:22:01 2021 -0700 Update interface.html commit45a0d50b01Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 16 19:15:25 2021 -0700 Update interface.html commiteb146fe07bAuthor: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 16 19:07:51 2021 -0700 Update interface.html commit34baf995e7Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 16 19:04:33 2021 -0700 Update interface.html commit751fbdda43Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 16 19:00:47 2021 -0700 Update interface.html commitbc71f31731Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 16 18:47:13 2021 -0700 Update interface.html commitcfde9e14a8Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 16 18:41:40 2021 -0700 Update interface.html commit135165c983Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 16 18:37:52 2021 -0700 Add files via upload commitd50ba356d6Author: Ronin0000 <89286474+Ronin0000@users.noreply.github.com> Date: Thu Sep 16 18:36:59 2021 -0700 Update apps.json
|
|
@ -1,2 +1,4 @@
|
||||||
apps/animclk/V29.LBM.js
|
apps/animclk/V29.LBM.js
|
||||||
apps/banglerun/rollup.config.js
|
apps/banglerun/rollup.config.js
|
||||||
|
apps/schoolCalendar/fullcalendar/main.js
|
||||||
|
apps/authentiwatch/qr_packed.js
|
||||||
|
|
|
||||||
12
README.md
|
|
@ -384,14 +384,18 @@ Example `settings.js`
|
||||||
```js
|
```js
|
||||||
// make sure to enclose the function in parentheses
|
// make sure to enclose the function in parentheses
|
||||||
(function(back) {
|
(function(back) {
|
||||||
function get(key, def) { return require('Settings').get('myappid', key, def); }
|
let settings = require('Storage').readJSON('myappid.json',1)||{};
|
||||||
function set(key, value) { require('Settings').set('myappid', key, value); }
|
if (typeof settings.monkeys !== "number") settings.monkeys = 12; // default value
|
||||||
|
function save(key, value) {
|
||||||
|
settings[key] = value;
|
||||||
|
require('Storage').write('myappid.json', settings);
|
||||||
|
}
|
||||||
const appMenu = {
|
const appMenu = {
|
||||||
'': {'title': 'App Settings'},
|
'': {'title': 'App Settings'},
|
||||||
'< Back': back,
|
'< Back': back,
|
||||||
'Monkeys': {
|
'Monkeys': {
|
||||||
value: get('monkeys', 12),
|
value: settings.monkeys,
|
||||||
onchange: (m) => set('monkeys', m)
|
onchange: (m) => {save('monkeys', m)}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
E.showMenu(appMenu)
|
E.showMenu(appMenu)
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 650 B |
|
|
@ -0,0 +1,3 @@
|
||||||
|
0.01: Initial version for upload
|
||||||
|
0.02: DiscoMinotaur's adjustments (removed battery and adjusted spacing)
|
||||||
|
0.03: Code style cleanup
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
# 93 Dub
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Uses many portions from Espruino documentation, example watchfaces, and the waveclk app. It also sourced from Jon Barlow's 91 Dub v2.0 source code and resources and adapted for Bangle.js 2's screen. Time, date and the battery display works. It is not pixel perfect to the original.
|
||||||
|
|
||||||
|
Contributors:
|
||||||
|
Leer10
|
||||||
|
Orviwan (original watchface and assets)
|
||||||
|
Gordon Williams (Bangle.js, watchapps for reference code and documentation)
|
||||||
|
DiscoMinotaur (adjustments)
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
require("heatshrink").decompress(atob("mEwwkBG2XwAgcPC6P/h//AAIDBA4Pwh/w+AGBAgIDBC4oVDAAITBCAIIBAYIBBAgIvHh4YCFgQPBAoIvCCwoAWIQYAQGLgAWI6bQVdQiiDOyAX/C/7+IAIYvSh4RBAYIXLAwJAHC6ZFCF5yn/C7wDBBAJ3EVAKBDC5QLBYAoLFC5nwCgoXlL44vSL653sL4QXBL6DvXC9YCBACIXCZ4YAQFaYAgPAhqCa4SDFLoZpICYIXDQKLyCDIQXVAAKI0AAYA=="))
|
||||||
|
|
@ -0,0 +1,137 @@
|
||||||
|
// get 12 hour status, code from barclock
|
||||||
|
const is12Hour = (require("Storage").readJSON("setting.json", 1) || {})["12hour"];
|
||||||
|
|
||||||
|
// define background
|
||||||
|
var imgBg = require("heatshrink").decompress(atob("2GwgJC/AH4A/AH4A/AH4A/AH4A/ACcGAhAV/Cp3gvdug+Gj0AgeABYMBAQMIggVEg/w/9/h/Gn8As3ACpk559zznmseAs0B13nq/Rie+uodCIIUZw9hzFmv+AgcCmco7MRilow1ACpN8gFhwMilFRCoMowgVEIIVhIINhwFg4GiCpfw/dhx/mn4uBCoXRhWktAVFTIVhw9mj8YseDkUnqPEoeuugVEAAlgSgICBACAVC8AUQCQQVSAEsD/4ASeYgA/ACkHNiK5Cj4VR/AVBng+RCQVwCqMOAQPhIKOHgEB44VR8YVBx4VR+eAgOfCqPxwEDCqX5CoKvS/PAgc/YqQVU/gV/Cv4V/Cv4V/Cv4V/Cv4V/Cv4V/Cv4V/Cv4V/Cv4V/Cv4V/Cv4V/Cv4V/Cv4V/Cv4V/CsMfCqP4CoOfCqP54EBx4VR+OAgPPCqPzwEA44VR4cAgHhCqMHCoNwAQIAPjwCBngVRvgCBV6XwCoMHCqPAHyIA/AEigEf4IAOkAEDoAPJWAtA+PHv+Al6uPCofAGAgALoHz51/8AVT+IVS+4VPpMR73woH27n/8Eh8+ZmadIqsoyGICofAkMUktJFZAVBzgVBv34YgMhi8RkIVJnGQIIN8/H34FB8kJiIVIkVEyGQkF8/Pj4GBkhBKCoOexEQvHx8fBgMXzMxTJkICoXCVx8AggDGABsD/4AB/AVQAH4APA"));
|
||||||
|
|
||||||
|
// define fonts
|
||||||
|
// 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");
|
||||||
|
// date font first char 48 12 by 15
|
||||||
|
var fontDate = atob("AAAAAfv149wAeADwAeADwAeADvHr9+AAAAAAAAAAAAAAAAAAAAAAAAAPHn9/AAAAAAP0A9wweGDwweGDwweGDvAL8AAAAAAAAAAAgwOGDwweGDwweGDvHp98AAAAA/gB6AAwAGAAwAGAAwAGAPHj9/AAAAAfgF6BwweGDwweGDwweGDgHoB+AAAAAfv169wweGDwweGDwweGDgHoB+AAAAAAAAAAgAGAAwAGAAwAGAAvHh9/AAAAAfv169wweGDwweGDwweGDvHr9+AAAAAfgF6BwweGDwweGDwweGDvHr9+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
|
||||||
|
|
||||||
|
// define days of the week images
|
||||||
|
var imgMon = E.toArrayBuffer(atob("Ig8BgHwfD5AvB8HD8z8wMPzPzMQzM/M/DMz8z8c7f7f7z////3Oz+3+PzPzPw/M/M/D8z8z8PzPzPw/vB8/n/8H3/A=="));
|
||||||
|
var imgTue = E.toArrayBuffer(atob("Ig8BwDv9wDAOfmgf/5+Z///n5n/5+fmf/n5+Z//fv9oH////Af37/b/+fn5n/5+fmf/n5+Z/+fn5n/5/g+gfn+D8AA=="));
|
||||||
|
var imgWed = E.toArrayBuffer(atob("Ig8Bf7gHgM/NA9Az8z/z8PzP/Pw/M/8/D8z/z8c7QPf7z+A//3O3/3+MzP/PwzM/8/D8z/z8PzP/PxAtA9A4B4B4DA=="));
|
||||||
|
var imgThu = E.toArrayBuffer(atob("Ig8BgHf7f6Ac/M/P/z8z8//PzPzz8/M/PPz8z8+/QLf7/+A///v3+3+8/PzPzz8/M/PPz8z88/PzPzz8/vB/P3/8HA=="));
|
||||||
|
var imgFri = E.toArrayBuffer(atob("Ig8B/wDwP7+geg/P5/5+c/n/n5z+f+fnP5/5+c/oHoF7/AfAf/7/7/+/n/k/z+f+R/P5/5j8/n/nHz+/++PP7//8+A=="));
|
||||||
|
var imgSat = E.toArrayBuffer(atob("Ig8B4DwDwDgOgXAJ/5+f/n/n5/+f+fn55/5+fnoHoF/fAfAf//+b/f3/5n5+f/mfn5/+Z+fn//n5+eAef358B7//nA=="));
|
||||||
|
var imgSun = E.toArrayBuffer(atob("Ig8BwHf7D7Ac/MHD/z8wMP/PzMQ/8/M/D/z8z8QPf7f6A/////83+3+/zPzPz/M/M/P8z8z8//PzPwA/B8/oD8H3/A=="));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// define icons
|
||||||
|
var imgSep = E.toArrayBuffer(atob("BhsBAAAAAA///////////////AAAAAAA"));
|
||||||
|
var imgPercent = E.toArrayBuffer(atob("BwcBuq7ffbqugA=="));
|
||||||
|
var img24hr = E.toArrayBuffer(atob("EwgBj7vO53na73tcDtu9uDev7vA93g=="));
|
||||||
|
var imgPM = E.toArrayBuffer(atob("EwgB+HOfdnPu1X3ar4dV9+q+/bfftg=="));
|
||||||
|
|
||||||
|
//vars
|
||||||
|
var separator = true;
|
||||||
|
var is24hr = !is12Hour;
|
||||||
|
var leadingZero = true;
|
||||||
|
|
||||||
|
//the following 2 sections are used from waveclk to schedule minutely updates
|
||||||
|
// timeout used to update every minute
|
||||||
|
var drawTimeout;
|
||||||
|
|
||||||
|
// schedule a draw for the next minute
|
||||||
|
function queueDraw() {
|
||||||
|
if (drawTimeout) clearTimeout(drawTimeout);
|
||||||
|
drawTimeout = setTimeout(function() {
|
||||||
|
drawTimeout = undefined;
|
||||||
|
draw();
|
||||||
|
}, 60000 - (Date.now() % 60000));
|
||||||
|
}
|
||||||
|
|
||||||
|
function drawBackground() {
|
||||||
|
g.setBgColor(0,0,0);
|
||||||
|
g.setColor(1,1,1);
|
||||||
|
g.clear();
|
||||||
|
g.drawImage(imgBg,0,0);
|
||||||
|
g.reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
function draw(){
|
||||||
|
drawBackground();
|
||||||
|
var date = new Date();
|
||||||
|
var h = date.getHours(), m = date.getMinutes();
|
||||||
|
var d = date.getDate(), w = date.getDay();
|
||||||
|
g.reset();
|
||||||
|
g.setBgColor(0,0,0);
|
||||||
|
g.setColor(1,1,1);
|
||||||
|
|
||||||
|
//draw 24 hr indicator and 12 hr specific behavior
|
||||||
|
if (is24hr){
|
||||||
|
g.drawImage(img24hr,32, 65);
|
||||||
|
if (leadingZero){
|
||||||
|
h = ("0"+h).substr(-2);
|
||||||
|
}
|
||||||
|
} else if (h > 12) {
|
||||||
|
g.drawImage(imgPM,40, 70);
|
||||||
|
h = h - 12;
|
||||||
|
if (leadingZero){
|
||||||
|
h = ("0"+h).substr(-2);
|
||||||
|
} else {
|
||||||
|
h = " " + h;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//draw separator
|
||||||
|
if (separator){
|
||||||
|
g.drawImage(imgSep, 85,98);}
|
||||||
|
|
||||||
|
//draw day of week
|
||||||
|
var imgW = null;
|
||||||
|
if (w == 0) {imgW = imgSun;}
|
||||||
|
if (w == 1) {imgW = imgMon;}
|
||||||
|
if (w == 2) {imgW = imgTue;}
|
||||||
|
if (w == 3) {imgW = imgWed;}
|
||||||
|
if (w == 4) {imgW = imgThr;}
|
||||||
|
if (w == 5) {imgW = imgFri;}
|
||||||
|
if (w == 6) {imgW = imgSat;}
|
||||||
|
g.drawImage(imgW, 85, 63);
|
||||||
|
|
||||||
|
|
||||||
|
// draw nums
|
||||||
|
// draw time
|
||||||
|
g.setColor(0,0,0);
|
||||||
|
g.setBgColor(1,1,1);
|
||||||
|
g.setFontCustom(fontNum, 48, 28, 41);
|
||||||
|
if (h<10) {
|
||||||
|
if (leadingZero) {
|
||||||
|
h = ("0"+h).substr(-2);
|
||||||
|
} else {
|
||||||
|
h = " " + h;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
g.drawString(h, 25, 90, true);
|
||||||
|
g.drawString(("0"+m).substr(-2), 92, 90, true);
|
||||||
|
// draw date
|
||||||
|
g.setFontCustom(fontDate, 48, 12, 15);
|
||||||
|
g.drawString(("0"+d).substr(-2), 123,63, true);
|
||||||
|
|
||||||
|
// widget redraw
|
||||||
|
Bangle.drawWidgets();
|
||||||
|
queueDraw();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
draw();
|
||||||
|
|
||||||
|
//the following section is also from waveclk
|
||||||
|
Bangle.on('lcdPower',on=>{
|
||||||
|
if (on) {
|
||||||
|
draw(); // draw immediately, queue redraw
|
||||||
|
} else { // stop draw timer
|
||||||
|
if (drawTimeout) clearTimeout(drawTimeout);
|
||||||
|
drawTimeout = undefined;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Bangle.setUI("clock");
|
||||||
|
Bangle.loadWidgets();
|
||||||
|
Bangle.drawWidgets();
|
||||||
|
After Width: | Height: | Size: 3.2 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
0.01: Beta version for Bangle 2 (2021/11/28)
|
||||||
|
|
@ -0,0 +1,15 @@
|
||||||
|
# A Clock with Timer, Map and Time Zones
|
||||||
|
|
||||||
|
* Works with Bangle 2
|
||||||
|
* Timer
|
||||||
|
* Right tap: start/increase by 10 minutes; Left tap: decrease by 5 minutes
|
||||||
|
* Short buzz at T-30, T-20, T-10 ; Double buzz at T
|
||||||
|
* Other time zones
|
||||||
|
* Currently hardcoded to Paris and Tokyo (this will be customizable in a future version)
|
||||||
|
* World Map
|
||||||
|
* The yellow line shows the position of the sun
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Creator
|
||||||
|
[@alainsaas](https://github.com/alainsaas)
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
require("heatshrink").decompress(atob("mEwgP/AAnAnEH4Ef+eAiEDAoPDz+T/ff/+T3+T/VAj8z/0f4VP51zDoX/5Hzz/z//f5EBAoP+r4FBFIgPBAAP4v5AFABPvrwSB0YFBrtX/+nCI3u/+vhFhh/q/f/9Fhu4NB187v3n/fvCIf/CIIAFRIUB8EAg3QgJmB4H/iAEB//+/lggqUC//wi4FB8AHBj4FB+H/wEzBgPg/0AkE3BIP8gE8n4VBGIN/IAPAsEA//8v6OBAoUjgEIAoPwkMATIN//BQBgfgg/wAoMH/EHEwILB/gNBgFgAocByEB/ED9AoCAoPAgE4gHwgeAgOYgAVBAoMYAoKECAoIVBAoIfBoCRCAAw="))
|
||||||
|
|
@ -0,0 +1,129 @@
|
||||||
|
// assets
|
||||||
|
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 IMAGEHEIGHT = 81;
|
||||||
|
|
||||||
|
Graphics.prototype.setFontMichroma36 = function() {
|
||||||
|
g.setFontCustom(atob("AAAAAAAAAAAAAAAAeAAAAAeAAAAAeAAAAAeAAAAAAAAAAAAAAAAAAAAAAAGAAAAA+AAAAD+AAAAP+AAAA/8AAAD/wAAAf/AAAB/4AAAH/gAAAf+AAAB/4AAAH/gAAAf+AAAAfwAAAAfAAAAAcAAAAAAAAAAAAAAAAAAAAAAAA///AAD///wAH///4AP///8APwAD+APAAAeAeAAAeAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAeAPAAAeAPwAD+AP///8AH///4AD///wAA///AAAAAAAAAAAAAAAAAAAAAEAAAAAOAAAAAfAAAAA+AAAAB8AAAAD8AAAAH4AAAAPwAAAAPgAAAAfAAAAAf///+Af///+Af///+Af///+AAAAAAAAAAAAAAAAAAAAAAAAAA/Af+AD/A/+AH/B/+AP/D/+APwD4eAPADweAfADweAeADweAeADweAeADweAeAHgeAeAHgeAeAHgeAeAHgeAeAHgeAeAHgeAeAHgeAeAHgeAeAHgeAeAHgeAeAPgeAeAPAeAeAPAeAeAPAeAeAPAeAfAPAeAPw/AeAP/+AeAH/+AeAD/8AeAB/wAOAAAAAAAAAAAAAAAAAAAAAAAAAB8APgAD8AP4AH8AP8AP8AP8APgAB+AfAAAeAeAAAeAeAAAPAeAAAPAeAAAPAeAAAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAeAfAeAeAPx/h+AP///+AH///8AD///4AB/h/gAAAAAAAAAAAAAAAAAAAAAAeAAAAA/AAAAA/AAAAB/AAAAD/AAAAH/AAAAPvAAAAPPAAAAfPAAAA+PAAAB8PAAAD4PAAADwPAAAHwPAAAPgPAAAfAPAAA+APAAA8APAAB8APAAD4APAAHwAPAAPgAPAAPAAPAAfAAPAAf///+Af///+Af///+Af///+AAAAPAAAAAPAAAAAPAAAAAPAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAf/8PgAf/8P4Af/8P8Af/8P8AeB4A+AeB4AeAeDwAeAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAfAeDwAeAeD4A+AeD+D+AeB//8AeB//4AeA//4AAAP/AAAAAAAAAAAAAAAAAAAAAAAAAAA///AAD///wAH///4AH///8AP4fB+APAeAeAfA8AeAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAfA8APAPA+AeAPgeAeAP8fh+AH8f/8AD8P/8AA8H/4AAAB/gAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAeAAAAAeAAAAAeAAAAAeAAAAAeAAACAeAAAGAeAAAOAeAAAeAeAAA+AeAAD+AeAAH8AeAAP4AeAAfwAeAA/gAeAB/AAeAD+AAeAP4AAeAfwAAeA/gAAeB/AAAeD+AAAeH8AAAefwAAAe/gAAAf/AAAAf+AAAAf8AAAAf4AAAAfgAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAMAAB+B/wAD/j/4AH/3/8AP///+AP//A+AfB+AeAeA+AeAeA+APAeA+APAeA+APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA+APAeA+APAeA+APAeA+AOAeA+AeAPh/A+AP///+AP/3/8AH/3/8AB/D/wAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAD/4HAAH/8HwAP/+H4AP5/H8AfAfA8AeAPAeAeAPAeAeAPAeAeAHgfAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHAPAeAPAOAeAPAeAPAPAeAPwfB+AP///8AH///4AD///wAA///AAAAAAAAAAAAAAAAAAAAAAAAAAAB8DwAAB8HwAAB8HwAAB8DwAAAAAAAAAAAAA"), 46, atob("CBIkESMjJCMjIyMjCA=="), 36+(1<<8)+(1<<16));
|
||||||
|
};
|
||||||
|
|
||||||
|
Graphics.prototype.setFontMichroma16 = function(scale) {
|
||||||
|
g.setFontCustom(atob("AAAAGAAYAAAAGAB4A/APwD4AeADgAAAAAAA/8H/4YBjAGMAcwBzAHMAcwBzAHMAYYBh/+D/wAAAAABgAOABwAGAA//h/+AAAAAA4+Hn4YZjhmMOYw5jDmMMYwxjDGOMYYxh/GD4YAAAAADBwcHhgGOAYwBzHHMccxxzHHMcc5xhnGH/4PfAAAAAAAOAB4APgB2AGYAxgHGA4YDBgYGD/+P/4AOAAYAAAAAD+cP547BjsGOwc7BzsHOwc7BzsHOwY7zjv+APgAAAAAD/wf/hmGOYYxhzGHMYcxhzGHOYYZhh3uDP4AeAAAEAA4ADgAOAI4DjgeODw4eDjgOcA7gD8APgA8AAAAAAAAAA58H/4bxjmGMYcxhzGHMYcxhzGHOYYbxh/+DnwAAAAADxgfnBnOOMYwxjDHMMcwxzDHMMY4xhjOH/4P/AAAAAABnAGcAAA"), 46, atob("BAgQCBAQEBAQEBAQBA=="), 16+(scale<<8)+(1<<16));
|
||||||
|
};
|
||||||
|
|
||||||
|
// timer
|
||||||
|
var timervalue = 0;
|
||||||
|
var istimeron = false;
|
||||||
|
var timertick;
|
||||||
|
|
||||||
|
Bangle.on('touch',t=>{
|
||||||
|
if (t == 1) {
|
||||||
|
Bangle.buzz(30);
|
||||||
|
if (timervalue < 5*60) { timervalue = 1 ; }
|
||||||
|
else { timervalue -= 5*60; }
|
||||||
|
}
|
||||||
|
else if (t == 2) {
|
||||||
|
Bangle.buzz(30);
|
||||||
|
if (!istimeron) {
|
||||||
|
istimeron = true;
|
||||||
|
timertick = setInterval(countDown, 1000);
|
||||||
|
}
|
||||||
|
timervalue += 60*10;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
function timeToString(duration) {
|
||||||
|
var hrs = ~~(duration / 3600);
|
||||||
|
var mins = ~~((duration % 3600) / 60);
|
||||||
|
var secs = ~~duration % 60;
|
||||||
|
var ret = "";
|
||||||
|
if (hrs > 0) {
|
||||||
|
ret += "" + hrs + ":" + (mins < 10 ? "0" : "");
|
||||||
|
}
|
||||||
|
ret += "" + mins + ":" + (secs < 10 ? "0" : "");
|
||||||
|
ret += "" + secs;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
function countDown() {
|
||||||
|
timervalue--;
|
||||||
|
|
||||||
|
g.reset().clearRect(0, 76, 44+44, g.getHeight()/2+6);
|
||||||
|
|
||||||
|
g.setFontAlign(0, -1, 0);
|
||||||
|
g.setFont("6x8").drawString("Timer", 44, g.getHeight()/2-20);
|
||||||
|
g.setFont("Michroma16").drawString(timeToString(timervalue), 44, g.getHeight()/2-10);
|
||||||
|
|
||||||
|
if (timervalue <= 0) {
|
||||||
|
istimeron = false;
|
||||||
|
clearInterval(timertick);
|
||||||
|
|
||||||
|
Bangle.buzz().then(()=>{
|
||||||
|
return new Promise(resolve=>setTimeout(resolve, 500));
|
||||||
|
}).then(()=>{
|
||||||
|
return Bangle.buzz(1000);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if ((timervalue <= 30) && (timervalue % 10 == 0)) { Bangle.buzz(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
function showWelcomeMessage() {
|
||||||
|
g.reset().clearRect(0, 76, 44+44, g.getHeight()/2+6);
|
||||||
|
g.setFontAlign(0, 0).setFont("6x8");
|
||||||
|
g.drawString("Touch right to", 44, 80);
|
||||||
|
g.drawString("start timer", 44, 88);
|
||||||
|
setTimeout(function(){ g.reset().clearRect(0, 76, 44+44, g.getHeight()/2+6); }, 8000);
|
||||||
|
}
|
||||||
|
|
||||||
|
// time
|
||||||
|
var drawTimeout;
|
||||||
|
|
||||||
|
function getGmt() {
|
||||||
|
var d = new Date();
|
||||||
|
var gmt = new Date(d.getTime() + d.getTimezoneOffset() * 60 * 1000);
|
||||||
|
return gmt;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getTimeFromTimezone(offset) {
|
||||||
|
return new Date(getGmt().getTime() + offset * 60 * 60 * 1000);
|
||||||
|
}
|
||||||
|
|
||||||
|
function queueNextDraw() {
|
||||||
|
if (drawTimeout) clearTimeout(drawTimeout);
|
||||||
|
drawTimeout = setTimeout(function() {
|
||||||
|
drawTimeout = undefined;
|
||||||
|
draw();
|
||||||
|
}, 60000 - (Date.now() % 60000));
|
||||||
|
}
|
||||||
|
|
||||||
|
function draw() {
|
||||||
|
g.reset().clearRect(0,24,g.getWidth(),g.getHeight()-IMAGEHEIGHT);
|
||||||
|
g.drawImage(getImg(),0,g.getHeight()-IMAGEHEIGHT);
|
||||||
|
|
||||||
|
var x_sun = 176 - (getGmt().getHours() / 24 * 176 + 4);
|
||||||
|
g.setColor('#ff0').drawLine(x_sun, g.getHeight()-IMAGEHEIGHT, x_sun, g.getHeight());
|
||||||
|
g.reset();
|
||||||
|
|
||||||
|
var locale = require("locale");
|
||||||
|
|
||||||
|
var date = new Date();
|
||||||
|
g.setFontAlign(0,0);
|
||||||
|
g.setFont("Michroma36").drawString(locale.time(date,1), g.getWidth()/2, 46);
|
||||||
|
g.setFont("6x8");
|
||||||
|
g.drawString(locale.date(new Date(),1), 125, 68);
|
||||||
|
g.drawString("PAR "+locale.time(getTimeFromTimezone(1),1), 125, 80);
|
||||||
|
g.drawString("TYO "+locale.time(getTimeFromTimezone(9),1), 125, 88);
|
||||||
|
|
||||||
|
queueNextDraw();
|
||||||
|
}
|
||||||
|
|
||||||
|
// init
|
||||||
|
g.setTheme({bg:"#fff",fg:"#000",dark:false}).clear();
|
||||||
|
draw();
|
||||||
|
Bangle.setUI("clock");
|
||||||
|
Bangle.loadWidgets();
|
||||||
|
Bangle.drawWidgets();
|
||||||
|
showWelcomeMessage();
|
||||||
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
|
|
@ -0,0 +1 @@
|
||||||
|
1.00: Release (2021/12/01)
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
# A Speech Timer
|
||||||
|
|
||||||
|
* A timer designed to help keeping your speeches and presentations to time
|
||||||
|
* Vibrates 1-2-3 times and changes screen color within the target time range.
|
||||||
|
* Example for a 5 to 7 minutes speech: vibrates once at 5:00 (green), twice at 6:00 (yellow), thrice at 7:00 (red).
|
||||||
|
* Use the buttons to start a timer
|
||||||
|
* Swipe left or right to choose different target times
|
||||||
|
* Touching the timer on the upper part of the screen locks (or unlocks) the buttons to prevent accidental changes
|
||||||
|
|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|

|
||||||
|
|
||||||
|
## Creator
|
||||||
|
[@alainsaas](https://github.com/alainsaas)
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
require("heatshrink").decompress(atob("mEwgP//kAj//AAP5/+PApH7//PAonvAoXzAonj//nApHggEHAoWAgA5BAAJCCAoU/IYIFCv///w0CAonrv/HAoXLv+DAogLFgPeAoV+nlOAoV4/8+AoV79+eFIVzAof7u/v5xBCs4FL84FE//O74FBu4FB64FD73TAoNz/+eAoV5IIIFCvl8vwFCv8A/wFDO4IFFFIQFCGoSVFUIqtDh65D/1vYof+Y4LLDw7dD/0ndIYRCeoQFC/P/z/+i///oFBGoX8gEfAgI="))
|
||||||
|
|
@ -0,0 +1,173 @@
|
||||||
|
Graphics.prototype.setFontMichroma36 = function() {
|
||||||
|
g.setFontCustom(atob("AAAAAAAAAAAAAAAAeAAAAAeAAAAAeAAAAAeAAAAAAAAAAAAAAAAAAAAAAAGAAAAA+AAAAD+AAAAP+AAAA/8AAAD/wAAAf/AAAB/4AAAH/gAAAf+AAAB/4AAAH/gAAAf+AAAAfwAAAAfAAAAAcAAAAAAAAAAAAAAAAAAAAAAAA///AAD///wAH///4AP///8APwAD+APAAAeAeAAAeAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAPAeAAAeAPAAAeAPwAD+AP///8AH///4AD///wAA///AAAAAAAAAAAAAAAAAAAAAEAAAAAOAAAAAfAAAAA+AAAAB8AAAAD8AAAAH4AAAAPwAAAAPgAAAAfAAAAAf///+Af///+Af///+Af///+AAAAAAAAAAAAAAAAAAAAAAAAAA/Af+AD/A/+AH/B/+AP/D/+APwD4eAPADweAfADweAeADweAeADweAeADweAeAHgeAeAHgeAeAHgeAeAHgeAeAHgeAeAHgeAeAHgeAeAHgeAeAHgeAeAHgeAeAPgeAeAPAeAeAPAeAeAPAeAeAPAeAfAPAeAPw/AeAP/+AeAH/+AeAD/8AeAB/wAOAAAAAAAAAAAAAAAAAAAAAAAAAB8APgAD8AP4AH8AP8AP8AP8APgAB+AfAAAeAeAAAeAeAAAPAeAAAPAeAAAPAeAAAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAPAeAeAeAfAeAeAPx/h+AP///+AH///8AD///4AB/h/gAAAAAAAAAAAAAAAAAAAAAAeAAAAA/AAAAA/AAAAB/AAAAD/AAAAH/AAAAPvAAAAPPAAAAfPAAAA+PAAAB8PAAAD4PAAADwPAAAHwPAAAPgPAAAfAPAAA+APAAA8APAAB8APAAD4APAAHwAPAAPgAPAAPAAPAAfAAPAAf///+Af///+Af///+Af///+AAAAPAAAAAPAAAAAPAAAAAPAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAf/8PgAf/8P4Af/8P8Af/8P8AeB4A+AeB4AeAeDwAeAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAPAeDwAfAeDwAeAeD4A+AeD+D+AeB//8AeB//4AeA//4AAAP/AAAAAAAAAAAAAAAAAAAAAAAAAAA///AAD///wAH///4AH///8AP4fB+APAeAeAfA8AeAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAfA8APAPA+AeAPgeAeAP8fh+AH8f/8AD8P/8AA8H/4AAAB/gAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAeAAAAAeAAAAAeAAAAAeAAAAAeAAACAeAAAGAeAAAOAeAAAeAeAAA+AeAAD+AeAAH8AeAAP4AeAAfwAeAA/gAeAB/AAeAD+AAeAP4AAeAfwAAeA/gAAeB/AAAeD+AAAeH8AAAefwAAAe/gAAAf/AAAAf+AAAAf8AAAAf4AAAAfgAAAAfAAAAAAAAAAAAAAAAAAAAAAAAAAMAAB+B/wAD/j/4AH/3/8AP///+AP//A+AfB+AeAeA+AeAeA+APAeA+APAeA+APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA8APAeA+APAeA+APAeA+APAeA+AOAeA+AeAPh/A+AP///+AP/3/8AH/3/8AB/D/wAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAD/4HAAH/8HwAP/+H4AP5/H8AfAfA8AeAPAeAeAPAeAeAPAeAeAHgfAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHgPAeAHAPAeAPAOAeAPAeAPAPAeAPwfB+AP///8AH///4AD///wAA///AAAAAAAAAAAAAAAAAAAAAAAAAAAB8DwAAB8HwAAB8HwAAB8DwAAAAAAAAAAAAA"), 46, atob("CBIkESMjJCMjIyMjCA=="), 36+(1<<8)+(1<<16));
|
||||||
|
};
|
||||||
|
|
||||||
|
Graphics.prototype.setFontMichroma16 = function(scale) {
|
||||||
|
g.setFontCustom(atob("AAAAGAAYAAAAGAB4A/APwD4AeADgAAAAAAA/8H/4YBjAGMAcwBzAHMAcwBzAHMAYYBh/+D/wAAAAABgAOABwAGAA//h/+AAAAAA4+Hn4YZjhmMOYw5jDmMMYwxjDGOMYYxh/GD4YAAAAADBwcHhgGOAYwBzHHMccxxzHHMcc5xhnGH/4PfAAAAAAAOAB4APgB2AGYAxgHGA4YDBgYGD/+P/4AOAAYAAAAAD+cP547BjsGOwc7BzsHOwc7BzsHOwY7zjv+APgAAAAAD/wf/hmGOYYxhzGHMYcxhzGHOYYZhh3uDP4AeAAAEAA4ADgAOAI4DjgeODw4eDjgOcA7gD8APgA8AAAAAAAAAA58H/4bxjmGMYcxhzGHMYcxhzGHOYYbxh/+DnwAAAAADxgfnBnOOMYwxjDHMMcwxzDHMMY4xhjOH/4P/AAAAAABnAGcAAA"), 46, atob("BAgQCBAQEBAQEBAQBA=="), 16+(scale<<8)+(1<<16));
|
||||||
|
};
|
||||||
|
|
||||||
|
function timeToString(duration) {
|
||||||
|
var hrs = ~~(duration / 3600);
|
||||||
|
var mins = ~~((duration % 3600) / 60);
|
||||||
|
var secs = ~~duration % 60;
|
||||||
|
var ret = "";
|
||||||
|
if (hrs > 0) {
|
||||||
|
ret += "" + hrs + ":" + (mins < 10 ? "0" : "");
|
||||||
|
}
|
||||||
|
ret += "" + mins + ":" + (secs < 10 ? "0" : "");
|
||||||
|
ret += "" + secs;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
var newtimer_left_from = 60;
|
||||||
|
var newtimer_left_to = 2*60;
|
||||||
|
|
||||||
|
var newtimer_right_from = 5*60;
|
||||||
|
var newtimer_right_to = 7*60;
|
||||||
|
|
||||||
|
var current_from = 5*60;
|
||||||
|
var current_mid = 6*60;
|
||||||
|
var current_to = 7*60;
|
||||||
|
var current_value = 0;
|
||||||
|
|
||||||
|
var timerinterval;
|
||||||
|
var istimeron = false;
|
||||||
|
|
||||||
|
var islocked = false;
|
||||||
|
|
||||||
|
function countDown() {
|
||||||
|
current_value++;
|
||||||
|
draw();
|
||||||
|
|
||||||
|
if (current_value == current_from) {
|
||||||
|
Bangle.buzz(500);
|
||||||
|
} else if (current_value == current_mid) {
|
||||||
|
Bangle.buzz(400).then(()=>{
|
||||||
|
return new Promise(resolve=>setTimeout(resolve, 800));
|
||||||
|
}).then(()=>{
|
||||||
|
return Bangle.buzz(500);
|
||||||
|
});
|
||||||
|
} else if (current_value == current_to) {
|
||||||
|
Bangle.buzz(300).then(()=>{
|
||||||
|
return new Promise(resolve=>setTimeout(resolve, 600));
|
||||||
|
}).then(()=>{
|
||||||
|
Bangle.buzz(300).then(()=>{
|
||||||
|
return new Promise(resolve=>setTimeout(resolve, 600));
|
||||||
|
}).then(()=>{
|
||||||
|
return Bangle.buzz(500);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Bangle.on('touch',(touchside, touchdata)=>{
|
||||||
|
if (!islocked && istimeron && touchdata.y > (100+10)) {
|
||||||
|
Bangle.buzz(40);
|
||||||
|
istimeron = false;
|
||||||
|
clearInterval(timerinterval);
|
||||||
|
} else if (touchdata.y > 24 && touchdata.y < (100-10)) {
|
||||||
|
Bangle.buzz(40);
|
||||||
|
islocked = !islocked;
|
||||||
|
} else if (!islocked && touchdata.y > (100+10) && touchdata.x > 88 + 10) {
|
||||||
|
Bangle.buzz(40);
|
||||||
|
current_from = newtimer_right_from;
|
||||||
|
current_to = newtimer_right_to;
|
||||||
|
current_mid = (current_from + current_to) / 2;
|
||||||
|
current_value = 0;
|
||||||
|
if (timerinterval) clearInterval(timerinterval);
|
||||||
|
timerinterval = setInterval(countDown, 1000);
|
||||||
|
istimeron = true;
|
||||||
|
} else if (!islocked && touchdata.y > (100+10) && touchdata.x < 88 - 10) {
|
||||||
|
Bangle.buzz(40);
|
||||||
|
current_from = newtimer_left_from;
|
||||||
|
current_to = newtimer_left_to;
|
||||||
|
current_mid = (current_from + current_to) / 2;
|
||||||
|
current_value = 0;
|
||||||
|
if (timerinterval) clearInterval(timerinterval);
|
||||||
|
timerinterval = setInterval(countDown, 1000);
|
||||||
|
istimeron = true;
|
||||||
|
}
|
||||||
|
showInstructions = false;
|
||||||
|
draw();
|
||||||
|
});
|
||||||
|
|
||||||
|
Bangle.on('swipe',(swiperight, swipedown)=>{
|
||||||
|
console.log(swiperight);
|
||||||
|
console.log(swipedown);
|
||||||
|
|
||||||
|
if (swiperight == -1) {
|
||||||
|
if (newtimer_left_from >= 60) {
|
||||||
|
newtimer_left_from += 60;
|
||||||
|
newtimer_left_to += 60;
|
||||||
|
} else { // special case for 0:30 to 1:00
|
||||||
|
newtimer_left_from = 60;
|
||||||
|
newtimer_left_to = 120;
|
||||||
|
}
|
||||||
|
newtimer_right_from += 60;
|
||||||
|
newtimer_right_to += 60;
|
||||||
|
draw();
|
||||||
|
} else if (swiperight == 1) {
|
||||||
|
if (newtimer_left_from > 60) {
|
||||||
|
newtimer_left_from -= 60;
|
||||||
|
newtimer_left_to -= 60;
|
||||||
|
} else { // special case for 0:30 to 1:00
|
||||||
|
newtimer_left_from = 30;
|
||||||
|
newtimer_left_to = 60;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (newtimer_right_from > 120) {
|
||||||
|
newtimer_right_from -= 60;
|
||||||
|
newtimer_right_to -= 60;
|
||||||
|
}
|
||||||
|
draw();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
var drawTimeout;
|
||||||
|
var showInstructions = true;
|
||||||
|
|
||||||
|
function draw() {
|
||||||
|
g.reset();
|
||||||
|
if (current_value >= current_to) { g.setBgColor("#F00"); }
|
||||||
|
else if (current_value >= current_mid) { g.setBgColor("#FF0"); }
|
||||||
|
else if (current_value >= current_from) { g.setBgColor("#8F8"); }
|
||||||
|
g.clearRect(0,24,176,176);
|
||||||
|
|
||||||
|
g.reset();
|
||||||
|
g.setFontAlign(0, 0);
|
||||||
|
|
||||||
|
g.setFont("Michroma36").drawString(timeToString(current_value), 88, 62);
|
||||||
|
|
||||||
|
g.setFont("HaxorNarrow7x17");
|
||||||
|
g.drawString(timeToString(current_from), 44, 62+26);
|
||||||
|
g.drawString(timeToString(current_mid), 88, 62+26);
|
||||||
|
g.drawString(timeToString(current_to), 132, 62+26);
|
||||||
|
|
||||||
|
if (current_value >= current_from) { g.drawRect(44-1,62+26+9,44+1,62+26+9+1); }
|
||||||
|
if (current_value >= current_mid) { g.drawRect(88-1,62+26+9,88+1,62+26+9+1); }
|
||||||
|
if (current_value >= current_to) { g.drawRect(132-1,62+26+9,132+1,62+26+9+1); }
|
||||||
|
|
||||||
|
if (showInstructions) {
|
||||||
|
g.setFont("6x8").drawString("Tapping timer locks buttons", 88, 100+5);
|
||||||
|
g.setFont("6x8").drawString("<= Swipe to change time =>", 88, 168);
|
||||||
|
}
|
||||||
|
|
||||||
|
g.setColor(islocked ? "#444" : "#000");
|
||||||
|
g.setFont("Michroma16");
|
||||||
|
g.drawString(timeToString(newtimer_left_from), 44, 138-9);
|
||||||
|
g.drawString(timeToString(newtimer_left_to), 44, 138+9);
|
||||||
|
g.drawString(timeToString(newtimer_right_from), 132, 138-9);
|
||||||
|
g.drawString(timeToString(newtimer_right_to), 132, 138+9);
|
||||||
|
|
||||||
|
g.drawRect(0+8,138-24, 88-9+1, 138+22+1);
|
||||||
|
g.drawRect(0+8,138-24, 88-9, 138+22);
|
||||||
|
g.drawRect(88+8,138-24, 176-10+1, 138+22+1);
|
||||||
|
g.drawRect(88+8,138-24, 176-10, 138+22);
|
||||||
|
}
|
||||||
|
|
||||||
|
require("FontHaxorNarrow7x17").add(Graphics);
|
||||||
|
g.clear();
|
||||||
|
Bangle.loadWidgets();
|
||||||
|
Bangle.drawWidgets();
|
||||||
|
draw();
|
||||||
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 3.3 KiB |
|
|
@ -9,3 +9,4 @@
|
||||||
0.09: Actual Bangle.js 1 pixels as of 13 Oct 2021
|
0.09: Actual Bangle.js 1 pixels as of 13 Oct 2021
|
||||||
0.10: Added separate Bangle.js 2 file with Bangle.js 2 kickstarter pixels (as of 28 Oct 2021)
|
0.10: Added separate Bangle.js 2 file with Bangle.js 2 kickstarter pixels (as of 28 Oct 2021)
|
||||||
0.11: Bangle.js2: New pixels, btn1 to exit
|
0.11: Bangle.js2: New pixels, btn1 to exit
|
||||||
|
0.12: Actual pixels as of 29th Nov 2021
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 15 KiB |
|
|
@ -1 +1,5 @@
|
||||||
0.01: New App!
|
0.01: New App!
|
||||||
|
0.02: Remove messages on disconnect
|
||||||
|
Fix music control
|
||||||
|
0.03: Handling of message actions (ok/clear)
|
||||||
|
0.04: Android icon now goes to settings page with 'find phone'
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,3 @@
|
||||||
// Config app not implemented yet
|
Bangle.loadWidgets();
|
||||||
setTimeout(()=>load("messages.app.js"),10);
|
Bangle.drawWidgets();
|
||||||
|
eval(require("Storage").read("android.settings.js"))(()=>load());
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,7 @@
|
||||||
/* TODO: Call handling, fitness */
|
/* TODO: Call handling, fitness */
|
||||||
var HANDLERS = {
|
var HANDLERS = {
|
||||||
// {t:"notify",id:int, src,title,subject,body,sender,tel:string} add
|
// {t:"notify",id:int, src,title,subject,body,sender,tel:string} add
|
||||||
"notify" : function() { event.t="add";require("messages").pushMessage(event); },
|
"notify" : function() { Object.assign(event,{t:"add",positive:true, negative:true});require("messages").pushMessage(event); },
|
||||||
// {t:"notify~",id:int, title:string} // modified
|
// {t:"notify~",id:int, title:string} // modified
|
||||||
"notify~" : function() { event.t="modify";require("messages").pushMessage(event); },
|
"notify~" : function() { event.t="modify";require("messages").pushMessage(event); },
|
||||||
// {t:"notify-",id:int} // remove
|
// {t:"notify-",id:int} // remove
|
||||||
|
|
@ -33,7 +33,16 @@
|
||||||
// {t:"musicinfo", artist,album,track,dur,c(track count),n(track num}
|
// {t:"musicinfo", artist,album,track,dur,c(track count),n(track num}
|
||||||
"musicinfo" : function() {
|
"musicinfo" : function() {
|
||||||
require("messages").pushMessage(Object.assign(event, {t:"modify",id:"music",title:"Music"}));
|
require("messages").pushMessage(Object.assign(event, {t:"modify",id:"music",title:"Music"}));
|
||||||
}
|
},
|
||||||
|
// {"t":"call","cmd":"incoming/end","name":"Bob","number":"12421312"})
|
||||||
|
"call" : function() {
|
||||||
|
Object.assign(event, {
|
||||||
|
t:event.cmd=="incoming"?"add":"remove",
|
||||||
|
id:"call", src:"Phone",
|
||||||
|
positive:true, negative:true,
|
||||||
|
title:event.name||"Call", body:"Incoming call\n"+event.number});
|
||||||
|
require("messages").pushMessage(event);
|
||||||
|
},
|
||||||
};
|
};
|
||||||
var h = HANDLERS[event.t];
|
var h = HANDLERS[event.t];
|
||||||
if (h) h(); else console.log("GB Unknown",event);
|
if (h) h(); else console.log("GB Unknown",event);
|
||||||
|
|
@ -42,6 +51,7 @@
|
||||||
// Battery monitor
|
// Battery monitor
|
||||||
function sendBattery() { gbSend({ t: "status", bat: E.getBattery() }); }
|
function sendBattery() { gbSend({ t: "status", bat: E.getBattery() }); }
|
||||||
NRF.on("connect", () => setTimeout(sendBattery, 2000));
|
NRF.on("connect", () => setTimeout(sendBattery, 2000));
|
||||||
|
NRF.on("disconnect", () => require("messages").clearAll()); // remove all messages on disconnect
|
||||||
setInterval(sendBattery, 10*60*1000);
|
setInterval(sendBattery, 10*60*1000);
|
||||||
// Health tracking
|
// Health tracking
|
||||||
Bangle.on('health', health=>{
|
Bangle.on('health', health=>{
|
||||||
|
|
@ -50,6 +60,12 @@
|
||||||
// Music control
|
// Music control
|
||||||
Bangle.musicControl = cmd => {
|
Bangle.musicControl = cmd => {
|
||||||
// play/pause/next/previous/volumeup/volumedown
|
// play/pause/next/previous/volumeup/volumedown
|
||||||
gbSend({ t: "music", m:cmd });
|
gbSend({ t: "music", n:cmd });
|
||||||
}
|
};
|
||||||
|
// Message response
|
||||||
|
Bangle.messageResponse = (msg,response) => {
|
||||||
|
if (msg.id=="call") return gbSend({ t: "call", n:response?"ACCEPT":"REJECT" });
|
||||||
|
if (isFinite(msg.id)) return gbSend({ t: "notify", n:response?"OPEN":"DISMISS" });
|
||||||
|
// error/warn here?
|
||||||
|
};
|
||||||
})();
|
})();
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
(function(back) {
|
||||||
|
function gb(j) {
|
||||||
|
Bluetooth.println(JSON.stringify(j));
|
||||||
|
}
|
||||||
|
var mainmenu = {
|
||||||
|
"" : { "title" : "Android" },
|
||||||
|
"< Back" : back,
|
||||||
|
"Connected" : { value : NRF.getSecurityStatus().connected?"Yes":"No" },
|
||||||
|
"Find Phone" : () => E.showMenu({
|
||||||
|
"" : { "title" : "Find Phone" },
|
||||||
|
"< Back" : ()=>E.showMenu(mainmenu),
|
||||||
|
"On" : _=>gb({t:"findPhone",n:true}),
|
||||||
|
"Off" : _=>gb({t:"findPhone",n:false}),
|
||||||
|
}),
|
||||||
|
"Messages" : ()=>load("messages.app.js")
|
||||||
|
};
|
||||||
|
E.showMenu(mainmenu);
|
||||||
|
})
|
||||||
|
|
@ -1 +1,3 @@
|
||||||
|
0.03: Add "Calculating" placeholder, update JSON save format
|
||||||
|
0.02: Fix JSON save format
|
||||||
0.01: First release
|
0.01: First release
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,8 @@
|
||||||
# Authentiwatch - 2FA Authenticator
|
# Authentiwatch - 2FA Authenticator
|
||||||
|
|
||||||
|
* GitHub: https://github.com/andrewgoz/Authentiwatch <-- Report bugs here
|
||||||
|
* Bleeding edge AppLoader: https://andrewgoz.github.io/Authentiwatch/
|
||||||
|
|
||||||
## Supports
|
## Supports
|
||||||
|
|
||||||
* Google Authenticator compatible 2-factor authentication
|
* Google Authenticator compatible 2-factor authentication
|
||||||
|
|
|
||||||
|
|
@ -1 +1 @@
|
||||||
require("heatshrink").decompress(atob("mUywkBiIADCxoTFAAcQGBwY/DDQIKDBiMDDCgGCBI4YMGAIDFDCAFEBQwYLFgIYEGQgYMApoYJGAJjFMogYMSQgCDDBwDCY4oMEDBZgHHQQYQf4oYVBgwYQBogYPPYZpFDBKMEDAbdDCxT9IDYIFFABqSEAogySQYoWNFgrFDJZoQBJggYRBwhLGDBwyFDCZGEDCYAEDGrIMbwhnGDEpLGAwxlLFQgQDJiYoFDDAZDDCpMDMpQOCNxQYNBo4KKBpwYYBYJ8NeJgYkLBQY8UYQXVGQIwN"))
|
require("heatshrink").decompress(atob("mEwxH+AH4AD64ADFlgAFF04INFz4LUF0QwjEBwv/FzwwgF/4v/F6nMAAWi1AFD5nOeEHPEweoFooAB5/X5wvdFwotG5nN6/WAoQuaEoguHSYPQLwIIDF8uo5ouB6AJEFzuiFwup5/WFwI6GL0esXYKMBHYy9j1WqfBSOhBIYKJF8gAKF/4v6cZAvhGDAuWSDAvXMCwuYF+AwUFzX+0XGGAgxKFrYuBAAQxEeg4tcF4oABBQnGAAgv/F6b5KXsIvIGAqNnF/69fX8ZeSF7btNR8IuOF75ePL8ouOd74NKF8IANF94wEF1QAXA"))
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,13 @@ const algos = {
|
||||||
"SHA256":{sha:crypto.SHA256,retsz:32,blksz:64 },
|
"SHA256":{sha:crypto.SHA256,retsz:32,blksz:64 },
|
||||||
"SHA1" :{sha:crypto.SHA1 ,retsz:20,blksz:64 },
|
"SHA1" :{sha:crypto.SHA1 ,retsz:20,blksz:64 },
|
||||||
};
|
};
|
||||||
|
const calculating = "Calculating";
|
||||||
|
const notokens = "No tokens";
|
||||||
|
const notsupported = "Not supported";
|
||||||
|
|
||||||
var tokens = require("Storage").readJSON("authentiwatch.json", true) || [];
|
var settings = require("Storage").readJSON("authentiwatch.json", true) || {tokens:[],misc:{}};
|
||||||
|
if (settings.data ) tokens = settings.data ; /* v0.02 settings */
|
||||||
|
if (settings.tokens) tokens = settings.tokens; /* v0.03+ settings */
|
||||||
|
|
||||||
// QR Code Text
|
// QR Code Text
|
||||||
//
|
//
|
||||||
|
|
@ -66,9 +71,8 @@ function do_hmac(key, message, algo) {
|
||||||
var v = new DataView(ret, ret[ret.length - 1] & 0x0F, 4);
|
var v = new DataView(ret, ret[ret.length - 1] & 0x0F, 4);
|
||||||
return v.getUint32(0) & 0x7FFFFFFF;
|
return v.getUint32(0) & 0x7FFFFFFF;
|
||||||
}
|
}
|
||||||
function hotp(token) {
|
function hotp(d, token, dohmac) {
|
||||||
var tick;
|
var tick;
|
||||||
var d = new Date();
|
|
||||||
if (token.period > 0) {
|
if (token.period > 0) {
|
||||||
// RFC6238 - timed
|
// RFC6238 - timed
|
||||||
var seconds = Math.floor(d.getTime() / 1000);
|
var seconds = Math.floor(d.getTime() / 1000);
|
||||||
|
|
@ -81,15 +85,17 @@ function hotp(token) {
|
||||||
var v = new DataView(msg.buffer);
|
var v = new DataView(msg.buffer);
|
||||||
v.setUint32(0, tick >> 16 >> 16);
|
v.setUint32(0, tick >> 16 >> 16);
|
||||||
v.setUint32(4, tick & 0xFFFFFFFF);
|
v.setUint32(4, tick & 0xFFFFFFFF);
|
||||||
var ret = "";
|
var ret = calculating;
|
||||||
try {
|
if (dohmac) {
|
||||||
var hash = do_hmac(b32decode(token.secret), msg, token.algorithm.toUpperCase());
|
try {
|
||||||
ret = "" + hash % Math.pow(10, token.digits);
|
var hash = do_hmac(b32decode(token.secret), msg, token.algorithm.toUpperCase());
|
||||||
while (ret.length < token.digits) {
|
ret = "" + hash % Math.pow(10, token.digits);
|
||||||
ret = "0" + ret;
|
while (ret.length < token.digits) {
|
||||||
|
ret = "0" + ret;
|
||||||
|
}
|
||||||
|
} catch(err) {
|
||||||
|
ret = notsupported;
|
||||||
}
|
}
|
||||||
} catch(err) {
|
|
||||||
ret = "Not supported";
|
|
||||||
}
|
}
|
||||||
return {hotp:ret, next:((token.period > 0) ? ((tick + 1) * token.period * 1000) : d.getTime() + 30000)};
|
return {hotp:ret, next:((token.period > 0) ? ((tick + 1) * token.period * 1000) : d.getTime() + 30000)};
|
||||||
}
|
}
|
||||||
|
|
@ -109,7 +115,7 @@ function drawToken(id, r) {
|
||||||
var y1 = r.y;
|
var y1 = r.y;
|
||||||
var x2 = r.x + r.w - 1;
|
var x2 = r.x + r.w - 1;
|
||||||
var y2 = r.y + r.h - 1;
|
var y2 = r.y + r.h - 1;
|
||||||
var adj;
|
var adj, sz;
|
||||||
g.setClipRect(Math.max(x1, Bangle.appRect.x ), Math.max(y1, Bangle.appRect.y ),
|
g.setClipRect(Math.max(x1, Bangle.appRect.x ), Math.max(y1, Bangle.appRect.y ),
|
||||||
Math.min(x2, Bangle.appRect.x2), Math.min(y2, Bangle.appRect.y2));
|
Math.min(x2, Bangle.appRect.x2), Math.min(y2, Bangle.appRect.y2));
|
||||||
if (id == state.curtoken) {
|
if (id == state.curtoken) {
|
||||||
|
|
@ -129,7 +135,7 @@ function drawToken(id, r) {
|
||||||
adj = (y1 + y2) / 2;
|
adj = (y1 + y2) / 2;
|
||||||
}
|
}
|
||||||
g.clearRect(x1, y1, x2, y2);
|
g.clearRect(x1, y1, x2, y2);
|
||||||
g.drawString(tokens[id].label, (x1 + x2) / 2, adj, false);
|
g.drawString(tokens[id].label.substr(0, 10), (x1 + x2) / 2, adj, false);
|
||||||
if (id == state.curtoken) {
|
if (id == state.curtoken) {
|
||||||
if (tokens[id].period > 0) {
|
if (tokens[id].period > 0) {
|
||||||
// timed - draw progress bar
|
// timed - draw progress bar
|
||||||
|
|
@ -143,7 +149,10 @@ function drawToken(id, r) {
|
||||||
adj = 5;
|
adj = 5;
|
||||||
}
|
}
|
||||||
// digits just below label
|
// digits just below label
|
||||||
g.setFont("Vector", (state.otp.length > 8) ? 26 : 30);
|
sz = 30;
|
||||||
|
do {
|
||||||
|
g.setFont("Vector", sz--);
|
||||||
|
} while (g.stringWidth(state.otp) > (r.w - adj));
|
||||||
g.drawString(state.otp, (x1 + x2) / 2 + adj, y1 + 16, false);
|
g.drawString(state.otp, (x1 + x2) / 2 + adj, y1 + 16, false);
|
||||||
}
|
}
|
||||||
// shaded lines top and bottom
|
// shaded lines top and bottom
|
||||||
|
|
@ -157,6 +166,9 @@ function draw() {
|
||||||
var d = new Date();
|
var d = new Date();
|
||||||
if (state.curtoken != -1) {
|
if (state.curtoken != -1) {
|
||||||
var t = tokens[state.curtoken];
|
var t = tokens[state.curtoken];
|
||||||
|
if (state.otp == calculating) {
|
||||||
|
state.otp = hotp(d, t, true).hotp;
|
||||||
|
}
|
||||||
if (d.getTime() > state.nextTime) {
|
if (d.getTime() > state.nextTime) {
|
||||||
if (state.hide == 0) {
|
if (state.hide == 0) {
|
||||||
// auto-hide the current token
|
// auto-hide the current token
|
||||||
|
|
@ -167,7 +179,7 @@ function draw() {
|
||||||
state.nextTime = 0;
|
state.nextTime = 0;
|
||||||
} else {
|
} else {
|
||||||
// time to generate a new token
|
// time to generate a new token
|
||||||
var r = hotp(t);
|
var r = hotp(d, t, state.otp != "");
|
||||||
state.nextTime = r.next;
|
state.nextTime = r.next;
|
||||||
state.otp = r.hotp;
|
state.otp = r.hotp;
|
||||||
if (t.period <= 0) {
|
if (t.period <= 0) {
|
||||||
|
|
@ -195,7 +207,13 @@ function draw() {
|
||||||
if (state.drawtimer) {
|
if (state.drawtimer) {
|
||||||
clearTimeout(state.drawtimer);
|
clearTimeout(state.drawtimer);
|
||||||
}
|
}
|
||||||
state.drawtimer = setTimeout(draw, (tokens[state.curtoken].period > 0) ? 1000 : state.nexttime - d.getTime());
|
var dly;
|
||||||
|
if (tokens[state.curtoken].period > 0) {
|
||||||
|
dly = (state.otp == calculating) ? 1 : 1000;
|
||||||
|
} else {
|
||||||
|
dly = state.nexttime - d.getTime();
|
||||||
|
}
|
||||||
|
state.drawtimer = setTimeout(draw, dly);
|
||||||
if (tokens[state.curtoken].period <= 0) {
|
if (tokens[state.curtoken].period <= 0) {
|
||||||
state.hide = 0;
|
state.hide = 0;
|
||||||
}
|
}
|
||||||
|
|
@ -210,7 +228,7 @@ function draw() {
|
||||||
} else {
|
} else {
|
||||||
g.setFont("Vector", 30);
|
g.setFont("Vector", 30);
|
||||||
g.setFontAlign(0, 0, 0);
|
g.setFontAlign(0, 0, 0);
|
||||||
g.drawString("No tokens", Bangle.appRect.x + Bangle.appRect.w / 2,Bangle.appRect.y + Bangle.appRect.h / 2, false);
|
g.drawString(notokens, Bangle.appRect.x + Bangle.appRect.w / 2, Bangle.appRect.y + Bangle.appRect.h / 2, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -231,6 +249,7 @@ function onTouch(zone, e) {
|
||||||
if (y > Bangle.appRect.h) {
|
if (y > Bangle.appRect.h) {
|
||||||
state.listy += (y - Bangle.appRect.h);
|
state.listy += (y - Bangle.appRect.h);
|
||||||
}
|
}
|
||||||
|
state.otp = "";
|
||||||
}
|
}
|
||||||
state.nextTime = 0;
|
state.nextTime = 0;
|
||||||
state.curtoken = id;
|
state.curtoken = id;
|
||||||
|
|
@ -257,8 +276,10 @@ function onSwipe(e) {
|
||||||
}
|
}
|
||||||
if (e == -1 && state.curtoken != -1 && tokens[state.curtoken].period <= 0) {
|
if (e == -1 && state.curtoken != -1 && tokens[state.curtoken].period <= 0) {
|
||||||
tokens[state.curtoken].period--;
|
tokens[state.curtoken].period--;
|
||||||
require("Storage").writeJSON("authentiwatch.json", tokens);
|
let newsettings={tokens:tokens,misc:settings.misc};
|
||||||
|
require("Storage").writeJSON("authentiwatch.json", newsettings);
|
||||||
state.nextTime = 0;
|
state.nextTime = 0;
|
||||||
|
state.otp = "";
|
||||||
state.hide = 2;
|
state.hide = 2;
|
||||||
draw();
|
draw();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 964 B After Width: | Height: | Size: 1.6 KiB |
|
|
@ -35,8 +35,9 @@ const otpAuthUrl = 'otpauth://';
|
||||||
|
|
||||||
const tokentypes = ['TOTP (Timed)', 'HOTP (Counter)'];
|
const tokentypes = ['TOTP (Timed)', 'HOTP (Counter)'];
|
||||||
|
|
||||||
/* Array of TOTP tokens */
|
/* Settings */
|
||||||
var tokens=[];
|
var settings = {tokens:[], misc:{}};
|
||||||
|
var tokens = settings.tokens;
|
||||||
|
|
||||||
/* Remove any non-base-32 characters from the given string and collapses
|
/* Remove any non-base-32 characters from the given string and collapses
|
||||||
* whitespace to a single space. Optionally removes all whitespace from
|
* whitespace to a single space. Optionally removes all whitespace from
|
||||||
|
|
@ -261,6 +262,7 @@ qrcode.callback = res => {
|
||||||
scanning = false;
|
scanning = false;
|
||||||
editToken(parseInt(document.forms['edittoken'].elements['tokenid'].value));
|
editToken(parseInt(document.forms['edittoken'].elements['tokenid'].value));
|
||||||
t['label'] = (t['issuer'] == '') ? t['account'] : t['issuer'] + ' (' + t['account'] + ')';
|
t['label'] = (t['issuer'] == '') ? t['account'] : t['issuer'] + ' (' + t['account'] + ')';
|
||||||
|
t['label'] = t['label'].substr(0, 10);
|
||||||
var fe = document.forms['edittoken'].elements;
|
var fe = document.forms['edittoken'].elements;
|
||||||
if (res.startsWith(otpAuthUrl + 'hotp/')) {
|
if (res.startsWith(otpAuthUrl + 'hotp/')) {
|
||||||
t['period'] = '30';
|
t['period'] = '30';
|
||||||
|
|
@ -319,21 +321,21 @@ function doScan() {
|
||||||
*/
|
*/
|
||||||
function loadTokens() {
|
function loadTokens() {
|
||||||
Util.showModal('Loading...');
|
Util.showModal('Loading...');
|
||||||
Puck.eval(`require('Storage').read(${JSON.stringify('authentiwatch.json')})`,data=>{
|
Puck.eval(`require('Storage').readJSON(${JSON.stringify('authentiwatch.json')})`,data=>{
|
||||||
Util.hideModal();
|
Util.hideModal();
|
||||||
try {
|
if (data.data ) settings.tokens = data.data ; /* v0.02 settings */
|
||||||
tokens = JSON.parse(data);
|
if (data.tokens) settings.tokens = data.tokens; /* v0.03+ settings */
|
||||||
updateTokens();
|
if (data.misc ) settings.misc = data.misc ; /* v0.03+ settings */
|
||||||
} catch {
|
tokens = settings.tokens;
|
||||||
tokens = [];
|
updateTokens();
|
||||||
}
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
/* Save settings as a JSON file on the watch.
|
/* Save settings as a JSON file on the watch.
|
||||||
*/
|
*/
|
||||||
function saveTokens() {
|
function saveTokens() {
|
||||||
Util.showModal('Saving...');
|
Util.showModal('Saving...');
|
||||||
Puck.write(`\x10require('Storage').write(${JSON.stringify('authentiwatch.json')},${JSON.stringify(tokens)})\n`,()=>{
|
let newsettings={tokens:tokens,misc:settings.misc};
|
||||||
|
Puck.write(`\x10require('Storage').writeJSON(${JSON.stringify('authentiwatch.json')},${JSON.stringify(newsettings)})\n`,()=>{
|
||||||
Util.hideModal();
|
Util.hideModal();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,4 +5,5 @@
|
||||||
0.05: Clock does not start if app Languages is not installed
|
0.05: Clock does not start if app Languages is not installed
|
||||||
0.06: Improve accuracy
|
0.06: Improve accuracy
|
||||||
0.07: Update to use Bangle.setUI instead of setWatch
|
0.07: Update to use Bangle.setUI instead of setWatch
|
||||||
0.08: Use theme colors, Layout library
|
0.08: Use theme colors, Layout library
|
||||||
|
0.09: Fix time/date disappearing after fullscreen notification
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,7 @@ function renderBar(l) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
const width = this.fraction*l.w;
|
const width = this.fraction*l.w;
|
||||||
g.fillRect(l.x, l.y, width-1, l.y+l.height-1);
|
g.fillRect(l.x, l.y, l.x+width-1, l.y+l.height-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
const Layout = require("Layout");
|
const Layout = require("Layout");
|
||||||
|
|
@ -78,7 +78,7 @@ function dateText(date) {
|
||||||
return `${dayName} ${dayMonth}`;
|
return `${dayName} ${dayMonth}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
draw = function draw() {
|
draw = function draw(force) {
|
||||||
if (!Bangle.isLCDOn()) {return;} // no drawing, also no new update scheduled
|
if (!Bangle.isLCDOn()) {return;} // no drawing, also no new update scheduled
|
||||||
const date = new Date();
|
const date = new Date();
|
||||||
layout.time.label = timeText(date);
|
layout.time.label = timeText(date);
|
||||||
|
|
@ -86,6 +86,10 @@ draw = function draw() {
|
||||||
layout.date.label = dateText(date);
|
layout.date.label = dateText(date);
|
||||||
const SECONDS_PER_MINUTE = 60;
|
const SECONDS_PER_MINUTE = 60;
|
||||||
layout.bar.fraction = date.getSeconds()/SECONDS_PER_MINUTE;
|
layout.bar.fraction = date.getSeconds()/SECONDS_PER_MINUTE;
|
||||||
|
if (force) {
|
||||||
|
Bangle.drawWidgets();
|
||||||
|
layout.forgetLazyState();
|
||||||
|
}
|
||||||
layout.render();
|
layout.render();
|
||||||
// schedule update at start of next second
|
// schedule update at start of next second
|
||||||
const millis = date.getMilliseconds();
|
const millis = date.getMilliseconds();
|
||||||
|
|
@ -96,7 +100,7 @@ draw = function draw() {
|
||||||
Bangle.setUI("clock");
|
Bangle.setUI("clock");
|
||||||
Bangle.on("lcdPower", function(on) {
|
Bangle.on("lcdPower", function(on) {
|
||||||
if (on) {
|
if (on) {
|
||||||
draw();
|
draw(true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
g.reset().clear();
|
g.reset().clear();
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 4.6 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 6.3 KiB After Width: | Height: | Size: 6.2 KiB |
|
|
@ -1,3 +1,4 @@
|
||||||
0.01: start of development
|
0.01: start of development
|
||||||
0.02: first running version for BangleJs2
|
0.02: first running version for BangleJs2
|
||||||
0.03: corrected icon, added screen shot, extended description
|
0.03: corrected icon, added screen shot, extended description
|
||||||
|
0.04: corrected format of background image (raw binary)
|
||||||
|
|
|
||||||
|
|
@ -12,7 +12,6 @@
|
||||||
require("Font7x11Numeric7Seg").add(Graphics);
|
require("Font7x11Numeric7Seg").add(Graphics);
|
||||||
require("Font5x7Numeric7Seg").add(Graphics);
|
require("Font5x7Numeric7Seg").add(Graphics);
|
||||||
|
|
||||||
|
|
||||||
/* constants and definitions */
|
/* constants and definitions */
|
||||||
|
|
||||||
/* Bangle 2: 176 x 176 */
|
/* Bangle 2: 176 x 176 */
|
||||||
|
|
@ -63,7 +62,7 @@ const V2_BAT_SIZE_Y = 2;
|
||||||
|
|
||||||
const V2_SCREEN_SIZE_X = 176;
|
const V2_SCREEN_SIZE_X = 176;
|
||||||
const V2_SCREEN_SIZE_Y = 176;
|
const V2_SCREEN_SIZE_Y = 176;
|
||||||
const V2_BACKGROUND_IMAGE = "Background176_center.png";
|
const V2_BACKGROUND_IMAGE = "binwatch.bg176.img";
|
||||||
const V2_BG_COLOR = 0;
|
const V2_BG_COLOR = 0;
|
||||||
const V2_FG_COLOR = 1;
|
const V2_FG_COLOR = 1;
|
||||||
|
|
||||||
|
|
@ -91,7 +90,7 @@ const V1_BAT_SIZE_X = 3;
|
||||||
const V1_BAT_SIZE_Y = 5;
|
const V1_BAT_SIZE_Y = 5;
|
||||||
const V1_SCREEN_SIZE_X = 240;
|
const V1_SCREEN_SIZE_X = 240;
|
||||||
const V1_SCREEN_SIZE_Y = 240;
|
const V1_SCREEN_SIZE_Y = 240;
|
||||||
const V1_BACKGROUND_IMAGE = "Background240_center.png";
|
const V1_BACKGROUND_IMAGE = "binwatch.bg240.img";
|
||||||
const V1_BG_COLOR = 1;
|
const V1_BG_COLOR = 1;
|
||||||
const V1_FG_COLOR = 0;
|
const V1_FG_COLOR = 0;
|
||||||
|
|
||||||
|
|
@ -293,7 +292,7 @@ function setRuntimeValues(resolution) {
|
||||||
bat_size_x = V1_BAT_SIZE_X;
|
bat_size_x = V1_BAT_SIZE_X;
|
||||||
bat_size_y = V1_BAT_SIZE_Y;
|
bat_size_y = V1_BAT_SIZE_Y;
|
||||||
|
|
||||||
setWatch(toggleDateTime, BTN1, { repeat : true, edge: "falling"});
|
setWatch(toggleDateTime, BTN1, { repeat : true, edge: "falling"});
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
x_step = V2_X_STEP;
|
x_step = V2_X_STEP;
|
||||||
|
|
@ -362,8 +361,7 @@ function draw() {
|
||||||
updateVTime();
|
updateVTime();
|
||||||
g.clear();
|
g.clear();
|
||||||
g.drawImages([{image:cgimg},
|
g.drawImages([{image:cgimg},
|
||||||
{image:require("Storage").read(backgroundImage)},
|
{image:require("Storage").read(backgroundImage)}
|
||||||
// { x:bt_x, y:bt_y, rotate: 0, image:require("Storage").read("bt-icon.png")},
|
|
||||||
]);
|
]);
|
||||||
drawBT(g, NRF.getSecurityStatus().connected);
|
drawBT(g, NRF.getSecurityStatus().connected);
|
||||||
// Bangle.drawWidgets();
|
// Bangle.drawWidgets();
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
|
@ -40,3 +40,4 @@
|
||||||
0.35: Add Bangle.appRect polyfill
|
0.35: Add Bangle.appRect polyfill
|
||||||
Don't set beep vibration up on Bangle.js 2 (built in)
|
Don't set beep vibration up on Bangle.js 2 (built in)
|
||||||
0.36: Add comments to .boot0 to make debugging a bit easier
|
0.36: Add comments to .boot0 to make debugging a bit easier
|
||||||
|
0.37: Remove Quiet Mode settings: now handled by Quiet Mode Schedule app
|
||||||
|
|
|
||||||
|
|
@ -78,13 +78,7 @@ boot += `E.on('errorFlag', function(errorFlags) {
|
||||||
if (global.save) boot += `global.save = function() { throw new Error("You can't use save() on Bangle.js without overwriting the bootloader!"); }\n`;
|
if (global.save) boot += `global.save = function() { throw new Error("You can't use save() on Bangle.js without overwriting the bootloader!"); }\n`;
|
||||||
// Apply any settings-specific stuff
|
// Apply any settings-specific stuff
|
||||||
if (s.options) boot+=`Bangle.setOptions(${E.toJS(s.options)});\n`;
|
if (s.options) boot+=`Bangle.setOptions(${E.toJS(s.options)});\n`;
|
||||||
if (s.quiet && s.qmOptions) boot+=`Bangle.setOptions(${E.toJS(s.qmOptions)});\n`;
|
if (s.brightness && s.brightness!=1) boot+=`Bangle.setLCDBrightness(${s.brightness});\n`;
|
||||||
if (s.quiet && s.qmBrightness) {
|
|
||||||
if (s.qmBrightness!=1) boot+=`Bangle.setLCDBrightness(${s.qmBrightness});\n`;
|
|
||||||
} else {
|
|
||||||
if (s.brightness && s.brightness!=1) boot+=`Bangle.setLCDBrightness(${s.brightness});\n`;
|
|
||||||
}
|
|
||||||
if (s.quiet && s.qmTimeout) boot+=`Bangle.setLCDTimeout(${s.qmTimeout});\n`;
|
|
||||||
if (s.passkey!==undefined && s.passkey.length==6) boot+=`NRF.setSecurity({passkey:${s.passkey}, mitm:1, display:1});\n`;
|
if (s.passkey!==undefined && s.passkey.length==6) boot+=`NRF.setSecurity({passkey:${s.passkey}, mitm:1, display:1});\n`;
|
||||||
if (s.whitelist) boot+=`NRF.on('connect', function(addr) { if (!(require('Storage').readJSON('setting.json',1)||{}).whitelist.includes(addr)) NRF.disconnect(); });\n`;
|
if (s.whitelist) boot+=`NRF.on('connect', function(addr) { if (!(require('Storage').readJSON('setting.json',1)||{}).whitelist.includes(addr)) NRF.disconnect(); });\n`;
|
||||||
// Pre-2v10 firmwares without a theme/setUI
|
// Pre-2v10 firmwares without a theme/setUI
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
|
@ -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();
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
|
@ -3,3 +3,5 @@
|
||||||
0.03: Save total distance traveled
|
0.03: Save total distance traveled
|
||||||
0.04: Add sensor battery level indicator
|
0.04: Add sensor battery level indicator
|
||||||
0.05: Add cadence sensor support
|
0.05: Add cadence sensor support
|
||||||
|
0.06: Now read wheel rev as well as cadence sensor
|
||||||
|
Improve connection code
|
||||||
|
|
|
||||||
|
|
@ -9,10 +9,16 @@ Currently the app displays the following data:
|
||||||
- maximum speed
|
- maximum speed
|
||||||
- trip distance traveled
|
- trip distance traveled
|
||||||
- total distance traveled
|
- total distance traveled
|
||||||
- an icon with the battery status of the remote sensor
|
- an icon with the battery status of the remote sensor
|
||||||
|
|
||||||
Button 1 resets all measurements except total distance traveled. The latter gets preserved by being written to storage every 0.1 miles and upon exiting the app.
|
Button 1 resets all measurements except total distance traveled. The latter gets preserved by being written to storage every 0.1 miles and upon exiting the app.
|
||||||
If the watch app has not received an update from the sensor for at least 10 seconds, pushing button 3 will attempt to reconnect to the sensor.
|
If the watch app has not received an update from the sensor for at least 10 seconds, pushing button 3 will attempt to reconnect to the sensor.
|
||||||
Button 2 switches between the display for cycling speed and cadence.
|
Button 2 switches between the display for cycling speed and cadence.
|
||||||
|
|
||||||
Values displayed are imperial or metric (depending on locale), cadence is in RPM, the wheel circumference can be adjusted in the global settings app.
|
Values displayed are imperial or metric (depending on locale), cadence is in RPM, the wheel circumference can be adjusted in the global settings app.
|
||||||
|
|
||||||
|
# TODO
|
||||||
|
|
||||||
|
* Use Layout Library to provide proper Bangle.js 2 support
|
||||||
|
* Turn CSC sensor support into a library
|
||||||
|
* Support for `Recorder` app, to allow CSC readings to be logged alongside GPS
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,8 @@ var characteristic;
|
||||||
|
|
||||||
const SETTINGS_FILE = 'cscsensor.json';
|
const SETTINGS_FILE = 'cscsensor.json';
|
||||||
const storage = require('Storage');
|
const storage = require('Storage');
|
||||||
|
const W = g.getWidth();
|
||||||
|
const H = g.getHeight();
|
||||||
|
|
||||||
class CSCSensor {
|
class CSCSensor {
|
||||||
constructor() {
|
constructor() {
|
||||||
|
|
@ -75,7 +77,7 @@ class CSCSensor {
|
||||||
var dist = this.distFactor*(this.lastRevs-this.lastRevsStart)*this.wheelCirc/63360.0;
|
var dist = this.distFactor*(this.lastRevs-this.lastRevsStart)*this.wheelCirc/63360.0;
|
||||||
var ddist = Math.round(100*dist)/100;
|
var ddist = Math.round(100*dist)/100;
|
||||||
var tdist = Math.round(this.distFactor*this.totaldist*10)/10;
|
var tdist = Math.round(this.distFactor*this.totaldist*10)/10;
|
||||||
var dspeed = Math.round(10*this.distFactor*this.speed)/10;
|
var dspeed = Math.round(10*this.distFactor*this.speed)/10;
|
||||||
var dmins = Math.floor(this.movingTime/60).toString();
|
var dmins = Math.floor(this.movingTime/60).toString();
|
||||||
if (dmins.length<2) dmins = "0"+dmins;
|
if (dmins.length<2) dmins = "0"+dmins;
|
||||||
var dsecs = (Math.floor(this.movingTime) % 60).toString();
|
var dsecs = (Math.floor(this.movingTime) % 60).toString();
|
||||||
|
|
@ -152,7 +154,7 @@ class CSCSensor {
|
||||||
var qChanged = false;
|
var qChanged = false;
|
||||||
if (event.target.uuid == "0x2a5b") {
|
if (event.target.uuid == "0x2a5b") {
|
||||||
if (event.target.value.getUint8(0, true) & 0x2) {
|
if (event.target.value.getUint8(0, true) & 0x2) {
|
||||||
// crank revolution
|
// crank revolution - if enabled
|
||||||
const crankRevs = event.target.value.getUint16(1, true);
|
const crankRevs = event.target.value.getUint16(1, true);
|
||||||
const crankTime = event.target.value.getUint16(3, true);
|
const crankTime = event.target.value.getUint16(3, true);
|
||||||
if (crankTime > this.lastCrankTime) {
|
if (crankTime > this.lastCrankTime) {
|
||||||
|
|
@ -161,44 +163,43 @@ class CSCSensor {
|
||||||
}
|
}
|
||||||
this.lastCrankRevs = crankRevs;
|
this.lastCrankRevs = crankRevs;
|
||||||
this.lastCrankTime = crankTime;
|
this.lastCrankTime = crankTime;
|
||||||
} else {
|
|
||||||
// wheel revolution
|
|
||||||
var wheelRevs = event.target.value.getUint32(1, true);
|
|
||||||
var dRevs = (this.lastRevs>0 ? wheelRevs-this.lastRevs : 0);
|
|
||||||
if (dRevs>0) {
|
|
||||||
qChanged = true;
|
|
||||||
this.totaldist += dRevs*this.wheelCirc/63360.0;
|
|
||||||
if ((this.totaldist-this.settings.totaldist)>0.1) {
|
|
||||||
this.settings.totaldist = this.totaldist;
|
|
||||||
storage.writeJSON(SETTINGS_FILE, this.settings);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.lastRevs = wheelRevs;
|
|
||||||
if (this.lastRevsStart<0) this.lastRevsStart = wheelRevs;
|
|
||||||
var wheelTime = event.target.value.getUint16(5, true);
|
|
||||||
var dT = (wheelTime-this.lastTime)/1024;
|
|
||||||
var dBT = (Date.now()-this.lastBangleTime)/1000;
|
|
||||||
this.lastBangleTime = Date.now();
|
|
||||||
if (dT<0) dT+=64;
|
|
||||||
if (Math.abs(dT-dBT)>3) dT = dBT;
|
|
||||||
this.lastTime = wheelTime;
|
|
||||||
this.speed = this.lastSpeed;
|
|
||||||
if (dRevs>0 && dT>0) {
|
|
||||||
this.speed = (dRevs*this.wheelCirc/63360.0)*3600/dT;
|
|
||||||
this.speedFailed = 0;
|
|
||||||
this.movingTime += dT;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
this.speedFailed++;
|
|
||||||
qChanged = false;
|
|
||||||
if (this.speedFailed>3) {
|
|
||||||
this.speed = 0;
|
|
||||||
qChanged = (this.lastSpeed>0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
this.lastSpeed = this.speed;
|
|
||||||
if (this.speed>this.maxSpeed && (this.movingTime>3 || this.speed<20) && this.speed<50) this.maxSpeed = this.speed;
|
|
||||||
}
|
}
|
||||||
|
// wheel revolution
|
||||||
|
var wheelRevs = event.target.value.getUint32(1, true);
|
||||||
|
var dRevs = (this.lastRevs>0 ? wheelRevs-this.lastRevs : 0);
|
||||||
|
if (dRevs>0) {
|
||||||
|
qChanged = true;
|
||||||
|
this.totaldist += dRevs*this.wheelCirc/63360.0;
|
||||||
|
if ((this.totaldist-this.settings.totaldist)>0.1) {
|
||||||
|
this.settings.totaldist = this.totaldist;
|
||||||
|
storage.writeJSON(SETTINGS_FILE, this.settings);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.lastRevs = wheelRevs;
|
||||||
|
if (this.lastRevsStart<0) this.lastRevsStart = wheelRevs;
|
||||||
|
var wheelTime = event.target.value.getUint16(5, true);
|
||||||
|
var dT = (wheelTime-this.lastTime)/1024;
|
||||||
|
var dBT = (Date.now()-this.lastBangleTime)/1000;
|
||||||
|
this.lastBangleTime = Date.now();
|
||||||
|
if (dT<0) dT+=64;
|
||||||
|
if (Math.abs(dT-dBT)>3) dT = dBT;
|
||||||
|
this.lastTime = wheelTime;
|
||||||
|
this.speed = this.lastSpeed;
|
||||||
|
if (dRevs>0 && dT>0) {
|
||||||
|
this.speed = (dRevs*this.wheelCirc/63360.0)*3600/dT;
|
||||||
|
this.speedFailed = 0;
|
||||||
|
this.movingTime += dT;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
this.speedFailed++;
|
||||||
|
qChanged = false;
|
||||||
|
if (this.speedFailed>3) {
|
||||||
|
this.speed = 0;
|
||||||
|
qChanged = (this.lastSpeed>0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.lastSpeed = this.speed;
|
||||||
|
if (this.speed>this.maxSpeed && (this.movingTime>3 || this.speed<20) && this.speed<50) this.maxSpeed = this.speed;
|
||||||
}
|
}
|
||||||
if (qChanged && this.qUpdateScreen) this.updateScreen();
|
if (qChanged && this.qUpdateScreen) this.updateScreen();
|
||||||
}
|
}
|
||||||
|
|
@ -215,44 +216,47 @@ function getSensorBatteryLevel(gatt) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function parseDevice(d) {
|
|
||||||
device = d;
|
|
||||||
g.clearRect(0, 60, 239, 239).setFontAlign(0, 0, 0).setColor(0, 1, 0).drawString("Found device", 120, 120).flip();
|
|
||||||
device.gatt.connect().then(function(ga) {
|
|
||||||
gatt = ga;
|
|
||||||
g.clearRect(0, 60, 239, 239).setFontAlign(0, 0, 0).setColor(0, 1, 0).drawString("Connected", 120, 120).flip();
|
|
||||||
return gatt.getPrimaryService("1816");
|
|
||||||
}).then(function(s) {
|
|
||||||
service = s;
|
|
||||||
return service.getCharacteristic("2a5b");
|
|
||||||
}).then(function(c) {
|
|
||||||
characteristic = c;
|
|
||||||
characteristic.on('characteristicvaluechanged', (event)=>mySensor.updateSensor(event));
|
|
||||||
return characteristic.startNotifications();
|
|
||||||
}).then(function() {
|
|
||||||
console.log("Done!");
|
|
||||||
g.clearRect(0, 60, 239, 239).setColor(1, 1, 1).flip();
|
|
||||||
getSensorBatteryLevel(gatt);
|
|
||||||
mySensor.updateScreen();
|
|
||||||
}).catch(function(e) {
|
|
||||||
g.clearRect(0, 60, 239, 239).setColor(1, 0, 0).setFontAlign(0, 0, 0).drawString("ERROR"+e, 120, 120).flip();
|
|
||||||
console.log(e);
|
|
||||||
})}
|
|
||||||
|
|
||||||
function connection_setup() {
|
function connection_setup() {
|
||||||
NRF.setScan();
|
|
||||||
mySensor.screenInit = true;
|
mySensor.screenInit = true;
|
||||||
NRF.setScan(parseDevice, { filters: [{services:["1816"]}], timeout: 2000});
|
E.showMessage("Scanning for CSC sensor...");
|
||||||
g.clearRect(0, 48, 239, 239).setFontVector(18).setFontAlign(0, 0, 0).setColor(0, 1, 0);
|
NRF.requestDevice({ filters: [{services:["1816"]}]}).then(function(d) {
|
||||||
g.drawString("Scanning for CSC sensor...", 120, 120);
|
device = d;
|
||||||
|
E.showMessage("Found device");
|
||||||
|
return device.gatt.connect();
|
||||||
|
}).then(function(ga) {
|
||||||
|
gatt = ga;
|
||||||
|
E.showMessage("Connected");
|
||||||
|
return gatt.getPrimaryService("1816");
|
||||||
|
}).then(function(s) {
|
||||||
|
service = s;
|
||||||
|
return service.getCharacteristic("2a5b");
|
||||||
|
}).then(function(c) {
|
||||||
|
characteristic = c;
|
||||||
|
characteristic.on('characteristicvaluechanged', (event)=>mySensor.updateSensor(event));
|
||||||
|
return characteristic.startNotifications();
|
||||||
|
}).then(function() {
|
||||||
|
console.log("Done!");
|
||||||
|
g.reset().clearRect(Bangle.appRect).flip();
|
||||||
|
getSensorBatteryLevel(gatt);
|
||||||
|
mySensor.updateScreen();
|
||||||
|
}).catch(function(e) {
|
||||||
|
E.showMessage(e.toString(), "ERROR");
|
||||||
|
console.log(e);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
connection_setup();
|
connection_setup();
|
||||||
setWatch(function() { mySensor.reset(); g.clearRect(0, 48, 239, 239); mySensor.updateScreen(); }, BTN1, {repeat:true, debounce:20});
|
E.on('kill',()=>{
|
||||||
E.on('kill',()=>{ if (gatt!=undefined) gatt.disconnect(); mySensor.settings.totaldist = mySensor.totaldist; storage.writeJSON(SETTINGS_FILE, mySensor.settings); });
|
if (gatt!=undefined) gatt.disconnect();
|
||||||
setWatch(function() { if (Date.now()-mySensor.lastBangleTime>10000) connection_setup(); }, BTN3, {repeat:true, debounce:20});
|
mySensor.settings.totaldist = mySensor.totaldist;
|
||||||
setWatch(function() { mySensor.toggleDisplayCadence(); g.clearRect(0, 48, 239, 239); mySensor.updateScreen(); }, BTN2, {repeat:true, debounce:20});
|
storage.writeJSON(SETTINGS_FILE, mySensor.settings);
|
||||||
NRF.on('disconnect', connection_setup);
|
});
|
||||||
|
NRF.on('disconnect', connection_setup); // restart if disconnected
|
||||||
|
Bangle.setUI("updown", d=>{
|
||||||
|
if (d<0) { mySensor.reset(); g.clearRect(0, 48, W, H); mySensor.updateScreen(); }
|
||||||
|
if (d==0) { if (Date.now()-mySensor.lastBangleTime>10000) connection_setup(); }
|
||||||
|
if (d>0) { mySensor.toggleDisplayCadence(); g.clearRect(0, 48, W, H); mySensor.updateScreen(); }
|
||||||
|
});
|
||||||
|
|
||||||
Bangle.loadWidgets();
|
Bangle.loadWidgets();
|
||||||
Bangle.drawWidgets();
|
Bangle.drawWidgets();
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 3.6 KiB |
|
|
@ -1,3 +1,4 @@
|
||||||
0.01: Initial Release
|
0.01: Initial Release
|
||||||
0.02: Replace icon with one found on https://icons8.com
|
0.02: Replace icon with one found on https://icons8.com
|
||||||
0.03: Re-render icon fixing display in settings
|
0.03: Re-render icon fixing display in settings
|
||||||
|
0.04: Improved UX and display solve time
|
||||||
|
|
|
||||||
|
|
@ -1,12 +1,11 @@
|
||||||
# Cube Scramble
|
# Cube Scramble
|
||||||
|
|
||||||
A random scramble generator for the 3x3 Rubik's cube
|
A random scramble generator for the 3x3 Rubik's cube with a basic timer.
|
||||||
|
|
||||||
## Future features
|
## Future features
|
||||||
|
|
||||||
I'm keen to complete this project with
|
I'm keen to complete this project with
|
||||||
|
|
||||||
* Add a timer
|
|
||||||
* Add the ability for times to be stored and exported
|
* Add the ability for times to be stored and exported
|
||||||
|
|
||||||
## Requests
|
## Requests
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
|
@ -1,4 +1,3 @@
|
||||||
|
|
||||||
// Scramble code from: https://raw.githubusercontent.com/bjcarlson42/blog-post-sample-code/master/Rubik's%20Cube%20JavaScript%20Scrambler/part_two.js
|
// Scramble code from: https://raw.githubusercontent.com/bjcarlson42/blog-post-sample-code/master/Rubik's%20Cube%20JavaScript%20Scrambler/part_two.js
|
||||||
const makeScramble = () => {
|
const makeScramble = () => {
|
||||||
const options = ["F", "F2", "F'", "R", "R2", "R'", "U", "U2", "U'", "B", "B2", "B'", "L", "L2", "L'", "D", "D2", "D'"];
|
const options = ["F", "F2", "F'", "R", "R2", "R'", "U", "U2", "U'", "B", "B2", "B'", "L", "L2", "L'", "D", "D2", "D'"];
|
||||||
|
|
@ -59,16 +58,36 @@ const getRandomInt = max => Math.floor(Math.random() * Math.floor(max)); // retu
|
||||||
const getRandomIntBetween = (min, max) => Math.floor(Math.random() * (max - min) + min);
|
const getRandomIntBetween = (min, max) => Math.floor(Math.random() * (max - min) + min);
|
||||||
|
|
||||||
const presentScramble = () => {
|
const presentScramble = () => {
|
||||||
g.clear();
|
showPrompt(makeScramble().join(" "), {
|
||||||
E.showMessage(makeScramble().join(" "));
|
buttons: {"solve": true, "reset": false}
|
||||||
|
}).then((v) => {
|
||||||
|
if (v) {
|
||||||
|
const start = new Date();
|
||||||
|
showPrompt(" ", {
|
||||||
|
buttons: {"stop": true}
|
||||||
|
}).then(() => {
|
||||||
|
const time = parseFloat(((new Date()).getTime() - start.getTime()) / 1000);
|
||||||
|
showPrompt(String(time.toFixed(3)), {
|
||||||
|
buttons: {"next": true}
|
||||||
|
}).then(() => {
|
||||||
|
presentScramble();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
presentScramble();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
const showPrompt = (text, options = {}) => {
|
||||||
|
options.title = options.title || "cube scramble";
|
||||||
|
return E.showPrompt(text, options);
|
||||||
};
|
};
|
||||||
|
|
||||||
const init = () => {
|
const init = () => {
|
||||||
|
Bangle.setLCDTimeout(0);
|
||||||
|
Bangle.setLCDPower(1);
|
||||||
presentScramble();
|
presentScramble();
|
||||||
|
|
||||||
setWatch(() => {
|
|
||||||
presentScramble();
|
|
||||||
}, BTN1, {repeat:true});
|
|
||||||
};
|
};
|
||||||
|
|
||||||
init();
|
init();
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 9.4 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
|
|
@ -1 +1,2 @@
|
||||||
0.01: New App!
|
0.01: New App!
|
||||||
|
0.02: Upgraded text to images, added welcome screen and subtitles.
|
||||||
|
|
|
||||||
|
|
@ -4,29 +4,48 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
// Emojis are integer pairs with the form [ image, Unicode code point ]
|
// Emoji images are 96px x 96px, 4bpp (https://www.espruino.com/Image+Converter)
|
||||||
|
// and adapted from Font Awesome 5
|
||||||
|
const GRIN = "sFgwkBiIATDwoaUFi4ynQZ4uuGDzlTF1wwaFyowYFy4wWiAvZgIutGCgubSKRecMCQudMCBeeMCAufMBxegMBwuhMBheiMBgujMBRekMBQvvF0qQIL0xgIF94unSA4vuR1CQGF94upSAovuR1SQEF94urSAY/PCBivQF5z/DEBQ+DEB5ePCJYOEMBgNNF8MBHpogNHwqBNF/4vsEAovOX7TviBhYgFD5Q/EEJoANEAY/OLxgAQPx5edAH4A/AH4A/AH4A/AEUQF1sBF/4v/F/4vviILJBRQANEZYLJHQIMKFpYABQhIiKC4QaMIhBHLF6AAVEhRQIF8ZuCF5B6GACYjMF9ZrOF8jAiKRgvvSEJROBo5gYEBw+IMCwfPB5BgWDxBPHCCBeVJxBgdJqIvJMCQcTCRAwRFxJ8KChQwODKwVJGBouKbZgXLDBQVLPBoZLDYxDMLxocQACLXOMBwARFxxgfLx5gfFyBgdLyIwcFyaRbFygwZFywwXFzAwVFzQwTFzgwRFzwxOFsIyKDSg";
|
||||||
|
const MEH = "sFgwkBiIATDwoaUFi4ynQZ4uuGDzlTF1wwaFyowYFy4wWiAvZgIutGCgubSKRecMCQudMCBeeMCAufMBxegMBwuhMBheiMBgujMBRekMBQvvF0qQIL0xgIF94unSA4vuR1CQGF94upSAovuR1SQEF94urSAY/PCBivQF5z/DEBQ+DEB5ePCJYOEMBgNNF8MBHpogNHwqBNF/4vsEAovOX7TviBhYgFD5Q/EEJoANEAY/OLxgAQPx5edAH4A/AH4A/AH4A/AEUQF1sBF/4v/F/4vviIvtiIv/F9qeBACDgNB5ouSECAOLFyaBMKAYvrByQvgSBS/fD4jAfXxwQMADxAQF8iQLADjeGF96QoFwxgnLw4vwSEwuIMEpeJMEouKMEZeLMEYuMMEJeNMEIuOMD5ePMD4uQMDpeRGDguTSLYuUGDIuWGC4uYGCouaGCYucGCIueGJwthGRQaUA";
|
||||||
|
const FROWN = "sFgwkBiIATDwoaUFi4ynQZ4uuGDzlTF1wwaFyowYFy4wWiAvZgIutGCgubSKRecMCQudMCBeeMCAufMBxegMBwuhMBheiMBgujMBRekMBQvvF0qQIL0xgIF94unSA4vuR1CQGF94upSAovuR1SQEF94urSAY/PCBivQF5z/DEBQ+DEB5ePCJYOEMBgNNF8MBHpogNHwqBNF/4vsEAovOX7TviBhYgFD5Q/EEJoANEAY/OLxgAQPx5edAH4A/AH4A/AH4A/AEUQF1sBF/4v/F/4vUgMRAAQZWFqwxWCgIuZGCYvSFxIcUFzYdTOZyNKSKQdCCJwuNMB5NDLzZOPIKAviCJguPJxpNEF94RLRyBONIKAvHNRQvRCKAMUJpIvOZxx9WAEbSTADReHF+CQmFxBglLxJglFxRgjLxZgjFxhghLxpghFxxgfLx5gfFyBgdLyIwcFyaRbFygwZFywwXFzAwVFzQwTFzgwRFzwxOFsIyKDSg";
|
||||||
|
const THUMBS_UP = "sFgwkBiIAaiAiBDzYAQKYZQcLyAwsF4qSpcoxgoF4xgnRwwvxSEwvvFw4vwYEwv/F/4AOiAv/R1Av/F/6+PgIv/RzwvjLxQvkFxTujLxYvjFxaOiLxgvvR1wviR3gviR3YviFxg6iF7AwVRxowhFzUAgIvuMCSObF6YucSCJedF6IudSARQIHQheeAAIgKGAYufF+CbMF/4v/WYQv/F/6yPF/6OeF9wgNL/4v/F/4vhEQIv/R/4v/F/7ueF/4v/Xx4v/F/4v/F/4v/F/4v/F7ogOF/6OSEAgHCiAvrAwQHHRz4v/F/4v/F58QF8cBE4wPDGLYvHB5aTaKwQvUMS4vYGCx8QF5AwULwgvWYiZJQIAowXDowvYGJyqRFx4bKDRQA==";
|
||||||
|
const THUMBS_DOWN = "sFgwkBiIAbiAoGEroAHLZgttMcK9RXEZgmFyZgHDZA/JFyogFDZQwHFqovXLiyQHB5wtaF6gubF/4v/F/4vwgIv/F7wgPF/6QTF/4v/F/4v/F/4v/F/4AdF/4v/YCIv/F/4v9EQIv/R/4v/F/7ueL+gFBiMQF8oiBE4wHHF/6QQF/4v/YigvugInBiAvrM5QvvM4gvqMFgvDMD0BF55gegJPKgIvEMDoeLF4pgdJ5QuGF7gjHABaQbFyRgbFygvZFyqQOEixgYF8RgMgIv/SH5gPYH6QfF8aQvMBgvjMBaQjMBYvkMBQv/SEAv/F/7APF/6QfF/4v/F/0BF8sQF/4vnF0rAJF9yOmSBAunF4xeoSAouqMAYTQA==";
|
||||||
|
const HEART = "sFgwkBiIA/AH4A/AH4AogAADC1EQC4gaQCo8BIqYwRCyxdJDJoVLMJYuMGBIVNGBQYNDI5FOO5IXODI4WWI6BgGCywYTDIYVVO6gvXSAoYTDIQVTMAgYTDIJFUMAgYUACyOXAC7XWF7YurSAYvuR1iQCF/4v/F54utAH4A/AH4A/AH4A/AGMQF1sBF/4v/F58RF9sRF/4vgYFi+BMFouCF+CQqRwYvwSFQuEMFJeFMFIuGME5eHME4uIMEpeJMEouKMEZeLMEYuMMEJeNMEIuOMD5ePMD4uQMDpeRMDouSMDZeTMDYuUMDJeVMDIuWMC5eXMC4uYMCpeZMCouaMCZebMCYucMCJedF+CQQFzxgPFz5gPF8JgMXr5gPF0RgLL0ZgLF0hgJL0pgJF0xgHL05gHF1BgFL1JgFF1QwDF1gA/AH4A/AH4AJA=";
|
||||||
|
const TX = "k8XwkBiIAYEYogLHBAUIiBNKGxooKEggvJCYYHDKxAMFAoRrOCRAsHCYqbNHQibLKAauOLBCJHQw6JMQBIJBRJDWJThK5JJJi5KbpaJKFBaKEE5ybGHRhcOACEQA";
|
||||||
|
|
||||||
|
|
||||||
|
// Emojis are pairs with the form [ Image String, Unicode code point ]
|
||||||
// For code points see https://unicode.org/emoji/charts/emoji-list.html
|
// For code points see https://unicode.org/emoji/charts/emoji-list.html
|
||||||
const EMOJIS = [
|
const EMOJIS = [
|
||||||
[ ':)', 0x1f642 ], // Slightly smiling
|
[ GRIN, 0x1f642 ], // Slightly smiling
|
||||||
[ ':|', 0x1f610 ], // Neutral
|
[ MEH, 0x1f610 ], // Neutral
|
||||||
[ ':(', 0x1f641 ], // Slightly frowning
|
[ FROWN, 0x1f641 ], // Slightly frowning
|
||||||
[ '+1', 0x1f44d ], // Thumbs up
|
[ THUMBS_UP, 0x1f44d ], // Thumbs up
|
||||||
[ '-1', 0x1f44e ], // Thumbs down
|
[ THUMBS_DOWN, 0x1f44e ], // Thumbs down
|
||||||
[ '<3', 0x02764 ], // Heart
|
[ HEART, 0x02764 ], // Heart
|
||||||
];
|
];
|
||||||
const EMOJI_TRANSMISSION_MILLISECONDS = 5000;
|
const EMOJI_TRANSMISSION_MILLISECONDS = 5000;
|
||||||
const BLINK_PERIOD_MILLISECONDS = 500;
|
const BLINK_PERIOD_MILLISECONDS = 500;
|
||||||
const TRANSMIT_BUZZ_MILLISECONDS = 200;
|
const TRANSMIT_BUZZ_MILLISECONDS = 200;
|
||||||
const CYCLE_BUZZ_MILLISECONDS = 50;
|
const CYCLE_BUZZ_MILLISECONDS = 50;
|
||||||
|
const WELCOME_MESSAGE = 'Emojuino:\r\n\r\n< Swipe >\r\nto select\r\n\r\nTap\r\nto transmit';
|
||||||
|
|
||||||
// Non-user-configurable constants
|
// Non-user-configurable constants
|
||||||
const IMAGE_INDEX = 0;
|
const IMAGE_INDEX = 0;
|
||||||
const CODE_POINT_INDEX = 1;
|
const CODE_POINT_INDEX = 1;
|
||||||
|
const EMOJI_PX = 96;
|
||||||
|
const EMOJI_X = (g.getWidth() - EMOJI_PX) / 2;
|
||||||
|
const EMOJI_Y = (g.getHeight() - EMOJI_PX) / 2;
|
||||||
|
const TX_X = 68;
|
||||||
|
const TX_Y = 12;
|
||||||
|
const FONT_SIZE = 24;
|
||||||
const BTN_WATCH_OPTIONS = { repeat: true, debounce: 20, edge: "falling" };
|
const BTN_WATCH_OPTIONS = { repeat: true, debounce: 20, edge: "falling" };
|
||||||
const UNICODE_CODE_POINT_ELIDED_UUID = [ 0x49, 0x6f, 0x49, 0x44, 0x55,
|
const UNICODE_CODE_POINT_ELIDED_UUID = [ 0x49, 0x6f, 0x49, 0x44, 0x55,
|
||||||
0x54, 0x46, 0x2d, 0x33, 0x32 ];
|
0x54, 0x46, 0x2d, 0x33, 0x32 ];
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Global variables
|
// Global variables
|
||||||
let emojiIndex = 0;
|
let emojiIndex = 0;
|
||||||
let isToggleOn = false;
|
let isToggleOn = false;
|
||||||
|
|
@ -72,6 +91,7 @@ function transmitEmoji(image, codePoint, duration) {
|
||||||
require('ble_eddystone_uid').advertise(UNICODE_CODE_POINT_ELIDED_UUID,
|
require('ble_eddystone_uid').advertise(UNICODE_CODE_POINT_ELIDED_UUID,
|
||||||
instance);
|
instance);
|
||||||
isTransmitting = true;
|
isTransmitting = true;
|
||||||
|
drawImage(EMOJIS[emojiIndex][IMAGE_INDEX], true);
|
||||||
|
|
||||||
let displayIntervalId = setInterval(toggleImage, BLINK_PERIOD_MILLISECONDS,
|
let displayIntervalId = setInterval(toggleImage, BLINK_PERIOD_MILLISECONDS,
|
||||||
image);
|
image);
|
||||||
|
|
@ -85,14 +105,14 @@ function terminateEmoji(displayIntervalId) {
|
||||||
NRF.setAdvertising({ });
|
NRF.setAdvertising({ });
|
||||||
isTransmitting = false;
|
isTransmitting = false;
|
||||||
clearInterval(displayIntervalId);
|
clearInterval(displayIntervalId);
|
||||||
drawImage(EMOJIS[emojiIndex][IMAGE_INDEX]);
|
drawImage(EMOJIS[emojiIndex][IMAGE_INDEX], false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Toggle the display between image/off
|
// Toggle the display between image/off
|
||||||
function toggleImage(image) {
|
function toggleImage(image) {
|
||||||
if(isToggleOn) {
|
if(isToggleOn) {
|
||||||
drawImage(EMOJIS[emojiIndex][IMAGE_INDEX]);
|
drawImage(EMOJIS[emojiIndex][IMAGE_INDEX], true);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
g.clear();
|
g.clear();
|
||||||
|
|
@ -102,9 +122,15 @@ function toggleImage(image) {
|
||||||
|
|
||||||
|
|
||||||
// Draw the given emoji
|
// Draw the given emoji
|
||||||
function drawImage(image) {
|
function drawImage(image, isTx) {
|
||||||
g.clear();
|
g.clear();
|
||||||
g.drawString(image, g.getWidth() / 2, g.getHeight() / 2);
|
g.drawImage(require("heatshrink").decompress(atob(image)), EMOJI_X, EMOJI_Y);
|
||||||
|
if(isTx) {
|
||||||
|
g.drawImage(require("heatshrink").decompress(atob(TX)), TX_X, TX_Y);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
g.drawString("< Swipe >", g.getWidth() / 2, g.getHeight() - FONT_SIZE);
|
||||||
|
}
|
||||||
g.flip();
|
g.flip();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -131,15 +157,15 @@ function handleDrag(event) {
|
||||||
// Special function to handle display switch on
|
// Special function to handle display switch on
|
||||||
Bangle.on('lcdPower', (on) => {
|
Bangle.on('lcdPower', (on) => {
|
||||||
if(on) {
|
if(on) {
|
||||||
drawImage(EMOJIS[emojiIndex][IMAGE_INDEX]);
|
drawImage(EMOJIS[emojiIndex][IMAGE_INDEX], false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
// On start: display the first emoji and handle drag and touch events
|
// On start: display the first emoji and handle drag and touch events
|
||||||
g.clear();
|
g.clear();
|
||||||
g.setFont('Vector', 80);
|
g.setFont('Vector', FONT_SIZE);
|
||||||
g.setFontAlign(0, 0);
|
g.setFontAlign(0, 0);
|
||||||
drawImage(EMOJIS[emojiIndex][IMAGE_INDEX]);
|
g.drawString(WELCOME_MESSAGE, g.getWidth() / 2, g.getHeight() / 2);
|
||||||
Bangle.on('touch', handleTouch);
|
Bangle.on('touch', handleTouch);
|
||||||
Bangle.on('drag', handleDrag);
|
Bangle.on('drag', handleDrag);
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 2.6 KiB |
|
|
@ -1 +1,2 @@
|
||||||
0.1: Added source code
|
0.1: Added source code
|
||||||
|
0.2: Added a README file
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,3 @@
|
||||||
|
# FD6FDetect
|
||||||
|
|
||||||
|
An app dedicated to letting you know how many Exposure Notification beacons are near you.
|
||||||
|
|
@ -1 +1 @@
|
||||||
require("heatshrink").decompress(atob("mEwghC/AEkIxAABwUiAAwKBC6+AC6ERiIXDGBAXPGA8JzIAByQXKGA4XUA4eDmYAGJwQXVxEizAXPIgIXDwWZC6uIxIwCC6eIGAQX/C9i/FC5mCCw0yC5wAMC/4Xnx//ABf4C/Xzdw8zn4XkL/5f/L+oUDI6YX3AB4XeAH4AdA=="))
|
require("heatshrink").decompress(atob("mEw4cA///7c0AYMXlm3gf42s1yvb5xT/ABdJkmStu27YCCtMkCKOACJdm7YRCyARQyQRLBwIRDoARTgVLtu3K4tJl4RQkvpCJdbtwRBkm5CKGZCKGTCKGSsgR/R4gRHpIMBCInaCJIIBARAR/CJtPB5FLCI1KEhMSCLN//4AE/QRbI/5H/CI4PCGpwRXp4RIpZFDCIQiJAQIRWAH4AGA"))
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
0.01: New App!
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
# Gadgetbridge Debug
|
||||||
|
|
||||||
|
This is useful if your Bangle isn't responding to the Gadgetbridge
|
||||||
|
Android app properly.
|
||||||
|
|
||||||
|
This app disables all existing Gadgetbridge handlers and then displays the
|
||||||
|
messages that come from Gadgetbridge on the screen
|
||||||
|
of the watch. It also saves the last 10 messages in a variable
|
||||||
|
called `history`.
|
||||||
|
|
||||||
|
More info on Gadgetbridge at http://www.espruino.com/Gadgetbridge
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
* Run the `GB Debug` app on your Bangle
|
||||||
|
* Connect your Bangle to Gadgetbridge
|
||||||
|
* Do whatever was causing you problems (eg receiving a call)
|
||||||
|
* The Gadgetbridge message should now be displayed on-screen
|
||||||
|
|
||||||
|
If you want to get the *actual* data rather than copying it from the screen.
|
||||||
|
|
||||||
|
* Ensure the `GB Debug` app is kept running after the above steps
|
||||||
|
* Disconnect Gadgetbridge from the Bangle
|
||||||
|
* Connect the Web IDE on your PC
|
||||||
|
* Type `show()` on the left-hand side of the IDE and the
|
||||||
|
last 10 messages from Gadgetbridge will be shown.
|
||||||
|
|
@ -0,0 +1 @@
|
||||||
|
require("heatshrink").decompress(atob("mEw4cBzsE/4AClMywH680rlOW9N9kmSpICnyBBBgQRMkBUDgIRKoBoGGRYAFHBGARpARHT5MJKxQAFLgzELCIlIBQkSCIsEPRKBHCIYbGoIRFiQRJhJgFCISeEBwMQOQykCCIqlBpMEBIgRHOQYRIYQbPDhAbBNwgRJVwOCTIgRFMAJKDgQRGOQprBCIMSGogHBJwwbBkC2FCJNbUgMNwHYBYPJCIhODju0yFNCIUGCJGCoE2NwO24EAmw1FHgWCpMGgQOBBIMwCJGSpMmyAjDCI6eBCIWAhu2I4IRCUIYREk+Ah3brEB2CzFAAIRCl3b23btsNCJckjoRC1h2CyAREtoNC9oDC2isCCIgHBjdt5MtCJj2CowjD2uyCIOSCI83lu123tAQIRI4EB28/++39/0mwRCoARCgbfByU51/3rev+mWCIQwCPok0EYIRB/gRDpJ+EcYQRJkARQdgq/Bl5HE7IRDZAltwAREyXbCIbIFgEfCIXsBwQCDQAYRNLgvfCIXtCI44Dm3JCIUlYoYCGkrjBk9bxMkyy9CChICFA="))
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
E.showMessage("Waiting for message");
|
||||||
|
Bangle.loadWidgets();
|
||||||
|
Bangle.drawWidgets();
|
||||||
|
|
||||||
|
var history = [];
|
||||||
|
|
||||||
|
GB = function(e) {
|
||||||
|
if (history.length > 10)
|
||||||
|
history = history.slice(history.length-10);
|
||||||
|
history.push(e);
|
||||||
|
|
||||||
|
var s = JSON.stringify(e,null,2);
|
||||||
|
|
||||||
|
g.reset().clear(Bangle.appRect);
|
||||||
|
g.setFont("6x8").setFontAlign(-1,0);
|
||||||
|
g.drawString(s, 10, g.getHeight()/2);
|
||||||
|
};
|
||||||
|
|
||||||
|
function show() {
|
||||||
|
print(JSON.stringify(history,null,2));
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 2.8 KiB |
|
|
@ -4,3 +4,4 @@
|
||||||
0.04: Setting to disable touch controls, minor bugfix
|
0.04: Setting to disable touch controls, minor bugfix
|
||||||
0.05: Setting to disable double/triple press control, remove touch controls setting, reduce fadeout flicker
|
0.05: Setting to disable double/triple press control, remove touch controls setting, reduce fadeout flicker
|
||||||
0.06: Bangle.js 2 support
|
0.06: Bangle.js 2 support
|
||||||
|
0.07: Fix "previous" button image
|
||||||
|
|
|
||||||
|
|
@ -303,7 +303,7 @@ function drawControls() {
|
||||||
l.up.col = cc("volumeup" in tCommand);
|
l.up.col = cc("volumeup" in tCommand);
|
||||||
l.down.col = cc("volumedown" in tCommand);
|
l.down.col = cc("volumedown" in tCommand);
|
||||||
}
|
}
|
||||||
l.prev.icon = (stat==="play") ? "pause" : "prev";
|
l.prev.icon = (stat==="play") ? "pause" : "previous";
|
||||||
l.prev.col = cc("prev" in tCommand || "pause" in tCommand);
|
l.prev.col = cc("prev" in tCommand || "pause" in tCommand);
|
||||||
l.next.icon = (stat==="play") ? "next" : "play";
|
l.next.icon = (stat==="play") ? "next" : "play";
|
||||||
l.next.col = cc("next" in tCommand || "play" in tCommand);
|
l.next.col = cc("next" in tCommand || "play" in tCommand);
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@
|
||||||
}
|
}
|
||||||
var mainmenu = {
|
var mainmenu = {
|
||||||
"" : { "title" : "Gadgetbridge" },
|
"" : { "title" : "Gadgetbridge" },
|
||||||
|
"< Back" : back,
|
||||||
"Connected" : { value : NRF.getSecurityStatus().connected?"Yes":"No" },
|
"Connected" : { value : NRF.getSecurityStatus().connected?"Yes":"No" },
|
||||||
"Show Icon" : {
|
"Show Icon" : {
|
||||||
value: settings().showIcon,
|
value: settings().showIcon,
|
||||||
|
|
@ -34,8 +35,7 @@
|
||||||
value: !!settings().hrm,
|
value: !!settings().hrm,
|
||||||
format: v => v?"Yes":"No",
|
format: v => v?"Yes":"No",
|
||||||
onchange: v => updateSetting('hrm', v)
|
onchange: v => updateSetting('hrm', v)
|
||||||
},
|
}
|
||||||
"< Back" : back,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
var findPhone = {
|
var findPhone = {
|
||||||
|
|
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
|
|
@ -26,3 +26,5 @@
|
||||||
0.22: Ensure Bangle.setGPSPower uses 'gpsrec' as a tag
|
0.22: Ensure Bangle.setGPSPower uses 'gpsrec' as a tag
|
||||||
0.23: Fix issue where tracks wouldn't record when running from OpenStMap if a period hadn't been set up first
|
0.23: Fix issue where tracks wouldn't record when running from OpenStMap if a period hadn't been set up first
|
||||||
0.24: Better support for Bangle.js 2, avoid widget area for Graphs, smooth graphs more
|
0.24: Better support for Bangle.js 2, avoid widget area for Graphs, smooth graphs more
|
||||||
|
0.25: Fix issue where if Bangle.js 2 got a GPS fix but no reported time, errors could be caused by the widget (fix #935)
|
||||||
|
0.26: Multiple bugfixes
|
||||||
|
|
|
||||||
|
|
@ -249,10 +249,10 @@ function plotTrack(info) {
|
||||||
g.fillCircle(ox,oy,5);
|
g.fillCircle(ox,oy,5);
|
||||||
if (info.qOSTM) g.setColor(0, 0, 0);
|
if (info.qOSTM) g.setColor(0, 0, 0);
|
||||||
else g.setColor(1,1,1);
|
else g.setColor(1,1,1);
|
||||||
g.drawString(require("locale").distance(dist),120,220);
|
g.drawString(require("locale").distance(dist),g.getWidth() / 2, g.getHeight() - 20);
|
||||||
g.setFont("6x8",2);
|
g.setFont("6x8",2);
|
||||||
g.setFontAlign(0,0,3);
|
g.setFontAlign(0,0,3);
|
||||||
g.drawString("Back",230,200);
|
g.drawString("Back",g.getWidth() - 10, g.getHeight() - 40);
|
||||||
setWatch(function() {
|
setWatch(function() {
|
||||||
viewTrack(info.fn, info);
|
viewTrack(info.fn, info);
|
||||||
}, global.BTN3||BTN1);
|
}, global.BTN3||BTN1);
|
||||||
|
|
@ -330,13 +330,13 @@ function plotGraph(info, style) {
|
||||||
height: g.getHeight()-(24+8),
|
height: g.getHeight()-(24+8),
|
||||||
axes : true,
|
axes : true,
|
||||||
gridy : grid,
|
gridy : grid,
|
||||||
gridx : 50,
|
gridx : infn.length / 3,
|
||||||
title: title,
|
title: title,
|
||||||
xlabel : x=>Math.round(x*dur/(60*infn.length))+" min" // minutes
|
xlabel : x=>Math.round(x*dur/(60*infn.length))+" min" // minutes
|
||||||
});
|
});
|
||||||
g.setFont("6x8",2);
|
g.setFont("6x8",2);
|
||||||
g.setFontAlign(0,0,3);
|
g.setFontAlign(0,0,3);
|
||||||
g.drawString("Back",230,200);
|
g.drawString("Back",g.getWidth() - 10, g.getHeight() - 40);
|
||||||
setWatch(function() {
|
setWatch(function() {
|
||||||
viewTrack(info.fn, info);
|
viewTrack(info.fn, info);
|
||||||
}, global.BTN3||BTN1);
|
}, global.BTN3||BTN1);
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,7 @@
|
||||||
fixToggle = !fixToggle;
|
fixToggle = !fixToggle;
|
||||||
WIDGETS["gpsrec"].draw();
|
WIDGETS["gpsrec"].draw();
|
||||||
if (hasFix) {
|
if (hasFix) {
|
||||||
|
if (fix.time===undefined) fix.time = new Date(); // Bangle.js 2 can provide a fix before time it seems
|
||||||
var period = fix.time.getTime() - lastFixTime;
|
var period = fix.time.getTime() - lastFixTime;
|
||||||
if (period+500 > settings.period*1000) { // round up
|
if (period+500 > settings.period*1000) { // round up
|
||||||
lastFixTime = fix.time.getTime();
|
lastFixTime = fix.time.getTime();
|
||||||
|
|
|
||||||