From ef4c6e016d4db3b4954d76862bbfc82370b6d408 Mon Sep 17 00:00:00 2001 From: Torrie Fischer Date: Sat, 18 Feb 2023 18:46:42 +0100 Subject: [PATCH] platform: drop particle platform --- platformio.ini | 5 - src/platform/particle/MDNSService.cpp | 36 ---- src/platform/particle/MQTTTelemetry.cpp | 205 ------------------- src/platform/particle/PhotonTelemetry.cpp | 70 ------- src/platform/particle/PhotonTelemetry.h | 25 --- src/platform/particle/Watchdog.cpp | 31 --- src/platform/particle/WebTelemetry.cpp | 158 -------------- src/platform/particle/inputs/CloudStatus.cpp | 29 --- src/platform/particle/inputs/CloudStatus.h | 11 - src/platform/particle/inputs/Photon.cpp | 186 ----------------- src/platform/particle/inputs/Photon.h | 38 ---- 11 files changed, 794 deletions(-) delete mode 100644 src/platform/particle/MDNSService.cpp delete mode 100644 src/platform/particle/MQTTTelemetry.cpp delete mode 100644 src/platform/particle/PhotonTelemetry.cpp delete mode 100644 src/platform/particle/PhotonTelemetry.h delete mode 100644 src/platform/particle/Watchdog.cpp delete mode 100644 src/platform/particle/WebTelemetry.cpp delete mode 100644 src/platform/particle/inputs/CloudStatus.cpp delete mode 100644 src/platform/particle/inputs/CloudStatus.h delete mode 100644 src/platform/particle/inputs/Photon.cpp delete mode 100644 src/platform/particle/inputs/Photon.h diff --git a/platformio.ini b/platformio.ini index 62e28f9..a901e18 100644 --- a/platformio.ini +++ b/platformio.ini @@ -181,8 +181,3 @@ lib_deps = #[env:home_lighting-12f] #extends = env:esp8266_wifi config_u8display #board = esp12e - -;[env:photon] -;platform = particlephoton -;board = photon -;framework = arduino diff --git a/src/platform/particle/MDNSService.cpp b/src/platform/particle/MDNSService.cpp deleted file mode 100644 index cb87021..0000000 --- a/src/platform/particle/MDNSService.cpp +++ /dev/null @@ -1,36 +0,0 @@ -#include "MDNS/MDNS.h" -#include "Figments/Figments.h" -#include "Figments/MainLoop.h" -#include "Figments/Input.h" -#include "colors.h" - -class MDNSService : public Task { - private: - mdns::MDNS m_mdns; - bool m_online = false; - - public: - MDNSService() : Task("MDNS") { - } - - void handleEvent(const InputEvent &evt) { - if (evt.intent == InputEvent::NetworkStatus) { - m_mdns.setHostname("renderbug"); - m_mdns.addService("tcp", "http", 80, "Renderbug"); - m_mdns.begin(true); - m_online = true; - } - } - - void loop() override { - if (m_online) { - // Returns true when it reads at least one byte - if (m_mdns.processQueries()) { - MainLoop::instance()->dispatch(InputEvent::NetworkActivity); - } - } - } -}; - -STATIC_ALLOC(MDNSService); -STATIC_TASK(MDNSService); diff --git a/src/platform/particle/MQTTTelemetry.cpp b/src/platform/particle/MQTTTelemetry.cpp deleted file mode 100644 index 70b2ee1..0000000 --- a/src/platform/particle/MQTTTelemetry.cpp +++ /dev/null @@ -1,205 +0,0 @@ -#include "MQTT/MQTT.h" - -class MQTTTelemetry : public BufferedInputSource, OnlineTaskMixin { - public: - MQTTTelemetry() : BufferedInputSource("MQTT"), m_client("relay.malloc.hackerbots.net", 1883, 512, 15, MQTTTelemetry::s_callback, true) { - strcpy(m_deviceName, System.deviceID().c_str()); - } - - void loop() override { - BufferedInputSource::loop(); - OnlineTaskMixin::loop(); - } - - void handleEventOnline(const InputEvent& event) override { - char response[255]; - if (event.intent == InputEvent::SetPower) { - JSONBufferWriter writer(response, sizeof(response)); - writer.beginObject(); - writer.name("state").value(event.asInt() == 0 ? "OFF" : "ON"); - writer.endObject(); - writer.buffer()[std::min(writer.bufferSize(), writer.dataSize())] = 0; - m_client.publish(m_statTopic, response, MQTT::QOS1); - } else if (event.intent == InputEvent::SetBrightness) { - JSONBufferWriter writer(response, sizeof(response)); - writer.beginObject(); - writer.name("brightness").value(event.asInt()); - writer.endObject(); - writer.buffer()[std::min(writer.bufferSize(), writer.dataSize())] = 0; - m_client.publish(m_statTopic, response, MQTT::QOS1); - } else if (event.intent == InputEvent::SetColor) { - JSONBufferWriter writer(response, sizeof(response)); - writer.beginObject(); - writer.name("color").beginObject(); - CRGB rgb = event.asRGB(); - writer.name("r").value(rgb.r); - writer.name("g").value(rgb.g); - writer.name("b").value(rgb.b); - writer.endObject(); - writer.endObject(); - writer.buffer()[std::min(writer.bufferSize(), writer.dataSize())] = 0; - m_client.publish(m_statTopic, response, MQTT::QOS1); - } else if (event.intent == InputEvent::SetPattern) { - JSONBufferWriter writer(response, sizeof(response)); - writer.beginObject(); - writer.name("effect").value(event.asString()); - writer.endObject(); - writer.buffer()[std::min(writer.bufferSize(), writer.dataSize())] = 0; - m_client.publish(m_statTopic, response, MQTT::QOS1); - } else { - if (m_lastIntent != event.intent) { - m_lastIntent = event.intent; - JSONBufferWriter writer(response, sizeof(response)); - writer.beginObject(); - writer.name("intent").value(event.intent); - writer.endObject(); - writer.buffer()[std::min(writer.bufferSize(), writer.dataSize())] = 0; - m_client.publish("renderbug/events", response, MQTT::QOS1); - } - } - } - - void loopOnline() override { - if (m_client.isConnected()) { - m_client.loop(); - EVERY_N_SECONDS(10) { - char heartbeatBuf[255]; - JSONBufferWriter writer(heartbeatBuf, sizeof(heartbeatBuf)); - writer.beginObject(); - writer.name("fps").value(FastLED.getFPS()); - writer.name("os_version").value(System.version()); - writer.name("free_ram").value((unsigned int)System.freeMemory()); - //writer.name("uptime").value(System.uptime()); - /*WiFiSignal sig = WiFi.RSSI(); - writer.name("strength").value(sig.getStrength()); - writer.name("quality").value(sig.getQuality());*/ - writer.name("RSSI").value(WiFi.RSSI()); - writer.name("SSID").value(WiFi.SSID()); - //writer.name("MAC").value(WiFi.macAddress()); - writer.name("localip").value(WiFi.localIP().toString()); - writer.name("startPixel").value(Static::instance()->coordMap()->startPixel); - writer.name("pixelCount").value(Static::instance()->coordMap()->pixelCount); - writer.endObject(); - writer.buffer()[std::min(writer.bufferSize(), writer.dataSize())] = 0; - m_client.publish(m_attrTopic, heartbeatBuf); - } - } else { - m_client.connect("renderbug_" + String(m_deviceName) + "_" + String(Time.now())); - char response[512]; - JSONBufferWriter writer(response, sizeof(response)); - - String devTopic = String("homeassistant/light/renderbug/") + m_deviceName; - writer.beginObject(); - writer.name("~").value(devTopic.c_str()); - writer.name("name").value("Renderbug Photon"); - writer.name("unique_id").value(m_deviceName); - writer.name("cmd_t").value("~/set"); - writer.name("stat_t").value("~/state"); - writer.name("json_attr_t").value("~/attributes"); - writer.name("schema").value("json"); - writer.name("brightness").value(true); - writer.name("rgb").value(true); - writer.name("ret").value(true); - - writer.name("dev").beginObject(); - writer.name("name").value("Renderbug"); - writer.name("mdl").value("Renderbug"); - writer.name("sw").value(RENDERBUG_VERSION); - writer.name("mf").value("Phong Robotics"); - - writer.name("ids").beginArray(); - writer.value(m_deviceName); - writer.endArray(); - - writer.endObject(); - - writer.name("fx_list").beginArray(); - for(const Sequencer::Scene& scene : sequencer.scenes()) { - writer.value(scene.name); - } - writer.endArray(); - - writer.endObject(); - writer.buffer()[std::min(writer.bufferSize(), writer.dataSize())] = 0; - - String configTopic = devTopic + "/config"; - m_client.publish(configTopic, response, true); - - String statTopic = devTopic + "/state"; - String cmdTopic = devTopic + "/set"; - String attrTopic = devTopic + "/attributes"; - strcpy(m_statTopic, statTopic.c_str()); - strcpy(m_attrTopic, attrTopic.c_str()); - strcpy(m_cmdTopic, cmdTopic.c_str()); - m_client.subscribe(m_cmdTopic, MQTT::QOS1); - } - } - - private: - void callback(char* topic, byte* payload, unsigned int length) { - MainLoop::instance()->dispatch(InputEvent::NetworkActivity); - if (!strcmp(topic, m_cmdTopic)) { - JSONValue cmd = JSONValue::parseCopy((char*)payload, length); - JSONObjectIterator cmdIter(cmd); - while(cmdIter.next()) { - if (cmdIter.name() == "state" && cmdIter.value().toString() == "ON") { - setEvent({InputEvent::SetPower, 1}); - } else if (cmdIter.name() == "state" && cmdIter.value().toString() == "OFF") { - setEvent({InputEvent::SetPower, 0}); - } - - if (cmdIter.name() == "color") { - JSONObjectIterator colorIter(cmdIter.value()); - uint8_t r, g, b; - while(colorIter.next()) { - if (colorIter.name() == "r") { - r = colorIter.value().toInt(); - } else if (colorIter.name() == "g") { - g = colorIter.value().toInt(); - } else if (colorIter.name() == "b") { - b = colorIter.value().toInt(); - } - } - setEvent(InputEvent{InputEvent::SetColor, CRGB{r, g, b}}); - } - - if (cmdIter.name() == "brightness") { - uint8_t brightness = cmdIter.value().toInt(); - setEvent(InputEvent{InputEvent::SetBrightness, brightness}); - } - - if (cmdIter.name() == "effect") { - strcpy(m_patternBuf, cmdIter.value().toString().c_str()); - setEvent(InputEvent{InputEvent::SetPattern, m_patternBuf}); - } - - if (cmdIter.name() == "pixelCount") { - setEvent(InputEvent{InputEvent::SetDisplayLength, cmdIter.value().toInt()}); - } - - if (cmdIter.name() == "startPixel") { - setEvent(InputEvent{InputEvent::SetDisplayOffset, cmdIter.value().toInt()}); - } - - if (cmdIter.name() == "save") { - setEvent(InputEvent{InputEvent::SaveConfigurationRequest}); - } - } - } - } - - static void s_callback(char* topic, byte* payload, unsigned int length) { - Static::instance()->callback(topic, payload, length); - }; - - MQTT m_client; - InputEvent::Intent m_lastIntent; - char m_deviceName[100]; - char m_statTopic[100]; - char m_attrTopic[100]; - char m_cmdTopic[100]; - char m_patternBuf[48]; -}; - -STATIC_ALLOC(MQTTTelemetry); -STATIC_TASK(MQTTTelemetry); diff --git a/src/platform/particle/PhotonTelemetry.cpp b/src/platform/particle/PhotonTelemetry.cpp deleted file mode 100644 index 5a503d4..0000000 --- a/src/platform/particle/PhotonTelemetry.cpp +++ /dev/null @@ -1,70 +0,0 @@ -#include "PhotonTelemetry.h" -#include "../../Static.h" - -using namespace NSFastLED; - -PhotonTelemetry::PhotonTelemetry() : Task("PhotonTelemetry") {} - -void -PhotonTelemetry::onConnected() -{ - Log.info("Connecting photon telemetry..."); - Particle.variable("frame", m_frameIdx); - Particle.variable("brightness", m_currentBrightness); - Particle.variable("fps", m_fps); - Particle.variable("services", m_serviceList); - Particle.variable("localip", m_localIP); - m_online = true; -} - -void -PhotonTelemetry::loop() -{ - m_frameIdx++; - if (m_rgbPulseFrame == 1) { - m_ledStatus.setActive(false); - } else if (m_rgbPulseFrame > 0) { - m_rgbPulseFrame--; - } - - m_currentBrightness = NSFastLED::FastLED.getBrightness(); - NSFastLED::FastLED.countFPS(); - m_fps = NSFastLED::FastLED.getFPS(); - - if (m_online) { - EVERY_N_SECONDS(30) { - m_localIP = WiFi.localIP().toString(); - char valueBuf[255]; - snprintf(valueBuf, sizeof(valueBuf), "{\"fps\": %lu, \"localip\": \"%s\"}", m_fps, m_localIP.c_str()); - Log.info("Heartbeat: %s", valueBuf); - Particle.publish("renderbug/heartbeat", valueBuf); - auto sched = MainLoop::instance()->scheduler; - m_serviceList = String{}; - for(auto task : sched.tasks) { - m_serviceList.concat(task->name); - m_serviceList.concat(':'); - if (task->state == Task::Running) { - m_serviceList.concat(1); - } else { - m_serviceList.concat(0); - } - m_serviceList.concat(','); - } - } - } -} - -void -PhotonTelemetry::handleEvent(const InputEvent &evt) -{ - if (evt.intent == InputEvent::SetColor) { - NSFastLED::CRGB rgb {evt.asRGB()}; - uint32_t color = (rgb.r << 16) + (rgb.g << 8) + (rgb.b << 0); - m_ledStatus.setColor(color); - m_ledStatus.setActive(true); - m_rgbPulseFrame = 1000; - } -} - -STATIC_ALLOC(PhotonTelemetry); -STATIC_TASK(PhotonTelemetry); diff --git a/src/platform/particle/PhotonTelemetry.h b/src/platform/particle/PhotonTelemetry.h deleted file mode 100644 index cb3d7ab..0000000 --- a/src/platform/particle/PhotonTelemetry.h +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once -#include "./Figments/Figments.h" - -class PhotonTelemetry: public Task { -public: - PhotonTelemetry(); - void loop() override; - void handleEvent(const InputEvent& evt) override; - -private: - void onConnected(); - - int m_frameIdx; - String m_serviceList; - String m_localIP; - uint32_t m_currentBrightness; - LEDStatus m_ledStatus = LEDStatus(0, LED_PATTERN_FADE, LED_SPEED_FAST); - uint32_t m_rgbPulseFrame = 0; - uint32_t m_pixelCount = 0; - uint32_t m_startPixel = 0; - uint32_t m_fps = 0; - uint32_t m_duplicateEvents = 0; - InputEvent m_lastEvent; - bool m_online = false; -}; diff --git a/src/platform/particle/Watchdog.cpp b/src/platform/particle/Watchdog.cpp deleted file mode 100644 index 8d0fb9d..0000000 --- a/src/platform/particle/Watchdog.cpp +++ /dev/null @@ -1,31 +0,0 @@ -#include - -BootOpts bootopts; - -void watchdogHandler() { - for(int i = 0; i < 8; i++) { - leds[i] = CRGB(i % 3 ? 35 : 255, 0, 0); - } - FastLED.show(); - if (bootopts.lastBootWasFlash) { - System.dfu(); - } else { - System.enterSafeMode(); - } -} - -class Watchdog : public Task { - public: - Watchdog() : Task("Watchdog") { - m_watchdog = new ApplicationWatchdog(5000, watchdogHandler, 1536); - } - - void loop() override { - m_watchdog->checkin(); - } - private: - ApplicationWatchdog *m_watchdog; -}; - -STATIC_ALLOC(Watchdog); -STATIC_TASK(Watchdog); diff --git a/src/platform/particle/WebTelemetry.cpp b/src/platform/particle/WebTelemetry.cpp deleted file mode 100644 index ad12a85..0000000 --- a/src/platform/particle/WebTelemetry.cpp +++ /dev/null @@ -1,158 +0,0 @@ -#include "WebDuino/WebDuino.h" -#include "Figments/Figments.h" -#include "Figments/Input.h" -#include "colors.h" -#include "Sequencer.h" - -class WebTelemetry : public Task { - private: - TCPServer m_server; - TCPClient m_client; - Sequencer& m_sequencer; - - void onConnected() { - m_server.begin(); - Log.info("HTTP server started on %s:80", WiFi.localIP().toString().c_str()); - } - - void redirectToRoot() { - m_server.write("HTTP/1.1 303 Redirect\n"); - m_server.write("Location: /\n"); - m_server.write("Connection: close\n\n"); - } - - public: - WebTelemetry(Sequencer& sequencer) : Task("WebTelemetry"), m_server(80), m_sequencer(sequencer) { - } - - void handleEvent(const InputEvent &evt) { - if (evt.intent == InputEvent::NetworkStatus) { - onConnected(); - } - } - - void loop() override { - static String taskName; - if (m_client.connected()) { - if (m_client.available()) { - MainLoop::instance()->dispatch(InputEvent::NetworkActivity); - String requestLine = m_client.readStringUntil('\n'); - Log.info("%s %s", m_client.remoteIP().toString().c_str(), requestLine.c_str()); - if (requestLine.startsWith("GET")) { - int httpVersionIdx = requestLine.lastIndexOf(" "); - String uri = requestLine.substring(4, httpVersionIdx); - if (uri.equals("/")) { - m_server.write("HTTP/1.1 200 Renderbug is here!\n"); - m_server.write("Connection: close\n\n"); - m_server.write(""); - m_server.write("

Scenes

"); - auto curScene = m_sequencer.currentSceneName(); - for(auto scene : m_sequencer.scenes()) { - bool isEnabled = strcmp(curScene, scene.name) == 0; - m_server.write(""); - } - m_server.write("
"); - if (isEnabled) { - m_server.write(""); - } - m_server.write(scene.name); - if (isEnabled) { - m_server.write(""); - } - m_server.write("
    "); - for(auto patternName : scene.patterns) { - m_server.write("
  • "); - m_server.write(patternName); - m_server.write("
  • "); - } - m_server.write("
"); - m_server.write("
"); - m_server.write("
"); - m_server.write(""); - m_server.write("
"); - m_server.write("

Tasks

"); - auto sched = MainLoop::instance()->scheduler; - for(auto task : sched.tasks) { - bool isFigment = task->isFigment(); - - m_server.write(""); - } - m_server.write("
"); - if (isFigment) { - m_server.write(""); - } - m_server.write(task->name); - if (isFigment) { - m_server.write(""); - } - m_server.write(""); - if (task->state == Task::Running) { - m_server.write("Running"); - } else { - m_server.write("Paused"); - } - m_server.write(""); - m_server.write("name); - m_server.write("\">Stop"); - m_server.write("name); - m_server.write("\">Start
"); - m_server.write("Reboot Renderbug"); - m_server.write("Save configuration"); - } else if (uri.startsWith("/save")) { - MainLoop::instance()->dispatch(InputEvent::SaveConfigurationRequest); - redirectToRoot(); - } else if (uri.startsWith("/?color=")) { - int varStart = uri.indexOf("="); - String colorName = uri.substring(varStart + 1); - colorName.replace('+', ' '); - colorName.replace("%20", " "); - ColorInfo nextColor = colorForName(colorName); - MainLoop::instance()->dispatch(InputEvent{InputEvent::SetColor, nextColor.rgb}); - redirectToRoot(); - } else if (uri.startsWith("/?start=")) { - int varStart = uri.indexOf("="); - taskName = uri.substring(varStart + 1); - MainLoop::instance()->dispatch(InputEvent{InputEvent::StartThing, taskName.c_str()}); - redirectToRoot(); - } else if (uri.startsWith("/?stop=")) { - int varStart = uri.indexOf("="); - taskName = uri.substring(varStart + 1); - MainLoop::instance()->dispatch(InputEvent{InputEvent::StopThing, taskName.c_str()}); - redirectToRoot(); - } else if (uri.equals("/?pattern=prev")) { - redirectToRoot(); - MainLoop::instance()->dispatch(InputEvent::PreviousPattern); - } else if (uri.equals("/?pattern=next")) { - redirectToRoot(); - MainLoop::instance()->dispatch(InputEvent::NextPattern); - } else if (uri.equals("/reboot")) { - m_server.write("HTTP/1.1 200 Ok\n"); - m_server.write("Connection: close\n\n"); - m_server.write("Rebooting!"); - } else { - m_server.write("HTTP/1.1 404 Not found\n"); - m_server.write("Connection: close\n\n"); - } - } else { - m_server.write("HTTP/1.1 501 Not Implemented\n"); - m_server.write("Connection: close\n\n"); - } - } - m_client.stop(); - } else { - m_client = m_server.available(); - } - } -}; - -STATIC_ALLOC(WebTelemetry); -STATIC_TASK(WebTelemetry); diff --git a/src/platform/particle/inputs/CloudStatus.cpp b/src/platform/particle/inputs/CloudStatus.cpp deleted file mode 100644 index a272e58..0000000 --- a/src/platform/particle/inputs/CloudStatus.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include "CloudStatus.h" -#include "../../../Static.h" - -void -CloudStatus::onStart() -{ - SINGLE_THREADED_BLOCK() { - if (Particle.connected()) { - initNetwork(0, cloud_status_connected); - } else { - System.on(cloud_status, &CloudStatus::initNetwork); - } - } -} - - -void -CloudStatus::initNetwork(system_event_t event, int param) { - if (param == cloud_status_connected) { - Log.info("Connected to T H E C L O U D"); - MainLoop::instance()->dispatch(InputEvent{InputEvent::NetworkStatus, true}); - } else if (param == cloud_status_disconnected) { - Log.info("Lost cloud connection!!"); - MainLoop::instance()->dispatch(InputEvent{InputEvent::NetworkStatus, false}); - } -} - -STATIC_ALLOC(CloudStatus); -STATIC_TASK(CloudStatus); diff --git a/src/platform/particle/inputs/CloudStatus.h b/src/platform/particle/inputs/CloudStatus.h deleted file mode 100644 index d052d07..0000000 --- a/src/platform/particle/inputs/CloudStatus.h +++ /dev/null @@ -1,11 +0,0 @@ -#include "../../../Figments/Figments.h" - -class CloudStatus: public Task { -public: - CloudStatus() : Task("Cloud") {} - void loop() override {} - void onStart() override; - -private: - static void initNetwork(system_event_t event, int param); -}; diff --git a/src/platform/particle/inputs/Photon.cpp b/src/platform/particle/inputs/Photon.cpp deleted file mode 100644 index 9ddba84..0000000 --- a/src/platform/particle/inputs/Photon.cpp +++ /dev/null @@ -1,186 +0,0 @@ -#include "Particle.h" -#include "../../../Figments/Figments.h" -#include "../../../colors.h" -#include "../../../Static.h" -#include "./Photon.h" - -void -PhotonInput::onConnected() -{ - Log.info("Connecting photon input..."); - Particle.function("save", &PhotonInput::save, this); - Particle.function("power", &PhotonInput::setPower, this); - Particle.function("next", &PhotonInput::nextPattern, this); - Particle.function("input", &PhotonInput::input, this); - Particle.function("previous", &PhotonInput::previousPattern, this); - Particle.function("pattern", &PhotonInput::setPattern, this); - Particle.function("setHue", &PhotonInput::setHue, this); - Particle.function("brightness", &PhotonInput::setBrightness, this); - Particle.function("reboot", &PhotonInput::reboot, this); - Particle.function("start", &PhotonInput::startThing, this); - Particle.function("stop", &PhotonInput::stopThing, this); - - //Log.info("Connecting photon configuration..."); - Particle.function("pixelCount", &PhotonInput::setPixelCount, this); - Particle.function("startPixel", &PhotonInput::setStartPixel, this); - - Particle.function("save", &PhotonInput::photonSave, this); - Particle.variable("pixelCount", m_pixelCountInt); - Particle.variable("startPixel", m_startPixelInt); - - publishConfig(); -} - -int -PhotonInput::startThing(String command) -{ - command.toCharArray(m_commandBuf, sizeof(m_commandBuf)); - setEvent(InputEvent(InputEvent::StartThing, m_commandBuf)); - return 0; -} - -int -PhotonInput::stopThing(String command) -{ - command.toCharArray(m_commandBuf, sizeof(m_commandBuf)); - setEvent(InputEvent(InputEvent::StopThing, m_commandBuf)); - return 0; -} - -void -PhotonInput::onStart() -{ - System.on(firmware_update, &PhotonInput::onFirmwareUpdate); - System.on(button_click, &PhotonInput::onButtonClick); - System.on(reset, &PhotonInput::onReset); -} - -void -PhotonInput::handleEvent(const InputEvent &evt) -{ - if (evt.intent == InputEvent::NetworkStatus) { - onConnected(); - } -} - -int -PhotonInput::reboot(String command) -{ - System.reset(); - return 0; -} - -void -PhotonInput::onReset(system_event_t event, int param) -{ - NSFastLED::FastLED.clear(); -} - -void -PhotonInput::onButtonClick(system_event_t event, int param) -{ - Static::instance()->setEvent(InputEvent{InputEvent::NextPattern, param}); -} - -void -PhotonInput::onFirmwareUpdate(system_event_t event, int param) -{ - Static::instance()->setEvent(InputEvent{InputEvent::FirmwareUpdate, param}); -} - -int -PhotonInput::input(String command) -{ - command.toCharArray(m_commandBuf, sizeof(m_commandBuf)); - setEvent(InputEvent(InputEvent::UserInput, m_commandBuf)); - return 0; -} - -int -PhotonInput::setPattern(String command) -{ - command.toCharArray(m_commandBuf, sizeof(m_commandBuf)); - setEvent(InputEvent(InputEvent::SetPattern, m_commandBuf)); - return 0; -} - -int -PhotonInput::setHue(String colorName) -{ - ColorInfo nextColor = colorForName(colorName); - setEvent(InputEvent(InputEvent::SetColor, nextColor.rgb)); - return 0; -} - -int -PhotonInput::nextPattern(String command) -{ - setEvent(InputEvent(InputEvent::NextPattern)); - return 0; -} - -int -PhotonInput::previousPattern(String command) -{ - setEvent(InputEvent(InputEvent::PreviousPattern)); - return 0; -} - -int -PhotonInput::save(String command) { - setEvent(InputEvent::SaveConfigurationRequest); -} - -int -PhotonInput::setPower(String command) -{ - if (command == "off") { - setEvent(InputEvent(InputEvent::SetPower, 0)); - } else if (command == "on") { - setEvent(InputEvent(InputEvent::SetPower, 1)); - } else { - setEvent(InputEvent(InputEvent::PowerToggle)); - } - return 0; -} - -int -PhotonInput::setBrightness(String command) -{ - setEvent(InputEvent(InputEvent::SetBrightness, command.toInt())); - return 0; -} - -void -PhotonInput::publishConfig() const -{ - char buf[255]; - snprintf(buf, sizeof(buf), "{\"pixels\": \"%d\", \"offset\": \"%d\"}", m_config.data.pixelCount, m_config.data.startPixel); - Particle.publish("renderbug/config", buf, PRIVATE); -} - -int -PhotonInput::photonSave(String command) -{ - setEvent(InputEvent::SaveConfiguration); - return 0; -} - -int -PhotonInput::setPixelCount(String command) -{ - m_pixelCount = command.toInt(); - setEvent(InputEvent{InputEvent::SetDisplayLength, m_pixelCount}) - return 0; -} - -int -PhotonInput::setStartPixel(String command) -{ - m_startPixel = command.toInt(); - setEvent(InputEvent{InputEvent::SetDisplayLength, m_startPixel}) - return 0; -} - -STATIC_ALLOC(PhotonInput); -STATIC_TASK(PhotonInput); diff --git a/src/platform/particle/inputs/Photon.h b/src/platform/particle/inputs/Photon.h deleted file mode 100644 index d74bdf2..0000000 --- a/src/platform/particle/inputs/Photon.h +++ /dev/null @@ -1,38 +0,0 @@ -#include "Particle.h" -#include "../../../Figments/Figments.h" - -class PhotonInput: public BufferedInputSource { -public: - PhotonInput() : BufferedInputSource("PhotonInput") {} - void onStart() override; - void handleEvent(const InputEvent &evt) override; - -private: - char m_commandBuf[16]; - - void onConnected(); - int reboot(String command); - int input(String command); - int setPattern(String command); - int setHue(String colorName); - int nextPattern(String command); - int previousPattern(String command); - int setPower(String command); - int setBrightness(String command); - int save(String command); - - int startThing(String command); - int stopThing(String command); - - void publishConfig() const; - int photonSave(String command); - int setPixelCount(String command); - int setStartPixel(String command); - - static void onReset(system_event_t event, int param); - static void onButtonClick(system_event_t event, int param); - static void onFirmwareUpdate(system_event_t event, int param); - - int m_startPixel; - int m_pixelCount; -};