fix: Pot and slider warnings weren't being set properly on radio or syncing with Companion (#1981)

- fix Companion yaml model read and write
- B&W radios treat bit values the same as color to avoid unnecessary complication for Companion and radio conversions
- B&W radios default is therefore off for all pots and sliders
- B&W radios fix runtime warnings check
- all radios fix to save last pot or slider position when checked and mode AUTO on change of model or power off
- all radios do not display Pots Warning in model setup if no pots or sliders supported
This commit is contained in:
Neil Horne
2022-06-07 13:04:40 +10:00
committed by GitHub
parent cd59eac89f
commit cba4e07ce1
7 changed files with 45 additions and 35 deletions
@@ -140,6 +140,15 @@ struct YamlThrTrace {
struct YamlPotsWarnEnabled {
unsigned int value;
const int cnt = CPN_MAX_POTS + CPN_MAX_SLIDERS; // must not exceed 16 as radio stores in uint16_t
#define MAXPOTWARNINGS (CPN_MAX_POTS + CPN_MAX_SLIDERS)
#if MAXPOTWARNINGS > 16
#error Not enough space for pot and slider warnings
#endif
#undef MAXPOTWARNINGS
YamlPotsWarnEnabled() = default;
@@ -147,17 +156,17 @@ struct YamlPotsWarnEnabled {
{
value = 0;
for (int i = 0; i < 8; i++) {
value |= (*(potsWarnEnabled + i) << (7 - i));
for (int i = 0; i < cnt; i++) {
value |= (*(potsWarnEnabled + i)) << i;
}
}
void toCpn(bool * potsWarnEnabled)
{
memset(potsWarnEnabled, 0, sizeof(bool) * (CPN_MAX_POTS + CPN_MAX_SLIDERS));
memset(potsWarnEnabled, 0, sizeof(bool) * cnt);
for (int i = 1; i <= 8; i++) {
*(potsWarnEnabled + (i - 1)) = (bool)((value >> (8 - i)) & 1);
for (int i = 0; i < cnt; i++) {
*(potsWarnEnabled + i) = (bool)((value >> i) & 1);
}
}
};
@@ -856,7 +865,7 @@ Node convert<ModelData>::encode(const ModelData& rhs)
node["potsWarnMode"] = potsWarningModeLut << rhs.potsWarningMode;
node["jitterFilter"] = jitterFilterLut << rhs.jitterFilter;
YamlPotsWarnEnabled potsWarnEnabled(&rhs.potsWarnEnabled[CPN_MAX_POTS + CPN_MAX_SLIDERS]);
YamlPotsWarnEnabled potsWarnEnabled(&rhs.potsWarnEnabled[0]);
node["potsWarnEnabled"] = potsWarnEnabled.value;
for (int i = 0; i < CPN_MAX_POTS + CPN_MAX_SLIDERS; i++) {
@@ -1048,7 +1057,7 @@ bool convert<ModelData>::decode(const Node& node, ModelData& rhs)
YamlPotsWarnEnabled potsWarnEnabled;
node["potsWarnEnabled"] >> potsWarnEnabled.value;
potsWarnEnabled.toCpn(&rhs.potsWarnEnabled[CPN_MAX_POTS + CPN_MAX_SLIDERS]);
potsWarnEnabled.toCpn(&rhs.potsWarnEnabled[0]);
node["potsWarnPosition"] >> rhs.potsWarnPosition;
+6 -4
View File
@@ -1467,8 +1467,10 @@ SetupPanel::SetupPanel(QWidget * parent, ModelData & model, GeneralSettings & ge
// Pot warnings
prevFocus = ui->potWarningMode;
if (IS_HORUS_OR_TARANIS(board)) {
for (int i = 0; i < getBoardCapability(board, Board::Pots) + getBoardCapability(board, Board::Sliders); i++) {
int count = getBoardCapability(board, Board::Pots) + getBoardCapability(board, Board::Sliders);
if (IS_HORUS_OR_TARANIS(board) && count > 0) {
for (int i = 0; i < count; i++) {
RawSource src(SOURCE_TYPE_STICK, CPN_MAX_STICKS + i);
QCheckBox * cb = new QCheckBox(this);
cb->setProperty("index", i);
@@ -1775,7 +1777,7 @@ void SetupPanel::updatePotWarnings()
for (int i = 0; i < potWarningCheckboxes.size(); i++) {
QCheckBox *checkbox = potWarningCheckboxes[i];
int index = checkbox->property("index").toInt();
checkbox->setChecked(!model->potsWarnEnabled[index]);
checkbox->setChecked(model->potsWarnEnabled[index]);
checkbox->setDisabled(model->potsWarningMode == 0);
}
lock = false;
@@ -1785,7 +1787,7 @@ void SetupPanel::potWarningToggled(bool checked)
{
if (!lock) {
int index = sender()->property("index").toInt();
model->potsWarnEnabled[index] = !checked;
model->potsWarnEnabled[index] = checked;
updatePotWarnings();
emit modified();
}
+16 -17
View File
@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>1007</width>
<width>1024</width>
<height>435</height>
</rect>
</property>
@@ -192,7 +192,7 @@
</font>
</property>
<property name="text">
<string></string>
<string/>
</property>
<property name="alignment">
<set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
@@ -378,7 +378,7 @@
<item alignment="Qt::AlignTop">
<widget class="QLabel" name="label_potWarning">
<property name="text">
<string>Pot Warnings</string>
<string>Pot/Slider Warnings</string>
</property>
</widget>
</item>
@@ -548,19 +548,19 @@
</item>
<item row="1" column="3">
<widget class="QSpinBox" name="customThrottleWarningPosition">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimum">
<number>-100</number>
</property>
<property name="maximum">
<number>100</number>
</property>
</widget>
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimum">
<number>-100</number>
</property>
<property name="maximum">
<number>100</number>
</property>
</widget>
</item>
<item row="2" column="3">
<widget class="QCheckBox" name="displayText">
@@ -617,7 +617,6 @@
</item>
</widget>
</item>
<item row="2" column="4">
<widget class="QPushButton" name="editText">
<property name="sizePolicy">
+1 -1
View File
@@ -906,7 +906,7 @@ void menuModelSetup(event_t event)
}
else {
LcdFlags flags = ((menuHorizontalPosition==i+1) && attr) ? BLINK : 0;
if ((!attr || menuHorizontalPosition >= 0) && !(g_model.potsWarnEnabled & (1 << i))) {
if ((!attr || menuHorizontalPosition >= 0) && (g_model.potsWarnEnabled & (1 << i))) {
flags |= INVERS;
}
+2 -2
View File
@@ -405,7 +405,7 @@ void menuModelSetup(event_t event)
0, // Global functions
0, // ADC Jitter filter
REGISTRATION_ID_ROWS
LABEL(InternalModule),
@@ -822,7 +822,7 @@ void menuModelSetup(event_t event)
}
#endif
LcdFlags flags = ((menuHorizontalPosition==i+1) && attr) ? BLINK : 0;
if ((!attr || menuHorizontalPosition >= 0) && !(g_model.potsWarnEnabled & (1 << i))) {
if ((!attr || menuHorizontalPosition >= 0) && (g_model.potsWarnEnabled & (1 << i))) {
flags |= INVERS;
}
+1 -1
View File
@@ -243,7 +243,7 @@ void storageFlushCurrentModel()
if (g_model.potsWarnMode == POTS_WARN_AUTO) {
for (int i=0; i<NUM_POTS+NUM_SLIDERS; i++) {
if (!(g_model.potsWarnEnabled & (1 << i))) {
if (g_model.potsWarnEnabled & (1 << i)) {
SAVE_POT_POSITION(i);
}
}
+3 -3
View File
@@ -796,7 +796,7 @@ void checkSwitches()
if (!IS_POT_SLIDER_AVAILABLE(POT1+i)) {
continue;
}
if (!(g_model.potsWarnEnabled & (1 << i))) {
if (g_model.potsWarnEnabled & (1 << i)) {
if (abs(g_model.potsWarnPosition[i] - GET_LOWRES_POT_POSITION(i)) > 1) {
if (++numWarnings < 6) {
lcdDrawTextAtIndex(x, y, STR_VSRCRAW, NUM_STICKS + 1 + i, INVERS);
@@ -887,7 +887,7 @@ void logicalSwitchesTimerTick()
}
msg = luaSetStickySwitchBuffer.read();
}
// Update logical switches
for (uint8_t fm=0; fm<MAX_FLIGHT_MODES; fm++) {
for (uint8_t i=0; i<MAX_LOGICAL_SWITCHES; i++) {
@@ -1004,7 +1004,7 @@ void logicalSwitchesReset()
LS_LAST_VALUE(fm, i) = CS_LAST_VALUE_INIT;
}
}
luaSetStickySwitchBuffer.clear();
}