Radio: Add "RX Boosted Gain"
This commit is contained in:
parent
9a60ab8f74
commit
ecd2e8f6e1
@ -36,12 +36,23 @@ void IRAM_ATTR dio1handler(void* context) {
|
||||
((Sx1262*)context)->dio1Event();
|
||||
}
|
||||
|
||||
Sx1262::ParameterStatus Sx1262::setLoraParameter(const Parameter parameter, const float value) {
|
||||
Sx1262::ParameterStatus Sx1262::setBaseParameter(const Parameter parameter, const float value) {
|
||||
using enum Parameter;
|
||||
|
||||
switch (parameter) {
|
||||
case Power:
|
||||
return checkLimitsAndApply(power, value, -9.0, 22.0);
|
||||
case BoostedGain:
|
||||
return checkLimitsAndApply(boostedGain, value, 0.0, 1.0, 1);
|
||||
default:
|
||||
return Sx1262::ParameterStatus::Unavailable;
|
||||
}
|
||||
}
|
||||
|
||||
Sx1262::ParameterStatus Sx1262::setLoraParameter(const Parameter parameter, const float value) {
|
||||
using enum Parameter;
|
||||
|
||||
switch (parameter) {
|
||||
case Frequency:
|
||||
return checkLimitsAndApply(frequency, value, 150.0, 960.0);
|
||||
case Bandwidth:
|
||||
@ -68,8 +79,6 @@ Sx1262::ParameterStatus Sx1262::setFskParameter(const Parameter parameter, const
|
||||
using enum Parameter;
|
||||
|
||||
switch (parameter) {
|
||||
case Power:
|
||||
return checkLimitsAndApply(power, value, -9.0, 22.0);
|
||||
case Frequency:
|
||||
return checkLimitsAndApply(frequency, value, 150.0, 960.0);
|
||||
case Bandwidth:
|
||||
@ -121,6 +130,11 @@ Sx1262::ParameterStatus Sx1262::setLrFhssParameter(const Parameter parameter, co
|
||||
Sx1262::ParameterStatus Sx1262::setParameter(const Parameter parameter, const float value) {
|
||||
const auto currentModulation = getModulation();
|
||||
|
||||
auto base_return = setBaseParameter(parameter, value);
|
||||
if (base_return != Sx1262::ParameterStatus::Unavailable) {
|
||||
return base_return;
|
||||
}
|
||||
|
||||
switch (currentModulation) {
|
||||
case Modulation::LoRa:
|
||||
return setLoraParameter(parameter, value);
|
||||
@ -136,13 +150,27 @@ Sx1262::ParameterStatus Sx1262::setParameter(const Parameter parameter, const fl
|
||||
return Sx1262::ParameterStatus::Unavailable;
|
||||
}
|
||||
|
||||
Sx1262::ParameterStatus Sx1262::getLoraParameter(const Parameter parameter, float &value) const {
|
||||
|
||||
Sx1262::ParameterStatus Sx1262::getBaseParameter(const Parameter parameter, float &value) const {
|
||||
using enum Parameter;
|
||||
|
||||
switch (parameter) {
|
||||
case Power:
|
||||
value = power;
|
||||
return Sx1262::ParameterStatus::Success;
|
||||
case BoostedGain:
|
||||
value = boostedGain;
|
||||
return Sx1262::ParameterStatus::Success;
|
||||
default:
|
||||
return Sx1262::ParameterStatus::Unavailable;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Sx1262::ParameterStatus Sx1262::getLoraParameter(const Parameter parameter, float &value) const {
|
||||
using enum Parameter;
|
||||
|
||||
switch (parameter) {
|
||||
case Frequency:
|
||||
value = frequency;
|
||||
return Sx1262::ParameterStatus::Success;
|
||||
@ -172,9 +200,6 @@ Sx1262::ParameterStatus Sx1262::getFskParameter(const Parameter parameter, float
|
||||
using enum Parameter;
|
||||
|
||||
switch (parameter) {
|
||||
case Power:
|
||||
value = power;
|
||||
return Sx1262::ParameterStatus::Success;
|
||||
case Frequency:
|
||||
value = frequency;
|
||||
return Sx1262::ParameterStatus::Success;
|
||||
@ -198,9 +223,6 @@ Sx1262::ParameterStatus Sx1262::getLrFhssParameter(const Parameter parameter, fl
|
||||
using enum Parameter;
|
||||
|
||||
switch (parameter) {
|
||||
case Power:
|
||||
value = power;
|
||||
return Sx1262::ParameterStatus::Success;
|
||||
case Bandwidth:
|
||||
value = bandwidth;
|
||||
return Sx1262::ParameterStatus::Success;
|
||||
@ -222,6 +244,11 @@ Sx1262::ParameterStatus Sx1262::getParameter(const Parameter parameter, float &v
|
||||
const auto currentModulation = getModulation();
|
||||
|
||||
// No warnings are emitted to be able to discover parameters by return status
|
||||
auto base_return = getBaseParameter(parameter, value);
|
||||
if (base_return != Sx1262::ParameterStatus::Unavailable) {
|
||||
return base_return;
|
||||
}
|
||||
|
||||
switch (currentModulation) {
|
||||
case Modulation::LoRa:
|
||||
return getLoraParameter(parameter, value);
|
||||
@ -230,11 +257,9 @@ Sx1262::ParameterStatus Sx1262::getParameter(const Parameter parameter, float &v
|
||||
case Modulation::LrFhss:
|
||||
return getLrFhssParameter(parameter, value);
|
||||
default:
|
||||
break;
|
||||
// Shouldn't be reachable, return failsafe value
|
||||
return Sx1262::ParameterStatus::Unavailable;
|
||||
}
|
||||
|
||||
// Shouldn't be reachable, return failsafe value
|
||||
return Sx1262::ParameterStatus::Unavailable;
|
||||
}
|
||||
|
||||
tt::hal::radio::Unit Sx1262::getParameterUnit(const Parameter parameter) const {
|
||||
@ -260,11 +285,9 @@ tt::hal::radio::Unit Sx1262::getParameterUnit(const Parameter parameter) const {
|
||||
case NarrowGrid:
|
||||
return Unit(Unit::Name::None);
|
||||
default:
|
||||
break;
|
||||
TT_LOG_W(TAG, "Tried to get unit for unsupported parameter \"%s\"", toString(parameter));
|
||||
return Unit(Unit::Name::None);
|
||||
}
|
||||
|
||||
TT_LOG_W(TAG, "Tried to get unit for unsupported parameter \"%s\"", toString(parameter));
|
||||
return Unit(Unit::Name::None);
|
||||
}
|
||||
|
||||
void Sx1262::registerDio1Isr() {
|
||||
@ -353,6 +376,13 @@ int Sx1262::doBegin(const Modulation modulation) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
rc = radio.setRxBoostedGainMode(boostedGain, true);
|
||||
if (rc != RADIOLIB_ERR_NONE) {
|
||||
TT_LOG_E(TAG, "Setting RX boosted gain to %s failed with code %hi", boostedGain ? "true" : "false", rc);
|
||||
setState(State::Error);
|
||||
return -1;
|
||||
}
|
||||
|
||||
registerDio1Isr();
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -52,13 +52,16 @@ private:
|
||||
float bitRate = 0.0;
|
||||
float frequencyDeviation = 0.0;
|
||||
bool narrowGrid = false;
|
||||
bool boostedGain = false;
|
||||
|
||||
void registerDio1Isr();
|
||||
void unregisterDio1Isr();
|
||||
|
||||
ParameterStatus setBaseParameter(const Parameter parameter, const float value);
|
||||
ParameterStatus setLoraParameter(const Parameter parameter, const float value);
|
||||
ParameterStatus setFskParameter(const Parameter parameter, const float value);
|
||||
ParameterStatus setLrFhssParameter(const Parameter parameter, const float value);
|
||||
ParameterStatus getBaseParameter(const Parameter parameter, float &value) const;
|
||||
ParameterStatus getLoraParameter(const Parameter parameter, float &value) const;
|
||||
ParameterStatus getFskParameter(const Parameter parameter, float &value) const;
|
||||
ParameterStatus getLrFhssParameter(const Parameter parameter, float &value) const;
|
||||
|
||||
@ -35,6 +35,7 @@ public:
|
||||
|
||||
enum class Parameter {
|
||||
Power,
|
||||
BoostedGain,
|
||||
Frequency,
|
||||
Bandwidth,
|
||||
SpreadFactor,
|
||||
@ -44,7 +45,7 @@ public:
|
||||
FrequencyDeviation,
|
||||
DataRate,
|
||||
AddressWidth,
|
||||
NarrowGrid
|
||||
NarrowGrid,
|
||||
};
|
||||
|
||||
enum class ParameterStatus {
|
||||
|
||||
@ -25,6 +25,7 @@ enum Modulation {
|
||||
|
||||
enum RadioParameter {
|
||||
RADIO_POWER,
|
||||
RADIO_BOOSTEDGAIN,
|
||||
RADIO_FREQUENCY,
|
||||
RADIO_BANDWIDTH,
|
||||
RADIO_SPREADFACTOR,
|
||||
|
||||
@ -236,6 +236,8 @@ static RadioParameter fromCpp(tt::hal::radio::RadioDevice::Parameter parameter)
|
||||
switch (parameter) {
|
||||
case tt::hal::radio::RadioDevice::Parameter::Power:
|
||||
return RADIO_POWER;
|
||||
case tt::hal::radio::RadioDevice::Parameter::BoostedGain:
|
||||
return RADIO_BOOSTEDGAIN;
|
||||
case tt::hal::radio::RadioDevice::Parameter::Frequency:
|
||||
return RADIO_FREQUENCY;
|
||||
case tt::hal::radio::RadioDevice::Parameter::Bandwidth:
|
||||
@ -266,6 +268,8 @@ static tt::hal::radio::RadioDevice::Parameter toCpp(RadioParameter parameter) {
|
||||
switch (parameter) {
|
||||
case RADIO_POWER:
|
||||
return tt::hal::radio::RadioDevice::Parameter::Power;
|
||||
case RADIO_BOOSTEDGAIN:
|
||||
return tt::hal::radio::RadioDevice::Parameter::BoostedGain;
|
||||
case RADIO_FREQUENCY:
|
||||
return tt::hal::radio::RadioDevice::Parameter::Frequency;
|
||||
case RADIO_BANDWIDTH:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user