mirror of https://github.com/meshcore-dev/MeshCore
6 changed files with 86 additions and 15 deletions
@ -0,0 +1,39 @@ |
|||||
|
#pragma once |
||||
|
|
||||
|
#include <RadioLib.h> |
||||
|
#include "MeshCore.h" |
||||
|
|
||||
|
class CustomLR1121 : public LR1121 { |
||||
|
bool _rx_boosted = false; |
||||
|
|
||||
|
public: |
||||
|
CustomLR1121(Module *mod) : LR1121(mod) { } |
||||
|
|
||||
|
size_t getPacketLength(bool update) override { |
||||
|
size_t len = LR1121::getPacketLength(update); |
||||
|
if (len == 0 && getIrqStatus() & RADIOLIB_LR11X0_IRQ_HEADER_ERR) { |
||||
|
// we've just received a corrupted packet
|
||||
|
// this may have triggered a bug causing subsequent packets to be shifted
|
||||
|
// call standby() to return radio to known-good state
|
||||
|
// recvRaw will call startReceive() to restart rx
|
||||
|
MESH_DEBUG_PRINTLN("LR1121: got header err, calling standby()"); |
||||
|
standby(); |
||||
|
} |
||||
|
return len; |
||||
|
} |
||||
|
|
||||
|
float getFreqMHz() const { return freqMHz; } |
||||
|
|
||||
|
int16_t setRxBoostedGainMode(bool en) { |
||||
|
_rx_boosted = en; |
||||
|
return LR1121::setRxBoostedGainMode(en); |
||||
|
} |
||||
|
|
||||
|
bool getRxBoostedGainMode() const { return _rx_boosted; } |
||||
|
|
||||
|
bool isReceiving() { |
||||
|
uint16_t irq = getIrqStatus(); |
||||
|
bool detected = ((irq & RADIOLIB_LR11X0_IRQ_SYNC_WORD_HEADER_VALID) || (irq & RADIOLIB_LR11X0_IRQ_PREAMBLE_DETECTED)); |
||||
|
return detected; |
||||
|
} |
||||
|
}; |
||||
@ -0,0 +1,34 @@ |
|||||
|
#pragma once |
||||
|
|
||||
|
#include "CustomLR1121.h" |
||||
|
#include "RadioLibWrappers.h" |
||||
|
#include "LR11x0Reset.h" |
||||
|
|
||||
|
class CustomLR1121Wrapper : public RadioLibWrapper { |
||||
|
public: |
||||
|
CustomLR1121Wrapper(CustomLR1121& radio, mesh::MainBoard& board) : RadioLibWrapper(radio, board) { } |
||||
|
void doResetAGC() override { lr11x0ResetAGC((LR11x0 *)_radio, ((CustomLR1121 *)_radio)->getFreqMHz()); } |
||||
|
bool isReceivingPacket() override { |
||||
|
return ((CustomLR1121 *)_radio)->isReceiving(); |
||||
|
} |
||||
|
float getCurrentRSSI() override { |
||||
|
float rssi = -110; |
||||
|
((CustomLR1121 *)_radio)->getRssiInst(&rssi); |
||||
|
return rssi; |
||||
|
} |
||||
|
|
||||
|
void onSendFinished() override { |
||||
|
RadioLibWrapper::onSendFinished(); |
||||
|
_radio->setPreambleLength(16); // overcomes weird issues with small and big pkts
|
||||
|
} |
||||
|
|
||||
|
float getLastRSSI() const override { return ((CustomLR1121 *)_radio)->getRSSI(); } |
||||
|
float getLastSNR() const override { return ((CustomLR1121 *)_radio)->getSNR(); } |
||||
|
|
||||
|
void setRxBoostedGainMode(bool en) override { |
||||
|
((CustomLR1121 *)_radio)->setRxBoostedGainMode(en); |
||||
|
} |
||||
|
bool getRxBoostedGainMode() const override { |
||||
|
return ((CustomLR1121 *)_radio)->getRxBoostedGainMode(); |
||||
|
} |
||||
|
}; |
||||
Loading…
Reference in new issue