74 lines
1.5 KiB
C++
74 lines
1.5 KiB
C++
/*
|
|
* ESP8266 RGBW controller
|
|
* Copyright 2020 (c) Mark van Renswoude
|
|
*
|
|
* https://git.x2software.net/pub/RGBWifi
|
|
*/
|
|
#include "./firmware.h"
|
|
#include "../config.h"
|
|
#include "../debug.h"
|
|
#include "../global.h"
|
|
|
|
|
|
|
|
void handleFirmware(AsyncWebServerRequest *request)
|
|
{
|
|
shouldReboot = !Update.hasError();
|
|
|
|
AsyncWebServerResponse *response = request->beginResponse(200, "text/plain", shouldReboot ? "OK" : "FAIL");
|
|
response->addHeader("Connection", "close");
|
|
request->send(response);
|
|
}
|
|
|
|
void handleFirmwareFile(AsyncWebServerRequest *request, String filename, size_t index, uint8_t *data, size_t len, bool final)
|
|
{
|
|
_d("Firmware :: file upload: index = "); _d(index);
|
|
_d(", len = "); _d(len);
|
|
_d(", final = "); _dln(final);
|
|
|
|
if (!index)
|
|
{
|
|
uint32_t maxSketchSpace = (ESP.getFreeSketchSpace() - 0x1000) & 0xFFFFF000;
|
|
_d("Firmware :: update start, max sketch space: ");
|
|
_dln(maxSketchSpace);
|
|
|
|
Update.runAsync(true);
|
|
if (!Update.begin(maxSketchSpace))
|
|
{
|
|
#ifdef SerialDebug
|
|
Update.printError(Serial);
|
|
#endif
|
|
}
|
|
}
|
|
|
|
if (!Update.hasError())
|
|
{
|
|
if (Update.write(data, len) != len)
|
|
{
|
|
#ifdef SerialDebug
|
|
Update.printError(Serial);
|
|
#endif
|
|
}
|
|
}
|
|
|
|
if (final)
|
|
{
|
|
if (Update.end(true))
|
|
{
|
|
_dln("Firmware :: success");
|
|
}
|
|
else
|
|
{
|
|
_dln("Firmware :: failed");
|
|
#ifdef SerialDebug
|
|
Update.printError(Serial);
|
|
#endif
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
void registerFirmwareRoutes(AsyncWebServer* server)
|
|
{
|
|
server->on("/api/firmware", HTTP_POST, handleFirmware, handleFirmwareFile);
|
|
} |