@@ -12,18 +12,71 @@ class CustomSX1276 : public SX1276 {
1212 public:
1313 CustomSX1276 (Module *mod) : SX1276(mod) { }
1414
15+ #ifdef RP2040_PLATFORM
16+ bool std_init (SPIClassRP2040* spi = NULL )
17+ #else
18+ bool std_init (SPIClass* spi = NULL )
19+ #endif
20+ {
21+ #ifdef LORA_CR
22+ uint8_t cr = LORA_CR;
23+ #else
24+ uint8_t cr = 5 ;
25+ #endif
26+
27+ #if defined(P_LORA_SCLK)
28+ #ifdef NRF52_PLATFORM
29+ if (spi) { spi->setPins (P_LORA_MISO, P_LORA_SCLK, P_LORA_MOSI); spi->begin (); }
30+ #elif defined(RP2040_PLATFORM)
31+ if (spi) {
32+ spi->setMISO (P_LORA_MISO);
33+ // spi->setCS(P_LORA_NSS); // Setting CS results in freeze
34+ spi->setSCK (P_LORA_SCLK);
35+ spi->setMOSI (P_LORA_MOSI);
36+ spi->begin ();
37+ }
38+ #else
39+ if (spi) spi->begin (P_LORA_SCLK, P_LORA_MISO, P_LORA_MOSI);
40+ #endif
41+ #endif
42+ int status = begin (LORA_FREQ, LORA_BW, LORA_SF, cr, RADIOLIB_SX126X_SYNC_WORD_PRIVATE, LORA_TX_POWER, 8 );
43+ // if radio init fails with -707/-706, try again with tcxo voltage set to 0.0f
44+ if (status != RADIOLIB_ERR_NONE) {
45+ Serial.print (" ERROR: radio init failed: " );
46+ Serial.println (status);
47+ return false ; // fail
48+ }
49+ #ifdef SX127X_CURRENT_LIMIT
50+ setCurrentLimit (SX127X_CURRENT_LIMIT);
51+ #endif
52+
53+ #if defined(SX176X_RXEN) || defined(SX176X_TXEN)
54+ #ifndef SX176X_RXEN
55+ #define SX176X_RXEN RADIOLIB_NC
56+ #endif
57+ #ifndef SX176X_TXEN
58+ #define SX176X_TXEN RADIOLIB_NC
59+ #endif
60+ setRfSwitchPins (SX176X_RXEN, SX176X_TXEN);
61+ #endif
62+
63+ setCRC (1 );
64+
65+ return true ; // success
66+ }
67+
1568 bool isReceiving () {
1669 return (getModemStatus () &
17- (RH_RF95_MODEM_STATUS_SIGNAL_DETECTED
18- | RH_RF95_MODEM_STATUS_SIGNAL_SYNCHRONIZED
70+ (RH_RF95_MODEM_STATUS_SIGNAL_DETECTED
71+ | RH_RF95_MODEM_STATUS_SIGNAL_SYNCHRONIZED
1972 | RH_RF95_MODEM_STATUS_HEADER_INFO_VALID)) != 0 ;
2073 }
2174
2275 int tryScanChannel () {
2376 // start CAD
2477 int16_t state = startChannelScan ();
2578 RADIOLIB_ASSERT (state);
26-
79+
2780 // wait for channel activity detected or timeout
2881 unsigned long timeout = millis () + 16 ;
2982 while (!this ->mod ->hal ->digitalRead (this ->mod ->getIrq ()) && millis () < timeout) {
0 commit comments