/* * Stairs * Copyright 2017 (c) Mark van Renswoude * * https://git.x2software.net/pub/Stairs */ #include "./settings.h" #include #include #include #include "./shared.h" #include "../assets/version.h" #include "../debug.h" #include "../global.h" #include "../settings/connection.h" void handleVersion(AsyncWebServerRequest *request) { _dln("API :: version"); DynamicJsonBuffer jsonBuffer(JSON_OBJECT_SIZE(2)); JsonObject& root = jsonBuffer.createObject(); root["systemID"] = String(ESP.getChipId(), HEX); root["version"] = String(VersionFullSemVer); AsyncResponseStream *response = request->beginResponseStream("application/json"); root.printTo(*response); request->send(response); } void handleConnectionStatus(AsyncWebServerRequest *request) { _dln("API :: connection status"); WiFiMode_t mode = WiFi.getMode(); DynamicJsonBuffer jsonBuffer((2 * JSON_OBJECT_SIZE(2)) + JSON_OBJECT_SIZE(3)); JsonObject& root = jsonBuffer.createObject(); JsonObject& ap = root.createNestedObject("ap"); ap["enabled"] = (mode == WIFI_AP || mode == WIFI_AP_STA); ap["ip"] = WiFi.softAPIP().toString(); JsonObject& station = root.createNestedObject("station"); station["enabled"] = (mode == WIFI_STA || mode == WIFI_AP_STA); station["status"] = (uint8_t)WiFi.status(); station["ip"] = WiFi.localIP().toString(); AsyncResponseStream *response = request->beginResponseStream("application/json"); root.printTo(*response); request->send(response); } void handleGetConnection(AsyncWebServerRequest *request) { _dln("API :: get connection"); AsyncResponseStream *response = request->beginResponseStream("application/json"); connectionSettings->toJson(*response); request->send(response); } void handlePostConnection(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total) { _dln("API :: post connection"); bool changed; if (connectionSettings->fromJson((char*)data, &changed)) { connectionSettings->write(); if (changed) connectionSettingsChanged = true; request->send(200); } else request->send(400); } void handleGetSystem(AsyncWebServerRequest *request) { _dln("API :: get system"); AsyncResponseStream *response = request->beginResponseStream("application/json"); systemSettings->toJson(*response); request->send(response); } void handlePostSystem(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total) { _dln("API :: post system"); bool changed; if (systemSettings->fromJson((char*)data, &changed)) { systemSettings->write(); if (changed) systemSettingsChanged = true; request->send(200); } else request->send(400); } void handleGetSteps(AsyncWebServerRequest *request) { _dln("API :: get steps"); AsyncResponseStream *response = request->beginResponseStream("application/json"); stepsSettings->toJson(*response); request->send(response); } void handlePostSteps(AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total) { _dln("API :: post steps"); bool changed; if (stepsSettings->fromJson((char*)data, &changed)) { stepsSettings->write(); if (changed) stepsSettingsChanged = true; request->send(200); } else request->send(400); } void registerSettingsRoutes(AsyncWebServer* server) { server->on("/api/version", HTTP_GET, handleVersion); server->on("/api/connection/status", HTTP_GET, handleConnectionStatus); server->on("/api/connection", HTTP_GET, handleGetConnection); server->on("/api/connection", HTTP_POST, devNullRequest, devNullFileUpload, handlePostConnection); server->on("/api/system", HTTP_GET, handleGetSystem); server->on("/api/system", HTTP_POST, devNullRequest, devNullFileUpload, handlePostSystem); server->on("/api/steps", HTTP_GET, handleGetSteps); server->on("/api/steps", HTTP_POST, devNullRequest, devNullFileUpload, handlePostSteps); }