mirror of
https://github.com/meshcore-dev/MeshCore.git
synced 2026-04-20 22:13:47 +00:00
make it more dry
This commit is contained in:
parent
9106ab46e1
commit
b2032e11b6
5 changed files with 41 additions and 104 deletions
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "CustomLLCC68.h"
|
#include "CustomLLCC68.h"
|
||||||
#include "RadioLibWrappers.h"
|
#include "RadioLibWrappers.h"
|
||||||
|
#include "SX126xReset.h"
|
||||||
|
|
||||||
class CustomLLCC68Wrapper : public RadioLibWrapper {
|
class CustomLLCC68Wrapper : public RadioLibWrapper {
|
||||||
public:
|
public:
|
||||||
|
|
@ -20,29 +21,5 @@ public:
|
||||||
return packetScoreInt(snr, sf, packet_len);
|
return packetScoreInt(snr, sf, packet_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void doResetAGC() override {
|
void doResetAGC() override { sx126xResetAGC((SX126x *)_radio); }
|
||||||
auto* radio = (CustomLLCC68 *)_radio;
|
|
||||||
radio->sleep(true);
|
|
||||||
radio->standby(RADIOLIB_SX126X_STANDBY_RC, true);
|
|
||||||
uint8_t calData = RADIOLIB_SX126X_CALIBRATE_ALL;
|
|
||||||
radio->mod->SPIwriteStream(RADIOLIB_SX126X_CMD_CALIBRATE, &calData, 1, true, false);
|
|
||||||
radio->mod->hal->delay(5);
|
|
||||||
uint32_t start = millis();
|
|
||||||
while (radio->mod->hal->digitalRead(radio->mod->getGpio())) {
|
|
||||||
if (millis() - start > 50) break;
|
|
||||||
radio->mod->hal->yield();
|
|
||||||
}
|
|
||||||
#ifdef SX126X_DIO2_AS_RF_SWITCH
|
|
||||||
radio->setDio2AsRfSwitch(SX126X_DIO2_AS_RF_SWITCH);
|
|
||||||
#endif
|
|
||||||
#ifdef SX126X_RX_BOOSTED_GAIN
|
|
||||||
radio->setRxBoostedGainMode(SX126X_RX_BOOSTED_GAIN);
|
|
||||||
#endif
|
|
||||||
#ifdef SX126X_REGISTER_PATCH
|
|
||||||
uint8_t r_data = 0;
|
|
||||||
radio->readRegister(0x8B5, &r_data, 1);
|
|
||||||
r_data |= 0x01;
|
|
||||||
radio->writeRegister(0x8B5, &r_data, 1);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "CustomSTM32WLx.h"
|
#include "CustomSTM32WLx.h"
|
||||||
#include "RadioLibWrappers.h"
|
#include "RadioLibWrappers.h"
|
||||||
|
#include "SX126xReset.h"
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
class CustomSTM32WLxWrapper : public RadioLibWrapper {
|
class CustomSTM32WLxWrapper : public RadioLibWrapper {
|
||||||
|
|
@ -21,29 +22,5 @@ public:
|
||||||
return packetScoreInt(snr, sf, packet_len);
|
return packetScoreInt(snr, sf, packet_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void doResetAGC() override {
|
void doResetAGC() override { sx126xResetAGC((SX126x *)_radio); }
|
||||||
auto* radio = (CustomSTM32WLx *)_radio;
|
|
||||||
radio->sleep(true);
|
|
||||||
radio->standby(RADIOLIB_SX126X_STANDBY_RC, true);
|
|
||||||
uint8_t calData = RADIOLIB_SX126X_CALIBRATE_ALL;
|
|
||||||
radio->mod->SPIwriteStream(RADIOLIB_SX126X_CMD_CALIBRATE, &calData, 1, true, false);
|
|
||||||
radio->mod->hal->delay(5);
|
|
||||||
uint32_t start = millis();
|
|
||||||
while (radio->mod->hal->digitalRead(radio->mod->getGpio())) {
|
|
||||||
if (millis() - start > 50) break;
|
|
||||||
radio->mod->hal->yield();
|
|
||||||
}
|
|
||||||
#ifdef SX126X_DIO2_AS_RF_SWITCH
|
|
||||||
radio->setDio2AsRfSwitch(SX126X_DIO2_AS_RF_SWITCH);
|
|
||||||
#endif
|
|
||||||
#ifdef SX126X_RX_BOOSTED_GAIN
|
|
||||||
radio->setRxBoostedGainMode(SX126X_RX_BOOSTED_GAIN);
|
|
||||||
#endif
|
|
||||||
#ifdef SX126X_REGISTER_PATCH
|
|
||||||
uint8_t r_data = 0;
|
|
||||||
radio->readRegister(0x8B5, &r_data, 1);
|
|
||||||
r_data |= 0x01;
|
|
||||||
radio->writeRegister(0x8B5, &r_data, 1);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "CustomSX1262.h"
|
#include "CustomSX1262.h"
|
||||||
#include "RadioLibWrappers.h"
|
#include "RadioLibWrappers.h"
|
||||||
|
#include "SX126xReset.h"
|
||||||
|
|
||||||
class CustomSX1262Wrapper : public RadioLibWrapper {
|
class CustomSX1262Wrapper : public RadioLibWrapper {
|
||||||
public:
|
public:
|
||||||
|
|
@ -23,33 +24,5 @@ public:
|
||||||
((CustomSX1262 *)_radio)->sleep(false);
|
((CustomSX1262 *)_radio)->sleep(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void doResetAGC() override {
|
void doResetAGC() override { sx126xResetAGC((SX126x *)_radio); }
|
||||||
auto* radio = (CustomSX1262 *)_radio;
|
|
||||||
// Warm sleep powers down analog frontend (resets AGC gain state)
|
|
||||||
radio->sleep(true);
|
|
||||||
// Wake to STDBY_RC for calibration
|
|
||||||
radio->standby(RADIOLIB_SX126X_STANDBY_RC, true);
|
|
||||||
// Recalibrate all blocks (ADC, PLL, image, oscillators)
|
|
||||||
uint8_t calData = RADIOLIB_SX126X_CALIBRATE_ALL;
|
|
||||||
radio->mod->SPIwriteStream(RADIOLIB_SX126X_CMD_CALIBRATE, &calData, 1, true, false);
|
|
||||||
radio->mod->hal->delay(5);
|
|
||||||
uint32_t start = millis();
|
|
||||||
while (radio->mod->hal->digitalRead(radio->mod->getGpio())) {
|
|
||||||
if (millis() - start > 50) break;
|
|
||||||
radio->mod->hal->yield();
|
|
||||||
}
|
|
||||||
// Re-apply RX settings that calibration may reset
|
|
||||||
#ifdef SX126X_DIO2_AS_RF_SWITCH
|
|
||||||
radio->setDio2AsRfSwitch(SX126X_DIO2_AS_RF_SWITCH);
|
|
||||||
#endif
|
|
||||||
#ifdef SX126X_RX_BOOSTED_GAIN
|
|
||||||
radio->setRxBoostedGainMode(SX126X_RX_BOOSTED_GAIN);
|
|
||||||
#endif
|
|
||||||
#ifdef SX126X_REGISTER_PATCH
|
|
||||||
uint8_t r_data = 0;
|
|
||||||
radio->readRegister(0x8B5, &r_data, 1);
|
|
||||||
r_data |= 0x01;
|
|
||||||
radio->writeRegister(0x8B5, &r_data, 1);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
#include "CustomSX1268.h"
|
#include "CustomSX1268.h"
|
||||||
#include "RadioLibWrappers.h"
|
#include "RadioLibWrappers.h"
|
||||||
|
#include "SX126xReset.h"
|
||||||
|
|
||||||
class CustomSX1268Wrapper : public RadioLibWrapper {
|
class CustomSX1268Wrapper : public RadioLibWrapper {
|
||||||
public:
|
public:
|
||||||
|
|
@ -20,29 +21,5 @@ public:
|
||||||
return packetScoreInt(snr, sf, packet_len);
|
return packetScoreInt(snr, sf, packet_len);
|
||||||
}
|
}
|
||||||
|
|
||||||
void doResetAGC() override {
|
void doResetAGC() override { sx126xResetAGC((SX126x *)_radio); }
|
||||||
auto* radio = (CustomSX1268 *)_radio;
|
|
||||||
radio->sleep(true);
|
|
||||||
radio->standby(RADIOLIB_SX126X_STANDBY_RC, true);
|
|
||||||
uint8_t calData = RADIOLIB_SX126X_CALIBRATE_ALL;
|
|
||||||
radio->mod->SPIwriteStream(RADIOLIB_SX126X_CMD_CALIBRATE, &calData, 1, true, false);
|
|
||||||
radio->mod->hal->delay(5);
|
|
||||||
uint32_t start = millis();
|
|
||||||
while (radio->mod->hal->digitalRead(radio->mod->getGpio())) {
|
|
||||||
if (millis() - start > 50) break;
|
|
||||||
radio->mod->hal->yield();
|
|
||||||
}
|
|
||||||
#ifdef SX126X_DIO2_AS_RF_SWITCH
|
|
||||||
radio->setDio2AsRfSwitch(SX126X_DIO2_AS_RF_SWITCH);
|
|
||||||
#endif
|
|
||||||
#ifdef SX126X_RX_BOOSTED_GAIN
|
|
||||||
radio->setRxBoostedGainMode(SX126X_RX_BOOSTED_GAIN);
|
|
||||||
#endif
|
|
||||||
#ifdef SX126X_REGISTER_PATCH
|
|
||||||
uint8_t r_data = 0;
|
|
||||||
radio->readRegister(0x8B5, &r_data, 1);
|
|
||||||
r_data |= 0x01;
|
|
||||||
radio->writeRegister(0x8B5, &r_data, 1);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
|
||||||
33
src/helpers/radiolib/SX126xReset.h
Normal file
33
src/helpers/radiolib/SX126xReset.h
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <RadioLib.h>
|
||||||
|
|
||||||
|
// Full receiver reset for all SX126x-family chips (SX1262, SX1268, LLCC68, STM32WLx).
|
||||||
|
// Warm sleep powers down analog, Calibrate(0x7F) refreshes ADC/PLL/image calibration,
|
||||||
|
// then re-applies RX settings that calibration may reset.
|
||||||
|
inline void sx126xResetAGC(SX126x* radio) {
|
||||||
|
radio->sleep(true);
|
||||||
|
radio->standby(RADIOLIB_SX126X_STANDBY_RC, true);
|
||||||
|
|
||||||
|
uint8_t calData = RADIOLIB_SX126X_CALIBRATE_ALL;
|
||||||
|
radio->mod->SPIwriteStream(RADIOLIB_SX126X_CMD_CALIBRATE, &calData, 1, true, false);
|
||||||
|
radio->mod->hal->delay(5);
|
||||||
|
uint32_t start = millis();
|
||||||
|
while (radio->mod->hal->digitalRead(radio->mod->getGpio())) {
|
||||||
|
if (millis() - start > 50) break;
|
||||||
|
radio->mod->hal->yield();
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef SX126X_DIO2_AS_RF_SWITCH
|
||||||
|
radio->setDio2AsRfSwitch(SX126X_DIO2_AS_RF_SWITCH);
|
||||||
|
#endif
|
||||||
|
#ifdef SX126X_RX_BOOSTED_GAIN
|
||||||
|
radio->setRxBoostedGainMode(SX126X_RX_BOOSTED_GAIN);
|
||||||
|
#endif
|
||||||
|
#ifdef SX126X_REGISTER_PATCH
|
||||||
|
uint8_t r_data = 0;
|
||||||
|
radio->readRegister(0x8B5, &r_data, 1);
|
||||||
|
r_data |= 0x01;
|
||||||
|
radio->writeRegister(0x8B5, &r_data, 1);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue