Add TXRSSI and TXLQI sensors to FrSky D8/D16/LBT when using MULTI (#7128)

Add TXRSSI and TXLQI sensors to FrSky D8/D16/LBT when using MULTI
This commit is contained in:
pascallanger
2019-12-03 16:46:12 +01:00
committed by Bertrand Songis
parent 7597195229
commit b50c977dc9
9 changed files with 105 additions and 59 deletions
+54 -30
View File
@@ -71,6 +71,13 @@ void frskyDProcessPacket(const uint8_t *packet)
setTelemetryValue(PROTOCOL_TELEMETRY_FRSKY_D, D_A1_ID, 0, 0, packet[1], UNIT_VOLTS, 0);
setTelemetryValue(PROTOCOL_TELEMETRY_FRSKY_D, D_A2_ID, 0, 0, packet[2], UNIT_VOLTS, 0);
setTelemetryValue(PROTOCOL_TELEMETRY_FRSKY_D, D_RSSI_ID, 0, 0, packet[3], UNIT_RAW, 0);
#if defined(MULTIMODULE)
if (telemetryProtocol == PROTOCOL_TELEMETRY_MULTIMODULE) {
setTelemetryValue(PROTOCOL_TELEMETRY_FRSKY_D, TX_RSSI_ID, 0, 0, packet[4]>>1, UNIT_DB, 0);
setTelemetryValue(PROTOCOL_TELEMETRY_FRSKY_D, RX_LQI_ID, 0, 0, packet[5] , UNIT_RAW, 0);
setTelemetryValue(PROTOCOL_TELEMETRY_FRSKY_D, TX_LQI_ID , 0, 0, packet[6] , UNIT_RAW, 0);
}
#endif
telemetryData.rssi.set(packet[3]);
telemetryStreaming = TELEMETRY_TIMEOUT10ms; // reset counter only if valid packets are being detected
break;
@@ -263,42 +270,59 @@ void processHubPacket(uint8_t id, int16_t value)
void frskyDSetDefault(int index, uint16_t id)
{
TelemetrySensor & telemetrySensor = g_model.telemetrySensors[index];
TelemetrySensor &telemetrySensor = g_model.telemetrySensors[index];
telemetrySensor.id = id;
telemetrySensor.instance = 0;
const FrSkyDSensor * sensor = getFrSkyDSensor(id);
if (sensor) {
TelemetryUnit unit = sensor->unit;
uint8_t prec = min<uint8_t>(2, sensor->prec);
telemetrySensor.init(sensor->name, unit, prec);
if (id == D_RSSI_ID) {
telemetrySensor.filter = 1;
telemetrySensor.logs = true;
}
else if (id >= D_A1_ID && id <= D_A2_ID) {
telemetrySensor.custom.ratio = 132;
telemetrySensor.filter = 1;
}
else if (id == CURRENT_ID) {
telemetrySensor.onlyPositive = 1;
}
else if (id == BARO_ALT_AP_ID) {
telemetrySensor.autoOffset = 1;
}
if (unit == UNIT_RPMS) {
telemetrySensor.custom.ratio = 1;
telemetrySensor.custom.offset = 1;
}
else if (unit == UNIT_METERS) {
if (IS_IMPERIAL_ENABLE()) {
telemetrySensor.unit = UNIT_FEET;
#if defined(MULTIMODULE)
if (id == TX_RSSI_ID) {
telemetrySensor.init(ZSTR_TX_RSSI, UNIT_DB, 0);
telemetrySensor.filter = 1;
}
else if (id == TX_LQI_ID) {
telemetrySensor.init(ZSTR_TX_QUALITY, UNIT_RAW, 0);
telemetrySensor.filter = 1;
}
else if (id == RX_LQI_ID) {
telemetrySensor.init(ZSTR_RX_QUALITY, UNIT_RAW, 0);
telemetrySensor.filter = 1;
}
else
#endif
{
const FrSkyDSensor * sensor = getFrSkyDSensor(id);
if (sensor) {
TelemetryUnit unit = sensor->unit;
uint8_t prec = min<uint8_t>(2, sensor->prec);
telemetrySensor.init(sensor->name, unit, prec);
if (id == D_RSSI_ID) {
telemetrySensor.filter = 1;
telemetrySensor.logs = true;
}
else if (id >= D_A1_ID && id <= D_A2_ID) {
telemetrySensor.custom.ratio = 132;
telemetrySensor.filter = 1;
}
else if (id == CURRENT_ID) {
telemetrySensor.onlyPositive = 1;
}
else if (id == BARO_ALT_AP_ID) {
telemetrySensor.autoOffset = 1;
}
if (unit == UNIT_RPMS) {
telemetrySensor.custom.ratio = 1;
telemetrySensor.custom.offset = 1;
}
else if (unit == UNIT_METERS) {
if (IS_IMPERIAL_ENABLE()) {
telemetrySensor.unit = UNIT_FEET;
}
}
}
}
else {
telemetrySensor.init(id);
else {
telemetrySensor.init(id);
}
}
storageDirty(EE_MODEL);