Crossfire: add barometer altitude sensor (#232)

This commit is contained in:
Janek
2022-04-14 22:31:13 +02:00
committed by GitHub
parent 2c37760dfe
commit 95a8c5b3e5
2 changed files with 20 additions and 0 deletions
+18
View File
@@ -51,6 +51,7 @@ const CrossfireSensor crossfireSensors[] = {
{ATTITUDE_ID, 2, ZSTR_YAW, UNIT_RADIANS, 3},
{FLIGHT_MODE_ID, 0, ZSTR_FLIGHT_MODE, UNIT_TEXT, 0},
{CF_VARIO_ID, 0, ZSTR_VSPD, UNIT_METERS_PER_SECOND, 2},
{BARO_ALT_ID, 0, ZSTR_ALT, UNIT_METERS, 2},
{0, 0, "UNKNOWN", UNIT_RAW, 0},
};
@@ -71,6 +72,8 @@ const CrossfireSensor &getCrossfireSensor(uint8_t id, uint8_t subId) {
return crossfireSensors[ATTITUDE_PITCH_INDEX + subId];
else if (id == FLIGHT_MODE_ID)
return crossfireSensors[FLIGHT_MODE_INDEX];
else if (id == BARO_ALT_ID)
return crossfireSensors[BARO_ALTITUDE_INDEX];
else
return crossfireSensors[UNKNOWN_INDEX];
}
@@ -135,6 +138,21 @@ void processCrossfireTelemetryFrame() {
processCrossfireTelemetryValue(GPS_SATELLITES_INDEX, value);
break;
case BARO_ALT_ID:
if (getCrossfireTelemetryValue<2>(3, value)) {
if (value & 0x8000) {
// Altitude in meters
value &= ~(0x8000);
value *= 100; // cm
} else {
// Altitude in decimeters + 10000dm
value -= 10000;
value *= 10;
}
processCrossfireTelemetryValue(BARO_ALTITUDE_INDEX, value);
}
break;
case LINK_ID:
for (unsigned int i = 0; i <= TX_SNR_INDEX; i++) {
if (getCrossfireTelemetryValue<1>(3 + i, value)) {
+2
View File
@@ -33,6 +33,7 @@
#define GPS_ID 0x02
#define CF_VARIO_ID 0x07
#define BATTERY_ID 0x08
#define BARO_ALT_ID 0x09
#define LINK_ID 0x14
#define CHANNELS_ID 0x16
#define LINK_RX_ID 0x1C
@@ -88,6 +89,7 @@ enum CrossfireSensorIndexes {
ATTITUDE_YAW_INDEX,
FLIGHT_MODE_INDEX,
VERTICAL_SPEED_INDEX,
BARO_ALTITUDE_INDEX,
UNKNOWN_INDEX,
};