mirror of
https://github.com/meshtastic/firmware.git
synced 2025-04-29 02:51:17 +00:00
Switch to OTA firmware
This commit is contained in:
parent
e50e15dc04
commit
b591e35442
@ -2,6 +2,7 @@
|
|||||||
#include "Channels.h"
|
#include "Channels.h"
|
||||||
#include "MeshService.h"
|
#include "MeshService.h"
|
||||||
#include "NodeDB.h"
|
#include "NodeDB.h"
|
||||||
|
#include "BleOta.h"
|
||||||
#include "Router.h"
|
#include "Router.h"
|
||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
@ -103,6 +104,17 @@ bool AdminModule::handleReceivedProtobuf(const MeshPacket &mp, AdminMessage *r)
|
|||||||
rebootAtMsec = (s < 0) ? 0 : (millis() + s * 1000);
|
rebootAtMsec = (s < 0) ? 0 : (millis() + s * 1000);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case AdminMessage_reboot_ota_seconds_tag: {
|
||||||
|
int32_t s = r->reboot_ota_seconds;
|
||||||
|
if (BleOta::getOtaAppVersion().isEmpty()) {
|
||||||
|
DEBUG_MSG("No OTA firmware available, just rebooting\n");
|
||||||
|
}else{
|
||||||
|
BleOta::switchToOtaApp();
|
||||||
|
}
|
||||||
|
DEBUG_MSG("Rebooting to OTA in %d seconds\n", s);
|
||||||
|
rebootAtMsec = (s < 0) ? 0 : (millis() + s * 1000);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case AdminMessage_shutdown_seconds_tag: {
|
case AdminMessage_shutdown_seconds_tag: {
|
||||||
int32_t s = r->shutdown_seconds;
|
int32_t s = r->shutdown_seconds;
|
||||||
DEBUG_MSG("Shutdown in %d seconds\n", s);
|
DEBUG_MSG("Shutdown in %d seconds\n", s);
|
||||||
|
46
src/platform/esp32/BleOta.cpp
Normal file
46
src/platform/esp32/BleOta.cpp
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#include "Arduino.h"
|
||||||
|
#include "BleOta.h"
|
||||||
|
#include <esp_ota_ops.h>
|
||||||
|
|
||||||
|
static const String MESHTASTIC_OTA_APP_PROJECT_NAME("Meshtastic-OTA");
|
||||||
|
|
||||||
|
const esp_partition_t* BleOta::findEspOtaAppPartition() {
|
||||||
|
const esp_partition_t *part
|
||||||
|
= esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_OTA_1, nullptr);
|
||||||
|
|
||||||
|
esp_app_desc_t app_desc;
|
||||||
|
esp_err_t ret = ESP_ERROR_CHECK_WITHOUT_ABORT(esp_ota_get_partition_description(part, &app_desc));
|
||||||
|
|
||||||
|
if (ret != ESP_OK || MESHTASTIC_OTA_APP_PROJECT_NAME != app_desc.project_name) {
|
||||||
|
part
|
||||||
|
= esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_OTA_1,
|
||||||
|
nullptr);
|
||||||
|
ret = ESP_ERROR_CHECK_WITHOUT_ABORT(esp_ota_get_partition_description(part, &app_desc));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ret == ESP_OK && MESHTASTIC_OTA_APP_PROJECT_NAME == app_desc.project_name) {
|
||||||
|
return part;
|
||||||
|
} else {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
String BleOta::getOtaAppVersion() {
|
||||||
|
const esp_partition_t *part = findEspOtaAppPartition();
|
||||||
|
esp_app_desc_t app_desc;
|
||||||
|
esp_err_t ret = ESP_ERROR_CHECK_WITHOUT_ABORT(esp_ota_get_partition_description(part, &app_desc));
|
||||||
|
String version;
|
||||||
|
if (ret == ESP_OK) {
|
||||||
|
version = app_desc.version;
|
||||||
|
}
|
||||||
|
return version;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool BleOta::switchToOtaApp() {
|
||||||
|
bool success = false;
|
||||||
|
const esp_partition_t *part = findEspOtaAppPartition();
|
||||||
|
if (part) {
|
||||||
|
success = (ESP_ERROR_CHECK_WITHOUT_ABORT(esp_ota_set_boot_partition(part)) == ESP_OK);
|
||||||
|
}
|
||||||
|
return success;
|
||||||
|
}
|
18
src/platform/esp32/BleOta.h
Normal file
18
src/platform/esp32/BleOta.h
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
#ifndef BLEOTA_H
|
||||||
|
#define BLEOTA_H
|
||||||
|
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
|
class BleOta {
|
||||||
|
public:
|
||||||
|
explicit BleOta() {};
|
||||||
|
|
||||||
|
static String getOtaAppVersion();
|
||||||
|
static bool switchToOtaApp();
|
||||||
|
|
||||||
|
private:
|
||||||
|
String mUserAgent;
|
||||||
|
static const esp_partition_t *findEspOtaAppPartition();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif //BLEOTA_H
|
Loading…
Reference in New Issue
Block a user