55 lines
1.7 KiB
JavaScript
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);
|
|
},
|
|
};
|