From 5037a50059878faf4347d4d679d9a04019020491 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Mon, 8 May 2023 13:18:28 +0200 Subject: [PATCH 1/3] RadioLib6 support --- platformio.ini | 4 +--- src/main.cpp | 16 ++++++++++----- src/main.h | 4 ++++ src/mesh/LLCC68Interface.cpp | 6 +++--- src/mesh/LLCC68Interface.h | 5 +++-- src/mesh/RF95Interface.cpp | 6 +++--- src/mesh/RF95Interface.h | 5 +++-- src/mesh/RadioLibInterface.cpp | 17 +++++++--------- src/mesh/RadioLibInterface.h | 37 +++++++++------------------------- src/mesh/RadioLibRF95.cpp | 2 +- src/mesh/SX1262Interface.cpp | 6 +++--- src/mesh/SX1262Interface.h | 3 ++- src/mesh/SX1268Interface.cpp | 6 +++--- src/mesh/SX1268Interface.h | 3 ++- src/mesh/SX126xInterface.cpp | 6 +++--- src/mesh/SX126xInterface.h | 3 ++- src/mesh/SX1280Interface.cpp | 6 +++--- src/mesh/SX1280Interface.h | 3 ++- src/mesh/SX128xInterface.cpp | 6 +++--- src/mesh/SX128xInterface.h | 3 ++- 20 files changed, 71 insertions(+), 76 deletions(-) diff --git a/platformio.ini b/platformio.ini index 508f3615b..7c183fab7 100644 --- a/platformio.ini +++ b/platformio.ini @@ -66,9 +66,7 @@ lib_deps = https://github.com/meshtastic/ArduinoThread.git#72921ac222eed6f526ba1682023cee290d9aa1b3 nanopb/Nanopb@^0.4.7 erriez/ErriezCRC32@^1.0.1 - ; temp: do this till > 5.7.0 release to keep (some) SX1262 and SX1280 working - resolves -705 error during init - https://github.com/jgromes/RadioLib.git#45c5859338590b7eede23cb2f95284c3fb0cf08e - ; jgromes/RadioLib@^5.7.0 + jgromes/RadioLib@^6.0.0 ; Used for the code analysis in PIO Home / Inspect check_tool = cppcheck diff --git a/src/main.cpp b/src/main.cpp index b1a21e942..872c9a4c7 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -454,6 +454,8 @@ void setup() SPI.setFrequency(4000000); #endif + static SPISettings spiSettings(4000000, MSBFIRST, SPI_MODE0); + // Initialize the screen first so we can show the logo while we start up everything else. screen = new graphics::Screen(screen_found, screen_model, screen_geometry); @@ -507,6 +509,10 @@ void setup() digitalWrite(SX126X_ANT_SW, 1); #endif + // Init LockingHAL first, to use it for radio init + + LockingArduinoHal *RadioLibHAL = new LockingArduinoHal(SPI, spiSettings); + // radio init MUST BE AFTER service.init, so we have our radio config settings (from nodedb init) #if !HAS_RADIO && defined(ARCH_PORTDUINO) @@ -524,7 +530,7 @@ void setup() #if defined(RF95_IRQ) if (!rIf) { - rIf = new RF95Interface(RF95_NSS, RF95_IRQ, RF95_RESET, RF95_DIO1, SPI); + rIf = new RF95Interface(RadioLibHAL, RF95_NSS, RF95_IRQ, RF95_RESET, RF95_DIO1); if (!rIf->init()) { LOG_WARN("Failed to find RF95 radio\n"); delete rIf; @@ -537,7 +543,7 @@ void setup() #if defined(USE_SX1262) if (!rIf) { - rIf = new SX1262Interface(SX126X_CS, SX126X_DIO1, SX126X_RESET, SX126X_BUSY, SPI); + rIf = new SX1262Interface(RadioLibHAL, SX126X_CS, SX126X_DIO1, SX126X_RESET, SX126X_BUSY); if (!rIf->init()) { LOG_WARN("Failed to find SX1262 radio\n"); delete rIf; @@ -550,7 +556,7 @@ void setup() #if defined(USE_SX1268) if (!rIf) { - rIf = new SX1268Interface(SX126X_CS, SX126X_DIO1, SX126X_RESET, SX126X_BUSY, SPI); + rIf = new SX1268Interface(RadioLibHAL, SX126X_CS, SX126X_DIO1, SX126X_RESET, SX126X_BUSY); if (!rIf->init()) { LOG_WARN("Failed to find SX1268 radio\n"); delete rIf; @@ -563,7 +569,7 @@ void setup() #if defined(USE_LLCC68) if (!rIf) { - rIf = new LLCC68Interface(SX126X_CS, SX126X_DIO1, SX126X_RESET, SX126X_BUSY, SPI); + rIf = new LLCC68Interface(RadioLibHAL, SX126X_CS, SX126X_DIO1, SX126X_RESET, SX126X_BUSY); if (!rIf->init()) { LOG_WARN("Failed to find LLCC68 radio\n"); delete rIf; @@ -576,7 +582,7 @@ void setup() #if defined(USE_SX1280) if (!rIf) { - rIf = new SX1280Interface(SX128X_CS, SX128X_DIO1, SX128X_RESET, SX128X_BUSY, SPI); + rIf = new SX1280Interface(RadioLibHAL, SX128X_CS, SX128X_DIO1, SX128X_RESET, SX128X_BUSY); if (!rIf->init()) { LOG_WARN("Failed to find SX1280 radio\n"); delete rIf; diff --git a/src/main.h b/src/main.h index 5707e3bc5..0d23dd10c 100644 --- a/src/main.h +++ b/src/main.h @@ -8,6 +8,7 @@ #include "memGet.h" #include "mesh/generated/meshtastic/config.pb.h" #include "mesh/generated/meshtastic/telemetry.pb.h" +#include #include #if !defined(ARCH_PORTDUINO) && !defined(ARCH_STM32WL) #include @@ -66,3 +67,6 @@ extern bool runASAP; void nrf52Setup(), esp32Setup(), nrf52Loop(), esp32Loop(), clearBonds(); meshtastic_DeviceMetadata getDeviceMetadata(); + +// FIXME, we default to 4MHz SPI, SPI mode 0, check if the datasheet says it can really do that +extern SPISettings spiSettings; diff --git a/src/mesh/LLCC68Interface.cpp b/src/mesh/LLCC68Interface.cpp index 05c3c241d..8109765a6 100644 --- a/src/mesh/LLCC68Interface.cpp +++ b/src/mesh/LLCC68Interface.cpp @@ -2,8 +2,8 @@ #include "configuration.h" #include "error.h" -LLCC68Interface::LLCC68Interface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE busy, - SPIClass &spi) - : SX126xInterface(cs, irq, rst, busy, spi) +LLCC68Interface::LLCC68Interface(LockingArduinoHal *hal, RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, + RADIOLIB_PIN_TYPE busy) + : SX126xInterface(hal, cs, irq, rst, busy) { } \ No newline at end of file diff --git a/src/mesh/LLCC68Interface.h b/src/mesh/LLCC68Interface.h index 7de5e97f9..7e0fa1439 100644 --- a/src/mesh/LLCC68Interface.h +++ b/src/mesh/LLCC68Interface.h @@ -6,12 +6,13 @@ * Our adapter for LLCC68 radios * https://www.semtech.com/products/wireless-rf/lora-core/llcc68 * ⚠️⚠️⚠️ - * Be aware that LLCC68 does not support Spreading Factor 12 (SF12) and will not work on the default "Long Slow" channel. + * Be aware that LLCC68 does not support Spreading Factor 12 (SF12) and will not work on the "LongSlow" and "VLongSlow" channels. * You must change the channel if you get `Critical Error #3` with this module. * ⚠️⚠️⚠️ */ class LLCC68Interface : public SX126xInterface { public: - LLCC68Interface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE busy, SPIClass &spi); + LLCC68Interface(LockingArduinoHal *hal, RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, + RADIOLIB_PIN_TYPE busy); }; \ No newline at end of file diff --git a/src/mesh/RF95Interface.cpp b/src/mesh/RF95Interface.cpp index f57aaa055..cf9cd9477 100644 --- a/src/mesh/RF95Interface.cpp +++ b/src/mesh/RF95Interface.cpp @@ -11,9 +11,9 @@ #define POWER_DEFAULT 17 // How much power to use if the user hasn't set a power level -RF95Interface::RF95Interface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE busy, - SPIClass &spi) - : RadioLibInterface(cs, irq, rst, busy, spi) +RF95Interface::RF95Interface(LockingArduinoHal *hal, RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, + RADIOLIB_PIN_TYPE busy) + : RadioLibInterface(hal, cs, irq, rst, busy) { LOG_WARN("RF95Interface(cs=%d, irq=%d, rst=%d, busy=%d)\n", cs, irq, rst, busy); } diff --git a/src/mesh/RF95Interface.h b/src/mesh/RF95Interface.h index 96c3f2476..a50cf93a2 100644 --- a/src/mesh/RF95Interface.h +++ b/src/mesh/RF95Interface.h @@ -12,7 +12,8 @@ class RF95Interface : public RadioLibInterface RadioLibRF95 *lora = NULL; // Either a RFM95 or RFM96 depending on what was stuffed on this board public: - RF95Interface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE busy, SPIClass &spi); + RF95Interface(LockingArduinoHal *hal, RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, + RADIOLIB_PIN_TYPE busy); // TODO: Verify that this irq flag works with RFM95 / SX1276 radios the way it used to bool isIRQPending() override { return lora->getIRQFlags() & RADIOLIB_SX127X_MASK_IRQ_FLAG_VALID_HEADER; } @@ -39,7 +40,7 @@ class RF95Interface : public RadioLibInterface /** * Enable a particular ISR callback glue function */ - virtual void enableInterrupt(void (*callback)()) { lora->setDio0Action(callback); } + virtual void enableInterrupt(void (*callback)()) { lora->setDio0Action(callback, RISING); } /** can we detect a LoRa preamble on the current channel? */ virtual bool isChannelActive() override; diff --git a/src/mesh/RadioLibInterface.cpp b/src/mesh/RadioLibInterface.cpp index c624bc168..8fd715718 100644 --- a/src/mesh/RadioLibInterface.cpp +++ b/src/mesh/RadioLibInterface.cpp @@ -9,26 +9,23 @@ #include #include -// FIXME, we default to 4MHz SPI, SPI mode 0, check if the datasheet says it can really do that -static SPISettings spiSettings(4000000, MSBFIRST, SPI_MODE0); - -void LockingModule::SPIbeginTransaction() +void LockingArduinoHal::spiBeginTransaction() { spiLock->lock(); - Module::SPIbeginTransaction(); + ArduinoHal::spiBeginTransaction(); } -void LockingModule::SPIendTransaction() +void LockingArduinoHal::spiEndTransaction() { spiLock->unlock(); - Module::SPIendTransaction(); + ArduinoHal::spiEndTransaction(); } -RadioLibInterface::RadioLibInterface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE busy, - SPIClass &spi, PhysicalLayer *_iface) - : NotifiedWorkerThread("RadioIf"), module(cs, irq, rst, busy, spi, spiSettings), iface(_iface) +RadioLibInterface::RadioLibInterface(LockingArduinoHal *hal, RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, + RADIOLIB_PIN_TYPE busy, PhysicalLayer *_iface) + : NotifiedWorkerThread("RadioIf"), module(hal, cs, irq, rst, busy), iface(_iface) { instance = this; #if defined(ARCH_STM32WL) && defined(USE_SX1262) diff --git a/src/mesh/RadioLibInterface.h b/src/mesh/RadioLibInterface.h index c5cc85df7..6635089e5 100644 --- a/src/mesh/RadioLibInterface.h +++ b/src/mesh/RadioLibInterface.h @@ -13,35 +13,18 @@ #define INTERRUPT_ATTR #endif +#define RADIOLIB_PIN_TYPE uint32_t + /** - * A wrapper for the RadioLib Module class, that adds mutex for SPI bus access + * We need to override the RadioLib ArduinoHal class to add mutex protection for SPI bus access */ -class LockingModule : public Module +class LockingArduinoHal : public ArduinoHal { public: - /*! - \brief Extended SPI-based module constructor. + LockingArduinoHal(SPIClass &spi, SPISettings spiSettings) : ArduinoHal(spi, spiSettings){}; - \param cs Arduino pin to be used as chip select. - - \param irq Arduino pin to be used as interrupt/GPIO. - - \param rst Arduino pin to be used as hardware reset for the module. - - \param gpio Arduino pin to be used as additional interrupt/GPIO. - - \param spi SPI interface to be used, can also use software SPI implementations. - - \param spiSettings SPI interface settings. - */ - LockingModule(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE gpio, SPIClass &spi, - SPISettings spiSettings) - : Module(cs, irq, rst, gpio, spi, spiSettings) - { - } - - void SPIbeginTransaction() override; - void SPIendTransaction() override; + void spiBeginTransaction() override; + void spiEndTransaction() override; }; class RadioLibInterface : public RadioInterface, protected concurrency::NotifiedWorkerThread @@ -73,7 +56,7 @@ class RadioLibInterface : public RadioInterface, protected concurrency::Notified float currentLimit = 100; // 100mA OCP - Should be acceptable for RFM95/SX127x chipset. - LockingModule module; // The HW interface to the radio + Module module; // The HW interface to the radio /** * provides lowest common denominator RadioLib API @@ -99,8 +82,8 @@ class RadioLibInterface : public RadioInterface, protected concurrency::Notified virtual void enableInterrupt(void (*)()) = 0; public: - RadioLibInterface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE busy, SPIClass &spi, - PhysicalLayer *iface = NULL); + RadioLibInterface(LockingArduinoHal *hal, RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, + RADIOLIB_PIN_TYPE busy, PhysicalLayer *iface = NULL); virtual ErrorCode send(meshtastic_MeshPacket *p) override; diff --git a/src/mesh/RadioLibRF95.cpp b/src/mesh/RadioLibRF95.cpp index ad4b75a1f..0fa6c7fe8 100644 --- a/src/mesh/RadioLibRF95.cpp +++ b/src/mesh/RadioLibRF95.cpp @@ -79,5 +79,5 @@ bool RadioLibRF95::isReceiving() uint8_t RadioLibRF95::readReg(uint8_t addr) { - return _mod->SPIreadRegister(addr); + return mod->SPIreadRegister(addr); } \ No newline at end of file diff --git a/src/mesh/SX1262Interface.cpp b/src/mesh/SX1262Interface.cpp index 3bd402ed1..e96e72b71 100644 --- a/src/mesh/SX1262Interface.cpp +++ b/src/mesh/SX1262Interface.cpp @@ -2,8 +2,8 @@ #include "configuration.h" #include "error.h" -SX1262Interface::SX1262Interface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE busy, - SPIClass &spi) - : SX126xInterface(cs, irq, rst, busy, spi) +SX1262Interface::SX1262Interface(LockingArduinoHal *hal, RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, + RADIOLIB_PIN_TYPE busy) + : SX126xInterface(hal, cs, irq, rst, busy) { } \ No newline at end of file diff --git a/src/mesh/SX1262Interface.h b/src/mesh/SX1262Interface.h index 0f029ada9..31a12ae90 100644 --- a/src/mesh/SX1262Interface.h +++ b/src/mesh/SX1262Interface.h @@ -8,5 +8,6 @@ class SX1262Interface : public SX126xInterface { public: - SX1262Interface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE busy, SPIClass &spi); + SX1262Interface(LockingArduinoHal *hal, RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, + RADIOLIB_PIN_TYPE busy); }; \ No newline at end of file diff --git a/src/mesh/SX1268Interface.cpp b/src/mesh/SX1268Interface.cpp index 62cdfefe0..ea299fce5 100644 --- a/src/mesh/SX1268Interface.cpp +++ b/src/mesh/SX1268Interface.cpp @@ -2,9 +2,9 @@ #include "configuration.h" #include "error.h" -SX1268Interface::SX1268Interface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE busy, - SPIClass &spi) - : SX126xInterface(cs, irq, rst, busy, spi) +SX1268Interface::SX1268Interface(LockingArduinoHal *hal, RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, + RADIOLIB_PIN_TYPE busy) + : SX126xInterface(hal, cs, irq, rst, busy) { } diff --git a/src/mesh/SX1268Interface.h b/src/mesh/SX1268Interface.h index f40fcf37b..c8bcf20a7 100644 --- a/src/mesh/SX1268Interface.h +++ b/src/mesh/SX1268Interface.h @@ -10,5 +10,6 @@ class SX1268Interface : public SX126xInterface public: virtual float getFreq() override; - SX1268Interface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE busy, SPIClass &spi); + SX1268Interface(LockingArduinoHal *hal, RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, + RADIOLIB_PIN_TYPE busy); }; diff --git a/src/mesh/SX126xInterface.cpp b/src/mesh/SX126xInterface.cpp index acf84d1b6..c26b773f7 100644 --- a/src/mesh/SX126xInterface.cpp +++ b/src/mesh/SX126xInterface.cpp @@ -9,9 +9,9 @@ #endif template -SX126xInterface::SX126xInterface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE busy, - SPIClass &spi) - : RadioLibInterface(cs, irq, rst, busy, spi, &lora), lora(&module) +SX126xInterface::SX126xInterface(LockingArduinoHal *hal, RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, + RADIOLIB_PIN_TYPE busy) + : RadioLibInterface(hal, cs, irq, rst, busy, &lora), lora(&module) { LOG_WARN("SX126xInterface(cs=%d, irq=%d, rst=%d, busy=%d)\n", cs, irq, rst, busy); } diff --git a/src/mesh/SX126xInterface.h b/src/mesh/SX126xInterface.h index f7ed270d4..f2c861743 100644 --- a/src/mesh/SX126xInterface.h +++ b/src/mesh/SX126xInterface.h @@ -9,7 +9,8 @@ template class SX126xInterface : public RadioLibInterface { public: - SX126xInterface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE busy, SPIClass &spi); + SX126xInterface(LockingArduinoHal *hal, RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, + RADIOLIB_PIN_TYPE busy); /// Initialise the Driver transport hardware and software. /// Make sure the Driver is properly configured before calling init(). diff --git a/src/mesh/SX1280Interface.cpp b/src/mesh/SX1280Interface.cpp index e19e3e573..3287f141f 100644 --- a/src/mesh/SX1280Interface.cpp +++ b/src/mesh/SX1280Interface.cpp @@ -2,8 +2,8 @@ #include "configuration.h" #include "error.h" -SX1280Interface::SX1280Interface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE busy, - SPIClass &spi) - : SX128xInterface(cs, irq, rst, busy, spi) +SX1280Interface::SX1280Interface(LockingArduinoHal *hal, RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, + RADIOLIB_PIN_TYPE busy) + : SX128xInterface(hal, cs, irq, rst, busy) { } diff --git a/src/mesh/SX1280Interface.h b/src/mesh/SX1280Interface.h index 0c905cd12..8f2c4ec2e 100644 --- a/src/mesh/SX1280Interface.h +++ b/src/mesh/SX1280Interface.h @@ -9,5 +9,6 @@ class SX1280Interface : public SX128xInterface { public: - SX1280Interface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE busy, SPIClass &spi); + SX1280Interface(LockingArduinoHal *hal, RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, + RADIOLIB_PIN_TYPE busy); }; diff --git a/src/mesh/SX128xInterface.cpp b/src/mesh/SX128xInterface.cpp index e271cb718..691d5dff0 100644 --- a/src/mesh/SX128xInterface.cpp +++ b/src/mesh/SX128xInterface.cpp @@ -9,9 +9,9 @@ #endif template -SX128xInterface::SX128xInterface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE busy, - SPIClass &spi) - : RadioLibInterface(cs, irq, rst, busy, spi, &lora), lora(&module) +SX128xInterface::SX128xInterface(LockingArduinoHal *hal, RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, + RADIOLIB_PIN_TYPE busy) + : RadioLibInterface(hal, cs, irq, rst, busy, &lora), lora(&module) { LOG_WARN("SX128xInterface(cs=%d, irq=%d, rst=%d, busy=%d)\n", cs, irq, rst, busy); } diff --git a/src/mesh/SX128xInterface.h b/src/mesh/SX128xInterface.h index 434d4b1d9..3aaf31b1c 100644 --- a/src/mesh/SX128xInterface.h +++ b/src/mesh/SX128xInterface.h @@ -9,7 +9,8 @@ template class SX128xInterface : public RadioLibInterface { public: - SX128xInterface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE busy, SPIClass &spi); + SX128xInterface(LockingArduinoHal *hal, RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, + RADIOLIB_PIN_TYPE busy); /// Initialise the Driver transport hardware and software. /// Make sure the Driver is properly configured before calling init(). From f7041994af5def9c494b18a160ecd1713d029c5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Mon, 8 May 2023 14:03:03 +0200 Subject: [PATCH 2/3] rearrange pio build system dependencies also update trunk --- .trunk/.gitignore | 1 + .trunk/trunk.yaml | 19 ++++++++------- arch/esp32/esp32.ini | 4 ++++ arch/esp32/esp32c3.ini | 43 ++------------------------------- arch/esp32/esp32s2.ini | 45 ++++++----------------------------- arch/esp32/esp32s3.ini | 46 ++---------------------------------- arch/nrf52/nrf52.ini | 14 ++++++----- arch/nrf52/nrf52832.ini | 7 ++++++ arch/nrf52/nrf52840.ini | 11 +++------ arch/portduino/portduino.ini | 1 + arch/rp2040/rp2040.ini | 4 ++++ arch/stm32/stm32wl5e.ini | 8 ++++--- platformio.ini | 1 - src/main.cpp | 3 +-- 14 files changed, 55 insertions(+), 152 deletions(-) create mode 100644 arch/nrf52/nrf52832.ini diff --git a/.trunk/.gitignore b/.trunk/.gitignore index cf2f25470..8130ba6d1 100644 --- a/.trunk/.gitignore +++ b/.trunk/.gitignore @@ -5,3 +5,4 @@ plugins user_trunk.yaml user.yaml +shims diff --git a/.trunk/trunk.yaml b/.trunk/trunk.yaml index 519a9181e..cdf662e1f 100644 --- a/.trunk/trunk.yaml +++ b/.trunk/trunk.yaml @@ -1,36 +1,37 @@ version: 0.1 cli: - version: 1.7.0 + version: 1.9.1 plugins: sources: - id: trunk - ref: v0.0.14 + ref: v0.0.17 uri: https://github.com/trunk-io/plugins lint: enabled: - - ruff@0.0.260 - - yamllint@1.30.0 + - taplo@0.7.0 + - ruff@0.0.265 + - yamllint@1.31.0 - isort@5.12.0 - - markdownlint@0.33.0 + - markdownlint@0.34.0 - oxipng@8.0.0 - svgo@3.0.2 - - actionlint@1.6.23 + - actionlint@1.6.24 - flake8@6.0.0 - hadolint@2.12.0 - shfmt@3.5.0 - shellcheck@0.9.0 - black@23.3.0 - git-diff-check - - gitleaks@8.16.2 + - gitleaks@8.16.3 - clang-format@14.0.0 - - prettier@2.8.7 + - prettier@2.8.8 disabled: - taplo@0.7.0 - shellcheck@0.9.0 - shfmt@3.5.0 - oxipng@8.0.0 - actionlint@1.6.22 - - markdownlint@0.33.0 + - markdownlint@0.34.0 - hadolint@2.12.0 - svgo@3.0.2 runtimes: diff --git a/arch/esp32/esp32.ini b/arch/esp32/esp32.ini index fb83ec2d4..45409ad7b 100644 --- a/arch/esp32/esp32.ini +++ b/arch/esp32/esp32.ini @@ -2,11 +2,14 @@ [esp32_base] extends = arduino_base platform = platformio/espressif32@^6.1.0 + build_src_filter = ${arduino_base.build_src_filter} - - - - + upload_speed = 921600 debug_init_break = tbreak setup monitor_filters = esp32_exception_decoder + board_build.filesystem = littlefs # Remove -DMYNEWT_VAL_BLE_HS_LOG_LVL=LOG_LEVEL_CRITICAL for low level BLE logging. @@ -34,6 +37,7 @@ lib_deps = ${environmental_base.lib_deps} https://github.com/meshtastic/esp32_https_server.git#23665b3adc080a311dcbb586ed5941b5f94d6ea2 h2zero/NimBLE-Arduino@^1.4.0 + jgromes/RadioLib@^6.0.0 https://github.com/lewisxhe/XPowersLib.git#84b7373faea3118b6c37954d52f98b8a337148d6 https://github.com/meshtastic/ESP32_Codec2.git#633326c78ac251c059ab3a8c430fcdf25b41672f diff --git a/arch/esp32/esp32c3.ini b/arch/esp32/esp32c3.ini index 5ebb789ad..619fdb28a 100644 --- a/arch/esp32/esp32c3.ini +++ b/arch/esp32/esp32c3.ini @@ -1,44 +1,5 @@ [esp32c3_base] -extends = arduino_base -platform = platformio/espressif32@^6.1.0 -build_src_filter = - ${arduino_base.build_src_filter} - - - - -upload_speed = 961200 +extends = esp32_base + monitor_speed = 115200 -debug_init_break = tbreak setup monitor_filters = esp32_c3_exception_decoder -board_build.filesystem = littlefs - -# Remove -DMYNEWT_VAL_BLE_HS_LOG_LVL=LOG_LEVEL_CRITICAL for low level BLE logging. -# See library directory for BLE logging possible values: .pio/libdeps/tbeam/NimBLE-Arduino/src/log_common/log_common.h -# This overrides the BLE logging default of LOG_LEVEL_INFO (1) from: .pio/libdeps/tbeam/NimBLE-Arduino/src/esp_nimble_cfg.h -build_flags = - ${arduino_base.build_flags} - -Wall - -Wextra - -Isrc/platform/esp32 - -std=c++11 - -DLOG_LOCAL_LEVEL=ESP_LOG_DEBUG - -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG - -DMYNEWT_VAL_BLE_HS_LOG_LVL=LOG_LEVEL_CRITICAL - -DCONFIG_BT_NIMBLE_ENABLED - -DCONFIG_NIMBLE_CPP_LOG_LEVEL=2 - -DCONFIG_BT_NIMBLE_MAX_CCCDS=20 - -DESP_OPENSSL_SUPPRESS_LEGACY_WARNING - ;-DDEBUG_HEAP - -lib_deps = - ${arduino_base.lib_deps} - ${networking_base.lib_deps} - ${environmental_base.lib_deps} - https://github.com/meshtastic/esp32_https_server.git#23665b3adc080a311dcbb586ed5941b5f94d6ea2 - h2zero/NimBLE-Arduino@^1.4.0 - https://github.com/lewisxhe/XPowersLib.git#84b7373faea3118b6c37954d52f98b8a337148d6 - https://github.com/meshtastic/ESP32_Codec2.git#633326c78ac251c059ab3a8c430fcdf25b41672f -lib_ignore = - segger_rtt - ESP32 BLE Arduino - -; customize the partition table -; http://docs.platformio.org/en/latest/platforms/espressif32.html#partition-tables -board_build.partitions = partition-table.csv \ No newline at end of file diff --git a/arch/esp32/esp32s2.ini b/arch/esp32/esp32s2.ini index 6e75c08c9..3bde3465a 100644 --- a/arch/esp32/esp32s2.ini +++ b/arch/esp32/esp32s2.ini @@ -1,47 +1,16 @@ [esp32s2_base] -extends = arduino_base -platform = platformio/espressif32@^6.1.0 +extends = esp32_base + build_src_filter = - ${arduino_base.build_src_filter} - - - - - -upload_speed = 961200 + ${esp32_base.build_src_filter} - + monitor_speed = 115200 -debug_init_break = tbreak setup -monitor_filters = esp32_exception_decoder -board_build.filesystem = littlefs -# Remove -DMYNEWT_VAL_BLE_HS_LOG_LVL=LOG_LEVEL_CRITICAL for low level BLE logging. -# See library directory for BLE logging possible values: .pio/libdeps/tbeam/NimBLE-Arduino/src/log_common/log_common.h -# This overrides the BLE logging default of LOG_LEVEL_INFO (1) from: .pio/libdeps/tbeam/NimBLE-Arduino/src/esp_nimble_cfg.h build_flags = - ${arduino_base.build_flags} - -Wall - -Wextra - -Isrc/platform/esp32 - -std=c++11 - -DLOG_LOCAL_LEVEL=ESP_LOG_DEBUG - -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG - -DMYNEWT_VAL_BLE_HS_LOG_LVL=LOG_LEVEL_CRITICAL - -DAXP_DEBUG_PORT=Serial - -DCONFIG_BT_NIMBLE_ENABLED - -DCONFIG_NIMBLE_CPP_LOG_LEVEL=2 - -DCONFIG_BT_NIMBLE_MAX_CCCDS=20 - -DESP_OPENSSL_SUPPRESS_LEGACY_WARNING + ${esp32_base.build_flags} -DHAS_BLUETOOTH=0 - ;-DDEBUG_HEAP -lib_deps = - ${arduino_base.lib_deps} - ${networking_base.lib_deps} - ${environmental_base.lib_deps} - https://github.com/meshtastic/esp32_https_server.git#23665b3adc080a311dcbb586ed5941b5f94d6ea2 - https://github.com/lewisxhe/XPowersLib.git#84b7373faea3118b6c37954d52f98b8a337148d6 - https://github.com/meshtastic/ESP32_Codec2.git#633326c78ac251c059ab3a8c430fcdf25b41672f - lib_ignore = - segger_rtt - ESP32 BLE Arduino - -; customize the partition table -; http://docs.platformio.org/en/latest/platforms/espressif32.html#partition-tables -board_build.partitions = partition-table.csv + ${esp32_base.lib_ignore} + NimBLE-Arduino diff --git a/arch/esp32/esp32s3.ini b/arch/esp32/esp32s3.ini index bb0214f46..6a1bdd3fd 100644 --- a/arch/esp32/esp32s3.ini +++ b/arch/esp32/esp32s3.ini @@ -1,47 +1,5 @@ [esp32s3_base] -extends = arduino_base -platform = platformio/espressif32@^6.1.0 -build_src_filter = - ${arduino_base.build_src_filter} - - - - -upload_speed = 961200 +extends = esp32_base + monitor_speed = 115200 -debug_init_break = tbreak setup -monitor_filters = esp32_exception_decoder -board_build.filesystem = littlefs - -# Remove -DMYNEWT_VAL_BLE_HS_LOG_LVL=LOG_LEVEL_CRITICAL for low level BLE logging. -# See library directory for BLE logging possible values: .pio/libdeps/tbeam/NimBLE-Arduino/src/log_common/log_common.h -# This overrides the BLE logging default of LOG_LEVEL_INFO (1) from: .pio/libdeps/tbeam/NimBLE-Arduino/src/esp_nimble_cfg.h -build_flags = - ${arduino_base.build_flags} - -Wall - -Wextra - -Isrc/platform/esp32 - -std=c++11 - -DLOG_LOCAL_LEVEL=ESP_LOG_DEBUG - -DCORE_DEBUG_LEVEL=ARDUHAL_LOG_LEVEL_DEBUG - -DMYNEWT_VAL_BLE_HS_LOG_LVL=LOG_LEVEL_CRITICAL - -DAXP_DEBUG_PORT=Serial - -DCONFIG_BT_NIMBLE_ENABLED - -DCONFIG_NIMBLE_CPP_LOG_LEVEL=2 - -DCONFIG_BT_NIMBLE_MAX_CCCDS=20 - -DESP_OPENSSL_SUPPRESS_LEGACY_WARNING - ;-DDEBUG_HEAP - -lib_deps = - ${arduino_base.lib_deps} - ${networking_base.lib_deps} - ${environmental_base.lib_deps} - https://github.com/meshtastic/esp32_https_server.git#23665b3adc080a311dcbb586ed5941b5f94d6ea2 - h2zero/NimBLE-Arduino@^1.4.0 - https://github.com/lewisxhe/XPowersLib.git#84b7373faea3118b6c37954d52f98b8a337148d6 - https://github.com/meshtastic/ESP32_Codec2.git#633326c78ac251c059ab3a8c430fcdf25b41672f - -lib_ignore = - segger_rtt - ESP32 BLE Arduino - -; customize the partition table -; http://docs.platformio.org/en/latest/platforms/espressif32.html#partition-tables -board_build.partitions = partition-table.csv diff --git a/arch/nrf52/nrf52.ini b/arch/nrf52/nrf52.ini index c2287d7e5..3f1a77d08 100644 --- a/arch/nrf52/nrf52.ini +++ b/arch/nrf52/nrf52.ini @@ -1,18 +1,20 @@ [nrf52_base] ; Instead of the standard nordicnrf52 platform, we use our fork which has our added variant files platform = platformio/nordicnrf52@^9.5.0 - extends = arduino_base + build_type = debug ; I'm debugging with ICE a lot now build_flags = ${arduino_base.build_flags} -Wno-unused-variable -Isrc/platform/nrf52 + build_src_filter = ${arduino_base.build_src_filter} - - - - - - - - - + +lib_deps= + ${arduino_base.lib_deps} + jgromes/RadioLib@^6.0.0 + lib_ignore = BluetoothOTA - -; Note: By default no lora device is created for this build - it uses a simulated interface -[env:feather_nrf52832] -extends = nrf52_base -board = adafruit_feather_nrf52832 + diff --git a/arch/nrf52/nrf52832.ini b/arch/nrf52/nrf52832.ini new file mode 100644 index 000000000..ce94283b1 --- /dev/null +++ b/arch/nrf52/nrf52832.ini @@ -0,0 +1,7 @@ +[nrf52832_base] +extends = nrf52_base + +build_flags = ${nrf52_base.build_flags} + +lib_deps = + ${nrf52_base.lib_deps} diff --git a/arch/nrf52/nrf52840.ini b/arch/nrf52/nrf52840.ini index 14cc1d1e1..cf08fd02e 100644 --- a/arch/nrf52/nrf52840.ini +++ b/arch/nrf52/nrf52840.ini @@ -1,14 +1,9 @@ [nrf52840_base] extends = nrf52_base + build_flags = ${nrf52_base.build_flags} + lib_deps = - ${arduino_base.lib_deps} + ${nrf52_base.lib_deps} ${environmental_base.lib_deps} https://github.com/Kongduino/Adafruit_nRFCrypto.git#e31a8825ea3300b163a0a3c1ddd5de34e10e1371 - -; Note: By default no lora device is created for this build - it uses a simulated interface -[env:nrf52840dk] -extends = nrf52840_base -board = nrf52840_dk - - diff --git a/arch/portduino/portduino.ini b/arch/portduino/portduino.ini index 100f3538d..90309c6d3 100644 --- a/arch/portduino/portduino.ini +++ b/arch/portduino/portduino.ini @@ -20,4 +20,5 @@ lib_deps = ${env.lib_deps} ${networking_base.lib_deps} rweather/Crypto@^0.4.0 + jgromes/RadioLib@^5.7.0 build_flags = ${arduino_base.build_flags} -fPIC -Isrc/platform/portduino diff --git a/arch/rp2040/rp2040.ini b/arch/rp2040/rp2040.ini index c41f92892..6f5449ae6 100644 --- a/arch/rp2040/rp2040.ini +++ b/arch/rp2040/rp2040.ini @@ -2,6 +2,7 @@ [rp2040_base] platform = https://github.com/maxgerhardt/platform-raspberrypi.git#9f8c10e50b5acd18e7bfd32638199c655be73a5b extends = arduino_base + board_build.core = earlephilhower board_build.filesystem_size = 0.5m build_flags = @@ -11,9 +12,12 @@ build_flags = # -D _POSIX_THREADS build_src_filter = ${arduino_base.build_src_filter} - - - - - - - - - + lib_ignore = BluetoothOTA + lib_deps = ${arduino_base.lib_deps} ${environmental_base.lib_deps} + jgromes/RadioLib@^6.0.0 https://github.com/kokke/tiny-AES-c.git#f06ac37fc31dfdaca2e0d9bec83f90d5663c319b diff --git a/arch/stm32/stm32wl5e.ini b/arch/stm32/stm32wl5e.ini index a38fb65e8..4d5cee56d 100644 --- a/arch/stm32/stm32wl5e.ini +++ b/arch/stm32/stm32wl5e.ini @@ -2,17 +2,19 @@ platform = platformio/ststm32@^15.4.1 board = generic_wl5e framework = arduino + build_type = debug build_flags = ${arduino_base.build_flags} -Isrc/platform/stm32wl -g - -DHAL_SUBGHZ_MODULE_ENABLED -# Arduino/PlatformIO framework-arduinoststm32 package does not presently have SUBGHZSPI support -# -DPIN_SPI_MOSI=PINSUBGHZSPIMOSI -DPIN_SPI_MISO=PINSUBGHZSPIMISO -DPIN_SPI_SCK=PINSUBGHZSPISCK + build_src_filter = ${arduino_base.build_src_filter} - - - - - - - - - - - - - - + lib_deps = ${env.lib_deps} + jgromes/RadioLib@^6.0.0 https://github.com/kokke/tiny-AES-c.git#f06ac37fc31dfdaca2e0d9bec83f90d5663c319b + lib_ignore = mathertel/OneButton@^2.0.3 diff --git a/platformio.ini b/platformio.ini index 7c183fab7..b471ccec5 100644 --- a/platformio.ini +++ b/platformio.ini @@ -66,7 +66,6 @@ lib_deps = https://github.com/meshtastic/ArduinoThread.git#72921ac222eed6f526ba1682023cee290d9aa1b3 nanopb/Nanopb@^0.4.7 erriez/ErriezCRC32@^1.0.1 - jgromes/RadioLib@^6.0.0 ; Used for the code analysis in PIO Home / Inspect check_tool = cppcheck diff --git a/src/main.cpp b/src/main.cpp index 872c9a4c7..324422a69 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -161,6 +161,7 @@ static OSThread *buttonThread; uint32_t ButtonThread::longPressTime = 0; #endif static OSThread *accelerometerThread; +SPISettings spiSettings(4000000, MSBFIRST, SPI_MODE0); RadioInterface *rIf = NULL; @@ -454,8 +455,6 @@ void setup() SPI.setFrequency(4000000); #endif - static SPISettings spiSettings(4000000, MSBFIRST, SPI_MODE0); - // Initialize the screen first so we can show the logo while we start up everything else. screen = new graphics::Screen(screen_found, screen_model, screen_geometry); From 6963e43e9ff6441df78246b3f4059fcd45351a63 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20G=C3=B6ttgens?= Date: Mon, 8 May 2023 20:28:11 +0200 Subject: [PATCH 3/3] Platformio 6.1.7 doesn't like dots in env names any more. --- variants/diy/platformio.ini | 2 +- variants/heltec_v2.1/platformio.ini | 2 +- variants/heltec_v2/platformio.ini | 2 +- variants/tbeam_v07/platformio.ini | 2 +- variants/tlora_v2_1_16/platformio.ini | 2 +- variants/tlora_v2_1_18/platformio.ini | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/variants/diy/platformio.ini b/variants/diy/platformio.ini index d50d0c4f3..612035717 100644 --- a/variants/diy/platformio.ini +++ b/variants/diy/platformio.ini @@ -11,7 +11,7 @@ build_flags = -I variants/diy/v1 ; Meshtastic DIY v1.1 new schematic based on ESP32-WROOM-32 & SX1262/SX1268 modules -[env:meshtastic-diy-v1.1] +[env:meshtastic-diy-v1_1] extends = esp32_base board = esp32doit-devkit-v1 board_level = extra diff --git a/variants/heltec_v2.1/platformio.ini b/variants/heltec_v2.1/platformio.ini index 792a1bb94..29f544f7a 100644 --- a/variants/heltec_v2.1/platformio.ini +++ b/variants/heltec_v2.1/platformio.ini @@ -1,4 +1,4 @@ -[env:heltec-v2.1] +[env:heltec-v2_1] ;build_type = debug ; to make it possible to step through our jtag debugger extends = esp32_base board = heltec_wifi_lora_32_V2 diff --git a/variants/heltec_v2/platformio.ini b/variants/heltec_v2/platformio.ini index 8a60942a9..3289f4e68 100644 --- a/variants/heltec_v2/platformio.ini +++ b/variants/heltec_v2/platformio.ini @@ -1,4 +1,4 @@ -[env:heltec-v2.0] +[env:heltec-v2_0] ;build_type = debug ; to make it possible to step through our jtag debugger extends = esp32_base board = heltec_wifi_lora_32_V2 diff --git a/variants/tbeam_v07/platformio.ini b/variants/tbeam_v07/platformio.ini index 22258b64c..5428b0e2a 100644 --- a/variants/tbeam_v07/platformio.ini +++ b/variants/tbeam_v07/platformio.ini @@ -1,5 +1,5 @@ ; The original TBEAM board without the AXP power chip and a few other changes -[env:tbeam0.7] +[env:tbeam0_7] extends = esp32_base board = ttgo-t-beam board_level = extra diff --git a/variants/tlora_v2_1_16/platformio.ini b/variants/tlora_v2_1_16/platformio.ini index 84ffc1ea8..da2a32ce4 100644 --- a/variants/tlora_v2_1_16/platformio.ini +++ b/variants/tlora_v2_1_16/platformio.ini @@ -1,4 +1,4 @@ -[env:tlora-v2-1-1.6] +[env:tlora-v2-1-1_6] extends = esp32_base board = ttgo-lora32-v21 build_flags = diff --git a/variants/tlora_v2_1_18/platformio.ini b/variants/tlora_v2_1_18/platformio.ini index 01741ca13..36d6a3157 100644 --- a/variants/tlora_v2_1_18/platformio.ini +++ b/variants/tlora_v2_1_18/platformio.ini @@ -1,4 +1,4 @@ -[env:tlora-v2-1-1.8] +[env:tlora-v2-1-1_8] extends = esp32_base board = ttgo-lora32-v21