Просмотр исходного кода

Merge pull request #453 from recrof/dev

sx1276 boards: migrate to std_init()
ripplebiz 1 год назад
Родитель
Сommit
cea16bad89

+ 56 - 3
src/helpers/CustomSX1276.h

@@ -12,10 +12,63 @@ class CustomSX1276 : public SX1276 {
   public:
     CustomSX1276(Module *mod) : SX1276(mod) { }
 
+  #ifdef RP2040_PLATFORM
+    bool std_init(SPIClassRP2040* spi = NULL)
+  #else
+    bool std_init(SPIClass* spi = NULL)
+  #endif
+    {
+  #ifdef LORA_CR
+      uint8_t cr = LORA_CR;
+  #else
+      uint8_t cr = 5;
+  #endif
+
+  #if defined(P_LORA_SCLK)
+    #ifdef NRF52_PLATFORM
+      if (spi) { spi->setPins(P_LORA_MISO, P_LORA_SCLK, P_LORA_MOSI); spi->begin(); }
+    #elif defined(RP2040_PLATFORM)
+      if (spi) {
+        spi->setMISO(P_LORA_MISO);
+        //spi->setCS(P_LORA_NSS); // Setting CS results in freeze
+        spi->setSCK(P_LORA_SCLK);
+        spi->setMOSI(P_LORA_MOSI);
+        spi->begin();
+      }
+    #else
+      if (spi) spi->begin(P_LORA_SCLK, P_LORA_MISO, P_LORA_MOSI);
+    #endif
+  #endif
+      int status = begin(LORA_FREQ, LORA_BW, LORA_SF, cr, RADIOLIB_SX126X_SYNC_WORD_PRIVATE, LORA_TX_POWER, 8);
+      // if radio init fails with -707/-706, try again with tcxo voltage set to 0.0f
+      if (status != RADIOLIB_ERR_NONE) {
+        Serial.print("ERROR: radio init failed: ");
+        Serial.println(status);
+        return false;  // fail
+      }
+  #ifdef SX127X_CURRENT_LIMIT
+      setCurrentLimit(SX127X_CURRENT_LIMIT);
+  #endif
+
+  #if defined(SX176X_RXEN) || defined(SX176X_TXEN)
+    #ifndef SX176X_RXEN
+      #define SX176X_RXEN RADIOLIB_NC
+    #endif
+    #ifndef SX176X_TXEN
+      #define SX176X_TXEN RADIOLIB_NC
+    #endif
+      setRfSwitchPins(SX176X_RXEN, SX176X_TXEN);
+  #endif
+
+      setCRC(1);
+
+      return true;  // success
+    }
+
     bool isReceiving() {
       return (getModemStatus() &
-         (RH_RF95_MODEM_STATUS_SIGNAL_DETECTED 
-        | RH_RF95_MODEM_STATUS_SIGNAL_SYNCHRONIZED 
+         (RH_RF95_MODEM_STATUS_SIGNAL_DETECTED
+        | RH_RF95_MODEM_STATUS_SIGNAL_SYNCHRONIZED
         | RH_RF95_MODEM_STATUS_HEADER_INFO_VALID)) != 0;
     }
 
@@ -23,7 +76,7 @@ class CustomSX1276 : public SX1276 {
       // start CAD
       int16_t state = startChannelScan();
       RADIOLIB_ASSERT(state);
- 
+
       // wait for channel activity detected or timeout
       unsigned long timeout = millis() + 16;
       while(!this->mod->hal->digitalRead(this->mod->getIrq()) && millis() < timeout) {

+ 3 - 19
variants/heltec_v2/target.cpp

@@ -20,31 +20,15 @@ SensorManager sensors;
   DISPLAY_CLASS display;
 #endif
 
-#ifndef LORA_CR
-  #define LORA_CR      5
-#endif
-
 bool radio_init() {
   fallback_clock.begin();
   rtc_clock.begin(Wire);
 
 #if defined(P_LORA_SCLK)
-  spi.begin(P_LORA_SCLK, P_LORA_MISO, P_LORA_MOSI);
-#endif
-  int status = radio.begin(LORA_FREQ, LORA_BW, LORA_SF, LORA_CR, RADIOLIB_SX126X_SYNC_WORD_PRIVATE, LORA_TX_POWER, 8);
-  if (status != RADIOLIB_ERR_NONE) {
-    Serial.print("ERROR: radio init failed: ");
-    Serial.println(status);
-    return false;  // fail
-  }
-
-#ifdef SX127X_CURRENT_LIMIT
-  radio.setCurrentLimit(SX127X_CURRENT_LIMIT);
+  return radio.std_init(&spi);
+#else
+  return radio.std_init();
 #endif
-
-  radio.setCRC(1);
-
-  return true;  // success
 }
 
 uint32_t radio_get_rng_seed() {

+ 2 - 0
variants/lilygo_t3s3_sx1276/platformio.ini

@@ -21,6 +21,8 @@ build_flags =
   -D RADIO_CLASS=CustomSX1276
   -D WRAPPER_CLASS=CustomSX1276Wrapper
   -D SX127X_CURRENT_LIMIT=120
+  -D SX176X_RXEN=21
+  -D SX176X_TXEN=10
   -D LORA_TX_POWER=20
 build_src_filter = ${esp32_base.build_src_filter}
   +<../variants/lilygo_t3s3_sx1276>

+ 3 - 20
variants/lilygo_t3s3_sx1276/target.cpp

@@ -20,33 +20,16 @@ SensorManager sensors;
   DISPLAY_CLASS display;
 #endif
 
-#ifndef LORA_CR
-  #define LORA_CR      5
-#endif
-
 bool radio_init() {
   fallback_clock.begin();
   rtc_clock.begin(Wire);
 
 #if defined(P_LORA_SCLK)
   spi.begin(P_LORA_SCLK, P_LORA_MISO, P_LORA_MOSI);
+  return radio.std_init(&spi);
+#else
+  return radio.std_init();
 #endif
-  int status = radio.begin(LORA_FREQ, LORA_BW, LORA_SF, LORA_CR, RADIOLIB_SX126X_SYNC_WORD_PRIVATE, LORA_TX_POWER, 8);
-  if (status != RADIOLIB_ERR_NONE) {
-    Serial.print("ERROR: radio init failed: ");
-    Serial.println(status);
-    return false;  // fail
-  }
-
-#ifdef SX127X_CURRENT_LIMIT
-  radio.setCurrentLimit(SX127X_CURRENT_LIMIT);
-#endif
-
-  radio.setCRC(1);
-  
-  radio.setRfSwitchPins(21, 10);
-
-  return true;  // success
 }
 
 uint32_t radio_get_rng_seed() {

+ 3 - 19
variants/lilygo_tbeam_SX1276/target.cpp

@@ -27,31 +27,15 @@ AutoDiscoverRTCClock rtc_clock(fallback_clock);
   DISPLAY_CLASS display;
 #endif
 
-#ifndef LORA_CR
-  #define LORA_CR      5
-#endif
-
 bool radio_init() {
   fallback_clock.begin();
   rtc_clock.begin(Wire);
 
 #if defined(P_LORA_SCLK)
-  spi.begin(P_LORA_SCLK, P_LORA_MISO, P_LORA_MOSI);
-#endif
-  int status = radio.begin(LORA_FREQ, LORA_BW, LORA_SF, LORA_CR, RADIOLIB_SX126X_SYNC_WORD_PRIVATE, LORA_TX_POWER, 8);
-  if (status != RADIOLIB_ERR_NONE) {
-    Serial.print("ERROR: radio init failed: ");
-    Serial.println(status);
-    return false;  // fail
-  }
-
-#ifdef SX127X_CURRENT_LIMIT
-  radio.setCurrentLimit(SX127X_CURRENT_LIMIT);
+  return radio.std_init(&spi);
+#else
+  return radio.std_init();
 #endif
-
-  radio.setCRC(1);
-
-  return true;  // success
 }
 
 uint32_t radio_get_rng_seed() {

+ 5 - 19
variants/lilygo_tlora_v2_1/target.cpp

@@ -10,35 +10,21 @@ WRAPPER_CLASS radio_driver(radio, board);
 
 ESP32RTCClock fallback_clock;
 AutoDiscoverRTCClock rtc_clock(fallback_clock);
-SensorManager sensors;
+EnvironmentSensorManager sensors;
 
 #ifdef DISPLAY_CLASS
   DISPLAY_CLASS display;
 #endif
 
-#ifndef LORA_CR
-  #define LORA_CR      5
-#endif
-
 bool radio_init() {
   fallback_clock.begin();
   rtc_clock.begin(Wire);
 
-  spi.begin(P_LORA_SCLK, P_LORA_MISO, P_LORA_MOSI);
-  int status = radio.begin(LORA_FREQ, LORA_BW, LORA_SF, LORA_CR, RADIOLIB_SX126X_SYNC_WORD_PRIVATE, LORA_TX_POWER, 8);
-  if (status != RADIOLIB_ERR_NONE) {
-    Serial.print("ERROR: radio init failed: ");
-    Serial.println(status);
-    return false;  // fail
-  }
-
-#ifdef SX127X_CURRENT_LIMIT
-  radio.setCurrentLimit(SX127X_CURRENT_LIMIT);
+#if defined(P_LORA_SCLK)
+  return radio.std_init(&spi);
+#else
+  return radio.std_init();
 #endif
-
-  radio.setCRC(1);
-
-  return true;  // success
 }
 
 uint32_t radio_get_rng_seed() {

+ 2 - 1
variants/lilygo_tlora_v2_1/target.h

@@ -7,6 +7,7 @@
 #include <helpers/CustomSX1276Wrapper.h>
 #include <helpers/AutoDiscoverRTCClock.h>
 #include <helpers/SensorManager.h>
+#include <helpers/sensors/EnvironmentSensorManager.h>
 #ifdef DISPLAY_CLASS
   #include <helpers/ui/SSD1306Display.h>
 #endif
@@ -14,7 +15,7 @@
 extern LilyGoTLoraBoard board;
 extern WRAPPER_CLASS radio_driver;
 extern AutoDiscoverRTCClock rtc_clock;
-extern SensorManager sensors;
+extern EnvironmentSensorManager sensors;
 
 #ifdef DISPLAY_CLASS
   extern DISPLAY_CLASS display;