+13
-11
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user