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_math.js"); load("api_file.js"); load("api_neopixel.js"); // Helper C function get_led_gpio_pin() in src/main.c returns built-in LED GPIO let onBoardLed = ffi('int get_led_gpio_pin(void)')(); 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() }); }; // 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 event:', ev, evs); }, null); // Initialize LED controller let addColor = ffi('void addColor(char *,int,int,int)'); let addLedDefinition = ffi('void addLedDefinition(char *, char *, char *, char *)'); let addAnimationStep = ffi('void addAnimationStep(int, char *, int)'); let LEDMode_on=1, LEDMode_off=2, LEDMode_blink=3, LEDMode_tv=4, LEDMode_fire=5; let LEDStateEngine_init = ffi('void LEDStateEngine_init(int)'); let LEDStateEngine_start = ffi('void startLEDStateEngine(void)'); let LEDStateEngine_pause = ffi('void pauseLEDStateEngine(void)'); let LEDState_getRed = ffi('int LEDState_getLedRed(int)'); let LEDState_getGreen = ffi('int LEDState_getLedGreen(int)'); let LEDState_getBlue = ffi('int LEDState_getLedBlue(int)'); let LEDState_getColorName = ffi('char * LEDState_getLedColorName(int)'); let LEDState_getNextTick = ffi('int LEDState_getNextTick(int)'); let LEDState_getCurrentTick = ffi('int LEDState_getCurrentTick(int)'); let LEDDefinition_getLevel = ffi('char *LEDDefinition_getLevel(int)'); let LEDDefinition_getRoom = ffi('char *LEDDefinition_getRoom(int)'); let LEDDefinition_getId = ffi('char *LEDDefinition_getId(int)'); let LEDDefinition_getOnColorRed = ffi('int LEDDefinition_getOnColorRed(int)'); let LEDDefinition_getOnColorGreen = ffi('int LEDDefinition_getOnColorGreen(int)'); let LEDDefinition_getOnColorBlue = ffi('int LEDDefinition_getOnColorBlue(int)'); let getTicks = ffi('int getTicks(void)'); let printColor = ffi('void printColor(char *)'); let pin = Cfg.get('led.pin'); let numPixels = Cfg.get('led.count'); let colorOrder = NeoPixel.GRB; let strip = NeoPixel.create(pin, numPixels, colorOrder); 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 updateCycle = Cfg.get('led.updateCycle'); let brightnessAdjustment = Cfg.get('led.brightness'); let numberOfLeds = 0; // from config files, count led definition entries /* Create test pattern */ function createLedTestPattern() { let i; let switchMod; for (i=0; i 5) print("WRONG -- should never reach this in switch statement!"); } strip.show(); } function allLedOn() { let i; for (i=0; i