101 lines
2.6 KiB
C++
101 lines
2.6 KiB
C++
|
/*
|
||
|
* Stairs
|
||
|
* Copyright 2017 (c) Mark van Renswoude
|
||
|
*
|
||
|
* https://git.x2software.net/pub/Stairs
|
||
|
*/
|
||
|
#include "api.h"
|
||
|
#include <ArduinoJson.h>
|
||
|
#include <IPAddress.h>
|
||
|
#include <ESP8266WiFi.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) + " sha." + String(VersionSha);
|
||
|
|
||
|
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 devNullRequest(AsyncWebServerRequest *request) { }
|
||
|
void devNullFileUpload(AsyncWebServerRequest *request, const String& filename, size_t index, uint8_t *data, size_t len, bool final) { }
|
||
|
|
||
|
|
||
|
void registerAPIRoutes(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);
|
||
|
}
|