mirror of
https://github.com/meshcore-dev/MeshCore.git
synced 2026-04-20 22:13:47 +00:00
31 lines
1 KiB
C++
31 lines
1 KiB
C++
#pragma once
|
|
|
|
#include "CustomSX1268.h"
|
|
#include "RadioLibWrappers.h"
|
|
|
|
class CustomSX1268Wrapper : public RadioLibWrapper {
|
|
public:
|
|
CustomSX1268Wrapper(CustomSX1268& radio, mesh::MainBoard& board) : RadioLibWrapper(radio, board) { }
|
|
bool isReceiving() override {
|
|
if (((CustomSX1268 *)_radio)->isReceiving()) return true;
|
|
|
|
idle(); // put sx126x into standby
|
|
// do some basic CAD (blocks for ~12780 micros (on SF 10)!)
|
|
bool activity = (((CustomSX1268 *)_radio)->scanChannel() == RADIOLIB_LORA_DETECTED);
|
|
idle();
|
|
|
|
return activity;
|
|
}
|
|
float getLastRSSI() const override { return ((CustomSX1268 *)_radio)->getRSSI(); }
|
|
float getLastSNR() const override { return ((CustomSX1268 *)_radio)->getSNR(); }
|
|
|
|
float packetScore(float snr, int packet_len) override {
|
|
int sf = ((CustomSX1268 *)_radio)->spreadingFactor;
|
|
const float A = 0.7;
|
|
const float B = 0.4;
|
|
|
|
float ber = exp(-pow(10, (snr / 10)) / (A * pow(10, (snr / 10)) + B * (1 << sf)));
|
|
|
|
return pow(1 - ber, packet_len * 8);
|
|
}
|
|
};
|