From d7d13d637c005edc7b60eeca06f08bc3c71a7f46 Mon Sep 17 00:00:00 2001 From: Kevin Hester Date: Thu, 19 Nov 2020 09:25:02 +0800 Subject: [PATCH] clean up filesystem goo, add spiffs to install scripts, fix #496 @mc-hamster seems to work pretty good for me, so I'll send a PR to you for the dev-http branch. I'll push out an android alpha build later today (once the build is complete). Once this new device load is out in the field _future_ device builds will support updating spiffs from android. (i.e. device loads older than 1.1.9 must be updated to 1.1.9 or later before spiffs support is implemented on the device side - so some users might need to update twice before the new spiffs contents will appear on their device) --- bin/build-all.sh | 4 ++-- bin/device-install.sh | 3 +++ src/FSCommon.cpp | 21 +++++++++++++++++++++ src/FSCommon.h | 29 +++++++++++++++++++++++++++++ src/main.cpp | 19 +++++++++++-------- src/mesh/NodeDB.cpp | 29 ++--------------------------- 6 files changed, 68 insertions(+), 37 deletions(-) create mode 100644 src/FSCommon.cpp create mode 100644 src/FSCommon.h diff --git a/bin/build-all.sh b/bin/build-all.sh index a13bfffc9..ab779e187 100755 --- a/bin/build-all.sh +++ b/bin/build-all.sh @@ -9,7 +9,7 @@ COUNTRIES="US EU433 EU865 CN JP ANZ KR" #COUNTRIES=CN BOARDS_ESP32="tlora-v2 tlora-v1 tlora-v2-1-1.6 tbeam heltec tbeam0.7" -# BOARDS_ESP32=tbeam +#BOARDS_ESP32=tbeam # FIXME note nrf52840dk build is for some reason only generating a BIN file but not a HEX file nrf52840dk-geeksville is fine BOARDS_NRF52="lora-relay-v1" @@ -113,6 +113,6 @@ XML echo Generating $ARCHIVEDIR/firmware-$VERSION.zip rm -f $ARCHIVEDIR/firmware-$VERSION.zip -zip --junk-paths $ARCHIVEDIR/firmware-$VERSION.zip $OUTDIR/bins/firmware-*-$VERSION.* images/system-info.bin bin/device-install.sh bin/device-update.sh +zip --junk-paths $ARCHIVEDIR/firmware-$VERSION.zip $ARCHIVEDIR/spiffs-$VERSION.bin $OUTDIR/bins/firmware-*-$VERSION.* images/system-info.bin bin/device-install.sh bin/device-update.sh echo BUILT ALL diff --git a/bin/device-install.sh b/bin/device-install.sh index fb374d091..3d5f27af8 100755 --- a/bin/device-install.sh +++ b/bin/device-install.sh @@ -1,5 +1,7 @@ #!/bin/sh +set -e + # Usage info show_help() { cat << EOF @@ -36,6 +38,7 @@ if [ -f "${FILENAME}" ]; then echo "Trying to flash ${FILENAME}, but first erasing and writing system information" esptool.py --baud 921600 erase_flash esptool.py --baud 921600 write_flash 0x1000 system-info.bin + esptool.py --baud 921600 write_flash 0x00390000 spiffs-*.bin esptool.py --baud 921600 write_flash 0x10000 ${FILENAME} else echo "Invalid file: ${FILENAME}" diff --git a/src/FSCommon.cpp b/src/FSCommon.cpp new file mode 100644 index 000000000..2ce7f0bbe --- /dev/null +++ b/src/FSCommon.cpp @@ -0,0 +1,21 @@ +#include "FSCommon.h" + +void fsInit() +{ +#ifdef FS + if (!FSBegin()) + { + DEBUG_MSG("ERROR filesystem mount Failed\n"); + assert(0); // FIXME - report failure to phone + } + + DEBUG_MSG("Filesystem files:\n"); + File dir = FS.open("/"); + File f = dir.openNextFile(); + while (f) { + DEBUG_MSG(" %s\n", f.name()); + f.close(); + f = dir.openNextFile(); + } +#endif +} diff --git a/src/FSCommon.h b/src/FSCommon.h new file mode 100644 index 000000000..a1adb952e --- /dev/null +++ b/src/FSCommon.h @@ -0,0 +1,29 @@ +#pragma once + +#include "configuration.h" + +// Cross platform filesystem API + +#ifdef PORTDUINO +// Portduino version +#include "PortduinoFS.h" +#define FS PortduinoFS +#define FSBegin() true +#define FILE_O_WRITE "w" +#define FILE_O_READ "r" +#elif !defined(NO_ESP32) +// ESP32 version +#include "SPIFFS.h" +#define FS SPIFFS +#define FSBegin() FS.begin(true) +#define FILE_O_WRITE "w" +#define FILE_O_READ "r" +#else +// NRF52 version +#include "InternalFileSystem.h" +#define FS InternalFS +#define FSBegin() FS.begin() +using namespace Adafruit_LittleFS_Namespace; +#endif + +void fsInit(); \ No newline at end of file diff --git a/src/main.cpp b/src/main.cpp index 61bb2be14..33b60d843 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -11,6 +11,7 @@ // #include "rom/rtc.h" #include "DSRRouter.h" // #include "debug.h" +#include "FSCommon.h" #include "RTC.h" #include "SPILock.h" #include "concurrency/OSThread.h" @@ -173,7 +174,7 @@ class ButtonThread : public OSThread #ifdef BUTTON_PIN userButton = OneButton(BUTTON_PIN, true, true); #ifdef INPUT_PULLUP_SENSE - // Some platforms (nrf52) have a SENSE variant which allows wake from sleep - override what OneButton did + // Some platforms (nrf52) have a SENSE variant which allows wake from sleep - override what OneButton did pinMode(BUTTON_PIN, INPUT_PULLUP_SENSE); #endif userButton.attachClick(userButtonPressed); @@ -184,9 +185,9 @@ class ButtonThread : public OSThread #ifdef BUTTON_PIN_ALT userButtonAlt = OneButton(BUTTON_PIN_ALT, true, true); #ifdef INPUT_PULLUP_SENSE - // Some platforms (nrf52) have a SENSE variant which allows wake from sleep - override what OneButton did + // Some platforms (nrf52) have a SENSE variant which allows wake from sleep - override what OneButton did pinMode(BUTTON_PIN_ALT, INPUT_PULLUP_SENSE); -#endif +#endif userButtonAlt.attachClick(userButtonPressed); userButtonAlt.attachDuringLongPress(userButtonPressedLong); userButtonAlt.attachDoubleClick(userButtonDoublePressed); @@ -209,7 +210,7 @@ class ButtonThread : public OSThread canSleep &= userButtonAlt.isIdle(); #endif // if (!canSleep) DEBUG_MSG("Supressing sleep!\n"); - //else DEBUG_MSG("sleep ok\n"); + // else DEBUG_MSG("sleep ok\n"); return 5; } @@ -225,13 +226,13 @@ class ButtonThread : public OSThread DEBUG_MSG("Long press!\n"); screen->adjustBrightness(); } - + static void userButtonDoublePressed() -{ + { #ifndef NO_ESP32 - disablePin(); + disablePin(); #endif -} + } }; static Periodic *ledPeriodic; @@ -266,6 +267,8 @@ void setup() ledPeriodic = new Periodic("Blink", ledBlinker); + fsInit(); + router = new DSRRouter(); #ifdef I2C_SDA diff --git a/src/mesh/NodeDB.cpp b/src/mesh/NodeDB.cpp index 61be815ec..517845b9b 100644 --- a/src/mesh/NodeDB.cpp +++ b/src/mesh/NodeDB.cpp @@ -16,6 +16,7 @@ #include "error.h" #include "mesh-pb-constants.h" #include "meshwifi/meshwifi.h" +#include "FSCommon.h" #include #include @@ -35,27 +36,7 @@ DeviceState versions used to be defined in the .proto file but really only this #define DEVICESTATE_CUR_VER 11 #define DEVICESTATE_MIN_VER DEVICESTATE_CUR_VER -#ifdef PORTDUINO -// Portduino version -#include "PortduinoFS.h" -#define FS PortduinoFS -#define FSBegin() true -#define FILE_O_WRITE "w" -#define FILE_O_READ "r" -#elif !defined(NO_ESP32) -// ESP32 version -#include "SPIFFS.h" -#define FS SPIFFS -#define FSBegin() FS.begin(true) -#define FILE_O_WRITE "w" -#define FILE_O_READ "r" -#else -// NRF52 version -#include "InternalFileSystem.h" -#define FS InternalFS -#define FSBegin() FS.begin() -using namespace Adafruit_LittleFS_Namespace; -#endif + // FIXME - move this somewhere else extern void getMacAddr(uint8_t *dmac); @@ -210,12 +191,6 @@ void NodeDB::init() { installDefaultDeviceState(); - if (!FSBegin()) // FIXME - do this in main? - { - DEBUG_MSG("ERROR filesystem mount Failed\n"); - assert(0); // FIXME - report failure to phone - } - // saveToDisk(); loadFromDisk(); // saveToDisk();