XACT servos telemetry support (#7959)

XACT servos telemetry support
This commit is contained in:
Bertrand Songis
2020-09-23 12:59:44 +02:00
committed by GitHub
parent 391bf5d406
commit c0c205a92d
16 changed files with 154 additions and 67 deletions
+12 -10
View File
@@ -139,6 +139,8 @@ enum FrSkyDataState {
#define A4_LAST_ID 0x091F
#define AIR_SPEED_FIRST_ID 0x0A00
#define AIR_SPEED_LAST_ID 0x0A0F
#define FUEL_QTY_FIRST_ID 0x0A10
#define FUEL_QTY_LAST_ID 0x0A1F
#define RBOX_BATT1_FIRST_ID 0x0B00
#define RBOX_BATT1_LAST_ID 0x0B0F
#define RBOX_BATT2_FIRST_ID 0x0B10
@@ -152,9 +154,9 @@ enum FrSkyDataState {
#define ESC_POWER_FIRST_ID 0x0B50
#define ESC_POWER_LAST_ID 0x0B5F
#define ESC_RPM_CONS_FIRST_ID 0x0B60
#define ESC_RPM_CONS_LAST_ID 0x0B6f
#define ESC_RPM_CONS_LAST_ID 0x0B6F
#define ESC_TEMPERATURE_FIRST_ID 0x0B70
#define ESC_TEMPERATURE_LAST_ID 0x0B7f
#define ESC_TEMPERATURE_LAST_ID 0x0B7F
#define RB3040_OUTPUT_FIRST_ID 0x0B80
#define RB3040_OUTPUT_LAST_ID 0x0B8F
#define RB3040_CH1_2_FIRST_ID 0x0B90
@@ -165,10 +167,10 @@ enum FrSkyDataState {
#define RB3040_CH5_6_LAST_ID 0x0BBF
#define RB3040_CH7_8_FIRST_ID 0x0BC0
#define RB3040_CH7_8_LAST_ID 0x0BCF
#define X8R_FIRST_ID 0x0c20
#define X8R_LAST_ID 0x0c2F
#define S6R_FIRST_ID 0x0c30
#define S6R_LAST_ID 0x0c3F
#define X8R_FIRST_ID 0x0C20
#define X8R_LAST_ID 0x0C2F
#define S6R_FIRST_ID 0x0C30
#define S6R_LAST_ID 0x0C3F
#define GASSUIT_TEMP1_FIRST_ID 0x0D00
#define GASSUIT_TEMP1_LAST_ID 0x0D0F
#define GASSUIT_TEMP2_FIRST_ID 0x0D10
@@ -182,15 +184,17 @@ enum FrSkyDataState {
#define GASSUIT_FLOW_FIRST_ID 0x0D50
#define GASSUIT_FLOW_LAST_ID 0x0D5F
#define GASSUIT_MAX_FLOW_FIRST_ID 0x0D60
#define GASSUIT_MAX_FLOW_LAST_ID 0x0D6f
#define GASSUIT_MAX_FLOW_LAST_ID 0x0D6F
#define GASSUIT_AVG_FLOW_FIRST_ID 0x0D70
#define GASSUIT_AVG_FLOW_LAST_ID 0x0D7f
#define GASSUIT_AVG_FLOW_LAST_ID 0x0D7F
#define SBEC_POWER_FIRST_ID 0x0E50
#define SBEC_POWER_LAST_ID 0x0E5F
#define DIY_FIRST_ID 0x5100
#define DIY_LAST_ID 0x52FF
#define DIY_STREAM_FIRST_ID 0x5000
#define DIY_STREAM_LAST_ID 0x50FF
#define SERVO_FIRST_ID 0x6800
#define SERVO_LAST_ID 0x680F
#define FACT_TEST_ID 0xF000
#define VALID_FRAME_RATE_ID 0xF010
#define RSSI_ID 0xF101
@@ -202,8 +206,6 @@ enum FrSkyDataState {
#define R9_PWR_ID 0xF107
#define SP2UART_A_ID 0xFD00
#define SP2UART_B_ID 0xFD01
#define FUEL_QTY_FIRST_ID 0x0A10
#define FUEL_QTY_LAST_ID 0x0A1F
#if defined(MULTIMODULE)
// Virtual IDs, value can be changed to anything only used for display
+48 -33
View File
@@ -94,7 +94,11 @@ const FrSkySportSensor sportSensors[] = {
{ RB3040_CH5_6_FIRST_ID, RB3040_CH5_6_LAST_ID, 1, ZSTR_RB3040_CHANNEL6, UNIT_AMPS, 2 },
{ RB3040_CH7_8_FIRST_ID, RB3040_CH7_8_LAST_ID, 0, ZSTR_RB3040_CHANNEL7, UNIT_AMPS, 2 },
{ RB3040_CH7_8_FIRST_ID, RB3040_CH7_8_LAST_ID, 1, ZSTR_RB3040_CHANNEL8, UNIT_AMPS, 2 },
{ 0, 0, 0, NULL, UNIT_RAW, 0 } // sentinel
{ SERVO_FIRST_ID, SERVO_LAST_ID, 0, ZSTR_SERVO_CURRENT, UNIT_AMPS, 1 },
{ SERVO_FIRST_ID, SERVO_LAST_ID, 1, ZSTR_SERVO_VOLTAGE, UNIT_VOLTS, 1 },
{ SERVO_FIRST_ID, SERVO_LAST_ID, 2, ZSTR_SERVO_TEMPERATURE, UNIT_CELSIUS, 0 },
{ SERVO_FIRST_ID, SERVO_LAST_ID, 3, ZSTR_SERVO_STATUS, UNIT_TEXT, 0 },
{ 0, 0, 0, nullptr, UNIT_RAW, 0 } // sentinel
};
const FrSkySportSensor * getFrSkySportSensor(uint16_t id, uint8_t subId=0)
@@ -110,13 +114,13 @@ const FrSkySportSensor * getFrSkySportSensor(uint16_t id, uint8_t subId=0)
bool checkSportPacket(const uint8_t * packet)
{
short crc = 0;
for (int i=1; i<FRSKY_SPORT_PACKET_SIZE; ++i) {
for (int i = 1; i < FRSKY_SPORT_PACKET_SIZE; ++i) {
crc += packet[i]; // 0-1FE
crc += crc >> 8; // 0-1FF
crc &= 0x00ff; // 0-FF
crc += crc >> 8u; // 0-1FF
crc &= 0x00FFu; // 0-FF
}
// TRACE("crc: 0x%02x", crc);
return (crc == 0x00ff);
return crc == 0x00FF;
}
#define SPORT_DATA_U8(packet) (packet[4])
@@ -137,15 +141,15 @@ void sportProcessTelemetryPacket(uint16_t id, uint8_t subId, uint8_t instance, u
precision = sensor->prec;
}
if (unit == UNIT_CELLS) {
uint8_t cellsCount = (data & 0xF0) >> 4;
uint8_t cellIndex = (data & 0x0F);
uint8_t cellsCount = (data & 0xF0u) >> 4u;
uint8_t cellIndex = (data & 0x0Fu);
if (cellIndex >= MAX_CELLS)
return;
uint32_t mask = (cellsCount << 24) + (cellIndex << 16);
setTelemetryValue(PROTOCOL_TELEMETRY_FRSKY_SPORT, id, subId, instance, mask + (((data & 0x000FFF00) >> 8) / 5), unit, precision);
if (cellIndex+1 < cellsCount) {
mask += (1 << 16);
setTelemetryValue(PROTOCOL_TELEMETRY_FRSKY_SPORT, id, subId, instance, mask + (((data & 0xFFF00000) >> 20) / 5), unit, precision);
uint32_t mask = (cellsCount << 24u) + (cellIndex << 16u);
setTelemetryValue(PROTOCOL_TELEMETRY_FRSKY_SPORT, id, subId, instance, mask + (((data & 0x000FFF00u) >> 8u) / 5), unit, precision);
if (cellIndex + 1 < cellsCount) {
mask += (1 << 16u);
setTelemetryValue(PROTOCOL_TELEMETRY_FRSKY_SPORT, id, subId, instance, mask + (((data & 0xFFF00000u) >> 20u) / 5), unit, precision);
}
}
else {
@@ -219,7 +223,7 @@ void sportProcessTelemetryPacketWithoutCrc(uint8_t origin, const uint8_t * packe
}
#if defined(MULTIMODULE)
if (telemetryProtocol == PROTOCOL_TELEMETRY_MULTIMODULE) {
sportProcessTelemetryPacket(TX_RSSI_ID, 0, instance, packet[5] >> 1, UNIT_DB);
sportProcessTelemetryPacket(TX_RSSI_ID, 0, instance, packet[5] >> 1u, UNIT_DB);
sportProcessTelemetryPacket(TX_LQI_ID, 0, instance, packet[7], UNIT_RAW);
}
#endif
@@ -263,40 +267,40 @@ void sportProcessTelemetryPacketWithoutCrc(uint8_t origin, const uint8_t * packe
if (dataId >= GPS_LONG_LATI_FIRST_ID && dataId <= GPS_LONG_LATI_LAST_ID) {
int32_t value = (data & 0x3fffffff);
if (data & (1 << 30))
if (data & (1 << 30u))
value = -value;
value = (value * 5) / 3; // min/10000 => deg/1000000
if (data & (1 << 31))
if (data & (1 << 31u))
sportProcessTelemetryPacket(dataId, 0, instance, value, UNIT_GPS_LONGITUDE);
else
sportProcessTelemetryPacket(dataId, 0, instance, value, UNIT_GPS_LATITUDE);
}
else if (dataId >= RBOX_BATT1_FIRST_ID && dataId <= RBOX_BATT2_LAST_ID) {
sportProcessTelemetryPacket(dataId, 0, instance, data & 0xffff);
sportProcessTelemetryPacket(dataId, 1, instance, data >> 16);
sportProcessTelemetryPacket(dataId, 0, instance, data & 0xFFFFu);
sportProcessTelemetryPacket(dataId, 1, instance, data >> 16u);
}
else if (dataId >= RBOX_CNSP_FIRST_ID && dataId <= RBOX_CNSP_LAST_ID) {
sportProcessTelemetryPacket(dataId, 0, instance, data & 0xffff);
sportProcessTelemetryPacket(dataId, 1, instance, data >> 16);
sportProcessTelemetryPacket(dataId, 0, instance, data & 0xFFFFu);
sportProcessTelemetryPacket(dataId, 1, instance, data >> 16u);
}
else if (dataId >= RBOX_STATE_FIRST_ID && dataId <= RBOX_STATE_LAST_ID) {
bool static isRB10 = false;
uint16_t newServosState;
if (servosState == 0 && (data & 0xff00) == 0xff00) {
if (servosState == 0 && (data & 0xFF00u) == 0xFF00u) {
isRB10 = true;
}
if (isRB10) {
newServosState = data & 0x00ff; // 8ch only RB10
newServosState = data & 0x00FFu; // 8ch only RB10
}
else {
newServosState = data & 0xffff;
newServosState = data & 0xFFFFu;
}
if (newServosState != 0 && servosState == 0) {
audioEvent(AU_SERVO_KO);
}
uint16_t newRboxState = data >> 16;
if ((newRboxState & 0x07) && (rboxState & 0x07) == 0) {
uint16_t newRboxState = data >> 16u;
if ((newRboxState & 0x07u) && (rboxState & 0x07u) == 0) {
audioEvent(AU_RX_OVERLOAD);
}
servosState = newServosState;
@@ -305,19 +309,19 @@ void sportProcessTelemetryPacketWithoutCrc(uint8_t origin, const uint8_t * packe
sportProcessTelemetryPacket(dataId, 1, instance, rboxState);
}
else if (dataId >= ESC_POWER_FIRST_ID && dataId <= ESC_POWER_LAST_ID) {
sportProcessTelemetryPacket(dataId, 0, instance, data & 0xffff);
sportProcessTelemetryPacket(dataId, 1, instance, data >> 16);
sportProcessTelemetryPacket(dataId, 0, instance, data & 0xFFFFu);
sportProcessTelemetryPacket(dataId, 1, instance, data >> 16u);
}
else if (dataId >= ESC_RPM_CONS_FIRST_ID && dataId <= ESC_RPM_CONS_LAST_ID) {
sportProcessTelemetryPacket(dataId, 0, instance, 100 * (data & 0xffff));
sportProcessTelemetryPacket(dataId, 1, instance, data >> 16);
sportProcessTelemetryPacket(dataId, 0, instance, 100 * (data & 0xFFFFu));
sportProcessTelemetryPacket(dataId, 1, instance, data >> 16u);
}
else if (dataId >= ESC_TEMPERATURE_FIRST_ID && dataId <= ESC_TEMPERATURE_LAST_ID) {
sportProcessTelemetryPacket(dataId, 0, instance, data & 0x00ff);
sportProcessTelemetryPacket(dataId, 0, instance, data & 0x00FFu);
}
else if (dataId >= SBEC_POWER_FIRST_ID && dataId <= SBEC_POWER_LAST_ID) {
sportProcessTelemetryPacket(dataId, 0, instance, (data & 0xffff) / 10);
sportProcessTelemetryPacket(dataId, 1, instance, (data >> 16) / 10);
sportProcessTelemetryPacket(dataId, 0, instance, (data & 0xFFFFu) / 10);
sportProcessTelemetryPacket(dataId, 1, instance, (data >> 16u) / 10);
}
else if (dataId >= DIY_STREAM_FIRST_ID && dataId <= DIY_STREAM_LAST_ID) {
#if defined(LUA)
@@ -334,8 +338,19 @@ void sportProcessTelemetryPacketWithoutCrc(uint8_t origin, const uint8_t * packe
#endif
}
else if (dataId >= RB3040_CH1_2_FIRST_ID && dataId <= RB3040_CH7_8_LAST_ID) {
sportProcessTelemetryPacket(dataId, 0, instance, data & 0xffff);
sportProcessTelemetryPacket(dataId, 1, instance, (data >> 16u) & 0xffff);
sportProcessTelemetryPacket(dataId, 0, instance, data & 0xFFFFu);
sportProcessTelemetryPacket(dataId, 1, instance, (data >> 16u) & 0xFFFFu);
}
else if (dataId >= SERVO_FIRST_ID && dataId <= SERVO_LAST_ID) {
sportProcessTelemetryPacket(dataId, 0, instance, data & 0xFFu);
sportProcessTelemetryPacket(dataId, 1, instance, (data >> 8u) & 0xFFu);
sportProcessTelemetryPacket(dataId, 2, instance, (data >> 16u) & 0xFFu);
uint8_t newServosState = data >> 24u;
setTelemetryText(PROTOCOL_TELEMETRY_FRSKY_SPORT, dataId, 3, instance, newServosState ? "STALL" : "OK");
if (newServosState != 0 && servosState == 0) {
audioEvent(AU_SERVO_KO);
servosState = newServosState;
}
}
else {
sportProcessTelemetryPacket(dataId, 0, instance, data);
+1
View File
@@ -97,6 +97,7 @@ PACK(struct CellValue
});
int setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t subId, uint8_t instance, int32_t value, uint32_t unit, uint32_t prec);
int setTelemetryText(TelemetryProtocol protocol, uint16_t id, uint8_t subId, uint8_t instance, const char * text);
void delTelemetryIndex(uint8_t index);
int availableTelemetryIndex();
int lastUsedTelemetryIndex();
+36 -13
View File
@@ -78,21 +78,27 @@ uint32_t getDistFromEarthAxis(int32_t latitude)
return 139*(((uint32_t)10000000 - ((angle2*(uint32_t)123370)/81) + (angle4/25))/12500);
}
void TelemetryItem::setValue(const TelemetrySensor & sensor, const char * val, uint32_t, uint32_t)
{
strncpy(text, val, sizeof(text));
setFresh();
}
void TelemetryItem::setValue(const TelemetrySensor & sensor, int32_t val, uint32_t unit, uint32_t prec)
{
int32_t newVal = val;
if(prec == 255) {
if (prec == 255) {
prec = sensor.prec;
}
if (unit == UNIT_CELLS) {
uint32_t data = uint32_t(newVal);
uint8_t cellsCount = (data >> 24);
uint8_t cellIndex = ((data >> 16) & 0x0F);
auto data = uint32_t(newVal);
uint8_t cellsCount = (data >> 24u);
uint8_t cellIndex = ((data >> 16u) & 0x0Fu);
if (cellIndex >= MAX_CELLS)
return;
uint16_t cellValue = (data & 0xFFFF);
uint16_t cellValue = (data & 0xFFFFu);
if (cellsCount == 0) {
cellsCount = (cellIndex >= cells.count ? cellIndex + 1 : cells.count);
if (cellsCount != cells.count) {
@@ -178,18 +184,18 @@ void TelemetryItem::setValue(const TelemetrySensor & sensor, int32_t val, uint32
}
else if (unit == UNIT_DATETIME_DAY_MONTH) {
auto data = uint32_t(newVal);
datetime.month = data >> 8;
datetime.day = data & 0xFF;
datetime.month = data >> 8u;
datetime.day = data & 0xFFu;
return;
}
else if (unit == UNIT_DATETIME_HOUR_MIN) {
auto data = uint32_t(newVal);
datetime.hour = (data & 0xFF);
datetime.min = data >> 8;
datetime.hour = (data & 0xFFu);
datetime.min = data >> 8u;
return;
}
else if (unit == UNIT_DATETIME_SEC) {
datetime.sec = newVal & 0xFF;
datetime.sec = newVal & 0xFFu;
newVal = 0;
}
else if (unit == UNIT_RPMS) {
@@ -198,8 +204,6 @@ void TelemetryItem::setValue(const TelemetrySensor & sensor, int32_t val, uint32
}
}
else if (unit == UNIT_TEXT) {
*((uint32_t*)&text[prec]) = newVal;
setFresh();
return;
}
else {
@@ -495,7 +499,8 @@ int lastUsedTelemetryIndex()
return -1;
}
int setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t subId, uint8_t instance, int32_t value, uint32_t unit, uint32_t prec)
template <class T>
int setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t subId, uint8_t instance, T value, uint32_t unit = 0, uint32_t prec = 0)
{
bool sensorFound = false;
@@ -518,41 +523,50 @@ int setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t subId, ui
case PROTOCOL_TELEMETRY_FRSKY_SPORT:
frskySportSetDefault(index, id, subId, instance);
break;
case PROTOCOL_TELEMETRY_FRSKY_D:
frskyDSetDefault(index, id);
break;
#if defined(CROSSFIRE)
case PROTOCOL_TELEMETRY_CROSSFIRE:
crossfireSetDefault(index, id, instance);
break;
#endif
#if defined(GHOST)
case PROTOCOL_TELEMETRY_GHOST:
ghostSetDefault(index, id, instance);
break;
#endif
#if defined(MULTIMODULE) || defined(AFHDS3)
case PROTOCOL_TELEMETRY_FLYSKY_IBUS:
flySkySetDefault(index,id, subId, instance);
break;
#endif
#if defined(MULTIMODULE)
case PROTOCOL_TELEMETRY_SPEKTRUM:
spektrumSetDefault(index, id, subId, instance);
break;
case PROTOCOL_TELEMETRY_HITEC:
hitecSetDefault(index, id, subId, instance);
break;
case PROTOCOL_TELEMETRY_HOTT:
hottSetDefault(index, id, subId, instance);
break;
#endif
#if defined(LUA)
case PROTOCOL_TELEMETRY_LUA:
// Sensor will be initialized by calling function
// This drops the first value
return index;
#endif
default:
return index;
}
@@ -563,7 +577,16 @@ int setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t subId, ui
POPUP_WARNING(STR_TELEMETRYFULL);
return -1;
}
}
int setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t subId, uint8_t instance, int32_t value, uint32_t unit, uint32_t prec)
{
return setTelemetryValue<int32_t>(protocol, id, subId, instance, value, unit, prec);
}
int setTelemetryText(TelemetryProtocol protocol, uint16_t id, uint8_t subId, uint8_t instance, const char * text)
{
return setTelemetryValue<const char *>(protocol, id, subId, instance, text);
}
void TelemetrySensor::init(const char * label, uint8_t unit, uint8_t prec)
+2
View File
@@ -91,6 +91,8 @@ class TelemetryItem
void eval(const TelemetrySensor & sensor);
void per10ms(const TelemetrySensor & sensor);
void setValue(const TelemetrySensor & sensor, const char * newVal, uint32_t unit=UNIT_TEXT, uint32_t prec=0);
void setValue(const TelemetrySensor & sensor, int32_t newVal, uint32_t unit, uint32_t prec=0);
inline bool isAvailable()
+5 -1
View File
@@ -1355,4 +1355,8 @@
#define ZSTR_VTX_FREQ "VFrq"
#define ZSTR_VTX_PWR "VPwr"
#define ZSTR_VTX_CHAN "VChn"
#define ZSTR_VTX_BAND "VBan"
#define ZSTR_VTX_BAND "VBan"
#define ZSTR_SERVO_CURRENT "SrvA"
#define ZSTR_SERVO_VOLTAGE "SrvV"
#define ZSTR_SERVO_TEMPERATURE "SrvT"
#define ZSTR_SERVO_STATUS "SrvS"
+5 -1
View File
@@ -1362,4 +1362,8 @@
#define ZSTR_VTX_FREQ "VFrq"
#define ZSTR_VTX_PWR "VPwr"
#define ZSTR_VTX_CHAN "VChn"
#define ZSTR_VTX_BAND "VBan"
#define ZSTR_VTX_BAND "VBan"
#define ZSTR_SERVO_CURRENT "SrvA"
#define ZSTR_SERVO_VOLTAGE "SrvV"
#define ZSTR_SERVO_TEMPERATURE "SrvT"
#define ZSTR_SERVO_STATUS "SrvS"
+5 -1
View File
@@ -1359,4 +1359,8 @@
#define ZSTR_VTX_FREQ "VFrq"
#define ZSTR_VTX_PWR "VPwr"
#define ZSTR_VTX_CHAN "VChn"
#define ZSTR_VTX_BAND "VBan"
#define ZSTR_VTX_BAND "VBan"
#define ZSTR_SERVO_CURRENT "SrvA"
#define ZSTR_SERVO_VOLTAGE "SrvV"
#define ZSTR_SERVO_TEMPERATURE "SrvT"
#define ZSTR_SERVO_STATUS "SrvS"
+5 -1
View File
@@ -1358,4 +1358,8 @@
#define ZSTR_VTX_FREQ "VFrq"
#define ZSTR_VTX_PWR "VPwr"
#define ZSTR_VTX_CHAN "VChn"
#define ZSTR_VTX_BAND "VBan"
#define ZSTR_VTX_BAND "VBan"
#define ZSTR_SERVO_CURRENT "SrvA"
#define ZSTR_SERVO_VOLTAGE "SrvV"
#define ZSTR_SERVO_TEMPERATURE "SrvT"
#define ZSTR_SERVO_STATUS "SrvS"
+5 -1
View File
@@ -1366,4 +1366,8 @@
#define ZSTR_VTX_FREQ "VFrq"
#define ZSTR_VTX_PWR "VPwr"
#define ZSTR_VTX_CHAN "VChn"
#define ZSTR_VTX_BAND "VBan"
#define ZSTR_VTX_BAND "VBan"
#define ZSTR_SERVO_CURRENT "SrvA"
#define ZSTR_SERVO_VOLTAGE "SrvV"
#define ZSTR_SERVO_TEMPERATURE "SrvT"
#define ZSTR_SERVO_STATUS "SrvS"
+5 -1
View File
@@ -1383,4 +1383,8 @@
#define ZSTR_VTX_FREQ "VFrq"
#define ZSTR_VTX_PWR "VPwr"
#define ZSTR_VTX_CHAN "VChn"
#define ZSTR_VTX_BAND "VBan"
#define ZSTR_VTX_BAND "VBan"
#define ZSTR_SERVO_CURRENT "SrvA"
#define ZSTR_SERVO_VOLTAGE "SrvV"
#define ZSTR_SERVO_TEMPERATURE "SrvT"
#define ZSTR_SERVO_STATUS "SrvS"
+5 -1
View File
@@ -1376,4 +1376,8 @@
#define ZSTR_VTX_FREQ "VFrq"
#define ZSTR_VTX_PWR "VPwr"
#define ZSTR_VTX_CHAN "VChn"
#define ZSTR_VTX_BAND "VBan"
#define ZSTR_VTX_BAND "VBan"
#define ZSTR_SERVO_CURRENT "SrvA"
#define ZSTR_SERVO_VOLTAGE "SrvV"
#define ZSTR_SERVO_TEMPERATURE "SrvT"
#define ZSTR_SERVO_STATUS "SrvS"
+5 -1
View File
@@ -1368,4 +1368,8 @@
#define ZSTR_VTX_FREQ "VFrq"
#define ZSTR_VTX_PWR "VPwr"
#define ZSTR_VTX_CHAN "VChn"
#define ZSTR_VTX_BAND "VBan"
#define ZSTR_VTX_BAND "VBan"
#define ZSTR_SERVO_CURRENT "SrvA"
#define ZSTR_SERVO_VOLTAGE "SrvV"
#define ZSTR_SERVO_TEMPERATURE "SrvT"
#define ZSTR_SERVO_STATUS "SrvS"
+5 -1
View File
@@ -1375,4 +1375,8 @@
#define ZSTR_VTX_FREQ "VFrq"
#define ZSTR_VTX_PWR "VPwr"
#define ZSTR_VTX_CHAN "VChn"
#define ZSTR_VTX_BAND "VBan"
#define ZSTR_VTX_BAND "VBan"
#define ZSTR_SERVO_CURRENT "SrvA"
#define ZSTR_SERVO_VOLTAGE "SrvV"
#define ZSTR_SERVO_TEMPERATURE "SrvT"
#define ZSTR_SERVO_STATUS "SrvS"
+5 -1
View File
@@ -1364,4 +1364,8 @@
#define ZSTR_VTX_FREQ "VFrq"
#define ZSTR_VTX_PWR "VPwr"
#define ZSTR_VTX_CHAN "VChn"
#define ZSTR_VTX_BAND "VBan"
#define ZSTR_VTX_BAND "VBan"
#define ZSTR_SERVO_CURRENT "SrvA"
#define ZSTR_SERVO_VOLTAGE "SrvV"
#define ZSTR_SERVO_TEMPERATURE "SrvT"
#define ZSTR_SERVO_STATUS "SrvS"
+5 -1
View File
@@ -1375,4 +1375,8 @@
#define ZSTR_VTX_FREQ "VFrq"
#define ZSTR_VTX_PWR "VPwr"
#define ZSTR_VTX_CHAN "VChn"
#define ZSTR_VTX_BAND "VBan"
#define ZSTR_VTX_BAND "VBan"
#define ZSTR_SERVO_CURRENT "SrvA"
#define ZSTR_SERVO_VOLTAGE "SrvV"
#define ZSTR_SERVO_TEMPERATURE "SrvT"
#define ZSTR_SERVO_STATUS "SrvS"