Compare commits
3 Commits
9a60ab8f74
...
506c840933
| Author | SHA1 | Date | |
|---|---|---|---|
| 506c840933 | |||
| 2eca0898b8 | |||
| ecd2e8f6e1 |
@ -36,12 +36,23 @@ void IRAM_ATTR dio1handler(void* context) {
|
|||||||
((Sx1262*)context)->dio1Event();
|
((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;
|
using enum Parameter;
|
||||||
|
|
||||||
switch (parameter) {
|
switch (parameter) {
|
||||||
case Power:
|
case Power:
|
||||||
return checkLimitsAndApply(power, value, -9.0, 22.0);
|
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:
|
case Frequency:
|
||||||
return checkLimitsAndApply(frequency, value, 150.0, 960.0);
|
return checkLimitsAndApply(frequency, value, 150.0, 960.0);
|
||||||
case Bandwidth:
|
case Bandwidth:
|
||||||
@ -68,8 +79,6 @@ Sx1262::ParameterStatus Sx1262::setFskParameter(const Parameter parameter, const
|
|||||||
using enum Parameter;
|
using enum Parameter;
|
||||||
|
|
||||||
switch (parameter) {
|
switch (parameter) {
|
||||||
case Power:
|
|
||||||
return checkLimitsAndApply(power, value, -9.0, 22.0);
|
|
||||||
case Frequency:
|
case Frequency:
|
||||||
return checkLimitsAndApply(frequency, value, 150.0, 960.0);
|
return checkLimitsAndApply(frequency, value, 150.0, 960.0);
|
||||||
case Bandwidth:
|
case Bandwidth:
|
||||||
@ -121,6 +130,11 @@ Sx1262::ParameterStatus Sx1262::setLrFhssParameter(const Parameter parameter, co
|
|||||||
Sx1262::ParameterStatus Sx1262::setParameter(const Parameter parameter, const float value) {
|
Sx1262::ParameterStatus Sx1262::setParameter(const Parameter parameter, const float value) {
|
||||||
const auto currentModulation = getModulation();
|
const auto currentModulation = getModulation();
|
||||||
|
|
||||||
|
auto base_return = setBaseParameter(parameter, value);
|
||||||
|
if (base_return != Sx1262::ParameterStatus::Unavailable) {
|
||||||
|
return base_return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (currentModulation) {
|
switch (currentModulation) {
|
||||||
case Modulation::LoRa:
|
case Modulation::LoRa:
|
||||||
return setLoraParameter(parameter, value);
|
return setLoraParameter(parameter, value);
|
||||||
@ -136,13 +150,27 @@ Sx1262::ParameterStatus Sx1262::setParameter(const Parameter parameter, const fl
|
|||||||
return Sx1262::ParameterStatus::Unavailable;
|
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;
|
using enum Parameter;
|
||||||
|
|
||||||
switch (parameter) {
|
switch (parameter) {
|
||||||
case Power:
|
case Power:
|
||||||
value = power;
|
value = power;
|
||||||
return Sx1262::ParameterStatus::Success;
|
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:
|
case Frequency:
|
||||||
value = frequency;
|
value = frequency;
|
||||||
return Sx1262::ParameterStatus::Success;
|
return Sx1262::ParameterStatus::Success;
|
||||||
@ -172,9 +200,6 @@ Sx1262::ParameterStatus Sx1262::getFskParameter(const Parameter parameter, float
|
|||||||
using enum Parameter;
|
using enum Parameter;
|
||||||
|
|
||||||
switch (parameter) {
|
switch (parameter) {
|
||||||
case Power:
|
|
||||||
value = power;
|
|
||||||
return Sx1262::ParameterStatus::Success;
|
|
||||||
case Frequency:
|
case Frequency:
|
||||||
value = frequency;
|
value = frequency;
|
||||||
return Sx1262::ParameterStatus::Success;
|
return Sx1262::ParameterStatus::Success;
|
||||||
@ -198,9 +223,6 @@ Sx1262::ParameterStatus Sx1262::getLrFhssParameter(const Parameter parameter, fl
|
|||||||
using enum Parameter;
|
using enum Parameter;
|
||||||
|
|
||||||
switch (parameter) {
|
switch (parameter) {
|
||||||
case Power:
|
|
||||||
value = power;
|
|
||||||
return Sx1262::ParameterStatus::Success;
|
|
||||||
case Bandwidth:
|
case Bandwidth:
|
||||||
value = bandwidth;
|
value = bandwidth;
|
||||||
return Sx1262::ParameterStatus::Success;
|
return Sx1262::ParameterStatus::Success;
|
||||||
@ -222,6 +244,11 @@ Sx1262::ParameterStatus Sx1262::getParameter(const Parameter parameter, float &v
|
|||||||
const auto currentModulation = getModulation();
|
const auto currentModulation = getModulation();
|
||||||
|
|
||||||
// No warnings are emitted to be able to discover parameters by return status
|
// 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) {
|
switch (currentModulation) {
|
||||||
case Modulation::LoRa:
|
case Modulation::LoRa:
|
||||||
return getLoraParameter(parameter, value);
|
return getLoraParameter(parameter, value);
|
||||||
@ -230,11 +257,9 @@ Sx1262::ParameterStatus Sx1262::getParameter(const Parameter parameter, float &v
|
|||||||
case Modulation::LrFhss:
|
case Modulation::LrFhss:
|
||||||
return getLrFhssParameter(parameter, value);
|
return getLrFhssParameter(parameter, value);
|
||||||
default:
|
default:
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Shouldn't be reachable, return failsafe value
|
// Shouldn't be reachable, return failsafe value
|
||||||
return Sx1262::ParameterStatus::Unavailable;
|
return Sx1262::ParameterStatus::Unavailable;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tt::hal::radio::Unit Sx1262::getParameterUnit(const Parameter parameter) const {
|
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:
|
case NarrowGrid:
|
||||||
return Unit(Unit::Name::None);
|
return Unit(Unit::Name::None);
|
||||||
default:
|
default:
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
TT_LOG_W(TAG, "Tried to get unit for unsupported parameter \"%s\"", toString(parameter));
|
TT_LOG_W(TAG, "Tried to get unit for unsupported parameter \"%s\"", toString(parameter));
|
||||||
return Unit(Unit::Name::None);
|
return Unit(Unit::Name::None);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Sx1262::registerDio1Isr() {
|
void Sx1262::registerDio1Isr() {
|
||||||
@ -353,6 +376,13 @@ int Sx1262::doBegin(const Modulation modulation) {
|
|||||||
return -1;
|
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();
|
registerDio1Isr();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -52,13 +52,16 @@ private:
|
|||||||
float bitRate = 0.0;
|
float bitRate = 0.0;
|
||||||
float frequencyDeviation = 0.0;
|
float frequencyDeviation = 0.0;
|
||||||
bool narrowGrid = false;
|
bool narrowGrid = false;
|
||||||
|
bool boostedGain = false;
|
||||||
|
|
||||||
void registerDio1Isr();
|
void registerDio1Isr();
|
||||||
void unregisterDio1Isr();
|
void unregisterDio1Isr();
|
||||||
|
|
||||||
|
ParameterStatus setBaseParameter(const Parameter parameter, const float value);
|
||||||
ParameterStatus setLoraParameter(const Parameter parameter, const float value);
|
ParameterStatus setLoraParameter(const Parameter parameter, const float value);
|
||||||
ParameterStatus setFskParameter(const Parameter parameter, const float value);
|
ParameterStatus setFskParameter(const Parameter parameter, const float value);
|
||||||
ParameterStatus setLrFhssParameter(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 getLoraParameter(const Parameter parameter, float &value) const;
|
||||||
ParameterStatus getFskParameter(const Parameter parameter, float &value) const;
|
ParameterStatus getFskParameter(const Parameter parameter, float &value) const;
|
||||||
ParameterStatus getLrFhssParameter(const Parameter parameter, float &value) const;
|
ParameterStatus getLrFhssParameter(const Parameter parameter, float &value) const;
|
||||||
|
|||||||
@ -81,6 +81,8 @@ char *const toString(RadioParameter p) {
|
|||||||
switch (p) {
|
switch (p) {
|
||||||
case RADIO_POWER:
|
case RADIO_POWER:
|
||||||
return "Power";
|
return "Power";
|
||||||
|
case RADIO_BOOSTEDGAIN:
|
||||||
|
return "RX Boosted Gain";
|
||||||
case RADIO_FREQUENCY:
|
case RADIO_FREQUENCY:
|
||||||
return "Center Frequency";
|
return "Center Frequency";
|
||||||
case RADIO_BANDWIDTH:
|
case RADIO_BANDWIDTH:
|
||||||
@ -88,7 +90,7 @@ char *const toString(RadioParameter p) {
|
|||||||
case RADIO_SPREADFACTOR:
|
case RADIO_SPREADFACTOR:
|
||||||
return "Spread Factor";
|
return "Spread Factor";
|
||||||
case RADIO_CODINGRATE:
|
case RADIO_CODINGRATE:
|
||||||
return "Coding Rate Denominator";
|
return "Coding Rate";
|
||||||
case RADIO_SYNCWORD:
|
case RADIO_SYNCWORD:
|
||||||
return "Sync Word";
|
return "Sync Word";
|
||||||
case RADIO_PREAMBLES:
|
case RADIO_PREAMBLES:
|
||||||
@ -559,9 +561,6 @@ static ParameterInput* makeLoraInput(RadioHandle handle, const RadioParameter pa
|
|||||||
static constexpr float bw_values[] = {7.8, 10.4, 15.6, 20.8, 31.25, 41.7, 62.5, 125.0, 250.0, 500.0, SliderSelectParameterInput::SELECT_END};
|
static constexpr float bw_values[] = {7.8, 10.4, 15.6, 20.8, 31.25, 41.7, 62.5, 125.0, 250.0, 500.0, SliderSelectParameterInput::SELECT_END};
|
||||||
// LoRa is standardized, so we get to use fancy inputs
|
// LoRa is standardized, so we get to use fancy inputs
|
||||||
switch (param) {
|
switch (param) {
|
||||||
case RADIO_POWER: //no break
|
|
||||||
case RADIO_FREQUENCY:
|
|
||||||
return new NumericParameterInput(handle, param, container, row);
|
|
||||||
case RADIO_BANDWIDTH:
|
case RADIO_BANDWIDTH:
|
||||||
return new SliderSelectParameterInput(handle, param, container, row, bw_values, "%.1f");
|
return new SliderSelectParameterInput(handle, param, container, row, bw_values, "%.1f");
|
||||||
case RADIO_SPREADFACTOR:
|
case RADIO_SPREADFACTOR:
|
||||||
@ -577,7 +576,6 @@ static ParameterInput* makeLoraInput(RadioHandle handle, const RadioParameter pa
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static ParameterInput* makeLrFhssInput(RadioHandle handle, const RadioParameter param, lv_obj_t* container, int row) {
|
static ParameterInput* makeLrFhssInput(RadioHandle handle, const RadioParameter param, lv_obj_t* container, int row) {
|
||||||
switch (param) {;
|
switch (param) {;
|
||||||
case RADIO_NARROWGRID:
|
case RADIO_NARROWGRID:
|
||||||
@ -587,7 +585,22 @@ static ParameterInput* makeLrFhssInput(RadioHandle handle, const RadioParameter
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static ParameterInput* makeBaseInput(RadioHandle handle, const RadioParameter param, lv_obj_t* container, int row) {
|
||||||
|
switch (param) {
|
||||||
|
case RADIO_POWER: //no break
|
||||||
|
case RADIO_FREQUENCY:
|
||||||
|
return new NumericParameterInput(handle, param, container, row);
|
||||||
|
case RADIO_BOOSTEDGAIN:
|
||||||
|
return new FlagParameterInput(handle, param, container, row);
|
||||||
|
default:
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static ParameterInput* makeParameterInput(RadioHandle handle, const RadioParameter param, const Modulation modulation, lv_obj_t* container, int row) {
|
static ParameterInput* makeParameterInput(RadioHandle handle, const RadioParameter param, const Modulation modulation, lv_obj_t* container, int row) {
|
||||||
|
auto base_input = makeBaseInput(handle, param, container, row);
|
||||||
|
if (base_input) return base_input;
|
||||||
|
|
||||||
switch (modulation) {
|
switch (modulation) {
|
||||||
case MODULATION_LORA:
|
case MODULATION_LORA:
|
||||||
return makeLoraInput(handle, param, container, row);
|
return makeLoraInput(handle, param, container, row);
|
||||||
@ -697,7 +710,7 @@ public:
|
|||||||
lv_obj_align(container, LV_ALIGN_TOP_MID, 0, 0);
|
lv_obj_align(container, LV_ALIGN_TOP_MID, 0, 0);
|
||||||
|
|
||||||
const int grid_row_size = 40;
|
const int grid_row_size = 40;
|
||||||
const int grid_col_size = 140;
|
const int grid_col_size = 60;
|
||||||
static constexpr size_t row_dsc_last = RADIO_NARROWGRID + 1;
|
static constexpr size_t row_dsc_last = RADIO_NARROWGRID + 1;
|
||||||
static lv_coord_t col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1), grid_col_size, LV_GRID_TEMPLATE_LAST};
|
static lv_coord_t col_dsc[] = {LV_GRID_FR(1), LV_GRID_FR(1), grid_col_size, LV_GRID_TEMPLATE_LAST};
|
||||||
static lv_coord_t row_dsc[row_dsc_last] = {0};
|
static lv_coord_t row_dsc[row_dsc_last] = {0};
|
||||||
|
|||||||
@ -35,6 +35,7 @@ public:
|
|||||||
|
|
||||||
enum class Parameter {
|
enum class Parameter {
|
||||||
Power,
|
Power,
|
||||||
|
BoostedGain,
|
||||||
Frequency,
|
Frequency,
|
||||||
Bandwidth,
|
Bandwidth,
|
||||||
SpreadFactor,
|
SpreadFactor,
|
||||||
@ -44,7 +45,7 @@ public:
|
|||||||
FrequencyDeviation,
|
FrequencyDeviation,
|
||||||
DataRate,
|
DataRate,
|
||||||
AddressWidth,
|
AddressWidth,
|
||||||
NarrowGrid
|
NarrowGrid,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class ParameterStatus {
|
enum class ParameterStatus {
|
||||||
|
|||||||
@ -96,7 +96,7 @@ static void make_scrollable(lv_obj_t* obj) {
|
|||||||
lv_group_add_obj(group, obj);
|
lv_group_add_obj(group, obj);
|
||||||
|
|
||||||
// Apply style to scrollbar to make it visible if focused
|
// Apply style to scrollbar to make it visible if focused
|
||||||
apply_scroll_style(obj);
|
apply_scroll_styles(obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void child_added_event_handler(lv_event_t* e) {
|
static void child_added_event_handler(lv_event_t* e) {
|
||||||
|
|||||||
@ -25,6 +25,7 @@ enum Modulation {
|
|||||||
|
|
||||||
enum RadioParameter {
|
enum RadioParameter {
|
||||||
RADIO_POWER,
|
RADIO_POWER,
|
||||||
|
RADIO_BOOSTEDGAIN,
|
||||||
RADIO_FREQUENCY,
|
RADIO_FREQUENCY,
|
||||||
RADIO_BANDWIDTH,
|
RADIO_BANDWIDTH,
|
||||||
RADIO_SPREADFACTOR,
|
RADIO_SPREADFACTOR,
|
||||||
|
|||||||
@ -236,6 +236,8 @@ static RadioParameter fromCpp(tt::hal::radio::RadioDevice::Parameter parameter)
|
|||||||
switch (parameter) {
|
switch (parameter) {
|
||||||
case tt::hal::radio::RadioDevice::Parameter::Power:
|
case tt::hal::radio::RadioDevice::Parameter::Power:
|
||||||
return RADIO_POWER;
|
return RADIO_POWER;
|
||||||
|
case tt::hal::radio::RadioDevice::Parameter::BoostedGain:
|
||||||
|
return RADIO_BOOSTEDGAIN;
|
||||||
case tt::hal::radio::RadioDevice::Parameter::Frequency:
|
case tt::hal::radio::RadioDevice::Parameter::Frequency:
|
||||||
return RADIO_FREQUENCY;
|
return RADIO_FREQUENCY;
|
||||||
case tt::hal::radio::RadioDevice::Parameter::Bandwidth:
|
case tt::hal::radio::RadioDevice::Parameter::Bandwidth:
|
||||||
@ -266,6 +268,8 @@ static tt::hal::radio::RadioDevice::Parameter toCpp(RadioParameter parameter) {
|
|||||||
switch (parameter) {
|
switch (parameter) {
|
||||||
case RADIO_POWER:
|
case RADIO_POWER:
|
||||||
return tt::hal::radio::RadioDevice::Parameter::Power;
|
return tt::hal::radio::RadioDevice::Parameter::Power;
|
||||||
|
case RADIO_BOOSTEDGAIN:
|
||||||
|
return tt::hal::radio::RadioDevice::Parameter::BoostedGain;
|
||||||
case RADIO_FREQUENCY:
|
case RADIO_FREQUENCY:
|
||||||
return tt::hal::radio::RadioDevice::Parameter::Frequency;
|
return tt::hal::radio::RadioDevice::Parameter::Frequency;
|
||||||
case RADIO_BANDWIDTH:
|
case RADIO_BANDWIDTH:
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user