add restart to factory partition (if there is one)

This commit is contained in:
MichaelDvP
2022-11-05 15:56:08 +01:00
parent 342cf12ae7
commit 1d4634a76c
6 changed files with 50 additions and 3 deletions

View File

@@ -1,12 +1,27 @@
#include <RestartService.h>
#include <esp_ota_ops.h>
using namespace std::placeholders; // for `_1` etc
RestartService::RestartService(AsyncWebServer * server, SecurityManager * securityManager) {
server->on(RESTART_SERVICE_PATH, HTTP_POST, securityManager->wrapRequest(std::bind(&RestartService::restart, this, _1), AuthenticationPredicates::IS_ADMIN));
server->on(PARTITION_SERVICE_PATH,
HTTP_POST,
securityManager->wrapRequest(std::bind(&RestartService::partition, this, _1), AuthenticationPredicates::IS_ADMIN));
}
void RestartService::restart(AsyncWebServerRequest * request) {
request->onDisconnect(RestartService::restartNow);
request->send(200);
}
void RestartService::partition(AsyncWebServerRequest * request) {
const esp_partition_t * factory_partition = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_FACTORY, NULL);
if (!factory_partition) {
request->send(400); // bad request
return;
}
esp_ota_set_boot_partition(factory_partition);
request->onDisconnect(RestartService::restartNow);
request->send(200);
}