Fixed telemetry

This commit is contained in:
Raphael Coeffic
2021-09-19 16:17:47 +02:00
parent 78d8d976b4
commit b0147a43d0
4 changed files with 67 additions and 47 deletions
+55 -8
View File
@@ -21,6 +21,46 @@
#include "opentx.h"
#include "flysky_nv14.h"
enum FlySkySensorType_E {
FLYSKY_SENSOR_RX_VOLTAGE=0,
FLYSKY_SENSOR_RX_SIGNAL,
FLYSKY_SENSOR_RX_RSSI,
FLYSKY_SENSOR_RX_NOISE,
FLYSKY_SENSOR_RX_SNR,
FLYSKY_SENSOR_TEMP,
FLYSKY_SENSOR_EXT_VOLTAGE,
FLYSKY_SENSOR_MOTO_RPM,
FLYSKY_SENSOR_PRESSURE,
FLYSKY_SENSOR_GPS
};
typedef struct FLYSKY_GPS_INFO_S {
uint8_t position_fix;
uint8_t satell_cnt;
uint8_t latitude[4];
uint8_t longtitude[4];
uint8_t altitude[4];
uint8_t g_speed[2];
uint8_t direction[2];
} gps_info_t;
typedef struct FLYSKY_SENSOR_DATA_S {
uint8_t sensor_type;
uint8_t sensor_id;
uint8_t voltage[2];
uint8_t signal;
uint8_t rssi[2];
uint8_t noise[2];
uint8_t snr[2];
uint8_t temp[2];
uint8_t ext_voltage[2];
uint8_t moto_rpm[2];
uint8_t pressure_value[2];
gps_info_t gps_info;
} rx_sensor_t;
#define FLYSKY_FIXED_RX_VOLTAGE (uint8_t)(FLYSKY_SENSOR_RX_VOLTAGE + (uint8_t)0xA0)
#define MIN_SNR 8
@@ -43,7 +83,6 @@ struct FlyskyNv14Sensor {
const bool issigned;
};
union nv14SensorData {
uint8_t UINT8;
uint16_t UINT16;
@@ -51,8 +90,6 @@ union nv14SensorData {
uint32_t UINT32;
};
const FlyskyNv14Sensor Nv14Sensor[]=
{
{FLYSKY_FIXED_RX_VOLTAGE, 0, STR_SENSOR_A3, UNIT_VOLTS, 2, 0, 2, false},
@@ -187,15 +224,25 @@ int32_t GetSensorValueFlySkyNv14(const FlyskyNv14Sensor* sensor,
return value;
}
void flySkyNv14ProcessTelemetryPacket(const uint8_t* ptr, uint8_t sensorID)
void flySkyNv14ProcessTelemetryPacket(uint8_t* ptr, uint8_t len)
{
uint8_t instance = *ptr++;
if (sensorID == FLYSKY_SENSOR_RX_VOLTAGE) sensorID = FLYSKY_FIXED_RX_VOLTAGE;
uint8_t sensorType = *ptr++;
uint8_t sensorID = *ptr++;
TRACE("ID[%02X] Type[%02X] len=%d", ptr[1], ptr[0], len);
// remove unknown sensor (strange values)
if (sensorType == 0xEE) return;
if (sensorType == FLYSKY_SENSOR_RX_VOLTAGE)
sensorType = FLYSKY_FIXED_RX_VOLTAGE;
for (const FlyskyNv14Sensor sensor : Nv14Sensor) {
if (sensor.id == sensorID) {
if (sensor.id == sensorType) {
int32_t value = GetSensorValueFlySkyNv14(&sensor, ptr);
TRACE("[%02X] id=%02X(%s) subId=%02X value=%d",
sensorID, sensor.id, sensor.name, sensor.subId, value);
setTelemetryValue(PROTOCOL_TELEMETRY_FLYSKY_NV14, sensor.id, sensor.subId,
instance, value, sensor.unit, sensor.precision);
sensorID, value, sensor.unit, sensor.precision);
}
}