load('api_config.js'); load('api_gpio.js'); load('api_mqtt.js'); load('api_net.js'); load('api_sys.js'); load('api_rpc.js'); load('api_timer.js'); load('api_file.js'); load('api_dlite.js'); // Helper C function get_led_gpio_pin() in src/main.c returns built-in LED GPIO let button = Cfg.get('pins.button'); let topic = '/devices/' + Cfg.get('device.id') + '/events'; print('LED GPIO:', onBoardLed, 'button GPIO:', button); let getInfo = function() { return JSON.stringify({ total_ram: Sys.total_ram(), free_ram: Sys.free_ram(), uptime: Sys.uptime() }); }; // Blink built-in LED every second /* GPIO.set_mode(onBoardLed, GPIO.MODE_OUTPUT); Timer.set(5000, true, function() { let value = GPIO.toggle(onBoardLed); print(value ? 'Tick' : 'Tock', 'uptime:', Sys.uptime(), getInfo()); }, null); */ // Publish to MQTT topic on a button press. Button is wired to GPIO pin 0 /* GPIO.set_button_handler(button, GPIO.PULL_UP, GPIO.INT_EDGE_NEG, 200, function() { let message = getInfo(); let ok = MQTT.pub(topic, message, 1); print('Published:', ok, topic, '->', message); }, null); */ // Monitor network connectivity. Net.setStatusEventHandler(function(ev, arg) { let evs = '???'; if (ev === Net.STATUS_DISCONNECTED) { evs = 'DISCONNECTED'; } else if (ev === Net.STATUS_CONNECTING) { evs = 'CONNECTING'; } else if (ev === Net.STATUS_CONNECTED) { evs = 'CONNECTED'; } else if (ev === Net.STATUS_GOT_IP) { evs = 'GOT_IP'; } print('==> NET:', ev, evs); }, null); let pin = Cfg.get('led.pin'); let configNumLeds = Cfg.get('led.count'); let colorFile = Cfg.get('led.colorFile'); let animationFile = Cfg.get('led.animationFile'); let lampsFile = Cfg.get('led.lampsFile'); let useDefaults = Cfg.get('led.useDefaults'); let tickDuration = Cfg.get('led.tickDuration'); let brightnessAdjustment = Cfg.get('led.brightness'); let numberOfLeds = configNumLeds, numberOfLedDefs = 0; // from config files, count led definition entries /* Create test pattern */ function showLedTestPattern() { let i; let switchMod; for (i=0; i 5) print("WRONG -- should never reach this in switch statement!"); } NeoPixel_show(); } function allLedOn() { let i; for (i=0; i configNumLeds) { print('WARNING: LED definition file contains more LEDs (', numberOfLedDefs, ') than configured in system-config (', configNumLeds, ')'); } json = null; // ledDef = null; // NO! Do not do this, as the strings are still referenced! } function loadAnimDefs() { // Load Animation Definitions let json = File.read(animationFile); let animation = []; print('animationFile =', json); if (json === '') { print('ERROR: Animation definition file does not exist!'); } else { animation = JSON.parse(json); } for (i=0; i