MultiBoot: Завантажувач прошивок

MultiBoot lilka::multiboot

Екземпляр класу MultiBoot, який можна використовувати для роботи з завантажувачем. Вам не потрібно інстанціювати MultiBoot вручну.

class MultiBoot

Завантажувач прошивок з microSD-картки.

Дозволяє прочитати файл прошивки з microSD-картки в OTA-розділ та запустити його один раз, не замінюючи поточну прошивку.

Нова прошивка зберігається в OTA-розділі та запускається при перезавантаженні, але активною залишається основна прошивка (app rollback).

Це дозволяє компілювати за записувати різні прошивки на microSD-карту і запускати їх через браузер SD-карти без необхідності перепрошивки.

Детальніше про auto-rollback: https://docs.espressif.com/projects/esp-idf/en/stable/esp32/api-reference/system/ota.html#rollback-process

Приклад використання:

#include <lilka.h>

void setup() {
    lilka::begin();

    Serial.println("Завантаження прошивки 'firmware.bin' з microSD-картки...");

    lilka::multiboot.start("/sd/firmware.bin"); // Почати завантаження
    while (lilka::multiboot.process() != 0) { // Обробити завантаження
        Serial.println("Завантажено " + String(lilka::multiboot.getBytesWritten()) + "/" + String(lilka::multiboot.getBytesTotal()) + " байтів");
    }
    lilka::multiboot.finishAndReboot(); // Завершити завантаження та перезавантажити пристрій
}

Public Functions

MultiBoot()
void begin()

Ініціалізувати завантажувач.

Попередження

Цей метод викликається автоматично при виклику lilka::begin().

int start(String path)

Почати завантаження.

Повертає:

0, якщо завантаження почалося успішно, <0 - у разі помилки.

int process()

Обробити завантаження. Цей метод повинен викликатися в циклі, поки не поверне 0. Щоразу він опрацьовує частину файлу та записує її в OTA-розділ.

Повертає:

0, якщо завантаження завершилося успішно, <0 - у разі помилки, >0 - означає кількість байтів, які було оброблено.

void cancel()

Перервати завантаження.

int getBytesWritten()

Отримати кількість байтів, які було записано в OTA-розділ.

Повертає:

Кількість байтів

int getBytesTotal()

Отримати загальну кількість байтів, які потрібно записати в OTA-розділ.

Повертає:

Кількість байтів

int finishAndReboot()

Завершити завантаження та перезавантажити пристрій.

Повертає:

<0 - у разі помилки. В разі успіху цей метод не повертається, оскільки пристрій перезавантажується.

String getFirmwarePath()