diff --git a/data/index.html b/data/index.html index c6f81ab..96ef84c 100644 --- a/data/index.html +++ b/data/index.html @@ -201,7 +201,23 @@ + +
diff --git a/src/main.cpp b/src/main.cpp index 40b1153..c0350f7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -87,6 +87,27 @@ void ledBlink(int ms) } } +void onButtonPress() +{ + ButtonAction action = static_cast(config.getUInt("button-action", DEFAULT_BUTTON_ACTION)); + Serial.print("Button pressed, action: "); + Serial.println(action); + + switch (action) + { + case ResetConfig: + config.begin("dmx", false); + config.clear(); + config.end(); + ESP.restart(); + break; + + case Restart: + ESP.restart(); + break; + } +} + void setup() { Serial.begin(9600); @@ -122,6 +143,8 @@ void setup() ledBlink(500); + attachInterrupt(PIN_BUTTON, onButtonPress, FALLING); + // wait for serial monitor delay(5000); Serial.println("Starting DMX-Interface..."); diff --git a/src/routes/config.cpp b/src/routes/config.cpp index d586feb..edd9e54 100644 --- a/src/routes/config.cpp +++ b/src/routes/config.cpp @@ -70,6 +70,16 @@ Direction parseDirection(uint8_t direction) throw ::std::invalid_argument("Invalid direction value: " + direction); } +ButtonAction parseButtonAction(uint8_t buttonAction) +{ + if (buttonAction > 0 || buttonAction < BUTTON_ACTION_SIZE) + { + return static_cast(buttonAction); + } + + throw ::std::invalid_argument("Invalid value for button action: " + buttonAction); +} + #pragma endregion void onGetConfig(AsyncWebServerRequest *request) @@ -93,6 +103,7 @@ void onGetConfig(AsyncWebServerRequest *request) doc["universe-2"] = config.getUInt("universe-2", DEFAULT_UNIVERSE2); doc["direction-2"] = config.getUInt("direction-2", DEFAULT_DIRECTION2); doc["led-brightness"] = config.getUInt("led-brightness", DEFAULT_LED_BRIGHTNESS); + doc["button-action"] = config.getUInt("button-action", DEFAULT_BUTTON_ACTION); config.end(); @@ -151,6 +162,9 @@ void onPutConfig(AsyncWebServerRequest *request, uint8_t *data, size_t len, size config.putUInt("led-brightness", doc["led-brightness"]); + ButtonAction buttonAction = parseButtonAction(doc["button-action"].as()); + config.putUInt("button-action", buttonAction); + config.end(); request->send(200); diff --git a/src/routes/config.h b/src/routes/config.h index bac228d..157292c 100644 --- a/src/routes/config.h +++ b/src/routes/config.h @@ -29,6 +29,14 @@ enum Direction }; const uint8_t DIRECTION_SIZE = 2; +enum ButtonAction +{ + None, + ResetConfig, + Restart +}; +const uint8_t BUTTON_ACTION_SIZE = 3; + const Connection DEFAULT_CONNECTION = WiFiAP; const IpMethod DEFAULT_IP_METHOD = DHCP; extern String DEFAULT_SSID; // initialized in setup because it depends on the mac address @@ -43,6 +51,7 @@ const uint8_t DEFAULT_UNIVERSE1 = 1; const uint8_t DEFAULT_UNIVERSE2 = 2; const uint8_t DEFAULT_LED_BRIGHTNESS = 25; +const ButtonAction DEFAULT_BUTTON_ACTION = Restart; void onGetConfig(AsyncWebServerRequest *request);