mirror of
https://github.com/meshcore-dev/MeshCore.git
synced 2026-04-20 22:13:47 +00:00
* OTA update for ESP32 targets
This commit is contained in:
parent
30c6a0bc76
commit
a4bb3782a4
22 changed files with 2105 additions and 15 deletions
|
|
@ -42,7 +42,7 @@ public:
|
|||
virtual void reboot() = 0;
|
||||
virtual void powerOff() { /* no op */ }
|
||||
virtual uint8_t getStartupReason() const = 0;
|
||||
virtual bool startOTAUpdate() { return false; } // not supported
|
||||
virtual bool startOTAUpdate(const char* id, char reply[]) { return false; } // not supported
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -129,9 +129,7 @@ void CommonCLI::handleCommand(uint32_t sender_timestamp, const char* command, ch
|
|||
strcpy(reply, "ERR: clock cannot go backwards");
|
||||
}
|
||||
} else if (memcmp(command, "start ota", 9) == 0) {
|
||||
if (_board->startOTAUpdate()) {
|
||||
strcpy(reply, "OK");
|
||||
} else {
|
||||
if (!_board->startOTAUpdate(_prefs->node_name, reply)) {
|
||||
strcpy(reply, "Error");
|
||||
}
|
||||
} else if (memcmp(command, "clock", 5) == 0) {
|
||||
|
|
|
|||
32
src/helpers/ESP32Board.cpp
Normal file
32
src/helpers/ESP32Board.cpp
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
#ifdef ESP_PLATFORM
|
||||
|
||||
#include "ESP32Board.h"
|
||||
#include <WiFi.h>
|
||||
#include <AsyncTCP.h>
|
||||
#include <ESPAsyncWebServer.h>
|
||||
#include <AsyncElegantOTA.h>
|
||||
|
||||
bool ESP32Board::startOTAUpdate(const char* id, char reply[]) {
|
||||
WiFi.softAP("MeshCore-OTA", NULL);
|
||||
|
||||
sprintf(reply, "Started: http://%s/update", WiFi.softAPIP().toString().c_str());
|
||||
MESH_DEBUG_PRINTLN("startOTAUpdate: %s", reply);
|
||||
|
||||
static char id_buf[60];
|
||||
sprintf(id_buf, "%s (%s)", id, getManufacturerName());
|
||||
static char home_buf[90];
|
||||
sprintf(home_buf, "<H2>Hi! I am a MeshCore Repeater. ID: %s</H2>", id);
|
||||
|
||||
AsyncWebServer* server = new AsyncWebServer(80);
|
||||
|
||||
server->on("/", HTTP_GET, [](AsyncWebServerRequest *request) {
|
||||
request->send(200, "text/html", home_buf);
|
||||
});
|
||||
|
||||
AsyncElegantOTA.setID(id_buf);
|
||||
AsyncElegantOTA.begin(server); // Start ElegantOTA
|
||||
server->begin();
|
||||
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
|
@ -74,6 +74,8 @@ public:
|
|||
void reboot() override {
|
||||
esp_restart();
|
||||
}
|
||||
|
||||
bool startOTAUpdate(const char* id, char reply[]) override;
|
||||
};
|
||||
|
||||
class ESP32RTCClock : public mesh::RTCClock {
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ void RAK4631Board::begin() {
|
|||
delay(10); // give sx1262 some time to power up
|
||||
}
|
||||
|
||||
bool RAK4631Board::startOTAUpdate() {
|
||||
bool RAK4631Board::startOTAUpdate(const char* id, char reply[]) {
|
||||
// Config the peripheral connection with maximum bandwidth
|
||||
// more SRAM required by SoftDevice
|
||||
// Note: All config***() function must be called before begin()
|
||||
|
|
@ -76,5 +76,6 @@ bool RAK4631Board::startOTAUpdate() {
|
|||
Bluefruit.Advertising.setFastTimeout(30); // number of seconds in fast mode
|
||||
Bluefruit.Advertising.start(0); // 0 = Don't stop advertising after n seconds
|
||||
|
||||
strcpy(reply, "OK - started");
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,5 +50,5 @@ public:
|
|||
NVIC_SystemReset();
|
||||
}
|
||||
|
||||
bool startOTAUpdate() override;
|
||||
bool startOTAUpdate(const char* id, char reply[]) override;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ static void disconnect_callback(uint16_t conn_handle, uint8_t reason) {
|
|||
}
|
||||
|
||||
|
||||
bool TrackerT1000eBoard::startOTAUpdate() {
|
||||
bool TrackerT1000eBoard::startOTAUpdate(const char* id, char reply[]) {
|
||||
// Config the peripheral connection with maximum bandwidth
|
||||
// more SRAM required by SoftDevice
|
||||
// Note: All config***() function must be called before begin()
|
||||
|
|
@ -81,6 +81,7 @@ bool TrackerT1000eBoard::startOTAUpdate() {
|
|||
Bluefruit.Advertising.setFastTimeout(30); // number of seconds in fast mode
|
||||
Bluefruit.Advertising.start(0); // 0 = Don't stop advertising after n seconds
|
||||
|
||||
strcpy(reply, "OK - started");
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
|
@ -90,5 +90,5 @@ public:
|
|||
NVIC_SystemReset();
|
||||
}
|
||||
|
||||
// bool startOTAUpdate() override;
|
||||
// bool startOTAUpdate(const char* id, char reply[]) override;
|
||||
};
|
||||
|
|
@ -42,7 +42,7 @@ void T114Board::begin() {
|
|||
delay(10); // give sx1262 some time to power up
|
||||
}
|
||||
|
||||
bool T114Board::startOTAUpdate() {
|
||||
bool T114Board::startOTAUpdate(const char* id, char reply[]) {
|
||||
// Config the peripheral connection with maximum bandwidth
|
||||
// more SRAM required by SoftDevice
|
||||
// Note: All config***() function must be called before begin()
|
||||
|
|
@ -81,5 +81,6 @@ bool T114Board::startOTAUpdate() {
|
|||
Bluefruit.Advertising.setFastTimeout(30); // number of seconds in fast mode
|
||||
Bluefruit.Advertising.start(0); // 0 = Don't stop advertising after n seconds
|
||||
|
||||
strcpy(reply, "OK - started");
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -60,5 +60,5 @@ public:
|
|||
NVIC_SystemReset();
|
||||
}
|
||||
|
||||
bool startOTAUpdate() override;
|
||||
bool startOTAUpdate(const char* id, char reply[]) override;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ void TechoBoard::begin() {
|
|||
delay(10); // give sx1262 some time to power up
|
||||
}
|
||||
|
||||
bool TechoBoard::startOTAUpdate() {
|
||||
bool TechoBoard::startOTAUpdate(const char* id, char reply[]) {
|
||||
// Config the peripheral connection with maximum bandwidth
|
||||
// more SRAM required by SoftDevice
|
||||
// Note: All config***() function must be called before begin()
|
||||
|
|
@ -74,5 +74,6 @@ bool TechoBoard::startOTAUpdate() {
|
|||
Bluefruit.Advertising.setFastTimeout(30); // number of seconds in fast mode
|
||||
Bluefruit.Advertising.start(0); // 0 = Don't stop advertising after n seconds
|
||||
|
||||
strcpy(reply, "OK - started");
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -49,5 +49,5 @@ public:
|
|||
NVIC_SystemReset();
|
||||
}
|
||||
|
||||
bool startOTAUpdate() override;
|
||||
bool startOTAUpdate(const char* id, char reply[]) override;
|
||||
};
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ static void disconnect_callback(uint16_t conn_handle, uint8_t reason) {
|
|||
MESH_DEBUG_PRINTLN("BLE client disconnected");
|
||||
}
|
||||
|
||||
bool FaketecBoard::startOTAUpdate() {
|
||||
bool FaketecBoard::startOTAUpdate(const char* id, char reply[]) {
|
||||
// Config the peripheral connection with maximum bandwidth
|
||||
// more SRAM required by SoftDevice
|
||||
// Note: All config***() function must be called before begin()
|
||||
|
|
@ -78,5 +78,6 @@ bool FaketecBoard::startOTAUpdate() {
|
|||
Bluefruit.Advertising.setFastTimeout(30); // number of seconds in fast mode
|
||||
Bluefruit.Advertising.start(0); // 0 = Don't stop advertising after n seconds
|
||||
|
||||
strcpy(reply, "OK - started");
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -61,5 +61,5 @@ public:
|
|||
NVIC_SystemReset();
|
||||
}
|
||||
|
||||
bool startOTAUpdate() override;
|
||||
bool startOTAUpdate(const char* id, char reply[]) override;
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue