@ -1,6 +1,7 @@
# pragma once
# pragma once
# include <RadioLib.h>
# include <RadioLib.h>
# include "MeshCore.h"
# define SX126X_IRQ_HEADER_VALID 0b0000010000 // 4 4 valid LoRa header received
# define SX126X_IRQ_HEADER_VALID 0b0000010000 // 4 4 valid LoRa header received
# define SX126X_IRQ_PREAMBLE_DETECTED 0x04
# define SX126X_IRQ_PREAMBLE_DETECTED 0x04
@ -27,6 +28,14 @@ class CustomSX1262 : public SX1262 {
uint8_t cr = 5 ;
uint8_t cr = 5 ;
# endif
# endif
# ifdef SX126X_USE_REGULATOR_LDO
constexpr bool useRegulatorLDO = SX126X_USE_REGULATOR_LDO ;
# else
constexpr bool useRegulatorLDO = false ;
# endif
MESH_DEBUG_PRINTLN ( " SX1262 regulator requested: %s " , useRegulatorLDO ? " LDO " : " DC-DC " ) ;
# if defined(P_LORA_SCLK)
# if defined(P_LORA_SCLK)
# ifdef NRF52_PLATFORM
# ifdef NRF52_PLATFORM
if ( spi ) { spi - > setPins ( P_LORA_MISO , P_LORA_SCLK , P_LORA_MOSI ) ; spi - > begin ( ) ; }
if ( spi ) { spi - > setPins ( P_LORA_MISO , P_LORA_SCLK , P_LORA_MOSI ) ; spi - > begin ( ) ; }
@ -42,11 +51,12 @@ class CustomSX1262 : public SX1262 {
if ( spi ) spi - > begin ( P_LORA_SCLK , P_LORA_MISO , P_LORA_MOSI ) ;
if ( spi ) spi - > begin ( P_LORA_SCLK , P_LORA_MISO , P_LORA_MOSI ) ;
# endif
# endif
# endif
# endif
int status = begin ( LORA_FREQ , LORA_BW , LORA_SF , cr , RADIOLIB_SX126X_SYNC_WORD_PRIVATE , LORA_TX_POWER , 16 , tcxo ) ;
int status = begin ( LORA_FREQ , LORA_BW , LORA_SF , cr , RADIOLIB_SX126X_SYNC_WORD_PRIVATE , LORA_TX_POWER , 16 , tcxo , useRegulatorLDO ) ;
// if radio init fails with -707/-706, try again with tcxo voltage set to 0.0f
// if radio init fails with -707/-706, try again with tcxo voltage set to 0.0f
if ( status = = RADIOLIB_ERR_SPI_CMD_FAILED | | status = = RADIOLIB_ERR_SPI_CMD_INVALID ) {
if ( status = = RADIOLIB_ERR_SPI_CMD_FAILED | | status = = RADIOLIB_ERR_SPI_CMD_INVALID ) {
MESH_DEBUG_PRINTLN ( " SX1262 init failed with error %d, retrying with TCXO at 0.0V " , status ) ;
tcxo = 0.0f ;
tcxo = 0.0f ;
status = begin ( LORA_FREQ , LORA_BW , LORA_SF , cr , RADIOLIB_SX126X_SYNC_WORD_PRIVATE , LORA_TX_POWER , 16 , tcxo ) ;
status = begin ( LORA_FREQ , LORA_BW , LORA_SF , cr , RADIOLIB_SX126X_SYNC_WORD_PRIVATE , LORA_TX_POWER , 16 , tcxo , useRegulatorLDO ) ;
}
}
if ( status ! = RADIOLIB_ERR_NONE ) {
if ( status ! = RADIOLIB_ERR_NONE ) {
Serial . print ( " ERROR: radio init failed: " ) ;
Serial . print ( " ERROR: radio init failed: " ) ;
@ -83,6 +93,8 @@ class CustomSX1262 : public SX1262 {
writeRegister ( 0x8B5 , & r_data , 1 ) ;
writeRegister ( 0x8B5 , & r_data , 1 ) ;
# endif
# endif
MESH_DEBUG_PRINTLN ( " SX1262 status=0x%02X device_errors=0x%04X " , getStatus ( ) , getDeviceErrors ( ) ) ;
return true ; // success
return true ; // success
}
}