Skip to content

Commit 5b73fb9

Browse files
committed
Calibrate configured frequency for AGC reset
1 parent ce05fed commit 5b73fb9

File tree

4 files changed

+12
-2
lines changed

4 files changed

+12
-2
lines changed

src/helpers/radiolib/CustomLR1110.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ class CustomLR1110 : public LR1110 {
2020
return len;
2121
}
2222

23+
float getFreqMHz() const { return freqMHz; }
24+
2325
bool isReceiving() {
2426
uint16_t irq = getIrqStatus();
2527
bool detected = ((irq & RADIOLIB_LR11X0_IRQ_SYNC_WORD_HEADER_VALID) || (irq & RADIOLIB_LR11X0_IRQ_PREAMBLE_DETECTED));

src/helpers/radiolib/CustomLR1110Wrapper.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
class CustomLR1110Wrapper : public RadioLibWrapper {
88
public:
99
CustomLR1110Wrapper(CustomLR1110& radio, mesh::MainBoard& board) : RadioLibWrapper(radio, board) { }
10-
void doResetAGC() override { lr11x0ResetAGC((LR11x0 *)_radio); }
10+
void doResetAGC() override { lr11x0ResetAGC((LR11x0 *)_radio, ((CustomLR1110 *)_radio)->getFreqMHz()); }
1111
bool isReceivingPacket() override {
1212
return ((CustomLR1110 *)_radio)->isReceiving();
1313
}

src/helpers/radiolib/LR11x0Reset.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,16 @@
55
// Full receiver reset for LR11x0-family chips (LR1110, LR1120, LR1121).
66
// Warm sleep powers down analog, calibrate(0x3F) refreshes all calibration blocks,
77
// then re-applies RX settings that calibration may reset.
8-
inline void lr11x0ResetAGC(LR11x0* radio) {
8+
inline void lr11x0ResetAGC(LR11x0* radio, float freqMHz) {
99
radio->sleep(true, 0);
1010
radio->standby(RADIOLIB_LR11X0_STANDBY_RC, true);
1111

1212
radio->calibrate(RADIOLIB_LR11X0_CALIBRATE_ALL);
1313

14+
// calibrate(0x3F) defaults image calibration to an unknown band.
15+
// Re-calibrate for the actual operating frequency (band=4MHz matches RadioLib default).
16+
radio->calibrateImageRejection(freqMHz - 4.0f, freqMHz + 4.0f);
17+
1418
#ifdef RX_BOOSTED_GAIN
1519
radio->setRxBoostedGainMode(RX_BOOSTED_GAIN);
1620
#endif

src/helpers/radiolib/SX126xReset.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ inline void sx126xResetAGC(SX126x* radio) {
1818
radio->mod->hal->yield();
1919
}
2020

21+
// Calibrate(0x7F) defaults image calibration to 902-928MHz band.
22+
// Re-calibrate for the actual operating frequency.
23+
radio->calibrateImage(radio->freqMHz);
24+
2125
#ifdef SX126X_DIO2_AS_RF_SWITCH
2226
radio->setDio2AsRfSwitch(SX126X_DIO2_AS_RF_SWITCH);
2327
#endif

0 commit comments

Comments
 (0)