|
|
@@ -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) {
|