SX126x: Per-modem validation of parameters
This commit is contained in:
parent
e2db52c0dc
commit
933ce93fb1
@ -36,7 +36,7 @@ void IRAM_ATTR dio1handler(void* context) {
|
||||
((Sx1262*)context)->dio1Event();
|
||||
}
|
||||
|
||||
Sx1262::ParameterStatus Sx1262::setParameter(const Parameter parameter, const float value) {
|
||||
Sx1262::ParameterStatus Sx1262::setLoraParameter(const Parameter parameter, const float value) {
|
||||
using enum Parameter;
|
||||
|
||||
switch (parameter) {
|
||||
@ -46,12 +46,7 @@ Sx1262::ParameterStatus Sx1262::setParameter(const Parameter parameter, const fl
|
||||
return checkLimitsAndApply(frequency, value, 150.0, 960.0);
|
||||
case Bandwidth:
|
||||
return checkValuesAndApply(bandwidth, value, {
|
||||
//LoRa
|
||||
7.8, 10.4, 15.6, 20.8, 31.25, 41.7, 62.5, 125.0, 250.0, 500.0,
|
||||
// FSK
|
||||
4.8, 5.8, 7.3, 9.7, 11.7, 14.6, 19.5, 23.4, 29.3, 39.0, 46.9, 58.6, 78.2,
|
||||
// LR-FHSS
|
||||
39.06, 85.94, 136.72, 183.59, 335.94, 386.72, 722.66, 773.44, 1523.4, 1574.2
|
||||
7.8, 10.4, 15.6, 20.8, 31.25, 41.7, 62.5, 125.0, 250.0, 500.0
|
||||
});
|
||||
case SpreadFactor:
|
||||
return checkLimitsAndApply(spreadFactor, value, 7.0, 12.0, 1);
|
||||
@ -61,21 +56,85 @@ Sx1262::ParameterStatus Sx1262::setParameter(const Parameter parameter, const fl
|
||||
return checkLimitsAndApply(syncWord, value, 0.0, 255.0, 1);
|
||||
case PreambleLength:
|
||||
return checkLimitsAndApply(preambleLength, value, 0.0, 65535.0, 1);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
TT_LOG_W(TAG, "Tried to set unsupported LoRa parameter \"%s\" to %f", toString(parameter), value);
|
||||
return Sx1262::ParameterStatus::Unavailable;
|
||||
}
|
||||
|
||||
Sx1262::ParameterStatus Sx1262::setFskParameter(const Parameter parameter, const float value) {
|
||||
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:
|
||||
return checkValuesAndApply(bandwidth, value, {
|
||||
4.8, 5.8, 7.3, 9.7, 11.7, 14.6, 19.5, 23.4, 29.3, 39.0, 46.9, 58.6, 78.2
|
||||
});
|
||||
case PreambleLength:
|
||||
return checkLimitsAndApply(preambleLength, value, 0.0, 65535.0, 1);
|
||||
case DataRate:
|
||||
return checkLimitsAndApply(bitRate, value, 0.6, 300.0);
|
||||
case FrequencyDeviation:
|
||||
return checkLimitsAndApply(frequencyDeviation, value, 0.0, 200.0);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
TT_LOG_W(TAG, "Tried to set unsupported FSK parameter \"%s\" to %f", toString(parameter), value);
|
||||
return Sx1262::ParameterStatus::Unavailable;
|
||||
}
|
||||
|
||||
Sx1262::ParameterStatus Sx1262::setLrFhssParameter(const Parameter parameter, const float value) {
|
||||
using enum Parameter;
|
||||
|
||||
switch (parameter) {
|
||||
case Bandwidth:
|
||||
return checkValuesAndApply(bandwidth, value, {
|
||||
39.06, 85.94, 136.72, 183.59, 335.94, 386.72, 722.66, 773.44, 1523.4, 1574.2
|
||||
});
|
||||
case CodingRate:
|
||||
return checkValuesAndApply(codingRate, value, {
|
||||
RADIOLIB_SX126X_LR_FHSS_CR_5_6,
|
||||
RADIOLIB_SX126X_LR_FHSS_CR_2_3,
|
||||
RADIOLIB_SX126X_LR_FHSS_CR_1_2,
|
||||
RADIOLIB_SX126X_LR_FHSS_CR_1_3
|
||||
});
|
||||
case NarrowGrid:
|
||||
return checkLimitsAndApply(narrowGrid, value, 0.0, 1.0, 1);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
TT_LOG_W(TAG, "Tried to set unsupported parameter \"%s\" to %f", toString(parameter), value);
|
||||
return Sx1262::ParameterStatus::NotDefined;
|
||||
TT_LOG_W(TAG, "Tried to set unsupported LR-FHSS parameter \"%s\" to %f", toString(parameter), value);
|
||||
return Sx1262::ParameterStatus::Unavailable;
|
||||
}
|
||||
|
||||
Sx1262::ParameterStatus Sx1262::getParameter(const Parameter parameter, float &value) const {
|
||||
|
||||
Sx1262::ParameterStatus Sx1262::setParameter(const Parameter parameter, const float value) {
|
||||
const auto currentModulation = getModulation();
|
||||
|
||||
switch (currentModulation) {
|
||||
case Modulation::LoRa:
|
||||
return setLoraParameter(parameter, value);
|
||||
case Modulation::Fsk:
|
||||
return setFskParameter(parameter, value);
|
||||
case Modulation::LrFhss:
|
||||
return setLrFhssParameter(parameter, value);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// Shouldn't be reachable, return failsafe value
|
||||
return Sx1262::ParameterStatus::Unavailable;
|
||||
}
|
||||
|
||||
Sx1262::ParameterStatus Sx1262::getLoraParameter(const Parameter parameter, float &value) const {
|
||||
using enum Parameter;
|
||||
|
||||
switch (parameter) {
|
||||
@ -100,12 +159,54 @@ Sx1262::ParameterStatus Sx1262::getParameter(const Parameter parameter, float &v
|
||||
case PreambleLength:
|
||||
value = preambleLength;
|
||||
return Sx1262::ParameterStatus::Success;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
TT_LOG_W(TAG, "Tried to get unsupported LoRa parameter \"%s\"", toString(parameter));
|
||||
return Sx1262::ParameterStatus::Unavailable;
|
||||
}
|
||||
|
||||
Sx1262::ParameterStatus Sx1262::getFskParameter(const Parameter parameter, float &value) const {
|
||||
using enum Parameter;
|
||||
|
||||
switch (parameter) {
|
||||
case Power:
|
||||
value = power;
|
||||
return Sx1262::ParameterStatus::Success;
|
||||
case Frequency:
|
||||
value = frequency;
|
||||
return Sx1262::ParameterStatus::Success;
|
||||
case Bandwidth:
|
||||
value = bandwidth;
|
||||
return Sx1262::ParameterStatus::Success;
|
||||
case DataRate:
|
||||
value = bitRate;
|
||||
return Sx1262::ParameterStatus::Success;
|
||||
case FrequencyDeviation:
|
||||
value = frequencyDeviation;
|
||||
return Sx1262::ParameterStatus::Success;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
TT_LOG_W(TAG, "Tried to get unsupported FSK parameter \"%s\"", toString(parameter));
|
||||
return Sx1262::ParameterStatus::Unavailable;
|
||||
}
|
||||
|
||||
Sx1262::ParameterStatus Sx1262::getLrFhssParameter(const Parameter parameter, float &value) const {
|
||||
using enum Parameter;
|
||||
|
||||
switch (parameter) {
|
||||
case Power:
|
||||
value = power;
|
||||
return Sx1262::ParameterStatus::Success;
|
||||
case Bandwidth:
|
||||
value = bandwidth;
|
||||
return Sx1262::ParameterStatus::Success;
|
||||
case CodingRate:
|
||||
value = codingRate;
|
||||
return Sx1262::ParameterStatus::Success;
|
||||
case NarrowGrid:
|
||||
value = narrowGrid;
|
||||
return Sx1262::ParameterStatus::Success;
|
||||
@ -113,8 +214,27 @@ Sx1262::ParameterStatus Sx1262::getParameter(const Parameter parameter, float &v
|
||||
break;
|
||||
}
|
||||
|
||||
TT_LOG_W(TAG, "Tried to get unsupported parameter \"%s\"", toString(parameter));
|
||||
return Sx1262::ParameterStatus::NotDefined;
|
||||
TT_LOG_W(TAG, "Tried to get unsupported LR-FHSS parameter \"%s\"", toString(parameter));
|
||||
return Sx1262::ParameterStatus::Unavailable;
|
||||
}
|
||||
|
||||
|
||||
Sx1262::ParameterStatus Sx1262::getParameter(const Parameter parameter, float &value) const {
|
||||
const auto currentModulation = getModulation();
|
||||
|
||||
switch (currentModulation) {
|
||||
case Modulation::LoRa:
|
||||
return getLoraParameter(parameter, value);
|
||||
case Modulation::Fsk:
|
||||
return getFskParameter(parameter, value);
|
||||
case Modulation::LrFhss:
|
||||
return getLrFhssParameter(parameter, value);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
// Shouldn't be reachable, return failsafe value
|
||||
return Sx1262::ParameterStatus::Unavailable;
|
||||
}
|
||||
|
||||
tt::hal::radio::Unit Sx1262::getParameterUnit(const Parameter parameter) const {
|
||||
|
||||
@ -53,6 +53,14 @@ private:
|
||||
void registerDio1Isr();
|
||||
void unregisterDio1Isr();
|
||||
|
||||
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 getLoraParameter(const Parameter parameter, float &value) const;
|
||||
ParameterStatus getFskParameter(const Parameter parameter, float &value) const;
|
||||
ParameterStatus getLrFhssParameter(const Parameter parameter, float &value) const;
|
||||
|
||||
|
||||
protected:
|
||||
virtual void txQueuedSignal() override;
|
||||
virtual void interruptSignal() override;
|
||||
|
||||
@ -47,7 +47,7 @@ public:
|
||||
};
|
||||
|
||||
enum class ParameterStatus {
|
||||
NotDefined,
|
||||
Unavailable,
|
||||
ValueError,
|
||||
Success
|
||||
};
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user