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
+3 -2
View File
@@ -39,7 +39,8 @@ enum DEBUG_RF_FRAME_PRINT_E {
BOTH_FRAME_PRINT = 3
};
#define DEBUG_RF_FRAME_PRINT FRAME_PRINT_OFF
//#define DEBUG_RF_FRAME_PRINT FRAME_PRINT_OFF
#define DEBUG_RF_FRAME_PRINT BOTH_FRAME_PRINT
#define FLYSKY_MODULE_TIMEOUT 155 /* ms */
#define FLYSKY_PERIOD 4 /*ms*/
#define NUM_OF_NV14_CHANNELS (14)
@@ -399,7 +400,7 @@ inline void debugFrame(const uint8_t* rxBuffer, uint8_t rxBufferCount)
inline void parseResponse()
{
const afhds2Resp* resp =
afhds2Resp* resp =
reinterpret_cast<afhds2Resp*>(intmodulePulsesData.flysky.telemetry);
uint8_t dataLen = intmodulePulsesData.flysky.telemetry_index;
+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);
}
}
+1 -37
View File
@@ -21,43 +21,7 @@
#ifndef __FLYSKY_NV14_H__
#define __FLYSKY_NV14_H__
enum FlySkySensorType_E {
FLYSKY_SENSOR_RX_VOLTAGE,
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;
void flySkyNv14SetDefault(int index, uint8_t id, uint8_t subId, uint8_t instance);
void flySkyNv14ProcessTelemetryPacket(const uint8_t * ptr, uint8_t SensorType );
void flySkyNv14ProcessTelemetryPacket(uint8_t * ptr, uint8_t len );
#endif
@@ -26,6 +26,8 @@
#include "libopenui.h"
#endif
#include "telemetry/flysky_nv14.h"
TelemetryItem telemetryItems[MAX_TELEMETRY_SENSORS];
uint8_t allowNewSensors;
@@ -557,6 +559,12 @@ int setTelemetryValue(TelemetryProtocol protocol, uint16_t id, uint8_t subId, ui
break;
#endif
#if defined(AFHDS2)
case PROTOCOL_TELEMETRY_FLYSKY_NV14:
flySkyNv14SetDefault(index, id, subId, instance);
break;
#endif
#if defined(MULTIMODULE)
case PROTOCOL_TELEMETRY_SPEKTRUM:
spektrumSetDefault(index, id, subId, instance);