Merge branch 'master' into sx126x-rx-boosted-gain

This commit is contained in:
Ben Meadors
2023-01-23 06:06:22 -06:00
committed by GitHub
323 changed files with 8117 additions and 8145 deletions

View File

@@ -1,6 +1,6 @@
#include "configuration.h"
#include "SX126xInterface.h"
#include "mesh/NodeDB.h"
#include "configuration.h"
#include "error.h"
// Particular boards might define a different max power based on what their hardware can do
@@ -8,9 +8,9 @@
#define SX126X_MAX_POWER 22
#endif
template<typename T>
template <typename T>
SX126xInterface<T>::SX126xInterface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq, RADIOLIB_PIN_TYPE rst, RADIOLIB_PIN_TYPE busy,
SPIClass &spi)
SPIClass &spi)
: RadioLibInterface(cs, irq, rst, busy, spi, &lora), lora(&module)
{
LOG_WARN("SX126xInterface(cs=%d, irq=%d, rst=%d, busy=%d)\n", cs, irq, rst, busy);
@@ -19,8 +19,7 @@ SX126xInterface<T>::SX126xInterface(RADIOLIB_PIN_TYPE cs, RADIOLIB_PIN_TYPE irq,
/// Initialise the Driver transport hardware and software.
/// Make sure the Driver is properly configured before calling init().
/// \return true if initialisation succeeded.
template<typename T>
bool SX126xInterface<T>::init()
template <typename T> bool SX126xInterface<T>::init()
{
#ifdef SX126X_POWER_EN
digitalWrite(SX126X_POWER_EN, HIGH);
@@ -28,7 +27,7 @@ bool SX126xInterface<T>::init()
#endif
#if defined(SX126X_RXEN) && (SX126X_RXEN != RADIOLIB_NC) // set not rx or tx mode
digitalWrite(SX126X_RXEN, LOW); // Set low before becoming an output
digitalWrite(SX126X_RXEN, LOW); // Set low before becoming an output
pinMode(SX126X_RXEN, OUTPUT);
#endif
#if defined(SX126X_TXEN) && (SX126X_TXEN != RADIOLIB_NC)
@@ -70,6 +69,12 @@ bool SX126xInterface<T>::init()
#if defined(SX126X_TXEN) && (SX126X_TXEN != RADIOLIB_NC)
// lora.begin sets Dio2 as RF switch control, which is not true if we are manually controlling RX and TX
if (res == RADIOLIB_ERR_NONE)
res = lora.setDio2AsRfSwitch(false);
#endif
#ifdef SX126X_E22
// E22 Emulation explicitly requires DIO2 as RF switch, so set it to TRUE again for good measure. In case somebody defines
// SX126X_TX for an E22 Module
if (res == RADIOLIB_ERR_NONE)
res = lora.setDio2AsRfSwitch(true);
#endif
@@ -115,8 +120,7 @@ if (config.lora.sx126x_rx_boosted_gain) {
return res == RADIOLIB_ERR_NONE;
}
template<typename T>
bool SX126xInterface<T>::reconfigure()
template <typename T> bool SX126xInterface<T>::reconfigure()
{
RadioLibInterface::reconfigure();
@@ -126,15 +130,15 @@ bool SX126xInterface<T>::reconfigure()
// configure publicly accessible settings
int err = lora.setSpreadingFactor(sf);
if (err != RADIOLIB_ERR_NONE)
RECORD_CRITICALERROR(CriticalErrorCode_INVALID_RADIO_SETTING);
RECORD_CRITICALERROR(meshtastic_CriticalErrorCode_INVALID_RADIO_SETTING);
err = lora.setBandwidth(bw);
if (err != RADIOLIB_ERR_NONE)
RECORD_CRITICALERROR(CriticalErrorCode_INVALID_RADIO_SETTING);
RECORD_CRITICALERROR(meshtastic_CriticalErrorCode_INVALID_RADIO_SETTING);
err = lora.setCodingRate(cr);
if (err != RADIOLIB_ERR_NONE)
RECORD_CRITICALERROR(CriticalErrorCode_INVALID_RADIO_SETTING);
RECORD_CRITICALERROR(meshtastic_CriticalErrorCode_INVALID_RADIO_SETTING);
// Hmm - seems to lower SNR when the signal levels are high. Leaving off for now...
// TODO: Confirm gain registers are okay now
@@ -152,7 +156,7 @@ bool SX126xInterface<T>::reconfigure()
err = lora.setFrequency(getFreq());
if (err != RADIOLIB_ERR_NONE)
RECORD_CRITICALERROR(CriticalErrorCode_INVALID_RADIO_SETTING);
RECORD_CRITICALERROR(meshtastic_CriticalErrorCode_INVALID_RADIO_SETTING);
if (power > SX126X_MAX_POWER) // This chip has lower power limits than some
power = SX126X_MAX_POWER;
@@ -165,14 +169,12 @@ bool SX126xInterface<T>::reconfigure()
return RADIOLIB_ERR_NONE;
}
template<typename T>
void INTERRUPT_ATTR SX126xInterface<T>::disableInterrupt()
template <typename T> void INTERRUPT_ATTR SX126xInterface<T>::disableInterrupt()
{
lora.clearDio1Action();
}
template<typename T>
void SX126xInterface<T>::setStandby()
template <typename T> void SX126xInterface<T>::setStandby()
{
checkNotification(); // handle any pending interrupts before we force standby
@@ -198,8 +200,7 @@ void SX126xInterface<T>::setStandby()
/**
* Add SNR data to received messages
*/
template<typename T>
void SX126xInterface<T>::addReceiveMetadata(MeshPacket *mp)
template <typename T> void SX126xInterface<T>::addReceiveMetadata(meshtastic_MeshPacket *mp)
{
// LOG_DEBUG("PacketStatus %x\n", lora.getPacketStatus());
mp->rx_snr = lora.getSNR();
@@ -208,8 +209,7 @@ void SX126xInterface<T>::addReceiveMetadata(MeshPacket *mp)
/** We override to turn on transmitter power as needed.
*/
template<typename T>
void SX126xInterface<T>::configHardwareForSend()
template <typename T> void SX126xInterface<T>::configHardwareForSend()
{
#if defined(SX126X_TXEN) && (SX126X_TXEN != RADIOLIB_NC) // we have RXEN/TXEN control - turn on TX power / off RX power
digitalWrite(SX126X_TXEN, HIGH);
@@ -224,8 +224,7 @@ void SX126xInterface<T>::configHardwareForSend()
// For power draw measurements, helpful to force radio to stay sleeping
// #define SLEEP_ONLY
template<typename T>
void SX126xInterface<T>::startReceive()
template <typename T> void SX126xInterface<T>::startReceive()
{
#ifdef SLEEP_ONLY
sleep();
@@ -253,8 +252,7 @@ void SX126xInterface<T>::startReceive()
}
/** Could we send right now (i.e. either not actively receving or transmitting)? */
template<typename T>
bool SX126xInterface<T>::isChannelActive()
template <typename T> bool SX126xInterface<T>::isChannelActive()
{
// check if we can detect a LoRa preamble on the current channel
int16_t result;
@@ -270,8 +268,7 @@ bool SX126xInterface<T>::isChannelActive()
}
/** Could we send right now (i.e. either not actively receving or transmitting)? */
template<typename T>
bool SX126xInterface<T>::isActivelyReceiving()
template <typename T> bool SX126xInterface<T>::isActivelyReceiving()
{
// The IRQ status will be cleared when we start our read operation. Check if we've started a header, but haven't yet
// received and handled the interrupt for reading the packet/handling errors.
@@ -288,8 +285,7 @@ bool SX126xInterface<T>::isActivelyReceiving()
return hasPreamble;
}
template<typename T>
bool SX126xInterface<T>::sleep()
template <typename T> bool SX126xInterface<T>::sleep()
{
// Not keeping config is busted - next time nrf52 board boots lora sending fails tcxo related? - see datasheet
// \todo Display actual typename of the adapter, not just `SX126x`