2018-01-04 21:53:16 +00:00
|
|
|
/*
|
|
|
|
* Stairs
|
|
|
|
* Copyright 2017 (c) Mark van Renswoude
|
|
|
|
*
|
|
|
|
* https://git.x2software.net/pub/Stairs
|
|
|
|
*/
|
2018-01-14 20:31:37 +00:00
|
|
|
#include "./settings.h"
|
2018-01-04 21:53:16 +00:00
|
|
|
#include <ArduinoJson.h>
|
|
|
|
#include <IPAddress.h>
|
|
|
|
#include <ESP8266WiFi.h>
|
2018-01-14 20:31:37 +00:00
|
|
|
#include "./shared.h"
|
2018-01-04 21:53:16 +00:00
|
|
|
#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);
|
2018-01-04 21:56:12 +00:00
|
|
|
root["version"] = String(VersionFullSemVer);
|
2018-01-04 21:53:16 +00:00
|
|
|
|
|
|
|
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);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2018-01-08 20:58:22 +00:00
|
|
|
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);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2018-01-04 21:53:16 +00:00
|
|
|
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);
|
2018-01-08 20:58:22 +00:00
|
|
|
|
|
|
|
server->on("/api/system", HTTP_GET, handleGetSystem);
|
|
|
|
server->on("/api/system", HTTP_POST, devNullRequest, devNullFileUpload, handlePostSystem);
|
2018-01-04 21:53:16 +00:00
|
|
|
}
|