|
|
@ -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
|
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|