From a1c433748afd8a6b888295f1119cca8e833ce7d0 Mon Sep 17 00:00:00 2001 From: GUVWAF <78759985+GUVWAF@users.noreply.github.com> Date: Tue, 26 Sep 2023 12:45:34 +0200 Subject: [PATCH] RP2040: Add SerialModule support (#2830) * Support for SerialModule on RP2040 * Remove one !defined too many * Increase serial RX_BUFFER: more reliable for long packets Even results into an error for ESP32 --------- Co-authored-by: Ben Meadors --- src/modules/Modules.cpp | 5 +++-- src/modules/SerialModule.cpp | 12 +++++++++--- src/modules/SerialModule.h | 5 +++-- variants/rpipico/variant.h | 4 ++++ variants/rpipicow/variant.h | 4 ++++ 5 files changed, 23 insertions(+), 7 deletions(-) diff --git a/src/modules/Modules.cpp b/src/modules/Modules.cpp index ba291d018..1780a8528 100644 --- a/src/modules/Modules.cpp +++ b/src/modules/Modules.cpp @@ -31,7 +31,7 @@ #if defined(ARCH_ESP32) || defined(ARCH_NRF52) || defined(ARCH_RP2040) #include "modules/ExternalNotificationModule.h" #include "modules/RangeTestModule.h" -#if (defined(ARCH_ESP32) || defined(ARCH_NRF52)) && !defined(CONFIG_IDF_TARGET_ESP32S2) +#if (defined(ARCH_ESP32) || defined(ARCH_NRF52) || defined(ARCH_RP2040)) && !defined(CONFIG_IDF_TARGET_ESP32S2) #include "modules/SerialModule.h" #endif #endif @@ -92,7 +92,8 @@ void setupModules() new AirQualityTelemetryModule(); } #endif -#if (defined(ARCH_ESP32) || defined(ARCH_NRF52)) && !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) +#if (defined(ARCH_ESP32) || defined(ARCH_NRF52) || defined(ARCH_RP2040)) && !defined(CONFIG_IDF_TARGET_ESP32S2) && \ + !defined(CONFIG_IDF_TARGET_ESP32C3) new SerialModule(); #endif #ifdef ARCH_ESP32 diff --git a/src/modules/SerialModule.cpp b/src/modules/SerialModule.cpp index 16cd3a263..42b109050 100644 --- a/src/modules/SerialModule.cpp +++ b/src/modules/SerialModule.cpp @@ -44,9 +44,10 @@ */ -#if (defined(ARCH_ESP32) || defined(ARCH_NRF52)) && !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) +#if (defined(ARCH_ESP32) || defined(ARCH_NRF52) || defined(ARCH_RP2040)) && !defined(CONFIG_IDF_TARGET_ESP32S2) && \ + !defined(CONFIG_IDF_TARGET_ESP32C3) -#define RX_BUFFER 128 +#define RX_BUFFER 256 #define TIMEOUT 250 #define BAUD 38400 #define ACK 1 @@ -141,7 +142,12 @@ int32_t SerialModule::runOnce() } #elif !defined(TTGO_T_ECHO) if (moduleConfig.serial.rxd && moduleConfig.serial.txd) { +#ifdef ARCH_RP2040 + Serial2.setFIFOSize(RX_BUFFER); + Serial2.setPinout(moduleConfig.serial.txd, moduleConfig.serial.rxd); +#else Serial2.setPins(moduleConfig.serial.rxd, moduleConfig.serial.txd); +#endif Serial2.begin(baud, SERIAL_8N1); Serial2.setTimeout(moduleConfig.serial.timeout > 0 ? moduleConfig.serial.timeout : TIMEOUT); } else { @@ -182,7 +188,7 @@ int32_t SerialModule::runOnce() } } } -#ifndef TTGO_T_ECHO +#if !defined(TTGO_T_ECHO) else { while (Serial2.available()) { serialPayloadSize = Serial2.readBytes(serialBytes, meshtastic_Constants_DATA_PAYLOAD_LEN); diff --git a/src/modules/SerialModule.h b/src/modules/SerialModule.h index 562ccd42b..18ad8a1ba 100644 --- a/src/modules/SerialModule.h +++ b/src/modules/SerialModule.h @@ -8,7 +8,8 @@ #include #include -#if (defined(ARCH_ESP32) || defined(ARCH_NRF52)) && !defined(CONFIG_IDF_TARGET_ESP32S2) && !defined(CONFIG_IDF_TARGET_ESP32C3) +#if (defined(ARCH_ESP32) || defined(ARCH_NRF52) || defined(ARCH_RP2040)) && !defined(CONFIG_IDF_TARGET_ESP32S2) && \ + !defined(CONFIG_IDF_TARGET_ESP32C3) class SerialModule : public StreamAPI, private concurrency::OSThread { @@ -74,4 +75,4 @@ class SerialModuleRadio : public MeshModule extern SerialModuleRadio *serialModuleRadio; -#endif +#endif \ No newline at end of file diff --git a/variants/rpipico/variant.h b/variants/rpipico/variant.h index 9deeeadf8..52e748ee8 100644 --- a/variants/rpipico/variant.h +++ b/variants/rpipico/variant.h @@ -17,6 +17,10 @@ // SDA = 4 // SCL = 5 +// Recommended pins for SerialModule: +// txd = 8 +// rxd = 9 + #define EXT_NOTIFY_OUT 22 #define BUTTON_PIN 17 diff --git a/variants/rpipicow/variant.h b/variants/rpipicow/variant.h index d714e2534..a9111db6b 100644 --- a/variants/rpipicow/variant.h +++ b/variants/rpipicow/variant.h @@ -17,6 +17,10 @@ // SDA = 4 // SCL = 5 +// Recommended pins for SerialModule: +// txd = 8 +// rxd = 9 + #define EXT_NOTIFY_OUT 22 #define BUTTON_PIN 17