64 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			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);
 | 
						|
  },
 | 
						|
};
 |