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*)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;
|
using enum Parameter;
|
||||||
|
|
||||||
switch (parameter) {
|
switch (parameter) {
|
||||||
@ -46,12 +46,7 @@ Sx1262::ParameterStatus Sx1262::setParameter(const Parameter parameter, const fl
|
|||||||
return checkLimitsAndApply(frequency, value, 150.0, 960.0);
|
return checkLimitsAndApply(frequency, value, 150.0, 960.0);
|
||||||
case Bandwidth:
|
case Bandwidth:
|
||||||
return checkValuesAndApply(bandwidth, value, {
|
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
|
||||||
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
|
|
||||||
});
|
});
|
||||||
case SpreadFactor:
|
case SpreadFactor:
|
||||||
return checkLimitsAndApply(spreadFactor, value, 7.0, 12.0, 1);
|
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);
|
return checkLimitsAndApply(syncWord, value, 0.0, 255.0, 1);
|
||||||
case PreambleLength:
|
case PreambleLength:
|
||||||
return checkLimitsAndApply(preambleLength, value, 0.0, 65535.0, 1);
|
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:
|
case DataRate:
|
||||||
return checkLimitsAndApply(bitRate, value, 0.6, 300.0);
|
return checkLimitsAndApply(bitRate, value, 0.6, 300.0);
|
||||||
case FrequencyDeviation:
|
case FrequencyDeviation:
|
||||||
return checkLimitsAndApply(frequencyDeviation, value, 0.0, 200.0);
|
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:
|
case NarrowGrid:
|
||||||
return checkLimitsAndApply(narrowGrid, value, 0.0, 1.0, 1);
|
return checkLimitsAndApply(narrowGrid, value, 0.0, 1.0, 1);
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
TT_LOG_W(TAG, "Tried to set unsupported parameter \"%s\" to %f", toString(parameter), value);
|
TT_LOG_W(TAG, "Tried to set unsupported LR-FHSS parameter \"%s\" to %f", toString(parameter), value);
|
||||||
return Sx1262::ParameterStatus::NotDefined;
|
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;
|
using enum Parameter;
|
||||||
|
|
||||||
switch (parameter) {
|
switch (parameter) {
|
||||||
@ -100,12 +159,54 @@ Sx1262::ParameterStatus Sx1262::getParameter(const Parameter parameter, float &v
|
|||||||
case PreambleLength:
|
case PreambleLength:
|
||||||
value = preambleLength;
|
value = preambleLength;
|
||||||
return Sx1262::ParameterStatus::Success;
|
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:
|
case DataRate:
|
||||||
value = bitRate;
|
value = bitRate;
|
||||||
return Sx1262::ParameterStatus::Success;
|
return Sx1262::ParameterStatus::Success;
|
||||||
case FrequencyDeviation:
|
case FrequencyDeviation:
|
||||||
value = frequencyDeviation;
|
value = frequencyDeviation;
|
||||||
return Sx1262::ParameterStatus::Success;
|
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:
|
case NarrowGrid:
|
||||||
value = narrowGrid;
|
value = narrowGrid;
|
||||||
return Sx1262::ParameterStatus::Success;
|
return Sx1262::ParameterStatus::Success;
|
||||||
@ -113,8 +214,27 @@ Sx1262::ParameterStatus Sx1262::getParameter(const Parameter parameter, float &v
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
TT_LOG_W(TAG, "Tried to get unsupported parameter \"%s\"", toString(parameter));
|
TT_LOG_W(TAG, "Tried to get unsupported LR-FHSS parameter \"%s\"", toString(parameter));
|
||||||
return Sx1262::ParameterStatus::NotDefined;
|
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 {
|
tt::hal::radio::Unit Sx1262::getParameterUnit(const Parameter parameter) const {
|
||||||
|
|||||||
@ -53,6 +53,14 @@ private:
|
|||||||
void registerDio1Isr();
|
void registerDio1Isr();
|
||||||
void unregisterDio1Isr();
|
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:
|
protected:
|
||||||
virtual void txQueuedSignal() override;
|
virtual void txQueuedSignal() override;
|
||||||
virtual void interruptSignal() override;
|
virtual void interruptSignal() override;
|
||||||
|
|||||||
@ -47,7 +47,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
enum class ParameterStatus {
|
enum class ParameterStatus {
|
||||||
NotDefined,
|
Unavailable,
|
||||||
ValueError,
|
ValueError,
|
||||||
Success
|
Success
|
||||||
};
|
};
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user