Allow to disable telemetry alarams (#4981)

* Allow to disable telemetry alarams

This mainly useful for cheap transceivers that have telemetry but no power amplifier and very limited range of often 10-20 meters. This includes fishpepper's tinyFISH FC (and its legal/illegal clones) and also Spektrum BNF models.

* Always disable a warning when RSSI Warnings are disabled

* Compile fix

* Fix typos, also mute sensor lost

Refactor the FrskyRSSIAlarm[2] into a EEPROM compatible RssiAlarm struct

* Compile fixes

* Also refactor Companion

* Cleanup unused datastruct on ARM

* Compile fix for AVR

* Change int to uin8_t for avr

* Fix strings
This commit is contained in:
Arne Schwabe
2017-06-14 23:34:27 +02:00
committed by Bertrand Songis
parent 656daa75fa
commit 8e07f9b0f4
32 changed files with 297 additions and 187 deletions
+1 -2
View File
@@ -1392,8 +1392,6 @@ void FrSkyData::clear()
mAhPersistent = 0;
storedMah = 0;
fasOffset = 0;
rssiAlarms[0].clear(2, 45);
rssiAlarms[1].clear(3, 42);
for (int i=0; i<4; i++)
screens[i].clear();
varioSource = 2/*VARIO*/;
@@ -1560,6 +1558,7 @@ void ModelData::clear()
timers[i].clear();
swashRingData.clear();
frsky.clear();
rssiAlarms.clear();
for (int i=0; i<CPN_MAX_SENSORS; i++)
sensorData[i].clear();
@@ -2777,7 +2777,7 @@ class TelemetryCurrentSourceConversionTable: public ConversionTable
class FrskyField: public StructField {
public:
FrskyField(DataField * parent, FrSkyData & frsky, Board::Type board, unsigned int version, unsigned int variant):
FrskyField(DataField * parent, FrSkyData & frsky, RSSIAlarmData & rssiAlarms, Board::Type board, unsigned int version, unsigned int variant):
StructField(parent, "FrSky"),
telemetryVarioSourceConversionTable(board, version),
screenTypesConversionTable(board, version),
@@ -2849,10 +2849,12 @@ class FrskyField: public StructField {
Append(new SignedField<8>(this, frsky.varioCenterMin));
Append(new SignedField<8>(this, frsky.varioMin));
Append(new SignedField<8>(this, frsky.varioMax));
for (int i=0; i<2; i++) {
Append(new ConversionField< UnsignedField<2> >(this, frsky.rssiAlarms[i].level, &rssiConversionTable[i], "RSSI"));
Append(new ConversionField< SignedField<6> >(this, frsky.rssiAlarms[i].value, -45+i*3));
}
Append(new BoolField<1>(this, rssiAlarms.disabled));
Append(new SpareBitsField<1>(this));
Append(new ConversionField<SignedField<6> >(this, rssiAlarms.warning, -45));
Append(new SpareBitsField<2>(this));
Append(new ConversionField<SignedField<6> >(this, rssiAlarms.critical, -42));
if (version == 216) {
Append(new BoolField<1>(this, frsky.mAhPersistent));
Append(new UnsignedField<15>(this, frsky.storedMah));
@@ -2881,8 +2883,8 @@ class FrskyField: public StructField {
Append(new SignedField<4>(this, frsky.varioMin, "Vario Min"));
Append(new SignedField<4>(this, frsky.varioMax));
for (int i=0; i<2; i++) {
Append(new ConversionField< UnsignedField<2> >(this, frsky.rssiAlarms[i].level, &rssiConversionTable[i], "RSSI level"));
Append(new ConversionField< SignedField<6> >(this, frsky.rssiAlarms[i].value, -45+i*3, 0, 0, 100, "RSSI value"));
Append(new ConversionField< UnsignedField<2> >(this, rssiAlarms.level[i], &rssiConversionTable[i], "RSSI level"));
Append(new ConversionField< SignedField<6> >(this, i ==0 ? rssiAlarms.warning : rssiAlarms.critical, -45+i*3, 0, 0, 100, "RSSI value"));
}
for (int i=0; i<2; i++) {
Append(new FrskyScreenField(this, frsky.screens[i], board, version, variant));
@@ -3246,7 +3248,7 @@ OpenTxModelData::OpenTxModelData(ModelData & modelData, Board::Type board, unsig
}
if ((board != BOARD_STOCK && (board != BOARD_M128 || version < 215)) || (variant & FRSKY_VARIANT)) {
internalField.Append(new FrskyField(this, modelData.frsky, board, version, variant));
internalField.Append(new FrskyField(this, modelData.frsky, modelData.rssiAlarms, board, version, variant));
}
else if ((board == BOARD_STOCK || board == BOARD_M128) && (variant & MAVLINK_VARIANT)) {
internalField.Append(new MavlinkField(this, modelData.mavlink, board, version));
+19 -17
View File
@@ -829,24 +829,26 @@ void TelemetryPanel::setup()
}
ui->telemetryProtocol->setCurrentIndex(model->telemetryProtocol);
ui->ignoreSensorIds->setField(model->frsky.ignoreSensorIds, this);
ui->disableTelemetryAlarms->setField(model->rssiAlarms.disabled);
}
else {
ui->telemetryProtocolLabel->hide();
ui->telemetryProtocol->hide();
ui->ignoreSensorIds->hide();
ui->disableTelemetryAlarms->hide();
}
ui->rssiAlarm1SB->setValue(model->frsky.rssiAlarms[0].value);
ui->rssiAlarm2SB->setValue(model->frsky.rssiAlarms[1].value);
if (!IS_HORUS_OR_TARANIS(firmware->getBoard())) {
ui->rssiAlarm1CB->setCurrentIndex(model->frsky.rssiAlarms[0].level);
ui->rssiAlarm2CB->setCurrentIndex(model->frsky.rssiAlarms[1].level);
ui->rssiAlarmWarningSB->setValue(model->rssiAlarms.warning);
ui->rssiAlarmCriticalSB->setValue(model->rssiAlarms.critical);
if (!IS_ARM(firmware->getBoard())) {
ui->rssiAlarmWarningCB->setCurrentIndex(model->rssiAlarms.level[0]);
ui->rssiAlarmCriticalCB->setCurrentIndex(model->rssiAlarms.level[1]);
}
else {
ui->rssiAlarm1CB->hide();
ui->rssiAlarm2CB->hide();
ui->rssiAlarm1Label->setText(tr("Low Alarm"));
ui->rssiAlarm2Label->setText(tr("Critical Alarm"));
ui->rssiAlarmWarningCB->hide();
ui->rssiAlarmCriticalCB->hide();
ui->rssiAlarmWarningLabel->setText(tr("Low Alarm"));
ui->rssiAlarmCriticalLabel->setText(tr("Critical Alarm"));
}
/*if (IS_ARM(firmware->getBoard())) {
@@ -1001,27 +1003,27 @@ void TelemetryPanel::on_frskyProtoCB_currentIndexChanged(int index)
}
}
void TelemetryPanel::on_rssiAlarm1CB_currentIndexChanged(int index)
void TelemetryPanel::on_rssiAlarmWarningCB_currentIndexChanged(int index)
{
model->frsky.rssiAlarms[0].level = index;
model->rssiAlarms.level[0] = index;
emit modified();
}
void TelemetryPanel::on_rssiAlarm2CB_currentIndexChanged(int index)
void TelemetryPanel::on_rssiAlarmCriticalCB_currentIndexChanged(int index)
{
model->frsky.rssiAlarms[1].level = index;
model->rssiAlarms.level[1] = index;
emit modified();
}
void TelemetryPanel::on_rssiAlarm1SB_editingFinished()
void TelemetryPanel::on_rssiAlarmWarningSB_editingFinished()
{
model->frsky.rssiAlarms[0].value = ui->rssiAlarm1SB->value();
model->rssiAlarms.warning= ui->rssiAlarmWarningSB->value();
emit modified();
}
void TelemetryPanel::on_rssiAlarm2SB_editingFinished()
void TelemetryPanel::on_rssiAlarmCriticalSB_editingFinished()
{
model->frsky.rssiAlarms[1].value = ui->rssiAlarm2SB->value();
model->rssiAlarms.critical = ui->rssiAlarmCriticalSB->value();
emit modified();
}
+4 -4
View File
@@ -138,10 +138,10 @@ class TelemetryPanel : public ModelPanel
void onModified();
void on_frskyProtoCB_currentIndexChanged(int index);
void on_bladesCount_editingFinished();
void on_rssiAlarm1CB_currentIndexChanged(int index);
void on_rssiAlarm2CB_currentIndexChanged(int index);
void on_rssiAlarm1SB_editingFinished();
void on_rssiAlarm2SB_editingFinished();
void on_rssiAlarmWarningCB_currentIndexChanged(int index);
void on_rssiAlarmCriticalCB_currentIndexChanged(int index);
void on_rssiAlarmWarningSB_editingFinished();
void on_rssiAlarmCriticalSB_editingFinished();
void on_varioLimitMin_DSB_editingFinished();
void on_varioLimitMax_DSB_editingFinished();
void on_varioLimitCenterMin_DSB_editingFinished();
+84 -77
View File
@@ -74,8 +74,38 @@
<property name="bottomMargin">
<number>4</number>
</property>
<item row="2" column="1">
<widget class="QComboBox" name="rssiAlarmWarningCB">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>----</string>
</property>
</item>
<item>
<property name="text">
<string>Yellow</string>
</property>
</item>
<item>
<property name="text">
<string>Orange</string>
</property>
</item>
<item>
<property name="text">
<string>Red</string>
</property>
</item>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="rssiAlarm1Label">
<widget class="QLabel" name="rssiAlarmWarningLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">
<horstretch>0</horstretch>
@@ -96,8 +126,8 @@
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QComboBox" name="rssiAlarm1CB">
<item row="3" column="1">
<widget class="QComboBox" name="rssiAlarmCriticalCB">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
@@ -126,36 +156,8 @@
</item>
</widget>
</item>
<item row="2" column="2">
<widget class="QSpinBox" name="rssiAlarm1SB">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="suffix">
<string/>
</property>
<property name="minimum">
<number>20</number>
</property>
<property name="maximum">
<number>80</number>
</property>
<property name="singleStep">
<number>1</number>
</property>
<property name="value">
<number>50</number>
</property>
</widget>
</item>
<item row="3" column="0">
<widget class="QLabel" name="rssiAlarm2Label">
<widget class="QLabel" name="rssiAlarmCriticalLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">
<horstretch>0</horstretch>
@@ -173,38 +175,8 @@
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="QComboBox" name="rssiAlarm2CB">
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<item>
<property name="text">
<string>----</string>
</property>
</item>
<item>
<property name="text">
<string>Yellow</string>
</property>
</item>
<item>
<property name="text">
<string>Orange</string>
</property>
</item>
<item>
<property name="text">
<string>Red</string>
</property>
</item>
</widget>
</item>
<item row="3" column="2">
<widget class="QSpinBox" name="rssiAlarm2SB">
<widget class="QSpinBox" name="rssiAlarmCriticalSB">
<property name="enabled">
<bool>true</bool>
</property>
@@ -231,7 +203,48 @@
</property>
</widget>
</item>
<item row="4" column="0">
<item row="2" column="2">
<widget class="QSpinBox" name="rssiAlarmWarningSB">
<property name="enabled">
<bool>true</bool>
</property>
<property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="suffix">
<string/>
</property>
<property name="minimum">
<number>20</number>
</property>
<property name="maximum">
<number>80</number>
</property>
<property name="singleStep">
<number>1</number>
</property>
<property name="value">
<number>50</number>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="rssiLabel">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>RSSI</string>
</property>
</widget>
</item>
<item row="7" column="0">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
@@ -244,16 +257,10 @@
</property>
</spacer>
</item>
<item row="1" column="0">
<widget class="QLabel" name="rssiLabel">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<item row="4" column="0" colspan="2">
<widget class="AutoCheckBox" name="disableTelemetryAlarms">
<property name="text">
<string>RSSI</string>
<string>Disable telemetry audio warnings</string>
</property>
</widget>
</item>
@@ -1024,10 +1031,10 @@
</customwidgets>
<tabstops>
<tabstop>telemetryProtocol</tabstop>
<tabstop>rssiAlarm1CB</tabstop>
<tabstop>rssiAlarm1SB</tabstop>
<tabstop>rssiAlarm2CB</tabstop>
<tabstop>rssiAlarm2SB</tabstop>
<tabstop>rssiAlarmWarningCB</tabstop>
<tabstop>rssiAlarmWarningSB</tabstop>
<tabstop>rssiAlarmCriticalCB</tabstop>
<tabstop>rssiAlarmCriticalSB</tabstop>
<tabstop>varioSource</tabstop>
<tabstop>varioLimitMin_DSB</tabstop>
<tabstop>varioLimitCenterMin_DSB</tabstop>
+9 -4
View File
@@ -571,15 +571,20 @@ QString MultiModelPrinter::printTelemetry()
MultiColumns columns(modelPrinterMap.size());
columns.append("<table border='0' cellspacing='0' cellpadding='1' width='100%'>");
for (int i=0; i<2; i++) {
columns.append("<tr><td><b>" + QString(i==0 ? tr("RSSI Alarms") : "") + "</b></td><td>");
columns.append("<tr><td><b>" + QString(i == 0 ? tr("RSSI Alarms") : "") + "</b></td><td>");
if (IS_HORUS_OR_TARANIS(getCurrentBoard())) {
COMPARE(i==0 ? tr("Low Alarm") : tr("Critical Alarm"));
COMPARE(i == 0 ? tr("Low Alarm") : tr("Critical Alarm"));
}
else {
COMPARE(getFrSkyAlarmType(model->frsky.rssiAlarms[i].level));
COMPARE(getFrSkyAlarmType(model->rssiAlarms.level[i]));
}
columns.append("</td><td>&lt;</td><td>");
COMPARE(QString::number(model->frsky.rssiAlarms[i].value, 10));
if (i == 0) {
COMPARE(QString::number(model->rssiAlarms.warning, 10));
}
else {
COMPARE(QString::number(model->rssiAlarms.critical, 10));
}
columns.append("</td></tr>");
}
columns.append("</table><br/>");
+14 -6
View File
@@ -591,12 +591,20 @@ class FrSkyAlarmData {
void clear() { memset(this, 0, sizeof(FrSkyAlarmData)); }
};
class FrSkyRSSIAlarm {
class RSSIAlarmData {
public:
FrSkyRSSIAlarm() { clear(0, 50); }
unsigned int level;
int value;
void clear(unsigned int level, int value) { this->level = level; this->value = value;}
RSSIAlarmData() { clear(); }
unsigned int level[2]; // AVR Only
int warning;
int critical;
bool disabled;
void clear() {
this->level[0] = 2;
this->level[1] = 3;
this->warning = 42;
this->critical = 45;
this->disabled = false;
}
};
class FrSkyChannelData {
@@ -703,7 +711,6 @@ class FrSkyData {
unsigned int altitudeSource;
unsigned int currentSource;
FrSkyScreenData screens[4];
FrSkyRSSIAlarm rssiAlarms[2];
unsigned int varioSource;
bool varioCenterSilent;
int varioMin;
@@ -1066,6 +1073,7 @@ class ModelData {
MavlinkData mavlink;
unsigned int telemetryProtocol;
FrSkyData frsky;
RSSIAlarmData rssiAlarms;
char bitmap[10+1];