mirror of
https://github.com/meshtastic/firmware.git
synced 2025-04-29 11:01:15 +00:00
bug #496 - allow update clients to program SPIFFS region
also have build system properly build spiffs release builds
This commit is contained in:
parent
d045139945
commit
f2698bbf91
@ -87,8 +87,12 @@ platformio lib update
|
|||||||
do_boards "$BOARDS_ESP32" "false"
|
do_boards "$BOARDS_ESP32" "false"
|
||||||
do_boards "$BOARDS_NRF52" "true"
|
do_boards "$BOARDS_NRF52" "true"
|
||||||
|
|
||||||
|
echo "Building SPIFFS for ESP32 targets"
|
||||||
|
pio run --environment tbeam -t buildfs
|
||||||
|
cp .pio/build/tbeam/spiffs.bin $OUTDIR/bins/universal/spiffs-$VERSION.bin
|
||||||
|
|
||||||
# keep the bins in archive also
|
# keep the bins in archive also
|
||||||
cp $OUTDIR/bins/firmware* $OUTDIR/elfs/firmware* $OUTDIR/bins/universal/firmware* $OUTDIR/elfs/universal/firmware* $ARCHIVEDIR
|
cp $OUTDIR/bins/firmware* $OUTDIR/bins/universal/spiffs* $OUTDIR/elfs/firmware* $OUTDIR/bins/universal/firmware* $OUTDIR/elfs/universal/firmware* $ARCHIVEDIR
|
||||||
|
|
||||||
echo Updating android bins $OUTDIR/forandroid
|
echo Updating android bins $OUTDIR/forandroid
|
||||||
rm -rf $OUTDIR/forandroid
|
rm -rf $OUTDIR/forandroid
|
||||||
|
@ -111,6 +111,7 @@ Characteristics
|
|||||||
| e272ebac-d463-4b98-bc84-5cc1a39ee517 | write | data, variable sized, recommended 512 bytes, write one for each block of file |
|
| e272ebac-d463-4b98-bc84-5cc1a39ee517 | write | data, variable sized, recommended 512 bytes, write one for each block of file |
|
||||||
| 4826129c-c22a-43a3-b066-ce8f0d5bacc6 | write | crc32, write last - writing this will complete the OTA operation, now you can read result |
|
| 4826129c-c22a-43a3-b066-ce8f0d5bacc6 | write | crc32, write last - writing this will complete the OTA operation, now you can read result |
|
||||||
| 5e134862-7411-4424-ac4a-210937432c77 | read,notify | result code, readable but will notify when the OTA operation completes |
|
| 5e134862-7411-4424-ac4a-210937432c77 | read,notify | result code, readable but will notify when the OTA operation completes |
|
||||||
|
| 5e134862-7411-4424-ac4a-210937432c67 | write | sets the region for programming, currently only 0 (app) or 100 (spiffs) are defined, if not set app is assumed |
|
||||||
| GATT_UUID_SW_VERSION_STR/0x2a28 | read | We also implement these standard GATT entries because SW update probably needs them: |
|
| GATT_UUID_SW_VERSION_STR/0x2a28 | read | We also implement these standard GATT entries because SW update probably needs them: |
|
||||||
| GATT_UUID_MANU_NAME/0x2a29 | read | |
|
| GATT_UUID_MANU_NAME/0x2a29 | read | |
|
||||||
| GATT_UUID_HW_VERSION_STR/0x2a27 | read | |
|
| GATT_UUID_HW_VERSION_STR/0x2a27 | read | |
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include "RadioLibInterface.h"
|
#include "RadioLibInterface.h"
|
||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
#include "nimble/BluetoothUtil.h"
|
#include "nimble/BluetoothUtil.h"
|
||||||
|
#include "NodeDB.h"
|
||||||
|
|
||||||
#include <CRC32.h>
|
#include <CRC32.h>
|
||||||
#include <Update.h>
|
#include <Update.h>
|
||||||
@ -16,6 +17,8 @@ static CRC32 crc;
|
|||||||
static uint32_t rebootAtMsec = 0; // If not zero we will reboot at this time (used to reboot shortly after the update completes)
|
static uint32_t rebootAtMsec = 0; // If not zero we will reboot at this time (used to reboot shortly after the update completes)
|
||||||
|
|
||||||
static uint32_t updateExpectedSize, updateActualSize;
|
static uint32_t updateExpectedSize, updateActualSize;
|
||||||
|
static uint8_t update_result;
|
||||||
|
static uint8_t update_region;
|
||||||
|
|
||||||
static concurrency::Lock *updateLock;
|
static concurrency::Lock *updateLock;
|
||||||
|
|
||||||
@ -32,8 +35,8 @@ int update_size_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble_
|
|||||||
crc.reset();
|
crc.reset();
|
||||||
if (Update.isRunning())
|
if (Update.isRunning())
|
||||||
Update.abort();
|
Update.abort();
|
||||||
bool canBegin = Update.begin(updateExpectedSize);
|
bool canBegin = Update.begin(updateExpectedSize, update_region);
|
||||||
DEBUG_MSG("Setting update size %u, result %d\n", updateExpectedSize, canBegin);
|
DEBUG_MSG("Setting region %d update size %u, result %d\n", update_region, updateExpectedSize, canBegin);
|
||||||
if (!canBegin) {
|
if (!canBegin) {
|
||||||
// Indicate failure by forcing the size to 0 (client will read it back)
|
// Indicate failure by forcing the size to 0 (client will read it back)
|
||||||
updateExpectedSize = 0;
|
updateExpectedSize = 0;
|
||||||
@ -77,8 +80,6 @@ int update_data_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble_
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static uint8_t update_result;
|
|
||||||
|
|
||||||
/// Handle writes to crc32
|
/// Handle writes to crc32
|
||||||
int update_crc32_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg)
|
int update_crc32_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg)
|
||||||
{
|
{
|
||||||
@ -100,8 +101,14 @@ int update_crc32_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble
|
|||||||
result = 0xe0; // FIXME, use real error codes
|
result = 0xe0; // FIXME, use real error codes
|
||||||
} else {
|
} else {
|
||||||
if (Update.end()) {
|
if (Update.end()) {
|
||||||
DEBUG_MSG("OTA done, rebooting in 5 seconds!\n");
|
if (update_region == U_SPIFFS) {
|
||||||
|
DEBUG_MSG("SPIFFS updated!\n");
|
||||||
|
nodeDB.saveToDisk(); // Since we just wiped spiffs, we need to save our current state
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
DEBUG_MSG("Appload updated, rebooting in 5 seconds!\n");
|
||||||
rebootAtMsec = millis() + 5000;
|
rebootAtMsec = millis() + 5000;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
DEBUG_MSG("Error Occurred. Error #: %d\n", Update.getError());
|
DEBUG_MSG("Error Occurred. Error #: %d\n", Update.getError());
|
||||||
}
|
}
|
||||||
@ -125,6 +132,11 @@ int update_result_callback(uint16_t conn_handle, uint16_t attr_handle, struct bl
|
|||||||
return chr_readwrite8(&update_result, sizeof(update_result), ctxt);
|
return chr_readwrite8(&update_result, sizeof(update_result), ctxt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int update_region_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg)
|
||||||
|
{
|
||||||
|
return chr_readwrite8(&update_region, sizeof(update_region), ctxt);
|
||||||
|
}
|
||||||
|
|
||||||
void bluetoothRebootCheck()
|
void bluetoothRebootCheck()
|
||||||
{
|
{
|
||||||
if (rebootAtMsec && millis() > rebootAtMsec) {
|
if (rebootAtMsec && millis() > rebootAtMsec) {
|
||||||
|
@ -14,10 +14,11 @@ int update_size_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble_
|
|||||||
int update_data_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg);
|
int update_data_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg);
|
||||||
int update_result_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg);
|
int update_result_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg);
|
||||||
int update_crc32_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg);
|
int update_crc32_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg);
|
||||||
|
int update_region_callback(uint16_t conn_handle, uint16_t attr_handle, struct ble_gatt_access_ctxt *ctxt, void *arg);
|
||||||
|
|
||||||
extern const struct ble_gatt_svc_def gatt_update_svcs[];
|
extern const struct ble_gatt_svc_def gatt_update_svcs[];
|
||||||
|
|
||||||
extern const ble_uuid128_t update_result_uuid;
|
extern const ble_uuid128_t update_result_uuid, update_region_uuid;
|
||||||
|
|
||||||
extern int16_t updateResultHandle;
|
extern int16_t updateResultHandle;
|
||||||
|
|
||||||
|
@ -23,6 +23,10 @@ const ble_uuid128_t update_crc32_uuid =
|
|||||||
const ble_uuid128_t update_result_uuid =
|
const ble_uuid128_t update_result_uuid =
|
||||||
BLE_UUID128_INIT(0x77, 0x2c, 0x43, 0x37, 0x09, 0x21, 0x4a, 0xac, 0x24, 0x44, 0x11, 0x74, 0x62, 0x48, 0x13, 0x5e);
|
BLE_UUID128_INIT(0x77, 0x2c, 0x43, 0x37, 0x09, 0x21, 0x4a, 0xac, 0x24, 0x44, 0x11, 0x74, 0x62, 0x48, 0x13, 0x5e);
|
||||||
|
|
||||||
|
// "5e134862-7411-4424-ac4a-210937432c67" write
|
||||||
|
const ble_uuid128_t update_region_uuid =
|
||||||
|
BLE_UUID128_INIT(0x67, 0x2c, 0x43, 0x37, 0x09, 0x21, 0x4a, 0xac, 0x24, 0x44, 0x11, 0x74, 0x62, 0x48, 0x13, 0x5e);
|
||||||
|
|
||||||
const struct ble_gatt_svc_def gatt_update_svcs[] = {
|
const struct ble_gatt_svc_def gatt_update_svcs[] = {
|
||||||
{
|
{
|
||||||
/*** Service: Security test. */
|
/*** Service: Security test. */
|
||||||
@ -47,9 +51,14 @@ const struct ble_gatt_svc_def gatt_update_svcs[] = {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
.uuid = &update_result_uuid.u,
|
.uuid = &update_result_uuid.u,
|
||||||
.access_cb = update_size_callback,
|
.access_cb = update_result_callback,
|
||||||
.flags = BLE_GATT_CHR_F_READ | BLE_GATT_CHR_F_READ_AUTHEN | BLE_GATT_CHR_F_NOTIFY,
|
.flags = BLE_GATT_CHR_F_READ | BLE_GATT_CHR_F_READ_AUTHEN | BLE_GATT_CHR_F_NOTIFY,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.uuid = &update_region_uuid.u,
|
||||||
|
.access_cb = update_region_callback,
|
||||||
|
.flags = BLE_GATT_CHR_F_WRITE | BLE_GATT_CHR_F_WRITE_AUTHEN,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
0, /* No more characteristics in this service. */
|
0, /* No more characteristics in this service. */
|
||||||
}},
|
}},
|
||||||
|
Loading…
Reference in New Issue
Block a user