Merge pull request #1889 from alessandrococco/buzz-patch

[buzz] Add support for new patterns
pull/1915/head^2
Gordon Williams 2022-06-06 11:15:45 +01:00 committed by GitHub
commit 9629148318
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 53 additions and 24 deletions

View File

@ -10,3 +10,6 @@
0.09: Move some functions to new time_utils module 0.09: Move some functions to new time_utils module
0.10: Default to sched.js if custom js not found 0.10: Default to sched.js if custom js not found
0.11: Fix default dow 0.11: Fix default dow
0.12: Update default buzz patterns to new values
Improve timer message using formatDuration
Fix wrong fallback for buzz pattern

View File

@ -106,8 +106,8 @@ exports.getSettings = function () {
defaultRepeat: false, defaultRepeat: false,
buzzCount: 10, buzzCount: 10,
buzzIntervalMillis: 3000, // 3 seconds buzzIntervalMillis: 3000, // 3 seconds
defaultAlarmPattern: "..", defaultAlarmPattern: "::",
defaultTimerPattern: ".." defaultTimerPattern: "::"
}, },
require("Storage").readJSON("sched.settings.json", true) || {} require("Storage").readJSON("sched.settings.json", true) || {}
); );

View File

@ -1,7 +1,7 @@
{ {
"id": "sched", "id": "sched",
"name": "Scheduler", "name": "Scheduler",
"version": "0.11", "version": "0.12",
"description": "Scheduling library for alarms and timers", "description": "Scheduling library for alarms and timers",
"icon": "app.png", "icon": "app.png",
"type": "scheduler", "type": "scheduler",

View File

@ -9,7 +9,7 @@ function showAlarm(alarm) {
const settings = require("sched").getSettings(); const settings = require("sched").getSettings();
let msg = ""; let msg = "";
msg += require("time_utils").formatTime(alarm.timer ? alarm.timer : alarm.t); msg += alarm.timer ? require("time_utils").formatDuration(alarm.timer) : require("time_utils").formatTime(alarm.t);
if (alarm.msg) { if (alarm.msg) {
msg += "\n"+alarm.msg; msg += "\n"+alarm.msg;
} else { } else {
@ -50,7 +50,8 @@ function showAlarm(alarm) {
Bangle.setLocked(false); Bangle.setLocked(false);
} }
require("buzz").pattern(alarm.vibrate === undefined ? ".." : alarm.vibrate).then(() => { const pattern = alarm.vibrate || (alarm.timer ? settings.defaultTimerPattern : settings.defaultAlarmPattern);
require("buzz").pattern(pattern).then(() => {
if (buzzCount--) { if (buzzCount--) {
setTimeout(buzz, settings.buzzIntervalMillis); setTimeout(buzz, settings.buzzIntervalMillis);
} else if (alarm.as) { // auto-snooze } else if (alarm.as) { // auto-snooze

View File

@ -29,7 +29,7 @@
min: 5, min: 5,
max: 30, max: 30,
step: 5, step: 5,
format: v => v + /*LANG*/" min", format: v => v + /*LANG*/"m",
onchange: v => { onchange: v => {
settings.defaultSnoozeMillis = v * 60000; settings.defaultSnoozeMillis = v * 60000;
require("sched").setSettings(settings); require("sched").setSettings(settings);

View File

@ -1,14 +1,34 @@
/* Call this with a pattern like '.-.', '.. .' or '..' to buzz that pattern const BUZZ_WEAK = 0.25, BUZZ_STRONG = 1;
out on the internal vibration motor. use buzz_menu to display a menu const SHORT_MS = 100, MEDIUM_MS = 200, LONG_MS = 500;
where the patterns can be chosen. */
/**
* Buzz the passed `pattern` out on the internal vibration motor.
*
* A pattern is a sequence of `.`, `,`, `-`, `:`, `;` and `=` where
* - `.` is one short and weak vibration
* - `,` is one medium and weak vibration
* - `-` is one long and weak vibration
* - `:` is one short and strong vibration
* - `;` is one medium and strong vibration
* - `=` is one long and strong vibration
*
* You can use the `buzz_menu` module to display a menu where some common patterns can be chosen.
*
* @param {string} pattern A string like `.-.`, `..=`, `:.:`, `..`, etc.
* @returns a Promise
*/
exports.pattern = pattern => new Promise(resolve => { exports.pattern = pattern => new Promise(resolve => {
function b() { function doBuzz() {
if (pattern=="") resolve(); if (pattern == "") resolve();
var c = pattern[0]; var c = pattern[0];
pattern = pattern.substr(1); pattern = pattern.substr(1);
if (c==".") Bangle.buzz().then(()=>setTimeout(b,100)); if (c == ".") Bangle.buzz(SHORT_MS, BUZZ_WEAK).then(() => setTimeout(doBuzz, 100));
else if (c=="-") Bangle.buzz(500).then(()=>setTimeout(b,100)); else if (c == ",") Bangle.buzz(MEDIUM_MS, BUZZ_WEAK).then(() => setTimeout(doBuzz, 100));
else setTimeout(b,100); else if (c == "-") Bangle.buzz(LONG_MS, BUZZ_WEAK).then(() => setTimeout(doBuzz, 100));
else if (c == ":") Bangle.buzz(SHORT_MS, BUZZ_STRONG).then(() => setTimeout(doBuzz, 100));
else if (c == ";") Bangle.buzz(MEDIUM_MS, BUZZ_STRONG).then(() => setTimeout(doBuzz, 100));
else if (c == "=") Bangle.buzz(LONG_MS, BUZZ_STRONG).then(() => setTimeout(doBuzz, 100));
else setTimeout(doBuzz, 100);
} }
b(); doBuzz();
}); });

View File

@ -1,14 +1,19 @@
/* Display a menu to select from various vibration patterns for use with buzz.js */ /**
* Display a menu to select from various common vibration patterns for use with buzz.js.
exports.pattern = function(value, callback) { *
var vibPatterns = ["", ".", "..", "-", "--", "-.-", "---"]; * @param {string} value The pre-selected pattern
* @param {*} callback A function called with the user selected pattern
*/
exports.pattern = function (value, callback) {
var patterns = ["", ".", ":", "..", "::", ",", ";", ",,", ";;", "-", "=", "--", "==", "...", ":::", "---", ";;;", "==="];
return { return {
value: Math.max(0,vibPatterns.indexOf(value)), value: Math.max(0, patterns.indexOf(value)),
min: 0, max: vibPatterns.length-1, min: 0,
format: v => vibPatterns[v]||/*LANG*/"Off", max: patterns.length - 1,
format: v => patterns[v] || /*LANG*/"Off",
onchange: v => { onchange: v => {
require("buzz").pattern(vibPatterns[v]); require("buzz").pattern(patterns[v]);
callback(vibPatterns[v]); callback(patterns[v]);
} }
}; };
} }