Merge pull request #6387 from opentx/3djc/rssi-choice

3djc/rssi choice
This commit is contained in:
3djc
2019-04-09 07:51:07 +02:00
committed by GitHub
5 changed files with 45 additions and 14 deletions
+13 -11
View File
@@ -321,6 +321,7 @@ PACK(struct FrSkyTelemetryData { // TODO EEPROM change, rename to VarioData
int8_t varioCenterMin;
int8_t varioMin;
int8_t varioMax;
uint8_t rssiSource;
});
#else
// TODO remove this also on Taranis
@@ -335,6 +336,7 @@ PACK(struct FrSkyTelemetryData {
int8_t varioCenterMin;
int8_t varioMin;
int8_t varioMax;
uint8_t rssiSource;
});
#endif
@@ -832,7 +834,7 @@ static inline void check_struct()
CHKSIZE(FrSkyBarData, 6);
CHKSIZE(FrSkyLineData, 4);
CHKTYPE(union FrSkyScreenData, 24);
CHKSIZE(FrSkyTelemetryData, 104);
CHKSIZE(FrSkyTelemetryData, 105);
CHKSIZE(ModelHeader, 12);
CHKSIZE(CurveData, 4);
#elif defined(PCBTARANIS)
@@ -847,7 +849,7 @@ static inline void check_struct()
CHKSIZE(FrSkyBarData, 6);
CHKSIZE(FrSkyLineData, 6);
CHKTYPE(union FrSkyScreenData, 24);
CHKSIZE(FrSkyTelemetryData, 104);
CHKSIZE(FrSkyTelemetryData, 105);
CHKSIZE(ModelHeader, 24);
CHKSIZE(CurveData, 4);
#elif defined(PCBHORUS)
@@ -858,7 +860,7 @@ static inline void check_struct()
CHKSIZE(FlightModeData, 44);
CHKSIZE(TimerData, 16);
CHKSIZE(SwashRingData, 8);
CHKSIZE(FrSkyTelemetryData, 5);
CHKSIZE(FrSkyTelemetryData, 6);
CHKSIZE(ModelHeader, 27);
CHKSIZE(CurveData, 4);
CHKSIZE(CustomScreenData, 610);
@@ -873,7 +875,7 @@ static inline void check_struct()
CHKSIZE(SwashRingData, 8);
CHKSIZE(FrSkyBarData, 5);
CHKSIZE(FrSkyLineData, 2);
CHKSIZE(FrSkyTelemetryData, 88);
CHKSIZE(FrSkyTelemetryData, 89);
CHKSIZE(ModelHeader, 12);
CHKTYPE(CurveData, 4);
#else
@@ -906,25 +908,25 @@ static inline void check_struct()
#if defined(PCBXLITES)
CHKSIZE(RadioData, 860);
CHKSIZE(ModelData, 6054);
CHKSIZE(ModelData, 6055);
#elif defined(PCBXLITE)
CHKSIZE(RadioData, 852);
CHKSIZE(ModelData, 6054);
CHKSIZE(ModelData, 6055);
#elif defined(PCBX7)
CHKSIZE(RadioData, 858);
CHKSIZE(ModelData, 6054);
CHKSIZE(ModelData, 6055);
#elif defined(PCBX9E)
CHKSIZE(RadioData, 960);
CHKSIZE(ModelData, 6549);
CHKSIZE(ModelData, 6550);
#elif defined(PCBX9D) || defined(PCBX9DP)
CHKSIZE(RadioData, 880);
CHKSIZE(ModelData, 6536);
CHKSIZE(ModelData, 6537);
#elif defined(PCBSKY9X)
CHKSIZE(RadioData, 735);
CHKSIZE(ModelData, 5215);
CHKSIZE(ModelData, 5216);
#elif defined(PCBHORUS)
CHKSIZE(RadioData, 855);
CHKSIZE(ModelData, 9721);
CHKSIZE(ModelData, 9722);
#endif
#undef CHKSIZE
+15 -1
View File
@@ -26,6 +26,7 @@ enum MenuModelTelemetryFrskyItems {
ITEM_TELEMETRY_INVERTED_SERIAL,
#endif
ITEM_TELEMETRY_RSSI_LABEL,
ITEM_TELEMETRY_RSSI_SOURCE,
ITEM_TELEMETRY_RSSI_ALARM1,
ITEM_TELEMETRY_RSSI_ALARM2,
ITEM_TELEMETRY_DISABLE_ALARMS,
@@ -57,7 +58,7 @@ enum MenuModelTelemetryFrskyItems {
#define USRDATA_ROWS
#define RSSI_ROWS LABEL(RSSI), 0, 0, 1,
#define RSSI_ROWS LABEL(RSSI), 0, 0, 0, 1,
#define SCREEN_TYPE_ROWS 0
@@ -254,6 +255,19 @@ void menuModelTelemetryFrsky(event_t event)
lcdDrawTextAlignedLeft(y, "RSSI");
break;
case ITEM_TELEMETRY_RSSI_SOURCE: {
lcdDrawTextAlignedLeft(y, STR_SOURCE);
drawSource(TELEM_COL2, y, g_model.frsky.rssiSource ? MIXSRC_FIRST_TELEM + 3 * (g_model.frsky.rssiSource - 1) : 0, attr);
if (g_model.frsky.rssiSource) {
TelemetrySensor * sensor = &g_model.telemetrySensors[g_model.frsky.rssiSource];
drawReceiverName(TELEM_COL2 + 5 * FW, y, (sensor->instance >> 7) & 0x01, (sensor->instance >> 5) & 0x03, 0);
}
if (attr) {
g_model.frsky.rssiSource = checkIncDec(event, g_model.frsky.rssiSource, 0, MAX_TELEMETRY_SENSORS, EE_MODEL | NO_INCDEC_MARKS, isRssiSensorAvailable);
}
break;
}
case ITEM_TELEMETRY_RSSI_ALARM1:
case ITEM_TELEMETRY_RSSI_ALARM2: {
bool warning = (k==ITEM_TELEMETRY_RSSI_ALARM1);
+1
View File
@@ -72,6 +72,7 @@ bool isCurrentSensor(int sensor);
bool isTelemetryFieldAvailable(int index);
bool isTelemetryFieldComparisonAvailable(int index);
bool isSensorAvailable(int sensor);
bool isRssiSensorAvailable(int sensor);
bool modelHasNotes();
+11
View File
@@ -46,6 +46,17 @@ bool isInputAvailable(int input)
return false;
}
bool isRssiSensorAvailable(int sensor)
{
if (sensor == 0)
return true;
else {
TelemetrySensor &telemSensor = g_model.telemetrySensors[abs(sensor) - 1];
return (telemSensor.isAvailable() && telemSensor.id == RSSI_ID);
}
}
bool isSensorAvailable(int sensor)
{
if (sensor == 0)
+5 -2
View File
@@ -162,8 +162,11 @@ void sportProcessTelemetryPacketWithoutCrc(uint8_t origin, const uint8_t * packe
if (dataId == RSSI_ID) {
telemetryStreaming = TELEMETRY_TIMEOUT10ms; // reset counter only if valid packets are being detected
data = SPORT_DATA_U8(packet);
if (data == 0)
telemetryData.rssi.reset();
if(g_model.frsky.rssiSource) {
TelemetrySensor * sensor = & g_model.telemetrySensors[g_model.frsky.rssiSource];
if(sensor->instance == instance)
telemetryData.rssi.set(data);
}
else
telemetryData.rssi.set(data);
}