LiliyGo-HiGrow-Sensor/build/fs/api_timer.js

55 lines
1.7 KiB
JavaScript

load('api_math.js');
let Timer = {
_f: ffi('int mgos_strftime(char *, int, char *, int)'),
// ## **`Timer.set(milliseconds, flags, handler, userdata)`**
// Setup timer with `milliseconds` timeout and `handler` as a callback.
// `flags` can be either 0 or `Timer.REPEAT`. In the latter case, the call
// will be repeated indefinitely (but can be cancelled with `Timer.del()`),
// otherwise it's a one-off.
//
// Return value: numeric timer ID.
//
// Example:
// ```javascript
// // Call every second
// Timer.set(1000, Timer.REPEAT, function() {
// let value = GPIO.toggle(2);
// print(value ? 'Tick' : 'Tock');
// }, null);
// ```
set: ffi('int mgos_set_timer(int,int,void(*)(userdata),userdata)'),
REPEAT: 1,
// ## **`Timer.now()`**
// Return current time as double value, UNIX epoch (seconds since 1970).
now: ffi('double mg_time(void)'),
// ## **`Timer.del(id)`**
// Cancel previously installed timer.
del: ffi('void mgos_clear_timer(int)'),
// ## **`Timer.fmt(fmt, time)`**
// Formats the time 'time' according to the strftime-like format
// specification 'fmt'. The strftime reference can be found e.g.
// [here](http://www.cplusplus.com/reference/ctime/strftime/).
// Example:
// ```javascript
// let now = Timer.now();
// let s = Timer.fmt("Now it's %I:%M%p.", now);
// print(s); // Example output: "Now it's 12:01AM."
// ```
fmt: function(fmt, time) {
if (!fmt) return 'invalid format';
let res = 0, t = Math.round(time || Timer.now()), s = ' ';
while (res === 0) {
res = this._f(s, s.length, fmt, t);
if (res === -1) return 'invalid time';
if (res === 0) s += ' ';
}
return s.slice(0, res);
},
};