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

64 lines
2.1 KiB
JavaScript

let Cfg = {
_get: ffi('void *mgos_mjs_get_config()'),
_set: ffi('bool mgos_config_apply(char *, bool)'),
_desc: ffi('void *mgos_config_schema()'),
_find: ffi('void *mgos_conf_find_schema_entry(char *, void *)'),
_type: ffi('int mgos_conf_value_type(void *)'),
_str: ffi('char *mgos_conf_value_string_nonnull(void *, void *)'),
_int: ffi('int mgos_conf_value_int(void *, void *)'),
_dbl: ffi('double mgos_conf_value_double(void *, void *)'),
_INT: 0,
_BOOL: 1,
_DBL: 2,
_STR: 3,
_OBJ: 4,
// ## **`Cfg.get(path)`**
// Get the config value by the configuration variable. Currently, only
// simple types are returned: strings, ints, booleans, doubles. Objects
// are not yet supported.
//
// Examples:
// ```javascript
// load('api_config.js');
// Cfg.get('device.id'); // returns a string
// Cfg.get('debug.level'); // returns an integer
// Cfg.get('wifi.sta.enable'); // returns a boolean
// ```
get: function(path) {
let entry = this._find(path, this._desc());
if (entry === null) return undefined;
let type = this._type(entry);
let cfg = this._get();
if (type === this._STR) {
return this._str(cfg, entry);
} else if (type === this._INT) {
return this._int(cfg, entry);
} else if (type === this._DBL) {
return this._dbl(cfg, entry);
} else if (type === this._BOOL) {
return (this._int(cfg, entry) !== 0);
} else if (type === this._OBJ) {
/* TODO */
return undefined;
} else {
/* TODO: an error */
return undefined;
}
},
// ## **`Cfg.set(obj, opt_save)`**
// Set the configuration. `obj` must be a subset of the whole configuation
// tree. `save` is boolean flag that indicating whether the change should
// be saved - it could be omitted, in which case it defaults to `true`.
// Examples:
// ```javascript
// load('api_config.js');
// Cfg.set({wifi: {ap: {enable: false}}}); // Disable WiFi AP mode
// Cfg.set({debug: {level: 3}}); // Set debug level to 3
// ```
set: function(obj, save) {
return this._set(JSON.stringify(obj), save === undefined ? true : save);
},
};