diff --git a/wiflash_esp32/data/template/configuration.json b/wiflash_esp32/data/template/configuration.json new file mode 100644 index 0000000..a8826ee --- /dev/null +++ b/wiflash_esp32/data/template/configuration.json @@ -0,0 +1,43 @@ +{ + "wifi" : { + "mode" : "%WIFI_MODE%", + "ssid" : "%WIFI_SSID%", + "password" : "%WIFI_PASSWORD%" + }, + "network" : { + "hostname" : "%HOSTNAME%", + "dhcp" : "%DHCP_ENABLE%", + "ipv4" : "%IPV4_ADDRESS%", + "mask" : "%SUBNET_MASK%", + "gateway" : "%GATEWAY_IP%" + }, + "button" : { + "enable": "%BUTTON_ENABLE%", + "pin" : "%BUTTON_PIN%", + "osc" : { + "host": "%OSC_HOST%", + "port": "%OSC_PORT%", + "pressed": { + "address": "%OSC_PRESSED_ADDR%", + "value": "%OSC_PRESSED_VALUE%" + }, + "released": { + "address": "%OSC_RELEASED_ADDR%", + "value": "%OSC_RELEASED_VALUE%" + } + } + }, + "strobe" : { + "enable" : "%STROBE_ENABLE%", + "pin" : "%STROBE_PIN%", + "universe" : "%STROBE_UNIVERSE%", + "address" : "%STROBE_ADDRESS%" + }, + "strip" : { + "enable" : "%STRIP_ENABLE%", + "pin" : "%STRIP_PIN%", + "count" : "%STRIP_LED_COUNT%", + "universe" : "%STRIP_UNIVERSE%", + "address" : "%STRIP_ADDRESS%" + } +} diff --git a/wiflash_esp32/wiflash_esp32.ino b/wiflash_esp32/wiflash_esp32.ino index ec352d2..25d2853 100644 --- a/wiflash_esp32/wiflash_esp32.ino +++ b/wiflash_esp32/wiflash_esp32.ino @@ -112,6 +112,40 @@ void recvPixelData(Universe *universe) { } +/* + Template variables +*/ +String templateProcessor(const String& var) { + // configuration values + if (var == "WIFI_MODE") return String(config.mode); + if (var == "WIFI_SSID") return config.ssid; + if (var == "WIFI_PASSWORD") return config.pwd; + if (var == "HOSTNAME") return config.hostname; + if (var == "DHCP_ENABLE") return String(config.dhcp); + if (var == "IPV4_ADDRESS") return config.ip; + if (var == "SUBNET_MASK") return config.subnet; + if (var == "GATEWAY_IP") return config.gateway; + if (var == "BUTTON_ENABLE") return String(config.button_enable); + if (var == "BUTTON_PIN") return String(config.button_pin); + if (var == "OSC_HOST") return config.osc_host; + if (var == "OSC_PORT") return String(config.osc_port); + if (var == "OSC_PRESSED_ADDR") return config.osc_pressed_addr; + if (var == "OSC_PRESSED_VALUE") return config.osc_pressed_value; + if (var == "OSC_RELEASED_ADDR") return config.osc_released_addr; + if (var == "OSC_RELEASED_VALUE") return config.osc_released_value; + if (var == "STROBE_ENABLE") return String(config.strobe_enable); + if (var == "STROBE_PIN") return String(config.strobe_led_pin); + if (var == "STROBE_UNIVERSE") return String(config.strobe_universe); + if (var == "STROBE_ADDRESS") return String(config.strobe_address); + if (var == "STRIP_ENABLE") return String(config.strip_enable); + if (var == "STRIP_PIN") return String(config.strip_data_pin); + if (var == "STRIP_LED_COUNT") return String(config.strip_led_count); + if (var == "STRIP_UNIVERSE") return String(config.strip_universe); + if (var == "STRIP_ADDRESS") return String(config.strip_address); + + return String(); +} + /* Change a setting in NVM */ @@ -173,6 +207,12 @@ bool loadConfig() { Start the async web server */ void startHTTPD() { + server.on("/api/config", HTTP_GET, [](AsyncWebServerRequest * request) { + AsyncWebServerResponse *response = request->beginResponse(SPIFFS, "/template/configuration.json", "application/json", false, templateProcessor); + response->addHeader("Access-Control-Allow-Origin", "*"); + request->send(response); + }); + server.on("/api/reboot", HTTP_POST, [](AsyncWebServerRequest * request) { request->redirect("/"); server.end(); @@ -236,7 +276,6 @@ void setup() { break; } - Serial.println("Disabling Bluetooth."); btStop();