RGBMatrixDisplay/src/server.cpp

117 lines
2.9 KiB
C++

#include <WebServer.h>
#include <cmath>
#include "server.h"
#include "mode/Mode.h"
#include "mode.h"
#include "display.h"
#include "config.h"
WebServer server(80);
void web_index();
void web_setMode();
void web_brighter();
void web_darker();
void web_faster();
void web_slower();
void web_fps_on();
void web_fps_off();
void redirect();
void server_setup() {
server.on("/", web_index);
server.on("/mode", web_setMode);
server.on("/brighter", web_brighter);
server.on("/darker", web_darker);
server.on("/faster", web_faster);
server.on("/slower", web_slower);
server.on("/fps/on", web_fps_on);
server.on("/fps/off", web_fps_off);
server.begin();
}
void server_loop() {
server.handleClient();
}
void web_index() {
server.setContentLength(CONTENT_LENGTH_UNKNOWN);
server.send(200, "text/html", "");
server.sendContent(R"(<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />)");
server.sendContent(R"(<meta http-equiv="Pragma" content="no-cache" />)");
server.sendContent(R"(<meta http-equiv="Expires" content="0" />)");
server.sendContent(R"(<a href="/mode?mode=0">NONE</a><br>)");
server.sendContent(R"(<a href="/mode?mode=1">BORDER</a><br>)");
server.sendContent(R"(<a href="/mode?mode=2">CLOCK</a><br>)");
server.sendContent(R"(<a href="/mode?mode=3">GAME_OF_LIFE_BLACK_WHITE</a><br>)");
server.sendContent(R"(<a href="/mode?mode=4">GAME_OF_LIFE_GRAYSCALE</a><br>)");
server.sendContent(R"(<a href="/mode?mode=5">GAME_OF_LIFE_COLOR_FADE</a><br>)");
server.sendContent(R"(<a href="/mode?mode=6">GAME_OF_LIFE_RANDOM_COLOR</a><br>)");
server.sendContent(R"(<a href="/mode?mode=7">PONG</a><br>)");
server.sendContent(R"(<a href="/mode?mode=8">SPACE_INVADERS</a><br>)");
server.sendContent(R"(<a href="/mode?mode=9">NEW_YEAR</a><br>)");
server.sendContent(R"(Helligkeit: <a href="/brighter">+</a> / <a href="/darker">-</a><br>)");
server.sendContent(R"(Geschwindigkeit: <a href="/faster">+</a> / <a href="/slower">-</a><br>)");
server.sendContent(R"(FPS: <a href="/fps/on">EIN</a> / <a href="/fps/off">AUS</a><br>)");
server.client().flush();
}
void web_setMode() {
if (!server.hasArg("mode")) {
server.send(400, "text/plain", "Missing 'mode'");
return;
}
double value = strtod(server.arg("mode").c_str(), nullptr);
if (isnan(value)) {
server.send(400, "text/plain", "'mode' not a number");
return;
}
setMode((ModeId) value);
redirect();
}
void web_brighter() {
setBrightness(display.getBrightness() + 10);
redirect();
}
void web_darker() {
setBrightness(display.getBrightness() - 10);
redirect();
}
void web_faster() {
setSpeed(config.speed * 1.1);
redirect();
}
void web_slower() {
setSpeed(config.speed / 1.1);
redirect();
}
void web_fps_on() {
display.fpsShow = true;
redirect();
}
void web_fps_off() {
display.fpsShow = false;
redirect();
}
void redirect() {
server.sendHeader("location", "/");
server.send(302, "text/plain", "ok");
}