improve api device code

add scan for paperdash devices
pull/1/head
Thomas Ballmann 4 years ago
parent d1fc388bf9
commit 5bac99831a

@ -2,6 +2,7 @@
#include <Update.h>
#include "app.h"
#include "ESPAsyncWebServer.h"
#include <ESPmDNS.h>
#include "ArduinoJson.h"
#include "settings.h"
#include "device.h"
@ -15,6 +16,7 @@
AsyncWebServer server(80);
void setupApiDevice();
void setupSettingsGet();
void setupSettingsPost();
void setupWifiScan();
@ -45,6 +47,7 @@ void setupApp()
;
server.serveStatic("/fs/", SPIFFS, "/");
setupApiDevice();
setupSettingsGet();
setupSettingsPost();
setupWifiScan();
@ -225,6 +228,7 @@ void setupSettingsPost()
/**
* get current screen
* @depricated
*/
void setupCurrentImage()
{
@ -247,7 +251,7 @@ void setupCurrentImage()
//index equals the amount of bytes that have been already sent
//You will be asked for more data until 0 is returned
//Keep in mind that you can not delay or yield waiting for more data!
return displayStreamPrintScreenBMP(buffer, maxLen, index);
return displaySnapshotBMPStream(buffer, maxLen, index);
});
response->addHeader("Content-Disposition", "inline; filename=capture.bmp");
@ -255,6 +259,99 @@ void setupCurrentImage()
});
}
void setupApiDevice()
{
server.on("/api/device/restart", HTTP_GET, [](AsyncWebServerRequest *request) {
request->send(200, "application/json", "{}");
ESP.restart();
});
server.on("/api/device/screen", HTTP_GET, [](AsyncWebServerRequest *request) {
AsyncWebServerResponse *response = request->beginChunkedResponse("image/bmp", [](uint8_t *buffer, size_t maxLen, size_t index) -> size_t {
return displaySnapshotBMPStream(buffer, maxLen, index);
});
response->addHeader("Content-Disposition", "inline; filename=capture.bmp");
request->send(response);
});
server.on(
"/api/device/screen", HTTP_POST, [](AsyncWebServerRequest *request) {
AsyncResponseStream *response = request->beginResponseStream("application/json");
DynamicJsonDocument doc(117); // https://arduinojson.org/v6/assistant/
// todo
doc["status"] = true;
doc["image"]["format"] = "xxx";
doc["image"]["width"] = 0;
doc["image"]["height"] = 0;
serializeJson(doc, *response);
request->send(response); },
[](AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final) {
if (!index)
{
Serial.printf("UploadStart: %s\n", filename.c_str());
bool dither = strcmp(filename.c_str(), "dithering") == 0;
ImageNew(0, 0, 0, 0, dither);
PlaylistResetTimer();
}
ImageWriteBuffer(data, len);
if (final)
{
Serial.printf("UploadEnd: %s, %u B\n", filename.c_str(), index + len);
ImageFlushBuffer();
updateDisplayRequired = true;
}
});
server.on("/api/device/scan", HTTP_GET, [](AsyncWebServerRequest *request) {
String json = "[";
Serial.printf("Browsing for service _%s._%s.local. ... ", "http", "tcp");
int n = MDNS.queryService("http", "tcp");
if (n == 0)
{
Serial.println("no services found");
}
else
{
Serial.print(n);
Serial.println(" service(s) found");
size_t cnt = 0;
for (size_t i = 0; i < n; ++i)
{
// checking for epd
if (MDNS.hasTxt(i, "paperdash"))
{
if (cnt)
{
json += ",";
}
cnt++;
json += "{";
json += "\"host\":\"" + MDNS.hostname(i) + "\"";
json += ",\"ip\":\"" + MDNS.IP(i).toString() + "\"";
json += ",\"port\":" + String(MDNS.port(i));
json += ",\"type\":\"" + String(MDNS.txt(i, 0)) + "\"";
json += "}";
}
}
}
Serial.println();
json += "]";
request->send(200, "application/json", json);
json = String();
});
}
/**
* scan for wifi
*/
@ -335,6 +432,9 @@ void setupWifiConnect()
} });
}
/**
* @depricated
*/
static void handle_update_progress_cb(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final)
{
if (!index)
@ -357,6 +457,9 @@ static void handle_update_progress_cb(AsyncWebServerRequest *request, String fil
}
}
/**
* @depricated
*/
void setupApiFace()
{
server.on(

Loading…
Cancel
Save