1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-16 12:55:12 +03:00

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

View file

@ -1392,8 +1392,6 @@ void FrSkyData::clear()
mAhPersistent = 0; mAhPersistent = 0;
storedMah = 0; storedMah = 0;
fasOffset = 0; fasOffset = 0;
rssiAlarms[0].clear(2, 45);
rssiAlarms[1].clear(3, 42);
for (int i=0; i<4; i++) for (int i=0; i<4; i++)
screens[i].clear(); screens[i].clear();
varioSource = 2/*VARIO*/; varioSource = 2/*VARIO*/;
@ -1560,6 +1558,7 @@ void ModelData::clear()
timers[i].clear(); timers[i].clear();
swashRingData.clear(); swashRingData.clear();
frsky.clear(); frsky.clear();
rssiAlarms.clear();
for (int i=0; i<CPN_MAX_SENSORS; i++) for (int i=0; i<CPN_MAX_SENSORS; i++)
sensorData[i].clear(); sensorData[i].clear();

View file

@ -2777,7 +2777,7 @@ class TelemetryCurrentSourceConversionTable: public ConversionTable
class FrskyField: public StructField { class FrskyField: public StructField {
public: 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"), StructField(parent, "FrSky"),
telemetryVarioSourceConversionTable(board, version), telemetryVarioSourceConversionTable(board, version),
screenTypesConversionTable(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.varioCenterMin));
Append(new SignedField<8>(this, frsky.varioMin)); Append(new SignedField<8>(this, frsky.varioMin));
Append(new SignedField<8>(this, frsky.varioMax)); Append(new SignedField<8>(this, frsky.varioMax));
for (int i=0; i<2; i++) { Append(new BoolField<1>(this, rssiAlarms.disabled));
Append(new ConversionField< UnsignedField<2> >(this, frsky.rssiAlarms[i].level, &rssiConversionTable[i], "RSSI")); Append(new SpareBitsField<1>(this));
Append(new ConversionField< SignedField<6> >(this, frsky.rssiAlarms[i].value, -45+i*3)); 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) { if (version == 216) {
Append(new BoolField<1>(this, frsky.mAhPersistent)); Append(new BoolField<1>(this, frsky.mAhPersistent));
Append(new UnsignedField<15>(this, frsky.storedMah)); 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.varioMin, "Vario Min"));
Append(new SignedField<4>(this, frsky.varioMax)); Append(new SignedField<4>(this, frsky.varioMax));
for (int i=0; i<2; i++) { for (int i=0; i<2; i++) {
Append(new ConversionField< UnsignedField<2> >(this, frsky.rssiAlarms[i].level, &rssiConversionTable[i], "RSSI level")); Append(new ConversionField< UnsignedField<2> >(this, rssiAlarms.level[i], &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< SignedField<6> >(this, i ==0 ? rssiAlarms.warning : rssiAlarms.critical, -45+i*3, 0, 0, 100, "RSSI value"));
} }
for (int i=0; i<2; i++) { for (int i=0; i<2; i++) {
Append(new FrskyScreenField(this, frsky.screens[i], board, version, variant)); 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)) { 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)) { else if ((board == BOARD_STOCK || board == BOARD_M128) && (variant & MAVLINK_VARIANT)) {
internalField.Append(new MavlinkField(this, modelData.mavlink, board, version)); internalField.Append(new MavlinkField(this, modelData.mavlink, board, version));

View file

@ -829,24 +829,26 @@ void TelemetryPanel::setup()
} }
ui->telemetryProtocol->setCurrentIndex(model->telemetryProtocol); ui->telemetryProtocol->setCurrentIndex(model->telemetryProtocol);
ui->ignoreSensorIds->setField(model->frsky.ignoreSensorIds, this); ui->ignoreSensorIds->setField(model->frsky.ignoreSensorIds, this);
ui->disableTelemetryAlarms->setField(model->rssiAlarms.disabled);
} }
else { else {
ui->telemetryProtocolLabel->hide(); ui->telemetryProtocolLabel->hide();
ui->telemetryProtocol->hide(); ui->telemetryProtocol->hide();
ui->ignoreSensorIds->hide(); ui->ignoreSensorIds->hide();
ui->disableTelemetryAlarms->hide();
} }
ui->rssiAlarm1SB->setValue(model->frsky.rssiAlarms[0].value); ui->rssiAlarmWarningSB->setValue(model->rssiAlarms.warning);
ui->rssiAlarm2SB->setValue(model->frsky.rssiAlarms[1].value); ui->rssiAlarmCriticalSB->setValue(model->rssiAlarms.critical);
if (!IS_HORUS_OR_TARANIS(firmware->getBoard())) { if (!IS_ARM(firmware->getBoard())) {
ui->rssiAlarm1CB->setCurrentIndex(model->frsky.rssiAlarms[0].level); ui->rssiAlarmWarningCB->setCurrentIndex(model->rssiAlarms.level[0]);
ui->rssiAlarm2CB->setCurrentIndex(model->frsky.rssiAlarms[1].level); ui->rssiAlarmCriticalCB->setCurrentIndex(model->rssiAlarms.level[1]);
} }
else { else {
ui->rssiAlarm1CB->hide(); ui->rssiAlarmWarningCB->hide();
ui->rssiAlarm2CB->hide(); ui->rssiAlarmCriticalCB->hide();
ui->rssiAlarm1Label->setText(tr("Low Alarm")); ui->rssiAlarmWarningLabel->setText(tr("Low Alarm"));
ui->rssiAlarm2Label->setText(tr("Critical Alarm")); ui->rssiAlarmCriticalLabel->setText(tr("Critical Alarm"));
} }
/*if (IS_ARM(firmware->getBoard())) { /*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(); 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(); 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(); 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(); emit modified();
} }

View file

@ -138,10 +138,10 @@ class TelemetryPanel : public ModelPanel
void onModified(); void onModified();
void on_frskyProtoCB_currentIndexChanged(int index); void on_frskyProtoCB_currentIndexChanged(int index);
void on_bladesCount_editingFinished(); void on_bladesCount_editingFinished();
void on_rssiAlarm1CB_currentIndexChanged(int index); void on_rssiAlarmWarningCB_currentIndexChanged(int index);
void on_rssiAlarm2CB_currentIndexChanged(int index); void on_rssiAlarmCriticalCB_currentIndexChanged(int index);
void on_rssiAlarm1SB_editingFinished(); void on_rssiAlarmWarningSB_editingFinished();
void on_rssiAlarm2SB_editingFinished(); void on_rssiAlarmCriticalSB_editingFinished();
void on_varioLimitMin_DSB_editingFinished(); void on_varioLimitMin_DSB_editingFinished();
void on_varioLimitMax_DSB_editingFinished(); void on_varioLimitMax_DSB_editingFinished();
void on_varioLimitCenterMin_DSB_editingFinished(); void on_varioLimitCenterMin_DSB_editingFinished();

View file

@ -74,8 +74,38 @@
<property name="bottomMargin"> <property name="bottomMargin">
<number>4</number> <number>4</number>
</property> </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"> <item row="2" column="0">
<widget class="QLabel" name="rssiAlarm1Label"> <widget class="QLabel" name="rssiAlarmWarningLabel">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">
<horstretch>0</horstretch> <horstretch>0</horstretch>
@ -96,8 +126,8 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="1"> <item row="3" column="1">
<widget class="QComboBox" name="rssiAlarm1CB"> <widget class="QComboBox" name="rssiAlarmCriticalCB">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
<horstretch>0</horstretch> <horstretch>0</horstretch>
@ -126,36 +156,8 @@
</item> </item>
</widget> </widget>
</item> </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"> <item row="3" column="0">
<widget class="QLabel" name="rssiAlarm2Label"> <widget class="QLabel" name="rssiAlarmCriticalLabel">
<property name="sizePolicy"> <property name="sizePolicy">
<sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum"> <sizepolicy hsizetype="MinimumExpanding" vsizetype="Minimum">
<horstretch>0</horstretch> <horstretch>0</horstretch>
@ -173,38 +175,8 @@
</property> </property>
</widget> </widget>
</item> </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"> <item row="3" column="2">
<widget class="QSpinBox" name="rssiAlarm2SB"> <widget class="QSpinBox" name="rssiAlarmCriticalSB">
<property name="enabled"> <property name="enabled">
<bool>true</bool> <bool>true</bool>
</property> </property>
@ -231,7 +203,48 @@
</property> </property>
</widget> </widget>
</item> </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"> <spacer name="verticalSpacer_2">
<property name="orientation"> <property name="orientation">
<enum>Qt::Vertical</enum> <enum>Qt::Vertical</enum>
@ -244,16 +257,10 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="1" column="0"> <item row="4" column="0" colspan="2">
<widget class="QLabel" name="rssiLabel"> <widget class="AutoCheckBox" name="disableTelemetryAlarms">
<property name="font">
<font>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text"> <property name="text">
<string>RSSI</string> <string>Disable telemetry audio warnings</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -1024,10 +1031,10 @@
</customwidgets> </customwidgets>
<tabstops> <tabstops>
<tabstop>telemetryProtocol</tabstop> <tabstop>telemetryProtocol</tabstop>
<tabstop>rssiAlarm1CB</tabstop> <tabstop>rssiAlarmWarningCB</tabstop>
<tabstop>rssiAlarm1SB</tabstop> <tabstop>rssiAlarmWarningSB</tabstop>
<tabstop>rssiAlarm2CB</tabstop> <tabstop>rssiAlarmCriticalCB</tabstop>
<tabstop>rssiAlarm2SB</tabstop> <tabstop>rssiAlarmCriticalSB</tabstop>
<tabstop>varioSource</tabstop> <tabstop>varioSource</tabstop>
<tabstop>varioLimitMin_DSB</tabstop> <tabstop>varioLimitMin_DSB</tabstop>
<tabstop>varioLimitCenterMin_DSB</tabstop> <tabstop>varioLimitCenterMin_DSB</tabstop>

View file

@ -571,15 +571,20 @@ QString MultiModelPrinter::printTelemetry()
MultiColumns columns(modelPrinterMap.size()); MultiColumns columns(modelPrinterMap.size());
columns.append("<table border='0' cellspacing='0' cellpadding='1' width='100%'>"); columns.append("<table border='0' cellspacing='0' cellpadding='1' width='100%'>");
for (int i=0; i<2; i++) { 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())) { 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 { else {
COMPARE(getFrSkyAlarmType(model->frsky.rssiAlarms[i].level)); COMPARE(getFrSkyAlarmType(model->rssiAlarms.level[i]));
} }
columns.append("</td><td>&lt;</td><td>"); 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("</td></tr>");
} }
columns.append("</table><br/>"); columns.append("</table><br/>");

View file

@ -591,12 +591,20 @@ class FrSkyAlarmData {
void clear() { memset(this, 0, sizeof(FrSkyAlarmData)); } void clear() { memset(this, 0, sizeof(FrSkyAlarmData)); }
}; };
class FrSkyRSSIAlarm { class RSSIAlarmData {
public: public:
FrSkyRSSIAlarm() { clear(0, 50); } RSSIAlarmData() { clear(); }
unsigned int level; unsigned int level[2]; // AVR Only
int value; int warning;
void clear(unsigned int level, int value) { this->level = level; this->value = value;} 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 { class FrSkyChannelData {
@ -703,7 +711,6 @@ class FrSkyData {
unsigned int altitudeSource; unsigned int altitudeSource;
unsigned int currentSource; unsigned int currentSource;
FrSkyScreenData screens[4]; FrSkyScreenData screens[4];
FrSkyRSSIAlarm rssiAlarms[2];
unsigned int varioSource; unsigned int varioSource;
bool varioCenterSilent; bool varioCenterSilent;
int varioMin; int varioMin;
@ -1066,6 +1073,7 @@ class ModelData {
MavlinkData mavlink; MavlinkData mavlink;
unsigned int telemetryProtocol; unsigned int telemetryProtocol;
FrSkyData frsky; FrSkyData frsky;
RSSIAlarmData rssiAlarms;
char bitmap[10+1]; char bitmap[10+1];

View file

@ -468,11 +468,22 @@ PACK(struct ScriptData {
/* /*
* Frsky Telemetry structure * Frsky Telemetry structure
*/ */
#if defined(CPUARM)
PACK(struct RssiAlarmData {
int8_t disabled:1;
int8_t spare:1;
int8_t warning:6;
int8_t spare2:2;
int8_t critical:6;
inline int8_t getWarningRssi() {return 45 + warning;}
inline int8_t getCriticalRssi() {return 42 + critical;}
});
#else
PACK(struct FrSkyRSSIAlarm { PACK(struct FrSkyRSSIAlarm {
int8_t level:2; int8_t level:2;
int8_t value:6; int8_t value:6;
}); });
#endif
#if defined(CPUARM) #if defined(CPUARM)
typedef int16_t ls_telemetry_value_t; typedef int16_t ls_telemetry_value_t;
@ -508,27 +519,15 @@ union FrSkyScreenData {
#endif #endif
#if defined(COLORLCD) #if defined(COLORLCD)
PACK(struct FrSkyTelemetryData { PACK(struct FrSkyTelemetryData { // TODO EEPROM change, rename to VarioData
uint8_t varioSource:7; uint8_t varioSource:7;
uint8_t varioCenterSilent:1; uint8_t varioCenterSilent:1;
int8_t varioCenterMax; int8_t varioCenterMax;
int8_t varioCenterMin; int8_t varioCenterMin;
int8_t varioMin; int8_t varioMin;
int8_t varioMax; int8_t varioMax;
FrSkyRSSIAlarm rssiAlarms[2];
}); });
#elif defined(CPUARM) #elif defined(CPUARM)
PACK(struct FrSkyChannelData {
uint8_t ratio; // 0.0 means not used, 0.1V steps EG. 6.6 Volts = 66. 25.1V = 251, etc.
int16_t offset:12;
uint16_t type:4; // channel unit (0=volts, ...)
uint8_t alarms_value[2]; // 0.1V steps EG. 6.6 Volts = 66. 25.1V = 251, etc.
uint8_t alarms_level:4;
uint8_t alarms_greater:2; // 0=LT(<), 1=GT(>)
uint8_t spare:2;
uint8_t multiplier; // 0=no multiplier, 1=*2 multiplier
});
// TODO remove this also on Taranis // TODO remove this also on Taranis
PACK(struct FrSkyTelemetryData { PACK(struct FrSkyTelemetryData {
uint8_t voltsSource; uint8_t voltsSource;
@ -541,7 +540,6 @@ PACK(struct FrSkyTelemetryData {
int8_t varioCenterMin; int8_t varioCenterMin;
int8_t varioMin; int8_t varioMin;
int8_t varioMax; int8_t varioMax;
FrSkyRSSIAlarm rssiAlarms[2];
}); });
#else #else
PACK(struct FrSkyChannelData { PACK(struct FrSkyChannelData {
@ -756,7 +754,9 @@ typedef uint8_t swarnenable_t;
#define MODEL_GVARS_DATA GVarData gvars[MAX_GVARS]; #define MODEL_GVARS_DATA GVarData gvars[MAX_GVARS];
#endif #endif
#if defined(TELEMETRY_MAVLINK) #if defined(CPUARM)
#define TELEMETRY_DATA NOBACKUP(FrSkyTelemetryData frsky); NOBACKUP(RssiAlarmData rssiAlarms);
#elif defined(TELEMETRY_MAVLINK)
#define TELEMETRY_DATA MavlinkTelemetryData mavlink; #define TELEMETRY_DATA MavlinkTelemetryData mavlink;
#elif defined(TELEMETRY_FRSKY) || !defined(PCBSTD) #elif defined(TELEMETRY_FRSKY) || !defined(PCBSTD)
#define TELEMETRY_DATA NOBACKUP(FrSkyTelemetryData frsky); #define TELEMETRY_DATA NOBACKUP(FrSkyTelemetryData frsky);
@ -1082,7 +1082,7 @@ static inline void check_struct()
CHKSIZE(FrSkyBarData, 6); CHKSIZE(FrSkyBarData, 6);
CHKSIZE(FrSkyLineData, 4); CHKSIZE(FrSkyLineData, 4);
CHKTYPE(union FrSkyScreenData, 24); CHKTYPE(union FrSkyScreenData, 24);
CHKSIZE(FrSkyTelemetryData, 106); CHKSIZE(FrSkyTelemetryData, 104);
CHKSIZE(ModelHeader, 12); CHKSIZE(ModelHeader, 12);
CHKSIZE(CurveData, 4); CHKSIZE(CurveData, 4);
@ -1101,7 +1101,7 @@ static inline void check_struct()
CHKSIZE(FrSkyBarData, 6); CHKSIZE(FrSkyBarData, 6);
CHKSIZE(FrSkyLineData, 6); CHKSIZE(FrSkyLineData, 6);
CHKTYPE(union FrSkyScreenData, 24); CHKTYPE(union FrSkyScreenData, 24);
CHKSIZE(FrSkyTelemetryData, 106); CHKSIZE(FrSkyTelemetryData, 104);
CHKSIZE(ModelHeader, 24); CHKSIZE(ModelHeader, 24);
CHKSIZE(CurveData, 4); CHKSIZE(CurveData, 4);
#if defined(PCBX9E) #if defined(PCBX9E)
@ -1123,7 +1123,7 @@ static inline void check_struct()
CHKSIZE(TimerData, 16); CHKSIZE(TimerData, 16);
CHKSIZE(SwashRingData, 8); CHKSIZE(SwashRingData, 8);
CHKSIZE(FrSkyTelemetryData, 7); CHKSIZE(FrSkyTelemetryData, 5);
CHKSIZE(ModelHeader, 27); CHKSIZE(ModelHeader, 27);
CHKSIZE(CurveData, 4); CHKSIZE(CurveData, 4);
CHKSIZE(RadioData, 847); CHKSIZE(RadioData, 847);
@ -1140,7 +1140,7 @@ static inline void check_struct()
CHKSIZE(SwashRingData, 8); CHKSIZE(SwashRingData, 8);
CHKSIZE(FrSkyBarData, 5); CHKSIZE(FrSkyBarData, 5);
CHKSIZE(FrSkyLineData, 2); CHKSIZE(FrSkyLineData, 2);
CHKSIZE(FrSkyTelemetryData, 90); CHKSIZE(FrSkyTelemetryData, 88);
CHKSIZE(ModelHeader, 12); CHKSIZE(ModelHeader, 12);
CHKTYPE(CurveData, 4); CHKTYPE(CurveData, 4);
CHKSIZE(RadioData, 727); CHKSIZE(RadioData, 727);
@ -1184,9 +1184,6 @@ static inline void check_struct()
#if defined(CPUARM) #if defined(CPUARM)
CHKSIZE(LogicalSwitchData, 9); CHKSIZE(LogicalSwitchData, 9);
#if !defined(COLORLCD)
CHKSIZE(FrSkyChannelData, 7);
#endif
CHKSIZE(TelemetrySensor, 13); CHKSIZE(TelemetrySensor, 13);
CHKSIZE(ModuleData,70); CHKSIZE(ModuleData,70);
#else #else
@ -1199,7 +1196,11 @@ static inline void check_struct()
CHKSIZE(GVarData, 7); CHKSIZE(GVarData, 7);
#endif #endif
#if defined(CPUARM)
CHKSIZE(RssiAlarmData, 2);
#else
CHKSIZE(FrSkyRSSIAlarm, 1); CHKSIZE(FrSkyRSSIAlarm, 1);
#endif
CHKSIZE(TrainerData, 16); CHKSIZE(TrainerData, 16);
#undef CHKSIZE #undef CHKSIZE

View file

@ -41,6 +41,7 @@ enum MenuModelTelemetryFrskyItems {
ITEM_TELEMETRY_RSSI_ALARM1, ITEM_TELEMETRY_RSSI_ALARM1,
ITEM_TELEMETRY_RSSI_ALARM2, ITEM_TELEMETRY_RSSI_ALARM2,
#if defined(CPUARM) #if defined(CPUARM)
ITEM_TELEMETRY_DISABLE_ALARMS,
ITEM_TELEMETRY_SENSORS_LABEL, ITEM_TELEMETRY_SENSORS_LABEL,
ITEM_TELEMETRY_SENSOR1, ITEM_TELEMETRY_SENSOR1,
ITEM_TELEMETRY_SENSOR2, ITEM_TELEMETRY_SENSOR2,
@ -151,7 +152,7 @@ enum MenuModelTelemetryFrskyItems {
#endif #endif
#if defined(CPUARM) #if defined(CPUARM)
#define RSSI_ROWS LABEL(RSSI), 0, 0, #define RSSI_ROWS LABEL(RSSI), 0, 0, 1,
#else #else
#define RSSI_ROWS LABEL(RSSI), 1, 1, #define RSSI_ROWS LABEL(RSSI), 1, 1,
#endif #endif
@ -704,14 +705,18 @@ void menuModelTelemetryFrsky(event_t event)
case ITEM_TELEMETRY_RSSI_ALARM1: case ITEM_TELEMETRY_RSSI_ALARM1:
case ITEM_TELEMETRY_RSSI_ALARM2: { case ITEM_TELEMETRY_RSSI_ALARM2: {
uint8_t alarm = k-ITEM_TELEMETRY_RSSI_ALARM1;
#if defined(CPUARM) #if defined(CPUARM)
lcdDrawTextAlignedLeft(y, (alarm==0 ? STR_LOWALARM : STR_CRITICALALARM)); bool warning = (k==ITEM_TELEMETRY_RSSI_ALARM1);
lcdDrawNumber(LCD_W, y, getRssiAlarmValue(alarm), RIGHT | attr, 3); lcdDrawTextAlignedLeft(y, (warning ? STR_LOWALARM : STR_CRITICALALARM));
lcdDrawNumber(LCD_W, y, warning? g_model.rssiAlarms.getWarningRssi() : g_model.rssiAlarms.getCriticalRssi(), RIGHT | attr, 3);
if (attr && s_editMode>0) { if (attr && s_editMode>0) {
CHECK_INCDEC_MODELVAR(event, g_model.frsky.rssiAlarms[alarm].value, -30, 30); if (warning)
} CHECK_INCDEC_MODELVAR(event, g_model.rssiAlarms.warning, -30, 30);
else
CHECK_INCDEC_MODELVAR(event, g_model.rssiAlarms.critical, -30, 30);
}
#else // CPUARM #else // CPUARM
uint8_t alarm = (k-ITEM_TELEMETRY_RSSI_ALARM1);
lcdDrawTextAlignedLeft(y, STR_ALARM); lcdDrawTextAlignedLeft(y, STR_ALARM);
lcdDrawTextAtIndex(TELEM_COL2, y, STR_VALARM, ((2+alarm+g_model.frsky.rssiAlarms[alarm].level)%4), menuHorizontalPosition<=0 ? attr : 0); lcdDrawTextAtIndex(TELEM_COL2, y, STR_VALARM, ((2+alarm+g_model.frsky.rssiAlarms[alarm].level)%4), menuHorizontalPosition<=0 ? attr : 0);
lcdDrawChar(TELEM_COL2+4*FW, y, '<'); lcdDrawChar(TELEM_COL2+4*FW, y, '<');
@ -729,7 +734,11 @@ void menuModelTelemetryFrsky(event_t event)
#endif // CPUARM #endif // CPUARM
break; break;
} }
#if defined(CPUARM)
case ITEM_TELEMETRY_DISABLE_ALARMS:
g_model.rssiAlarms.disabled = editCheckBox(g_model.rssiAlarms.disabled, LCD_W - 10, y, STR_DISABLE_ALARM, attr, event);
break;
#endif
#if !defined(CPUARM) #if !defined(CPUARM)
#if defined(FRSKY_HUB) || defined(WS_HOW_HIGH) #if defined(FRSKY_HUB) || defined(WS_HOW_HIGH)
case ITEM_TELEMETRY_USR_LABEL: case ITEM_TELEMETRY_USR_LABEL:

View file

@ -43,7 +43,7 @@ void displayRssiLine()
lcdDrawText(lcdLastLeftPos,STATUS_BAR_Y, "RSSI : ", RIGHT | SMLSIZE); lcdDrawText(lcdLastLeftPos,STATUS_BAR_Y, "RSSI : ", RIGHT | SMLSIZE);
lcdDrawRect(65, 57, 38, 7); lcdDrawRect(65, 57, 38, 7);
uint8_t v = 4*rssi/11; uint8_t v = 4*rssi/11;
lcdDrawFilledRect(66+36-v, 58, v, 5, (rssi < getRssiAlarmValue(0)) ? DOTTED : SOLID); lcdDrawFilledRect(66+36-v, 58, v, 5, (rssi < g_model.rssiAlarms.getWarningRssi()) ? DOTTED : SOLID);
#else #else
rssi = min((uint8_t)99, telemetryData.rssi[1].value); rssi = min((uint8_t)99, telemetryData.rssi[1].value);
lcdDrawTextAlignedLeft(STATUS_BAR_Y, STR_TX); lcdDrawNumber(4*FW+1, STATUS_BAR_Y, rssi, LEADING0, 2); lcdDrawTextAlignedLeft(STATUS_BAR_Y, STR_TX); lcdDrawNumber(4*FW+1, STATUS_BAR_Y, rssi, LEADING0, 2);

View file

@ -25,6 +25,7 @@ enum MenuModelTelemetryFrskyItems {
ITEM_TELEMETRY_RSSI_LABEL, ITEM_TELEMETRY_RSSI_LABEL,
ITEM_TELEMETRY_RSSI_ALARM1, ITEM_TELEMETRY_RSSI_ALARM1,
ITEM_TELEMETRY_RSSI_ALARM2, ITEM_TELEMETRY_RSSI_ALARM2,
ITEM_TELEMETRY_DISABLE_ALARMS,
ITEM_TELEMETRY_SENSORS_LABEL, ITEM_TELEMETRY_SENSORS_LABEL,
ITEM_TELEMETRY_SENSOR1, ITEM_TELEMETRY_SENSOR1,
ITEM_TELEMETRY_SENSOR2, ITEM_TELEMETRY_SENSOR2,
@ -85,7 +86,7 @@ enum MenuModelTelemetryFrskyItems {
#else #else
#define VARIO_ROWS #define VARIO_ROWS
#endif #endif
#define RSSI_ROWS LABEL(RSSI), 0, 0, #define RSSI_ROWS LABEL(RSSI), 0, 0, 0,
#define VARIO_RANGE_ROWS 3 #define VARIO_RANGE_ROWS 3
#define TELEMETRY_TYPE_ROWS (g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM) ? (uint8_t)0 : HIDDEN_ROW, #define TELEMETRY_TYPE_ROWS (g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM) ? (uint8_t)0 : HIDDEN_ROW,
@ -526,14 +527,20 @@ void menuModelTelemetryFrsky(event_t event)
case ITEM_TELEMETRY_RSSI_ALARM1: case ITEM_TELEMETRY_RSSI_ALARM1:
case ITEM_TELEMETRY_RSSI_ALARM2: { case ITEM_TELEMETRY_RSSI_ALARM2: {
uint8_t alarm = k-ITEM_TELEMETRY_RSSI_ALARM1; bool warning = (k==ITEM_TELEMETRY_RSSI_ALARM1);
lcdDrawTextAlignedLeft(y, (alarm==0 ? STR_LOWALARM : STR_CRITICALALARM)); lcdDrawTextAlignedLeft(y, (warning ? STR_LOWALARM : STR_CRITICALALARM));
lcdDrawNumber(TELEM_COL2, y, getRssiAlarmValue(alarm), LEFT|attr, 3); lcdDrawNumber(TELEM_COL2, y, warning? g_model.rssiAlarms.getWarningRssi() : g_model.rssiAlarms.getCriticalRssi(), LEFT|attr, 3);
if (attr && s_editMode>0) { if (attr && s_editMode>0) {
CHECK_INCDEC_MODELVAR(event, g_model.frsky.rssiAlarms[alarm].value, -30, 30); if (warning)
CHECK_INCDEC_MODELVAR(event, g_model.rssiAlarms.warning, -30, 30);
else
CHECK_INCDEC_MODELVAR(event, g_model.rssiAlarms.critical, -30, 30);
} }
break; break;
} }
case ITEM_TELEMETRY_DISABLE_ALARMS:
g_model.rssiAlarms.disabled = editCheckBox(g_model.rssiAlarms.disabled, TELEM_COL3, y, STR_DISABLE_ALARM, attr, event);
break;
#if defined(VARIO) #if defined(VARIO)
case ITEM_TELEMETRY_VARIO_LABEL: case ITEM_TELEMETRY_VARIO_LABEL:

View file

@ -299,7 +299,7 @@ void displayTopBar()
/* The inside of the RSSI gauge */ /* The inside of the RSSI gauge */
if (TELEMETRY_RSSI() > 0) { if (TELEMETRY_RSSI() > 0) {
displayTopBarGauge(batt_icon_x+5*FW, TELEMETRY_RSSI() / 10, TELEMETRY_RSSI() < getRssiAlarmValue(0)); displayTopBarGauge(batt_icon_x+5*FW, TELEMETRY_RSSI() / 10, TELEMETRY_RSSI() < g_model.rssiAlarms.getWarningRssi());
} }
} }

View file

@ -36,7 +36,7 @@ void displayRssiLine()
lcdDrawSizedText(0, STATUS_BAR_Y, STR_RX, 2); lcdDrawSizedText(0, STATUS_BAR_Y, STR_RX, 2);
lcdDrawNumber(4*FW, STATUS_BAR_Y, rssi, LEADING0|RIGHT, 2); lcdDrawNumber(4*FW, STATUS_BAR_Y, rssi, LEADING0|RIGHT, 2);
lcdDrawRect(BAR_LEFT, 57, 78, 7); lcdDrawRect(BAR_LEFT, 57, 78, 7);
lcdDrawFilledRect(BAR_LEFT+1, 58, 19*rssi/25, 5, (rssi < getRssiAlarmValue(0)) ? DOTTED : SOLID); lcdDrawFilledRect(BAR_LEFT+1, 58, 19*rssi/25, 5, (rssi < g_model.rssiAlarms.getWarningRssi()) ? DOTTED : SOLID);
} }
else { else {
lcdDrawText(7*FW, STATUS_BAR_Y, STR_NODATA, BLINK); lcdDrawText(7*FW, STATUS_BAR_Y, STR_NODATA, BLINK);

View file

@ -25,6 +25,7 @@ enum MenuModelTelemetryFrskyItems {
ITEM_TELEMETRY_RSSI_LABEL, ITEM_TELEMETRY_RSSI_LABEL,
ITEM_TELEMETRY_RSSI_ALARM1, ITEM_TELEMETRY_RSSI_ALARM1,
ITEM_TELEMETRY_RSSI_ALARM2, ITEM_TELEMETRY_RSSI_ALARM2,
ITEM_TELEMETRY_DISABLE_ALARMS,
ITEM_TELEMETRY_SENSORS_LABEL, ITEM_TELEMETRY_SENSORS_LABEL,
ITEM_TELEMETRY_SENSOR1, ITEM_TELEMETRY_SENSOR1,
ITEM_TELEMETRY_SENSOR2, ITEM_TELEMETRY_SENSOR2,
@ -87,7 +88,7 @@ enum MenuModelTelemetryFrskyItems {
#else #else
#define VARIO_ROWS #define VARIO_ROWS
#endif #endif
#define RSSI_ROWS LABEL(RSSI), 0, 0, #define RSSI_ROWS LABEL(RSSI), 0, 0, 0,
#define VARIO_RANGE_ROWS 3 #define VARIO_RANGE_ROWS 3
#define TELEMETRY_TYPE_ROWS (g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM) ? (uint8_t)0 : HIDDEN_ROW, #define TELEMETRY_TYPE_ROWS (g_model.moduleData[INTERNAL_MODULE].rfProtocol == RF_PROTO_OFF && g_model.moduleData[EXTERNAL_MODULE].type == MODULE_TYPE_PPM) ? (uint8_t)0 : HIDDEN_ROW,
@ -533,15 +534,22 @@ bool menuModelTelemetryFrsky(event_t event)
case ITEM_TELEMETRY_RSSI_ALARM1: case ITEM_TELEMETRY_RSSI_ALARM1:
case ITEM_TELEMETRY_RSSI_ALARM2: { case ITEM_TELEMETRY_RSSI_ALARM2: {
uint8_t alarm = k-ITEM_TELEMETRY_RSSI_ALARM1; bool warning = (k==ITEM_TELEMETRY_RSSI_ALARM1);
lcdDrawText(MENUS_MARGIN_LEFT, y, (alarm==0 ? STR_LOWALARM : STR_CRITICALALARM)); lcdDrawText(MENUS_MARGIN_LEFT, y, (warning ? STR_LOWALARM : STR_CRITICALALARM));
lcdDrawNumber(TELEM_COL2, y, getRssiAlarmValue(alarm), LEFT|attr, 3); lcdDrawNumber(TELEM_COL2, y, warning? g_model.rssiAlarms.getWarningRssi() : g_model.rssiAlarms.getCriticalRssi(), LEFT|attr, 3);
if (attr && s_editMode>0) { if (attr && s_editMode>0) {
CHECK_INCDEC_MODELVAR(event, g_model.frsky.rssiAlarms[alarm].value, -30, 30); if (warning)
CHECK_INCDEC_MODELVAR(event, g_model.rssiAlarms.warning, -30, 30);
else
CHECK_INCDEC_MODELVAR(event, g_model.rssiAlarms.critical, -30, 30);
} }
break; break;
} }
case ITEM_TELEMETRY_DISABLE_ALARMS:
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_DISABLE_ALARM);
g_model.rssiAlarms.disabled = editCheckBox(g_model.rssiAlarms.disabled, TELEM_COL3, y, attr, event);
break;
#if defined(VARIO) #if defined(VARIO)
case ITEM_TELEMETRY_VARIO_LABEL: case ITEM_TELEMETRY_VARIO_LABEL:
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_VARIO); lcdDrawText(MENUS_MARGIN_LEFT, y, STR_VARIO);

View file

@ -1085,8 +1085,8 @@ Get RSSI value as well as low and critical RSSI alarm levels (in dB)
static int luaGetRSSI(lua_State * L) static int luaGetRSSI(lua_State * L)
{ {
lua_pushunsigned(L, min((uint8_t)99, TELEMETRY_RSSI())); lua_pushunsigned(L, min((uint8_t)99, TELEMETRY_RSSI()));
lua_pushunsigned(L, getRssiAlarmValue(0)); lua_pushunsigned(L, g_model.rssiAlarms.getWarningRssi());
lua_pushunsigned(L, getRssiAlarmValue(1)); lua_pushunsigned(L, g_model.rssiAlarms.getCriticalRssi());
return 3; return 3;
} }

View file

@ -1036,6 +1036,13 @@ void checkFailsafe()
#else #else
#define checkFailsafe() #define checkFailsafe()
#endif #endif
#if defined(CPUARM)
void checkRSSIAlaramsDisabled()
{
if (g_model.rssiAlarms.disabled)
ALERT(STR_RSSIALARM_WARN, STR_NO_RSSIALARM, AU_ERROR);
}
#endif
#if defined(GUI) #if defined(GUI)
void checkAll() void checkAll()
@ -1053,6 +1060,9 @@ void checkAll()
checkSwitches(); checkSwitches();
checkFailsafe(); checkFailsafe();
#endif #endif
#if defined(CPUARM)
checkRSSIAlaramsDisabled();
#endif
#if defined(SDCARD) && defined(CPUARM) #if defined(SDCARD) && defined(CPUARM)
checkSDVersion(); checkSDVersion();

View file

@ -1532,7 +1532,9 @@ inline int div_and_round(int num, int den)
} }
#if defined(TELEMETRY_FRSKY) #if defined(TELEMETRY_FRSKY)
#if !defined(CPUARM)
NOINLINE uint8_t getRssiAlarmValue(uint8_t alarm); NOINLINE uint8_t getRssiAlarmValue(uint8_t alarm);
#endif
extern const pm_uint8_t bchunit_ar[]; extern const pm_uint8_t bchunit_ar[];

View file

@ -436,8 +436,14 @@ typedef union {
FrSkyLineData_v216 lines[4]; FrSkyLineData_v216 lines[4];
} FrSkyScreenData_v216; } FrSkyScreenData_v216;
PACK(struct FrSkyChannelData_v216 {
uint8_t unused[7];
});
PACK(typedef struct { PACK(typedef struct {
FrSkyChannelData channels[4]; FrSkyChannelData_v216 channels[4];
uint8_t usrProto; // Protocol in FrSky user data, 0=None, 1=FrSky hub, 2=WS HowHigh, 3=Halcyon uint8_t usrProto; // Protocol in FrSky user data, 0=None, 1=FrSky hub, 2=WS HowHigh, 3=Halcyon
uint8_t voltsSource:7; uint8_t voltsSource:7;
uint8_t altitudeDisplayed:1; uint8_t altitudeDisplayed:1;
@ -450,7 +456,7 @@ PACK(typedef struct {
int8_t varioCenterMin; int8_t varioCenterMin;
int8_t varioMin; int8_t varioMin;
int8_t varioMax; int8_t varioMax;
FrSkyRSSIAlarm rssiAlarms[2]; uint8_t rssiAlarms[2];
uint16_t mAhPersistent:1; uint16_t mAhPersistent:1;
uint16_t storedMah:15; uint16_t storedMah:15;
int8_t fasOffset; int8_t fasOffset;
@ -613,6 +619,7 @@ PACK(typedef struct {
GVarData gvars[MAX_GVARS]; GVarData gvars[MAX_GVARS];
FrSkyTelemetryData frsky; FrSkyTelemetryData frsky;
RssiAlarmData rssiAlarms;
MODELDATA_EXTRA_217 MODELDATA_EXTRA_217
@ -1007,7 +1014,7 @@ void ConvertModel_216_to_217(ModelData & model)
newModel.switchWarningEnable = oldModel.switchWarningEnable; newModel.switchWarningEnable = oldModel.switchWarningEnable;
memcpy(newModel.gvars, oldModel.gvars, sizeof(newModel.gvars)); memcpy(newModel.gvars, oldModel.gvars, sizeof(newModel.gvars));
memcpy(&newModel.frsky.rssiAlarms, &oldModel.frsky.rssiAlarms, sizeof(newModel.frsky.rssiAlarms)); memcpy(&newModel.rssiAlarms, &oldModel.frsky.rssiAlarms, sizeof(newModel.rssiAlarms));
for (int i=0; i<NUM_MODULES+1; i++) { for (int i=0; i<NUM_MODULES+1; i++) {
newModel.moduleData[i].type = 0; newModel.moduleData[i].type = 0;

View file

@ -174,7 +174,7 @@ void telemetryWakeup()
} }
} }
} }
if (sensor_lost && TELEMETRY_STREAMING()) { if (sensor_lost && TELEMETRY_STREAMING() && !g_model.rssiAlarms.disabled) {
audioEvent(AU_SENSOR_LOST); audioEvent(AU_SENSOR_LOST);
} }
@ -188,27 +188,29 @@ void telemetryWakeup()
} }
#endif #endif
if (TELEMETRY_STREAMING()) { if (!g_model.rssiAlarms.disabled) {
if (getRssiAlarmValue(1) && TELEMETRY_RSSI() < getRssiAlarmValue(1)) { if (TELEMETRY_STREAMING()) {
AUDIO_RSSI_RED(); if (TELEMETRY_RSSI() < g_model.rssiAlarms.getCriticalRssi() ) {
SCHEDULE_NEXT_ALARMS_CHECK(10/*seconds*/); AUDIO_RSSI_RED();
SCHEDULE_NEXT_ALARMS_CHECK(10/*seconds*/);
}
else if (TELEMETRY_RSSI() < g_model.rssiAlarms.getWarningRssi() ) {
AUDIO_RSSI_ORANGE();
SCHEDULE_NEXT_ALARMS_CHECK(10/*seconds*/);
}
} }
else if (getRssiAlarmValue(0) && TELEMETRY_RSSI() < getRssiAlarmValue(0)) {
AUDIO_RSSI_ORANGE();
SCHEDULE_NEXT_ALARMS_CHECK(10/*seconds*/);
}
}
}
if (TELEMETRY_STREAMING()) { if (TELEMETRY_STREAMING()) {
if (telemetryState == TELEMETRY_KO) { if (telemetryState == TELEMETRY_KO) {
AUDIO_TELEMETRY_BACK(); AUDIO_TELEMETRY_BACK();
}
telemetryState = TELEMETRY_OK;
}
else if (telemetryState == TELEMETRY_OK) {
telemetryState = TELEMETRY_KO;
AUDIO_TELEMETRY_LOST();
}
} }
telemetryState = TELEMETRY_OK;
}
else if (telemetryState == TELEMETRY_OK) {
telemetryState = TELEMETRY_KO;
AUDIO_TELEMETRY_LOST();
} }
#endif #endif
} }
@ -439,10 +441,12 @@ void telemetryInit()
} }
#endif #endif
#if !defined(CPUARM)
NOINLINE uint8_t getRssiAlarmValue(uint8_t alarm) NOINLINE uint8_t getRssiAlarmValue(uint8_t alarm)
{ {
return (45 - 3*alarm + g_model.frsky.rssiAlarms[alarm].value); return (45 - 3*alarm + g_model.frsky.rssiAlarms[alarm].value);
} }
#endif
#if defined(LOG_TELEMETRY) && !defined(SIMU) #if defined(LOG_TELEMETRY) && !defined(SIMU)
extern FIL g_telemetryFile; extern FIL g_telemetryFile;

View file

@ -604,10 +604,13 @@ const pm_char STR_BLCOLOR[] PROGMEM = TR_BLCOLOR;
const pm_char STR_PREFLIGHT[] PROGMEM = TR_PREFLIGHT; const pm_char STR_PREFLIGHT[] PROGMEM = TR_PREFLIGHT;
const pm_char STR_CHECKLIST[] PROGMEM = TR_CHECKLIST; const pm_char STR_CHECKLIST[] PROGMEM = TR_CHECKLIST;
const pm_char STR_VIEW_NOTES[] PROGMEM = TR_VIEW_NOTES; const pm_char STR_VIEW_NOTES[] PROGMEM = TR_VIEW_NOTES;
const pm_char STR_MODEL_SELECT[] PROGMEM = TR_MODEL_SELECT; const pm_char STR_MODEL_SELECT[] PROGMEM = TR_MODEL_SELECT;
const pm_char STR_RESET_SUBMENU[] PROGMEM = TR_RESET_SUBMENU; const pm_char STR_RESET_SUBMENU[] PROGMEM = TR_RESET_SUBMENU;
const pm_char STR_LOWALARM[] PROGMEM = TR_LOWALARM; const pm_char STR_LOWALARM[] PROGMEM = TR_LOWALARM;
const pm_char STR_CRITICALALARM[] PROGMEM = TR_CRITICALALARM; const pm_char STR_CRITICALALARM[] PROGMEM = TR_CRITICALALARM;
const pm_char STR_RSSIALARM_WARN[] PROGMEM = TR_RSSIALARM_WARN;
const pm_char STR_NO_RSSIALARM[] PROGMEM = TR_NO_RSSIALARM;
const pm_char STR_DISABLE_ALARM[] PROGMEM = TR_DISABLE_ALARM;
const pm_char STR_TELEMETRY_TYPE[] PROGMEM = TR_TELEMETRY_TYPE; const pm_char STR_TELEMETRY_TYPE[] PROGMEM = TR_TELEMETRY_TYPE;
const pm_char STR_TELEMETRY_SENSORS[] PROGMEM = TR_TELEMETRY_SENSORS; const pm_char STR_TELEMETRY_SENSORS[] PROGMEM = TR_TELEMETRY_SENSORS;
const pm_char STR_VALUE[] PROGMEM = TR_VALUE; const pm_char STR_VALUE[] PROGMEM = TR_VALUE;

View file

@ -897,6 +897,9 @@ extern const pm_char STR_BLCOLOR[];
extern const pm_char STR_RESET_SUBMENU[]; extern const pm_char STR_RESET_SUBMENU[];
extern const pm_char STR_LOWALARM[]; extern const pm_char STR_LOWALARM[];
extern const pm_char STR_CRITICALALARM[]; extern const pm_char STR_CRITICALALARM[];
extern const pm_char STR_RSSIALARM_WARN[];
extern const pm_char STR_NO_RSSIALARM[];
extern const pm_char STR_DISABLE_ALARM[];
extern const pm_char STR_TELEMETRY_TYPE[]; extern const pm_char STR_TELEMETRY_TYPE[];
extern const pm_char STR_TELEMETRY_SENSORS[]; extern const pm_char STR_TELEMETRY_SENSORS[];
extern const pm_char STR_VALUE[]; extern const pm_char STR_VALUE[];

View file

@ -1030,6 +1030,9 @@
#define TR_ANTENNACONFIRM2 "Ujisti se že je anténa připojena!" #define TR_ANTENNACONFIRM2 "Ujisti se že je anténa připojena!"
#define TR_LOWALARM INDENT "Nízký Alarm" #define TR_LOWALARM INDENT "Nízký Alarm"
#define TR_CRITICALALARM INDENT "Kritický Alarm" #define TR_CRITICALALARM INDENT "Kritický Alarm"
#define TR_RSSIALARM_WARN TR("RSSI","TELEMETRY RSSI")
#define TR_NO_RSSIALARM TR(INDENT "Alarms disabled", INDENT "Telemetry alarms disabled")
#define TR_DISABLE_ALARM TR(INDENT "Disable alarms", INDENT "Disable telemetry alarms")
#define TR_ENABLE_POPUP "Povolit vyskakovací okno" #define TR_ENABLE_POPUP "Povolit vyskakovací okno"
#define TR_DISABLE_POPUP "Zakázat vyskakovací okno" #define TR_DISABLE_POPUP "Zakázat vyskakovací okno"
#define TR_POPUP "Popup" #define TR_POPUP "Popup"

View file

@ -1051,6 +1051,9 @@
#define TR_ANTENNACONFIRM2 "Ist eine externe Antenne installiert?" #define TR_ANTENNACONFIRM2 "Ist eine externe Antenne installiert?"
#define TR_LOWALARM INDENT "Vor-Alarm bei" #define TR_LOWALARM INDENT "Vor-Alarm bei"
#define TR_CRITICALALARM INDENT "Kritisch-Alarm" #define TR_CRITICALALARM INDENT "Kritisch-Alarm"
#define TR_RSSIALARM_WARN "Telemetry"
#define TR_NO_RSSIALARM "Audiowarnungen ausgeschaltet"
#define TR_DISABLE_ALARM INDENT "Audiowarnungen ausschalten"
#define TR_ENABLE_POPUP "Freigabe Popup-Fenster" #define TR_ENABLE_POPUP "Freigabe Popup-Fenster"
#define TR_DISABLE_POPUP "Sperren Popup-Fenster" #define TR_DISABLE_POPUP "Sperren Popup-Fenster"
#define TR_POPUP "Popup" #define TR_POPUP "Popup"

View file

@ -1034,6 +1034,9 @@
#define TR_ANTENNACONFIRM2 "Make sure antenna is installed!" #define TR_ANTENNACONFIRM2 "Make sure antenna is installed!"
#define TR_LOWALARM INDENT "Low alarm" #define TR_LOWALARM INDENT "Low alarm"
#define TR_CRITICALALARM INDENT "Critical alarm" #define TR_CRITICALALARM INDENT "Critical alarm"
#define TR_RSSIALARM_WARN TR("RSSI","TELEMETRY RSSI")
#define TR_NO_RSSIALARM TR(INDENT "Alarms disabled", INDENT "Telemetry alarms disabled")
#define TR_DISABLE_ALARM TR(INDENT "Disable alarms", INDENT "Disable telemetry alarms")
#define TR_ENABLE_POPUP "Enable popup" #define TR_ENABLE_POPUP "Enable popup"
#define TR_DISABLE_POPUP "Disable popup" #define TR_DISABLE_POPUP "Disable popup"
#define TR_POPUP "Popup" #define TR_POPUP "Popup"

View file

@ -1010,6 +1010,9 @@
#define TR_ANTENNACONFIRM2 "Make sure antenna is installed!" #define TR_ANTENNACONFIRM2 "Make sure antenna is installed!"
#define TR_LOWALARM INDENT "Alarma baja" #define TR_LOWALARM INDENT "Alarma baja"
#define TR_CRITICALALARM INDENT "Alarma Critica" #define TR_CRITICALALARM INDENT "Alarma Critica"
#define TR_RSSIALARM_WARN TR("RSSI","TELEMETRY RSSI")
#define TR_NO_RSSIALARM TR(INDENT "Alarms disabled", INDENT "Telemetry alarms disabled")
#define TR_DISABLE_ALARM TR(INDENT "Disable alarms", INDENT "Disable telemetry alarms")
#define TR_ENABLE_POPUP "Enable Popup" #define TR_ENABLE_POPUP "Enable Popup"
#define TR_DISABLE_POPUP "Disable Popup" #define TR_DISABLE_POPUP "Disable Popup"
#define TR_POPUP "Popup" #define TR_POPUP "Popup"

View file

@ -1006,6 +1006,9 @@
#define TR_ANTENNACONFIRM2 "Make sure antenna is installed!" #define TR_ANTENNACONFIRM2 "Make sure antenna is installed!"
#define TR_LOWALARM INDENT "Low Alarm" #define TR_LOWALARM INDENT "Low Alarm"
#define TR_CRITICALALARM INDENT "Critical Alarm" #define TR_CRITICALALARM INDENT "Critical Alarm"
#define TR_RSSIALARM_WARN TR("RSSI","TELEMETRY RSSI")
#define TR_NO_RSSIALARM TR(INDENT "Alarms disabled", INDENT "Telemetry alarms disabled")
#define TR_DISABLE_ALARM TR(INDENT "Disable alarms", INDENT "Disable telemetry alarms")
#define TR_ENABLE_POPUP "Enable Popup" #define TR_ENABLE_POPUP "Enable Popup"
#define TR_DISABLE_POPUP "Disable Popup" #define TR_DISABLE_POPUP "Disable Popup"
#define TR_POPUP "Popup" #define TR_POPUP "Popup"

View file

@ -1033,6 +1033,9 @@
#define TR_ANTENNACONFIRM2 "Installer l'antenne d'abord!" #define TR_ANTENNACONFIRM2 "Installer l'antenne d'abord!"
#define TR_LOWALARM INDENT "Alarme basse" #define TR_LOWALARM INDENT "Alarme basse"
#define TR_CRITICALALARM INDENT "Alarme critique" #define TR_CRITICALALARM INDENT "Alarme critique"
#define TR_RSSIALARM_WARN TR("RSSI","TELEMETRY RSSI")
#define TR_NO_RSSIALARM TR(INDENT "Alarms disabled", INDENT "Telemetry alarms disabled")
#define TR_DISABLE_ALARM TR(INDENT "Disable alarms", INDENT "Disable telemetry alarms")
#define TR_ENABLE_POPUP "Activer popup" #define TR_ENABLE_POPUP "Activer popup"
#define TR_DISABLE_POPUP "Désactiver popup" #define TR_DISABLE_POPUP "Désactiver popup"
#define TR_POPUP "Popup" #define TR_POPUP "Popup"

View file

@ -1035,6 +1035,9 @@
#define TR_ANTENNACONFIRM2 "Make sure antenna is installed!" #define TR_ANTENNACONFIRM2 "Make sure antenna is installed!"
#define TR_LOWALARM INDENT "Allarme Basso" #define TR_LOWALARM INDENT "Allarme Basso"
#define TR_CRITICALALARM INDENT "Allarme Critico" #define TR_CRITICALALARM INDENT "Allarme Critico"
#define TR_RSSIALARM_WARN TR("RSSI","TELEMETRY RSSI")
#define TR_NO_RSSIALARM TR(INDENT "Alarms disabled", INDENT "Telemetry alarms disabled")
#define TR_DISABLE_ALARM TR(INDENT "Disable alarms", INDENT "Disable telemetry alarms")
#define TR_ENABLE_POPUP "Abilita Popup" #define TR_ENABLE_POPUP "Abilita Popup"
#define TR_DISABLE_POPUP "Disabilita Popup" #define TR_DISABLE_POPUP "Disabilita Popup"
#define TR_POPUP "Popup" #define TR_POPUP "Popup"

View file

@ -1030,6 +1030,9 @@
#define TR_ANTENNACONFIRM2 "Is er zeker een antenne geplaatst!" #define TR_ANTENNACONFIRM2 "Is er zeker een antenne geplaatst!"
#define TR_LOWALARM INDENT "Waarschuwing" #define TR_LOWALARM INDENT "Waarschuwing"
#define TR_CRITICALALARM INDENT "Kritiek Alarm" #define TR_CRITICALALARM INDENT "Kritiek Alarm"
#define TR_RSSIALARM_WARN TR("RSSI","TELEMETRY RSSI")
#define TR_NO_RSSIALARM TR(INDENT "Alarms disabled", INDENT "Telemetry alarms disabled")
#define TR_DISABLE_ALARM TR(INDENT "Disable alarms", INDENT "Disable telemetry alarms")
#define TR_ENABLE_POPUP "Inschakelen Popups" #define TR_ENABLE_POPUP "Inschakelen Popups"
#define TR_DISABLE_POPUP "Uitschakelen Popups" #define TR_DISABLE_POPUP "Uitschakelen Popups"
#define TR_POPUP "Popup" #define TR_POPUP "Popup"

View file

@ -1036,6 +1036,9 @@
#define TR_ANTENNACONFIRM2 "Make sure antenna is installed!" #define TR_ANTENNACONFIRM2 "Make sure antenna is installed!"
#define TR_LOWALARM INDENT "Alarm niski" #define TR_LOWALARM INDENT "Alarm niski"
#define TR_CRITICALALARM INDENT "Alarm krytyczny" #define TR_CRITICALALARM INDENT "Alarm krytyczny"
#define TR_RSSIALARM_WARN TR("RSSI","TELEMETRY RSSI")
#define TR_NO_RSSIALARM TR(INDENT "Alarms disabled", INDENT "Telemetry alarms disabled")
#define TR_DISABLE_ALARM TR(INDENT "Disable alarms", INDENT "Disable telemetry alarms")
#define TR_ENABLE_POPUP "Aktywuj Popup" #define TR_ENABLE_POPUP "Aktywuj Popup"
#define TR_DISABLE_POPUP "Wyłącz Popup" #define TR_DISABLE_POPUP "Wyłącz Popup"
#define TR_POPUP "Popup" #define TR_POPUP "Popup"

View file

@ -1003,6 +1003,9 @@
#define TR_ANTENNACONFIRM2 "Make sure antenna is installed!" #define TR_ANTENNACONFIRM2 "Make sure antenna is installed!"
#define TR_LOWALARM INDENT "Low Alarm" #define TR_LOWALARM INDENT "Low Alarm"
#define TR_CRITICALALARM INDENT "Critical Alarm" #define TR_CRITICALALARM INDENT "Critical Alarm"
#define TR_RSSIALARM_WARN TR("RSSI","TELEMETRY RSSI")
#define TR_NO_RSSIALARM TR(INDENT "Alarms disabled", INDENT "Telemetry alarms disabled")
#define TR_DISABLE_ALARM TR(INDENT "Disable alarms", INDENT "Disable telemetry alarms")
#define TR_ENABLE_POPUP "Enable Popup" #define TR_ENABLE_POPUP "Enable Popup"
#define TR_DISABLE_POPUP "Disable Popup" #define TR_DISABLE_POPUP "Disable Popup"
#define TR_POPUP "Popup" #define TR_POPUP "Popup"

View file

@ -1049,6 +1049,9 @@
#define TR_ANTENNACONFIRM2 "Make sure antenna is installed!" #define TR_ANTENNACONFIRM2 "Make sure antenna is installed!"
#define TR_LOWALARM INDENT "Låg-alarm" #define TR_LOWALARM INDENT "Låg-alarm"
#define TR_CRITICALALARM INDENT "Kritiskt alarm" #define TR_CRITICALALARM INDENT "Kritiskt alarm"
#define TR_RSSIALARM_WARN TR("RSSI","TELEMETRY RSSI")
#define TR_NO_RSSIALARM TR(INDENT "Alarms disabled", INDENT "Telemetry alarms disabled")
#define TR_DISABLE_ALARM TR(INDENT "Disable alarms", INDENT "Disable telemetry alarms")
#define TR_ENABLE_POPUP "Slå på Dialog" #define TR_ENABLE_POPUP "Slå på Dialog"
#define TR_DISABLE_POPUP "Slå av Dialog" #define TR_DISABLE_POPUP "Slå av Dialog"
#define TR_POPUP "Popup" #define TR_POPUP "Popup"