diff --git a/arch/portduino/portduino.ini b/arch/portduino/portduino.ini index e739d7066..98bb309b9 100644 --- a/arch/portduino/portduino.ini +++ b/arch/portduino/portduino.ini @@ -1,6 +1,6 @@ ; The Portduino based sim environment on top of any host OS, all hardware will be simulated [portduino_base] -platform = https://github.com/meshtastic/platform-native.git#ff5da1d203b5c1163cfcda858d5f84920187f030 +platform = https://github.com/meshtastic/platform-native.git#8a66ef82cf38a4135d85cbb5043d0e8ebbb8ba17 framework = arduino build_src_filter = diff --git a/src/input/LinuxInput.cpp b/src/input/LinuxInput.cpp index 4b6150949..ea588c4bf 100644 --- a/src/input/LinuxInput.cpp +++ b/src/input/LinuxInput.cpp @@ -23,6 +23,11 @@ LinuxInput::LinuxInput(const char *name) : concurrency::OSThread(name) this->_originName = name; } +void LinuxInput::deInit() +{ + close(fd); +} + int32_t LinuxInput::runOnce() { diff --git a/src/input/LinuxInput.h b/src/input/LinuxInput.h index c21fb4c36..c7f011379 100644 --- a/src/input/LinuxInput.h +++ b/src/input/LinuxInput.h @@ -21,6 +21,7 @@ class LinuxInput : public Observable, public concurrency::OS { public: explicit LinuxInput(const char *name); + void deInit(); // Strictly for cleanly "rebooting" the binary on native protected: virtual int32_t runOnce() override; diff --git a/src/mesh/api/WiFiServerAPI.cpp b/src/mesh/api/WiFiServerAPI.cpp index 5f86dbe85..ba31f76e5 100644 --- a/src/mesh/api/WiFiServerAPI.cpp +++ b/src/mesh/api/WiFiServerAPI.cpp @@ -15,6 +15,10 @@ void initApiServer(int port) apiPort->init(); } } +void deInitApiServer() +{ + delete apiPort; +} WiFiServerAPI::WiFiServerAPI(WiFiClient &_client) : ServerAPI(_client) { @@ -22,4 +26,4 @@ WiFiServerAPI::WiFiServerAPI(WiFiClient &_client) : ServerAPI(_client) } WiFiServerPort::WiFiServerPort(int port) : APIServerPort(port) {} -#endif +#endif \ No newline at end of file diff --git a/src/mesh/api/WiFiServerAPI.h b/src/mesh/api/WiFiServerAPI.h index e436a177d..7a3d2967f 100644 --- a/src/mesh/api/WiFiServerAPI.h +++ b/src/mesh/api/WiFiServerAPI.h @@ -22,4 +22,5 @@ class WiFiServerPort : public APIServerPort explicit WiFiServerPort(int port); }; -void initApiServer(int port = 4403); \ No newline at end of file +void initApiServer(int port = 4403); +void deInitApiServer(); \ No newline at end of file diff --git a/src/shutdown.h b/src/shutdown.h index f36a7f8dd..113bfc541 100644 --- a/src/shutdown.h +++ b/src/shutdown.h @@ -1,6 +1,8 @@ +#include "api/WiFiServerAPI.h" #include "buzz.h" #include "configuration.h" #include "graphics/Screen.h" +#include "input/LinuxInputImpl.h" #include "main.h" #include "power.h" @@ -15,7 +17,13 @@ void powerCommandsCheck() #elif defined(ARCH_RP2040) rp2040.reboot(); #elif defined(ARCH_RASPBERRY_PI) - exit(EXIT_SUCCESS); + deInitApiServer(); + if (aLinuxInputImpl) + aLinuxInputImpl->deInit(); + SPI.end(); + Wire.end(); + Serial1.end(); + reboot(); #else rebootAtMsec = -1; LOG_WARN("FIXME implement reboot for this platform. Note that some settings require a restart to be applied.\n"); @@ -33,6 +41,8 @@ void powerCommandsCheck() #if defined(ARCH_NRF52) || defined(ARCH_ESP32) playShutdownMelody(); power->shutdown(); +#elif ARCH_RASPBERRY_PI + exit(EXIT_SUCCESS); #else LOG_WARN("FIXME implement shutdown for this platform"); #endif