mirror of
https://github.com/opentx/opentx.git
synced 2025-07-24 16:55:20 +03:00
parent
5b516b8287
commit
39f29860c9
13 changed files with 151 additions and 172 deletions
|
@ -40,11 +40,10 @@ void menuRadioDiagAnalogs(event_t event)
|
||||||
}
|
}
|
||||||
|
|
||||||
// RAS
|
// RAS
|
||||||
if((isModuleXJT(INTERNAL_MODULE) && IS_INTERNAL_MODULE_ON()) || (isModulePXX1(EXTERNAL_MODULE) && !IS_INTERNAL_MODULE_ON())) {
|
if ((isModuleXJT(INTERNAL_MODULE) && IS_INTERNAL_MODULE_ON()) || (isModulePXX1(EXTERNAL_MODULE) && !IS_INTERNAL_MODULE_ON())) {
|
||||||
lcdDrawTextAlignedLeft(MENU_HEADER_HEIGHT+6*FH, "RAS");
|
lcdDrawTextAlignedLeft(MENU_HEADER_HEIGHT+6*FH, "RAS");
|
||||||
lcdDrawNumber(10*FW-1, MENU_HEADER_HEIGHT+6*FH, telemetryData.swrInternal.value, RIGHT);
|
lcdDrawNumber(10*FW-1, MENU_HEADER_HEIGHT+6*FH, telemetryData.swrInternal.value(), RIGHT);
|
||||||
lcdDrawText(LCD_W/2, MENU_HEADER_HEIGHT+6*FH, "XJTVER");
|
lcdDrawText(LCD_W/2, MENU_HEADER_HEIGHT+6*FH, "XJTVER");
|
||||||
lcdDrawNumber(LCD_W/2 + 10*FW-1, MENU_HEADER_HEIGHT+6*FH, telemetryData.xjtVersion, RIGHT);
|
lcdDrawNumber(LCD_W/2 + 10*FW-1, MENU_HEADER_HEIGHT+6*FH, telemetryData.xjtVersion, RIGHT);
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -221,7 +221,7 @@ bool menuStatsAnalogs(event_t event)
|
||||||
// RAS
|
// RAS
|
||||||
if ((isModuleXJT(INTERNAL_MODULE) && IS_INTERNAL_MODULE_ON()) || (isModulePXX1(EXTERNAL_MODULE) && !IS_INTERNAL_MODULE_ON())) {
|
if ((isModuleXJT(INTERNAL_MODULE) && IS_INTERNAL_MODULE_ON()) || (isModulePXX1(EXTERNAL_MODULE) && !IS_INTERNAL_MODULE_ON())) {
|
||||||
lcdDrawText(MENUS_MARGIN_LEFT, MENU_CONTENT_TOP+7*FH, "RAS");
|
lcdDrawText(MENUS_MARGIN_LEFT, MENU_CONTENT_TOP+7*FH, "RAS");
|
||||||
lcdDrawNumber(MENUS_MARGIN_LEFT+100, MENU_CONTENT_TOP+7*FH, telemetryData.swrInternal.value);
|
lcdDrawNumber(MENUS_MARGIN_LEFT+100, MENU_CONTENT_TOP+7*FH, telemetryData.swrInternal.value());
|
||||||
lcdDrawText(MENUS_MARGIN_LEFT + LCD_W/2, MENU_CONTENT_TOP+7*FH, "XJTVER");
|
lcdDrawText(MENUS_MARGIN_LEFT + LCD_W/2, MENU_CONTENT_TOP+7*FH, "XJTVER");
|
||||||
lcdDrawNumber(LCD_W/2 + MENUS_MARGIN_LEFT+100, MENU_CONTENT_TOP+7*FH, telemetryData.xjtVersion);
|
lcdDrawNumber(LCD_W/2 + MENUS_MARGIN_LEFT+100, MENU_CONTENT_TOP+7*FH, telemetryData.xjtVersion);
|
||||||
}
|
}
|
||||||
|
|
|
@ -564,13 +564,13 @@ void menuRadioHardware(event_t event)
|
||||||
#else
|
#else
|
||||||
lcdDrawTextAlignedLeft(y, "RAS");
|
lcdDrawTextAlignedLeft(y, "RAS");
|
||||||
if (telemetryData.swrInternal.isFresh())
|
if (telemetryData.swrInternal.isFresh())
|
||||||
lcdDrawNumber(HW_SETTINGS_COLUMN2, y, telemetryData.swrInternal.value);
|
lcdDrawNumber(HW_SETTINGS_COLUMN2, y, telemetryData.swrInternal.value());
|
||||||
else
|
else
|
||||||
lcdDrawText(HW_SETTINGS_COLUMN2, y, "---");
|
lcdDrawText(HW_SETTINGS_COLUMN2, y, "---");
|
||||||
lcdDrawText(lcdNextPos, y, "/");
|
lcdDrawText(lcdNextPos, y, "/");
|
||||||
#endif
|
#endif
|
||||||
if (telemetryData.swrExternal.isFresh())
|
if (telemetryData.swrExternal.isFresh())
|
||||||
lcdDrawNumber(lcdNextPos, y, telemetryData.swrExternal.value);
|
lcdDrawNumber(lcdNextPos, y, telemetryData.swrExternal.value());
|
||||||
else
|
else
|
||||||
lcdDrawText(lcdNextPos, y, "---");
|
lcdDrawText(lcdNextPos, y, "---");
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -785,7 +785,7 @@ This is just a hardware pass/fail measure and does not represent the quality of
|
||||||
static int luaGetRAS(lua_State * L)
|
static int luaGetRAS(lua_State * L)
|
||||||
{
|
{
|
||||||
if (isRasValueValid()) {
|
if (isRasValueValid()) {
|
||||||
lua_pushinteger(L, telemetryData.swrInternal.value);
|
lua_pushinteger(L, telemetryData.swrInternal.value());
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
lua_pushnil(L);
|
lua_pushnil(L);
|
||||||
|
|
|
@ -1842,17 +1842,7 @@ void opentxInit()
|
||||||
// g_model.topbarData is still zero here (because it was not yet read from SDCARD),
|
// g_model.topbarData is still zero here (because it was not yet read from SDCARD),
|
||||||
// but we only remember the pointer to in in constructor.
|
// but we only remember the pointer to in in constructor.
|
||||||
// The storageReadAll() needs topbar object, so it must be created here
|
// The storageReadAll() needs topbar object, so it must be created here
|
||||||
#if __clang__
|
|
||||||
// clang does not like this at all, turn into a warning so that -Werror does not stop here
|
|
||||||
// taking address of packed member 'topbarData' of class or structure 'ModelData' may result in an unaligned pointer value [-Werror,-Waddress-of-packed-member]
|
|
||||||
#pragma clang diagnostic push
|
|
||||||
#pragma clang diagnostic warning "-Waddress-of-packed-member"
|
|
||||||
#endif
|
|
||||||
topbar = new Topbar(&g_model.topbarData);
|
topbar = new Topbar(&g_model.topbarData);
|
||||||
#if __clang__
|
|
||||||
// Restore warnings
|
|
||||||
#pragma clang diagnostic pop
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// lua widget state must also be prepared before the call to storageReadAll()
|
// lua widget state must also be prepared before the call to storageReadAll()
|
||||||
LUA_INIT_THEMES_AND_WIDGETS();
|
LUA_INIT_THEMES_AND_WIDGETS();
|
||||||
|
|
|
@ -784,10 +784,11 @@ void logicalSwitchesTimerTick()
|
||||||
for (uint8_t i=0; i<MAX_LOGICAL_SWITCHES; i++) {
|
for (uint8_t i=0; i<MAX_LOGICAL_SWITCHES; i++) {
|
||||||
LogicalSwitchData * ls = lswAddress(i);
|
LogicalSwitchData * ls = lswAddress(i);
|
||||||
if (ls->func == LS_FUNC_TIMER) {
|
if (ls->func == LS_FUNC_TIMER) {
|
||||||
int16_t *lastValue = &LS_LAST_VALUE(fm, i);
|
int16_t * lastValue = &LS_LAST_VALUE(fm, i);
|
||||||
if (*lastValue == 0 || *lastValue == CS_LAST_VALUE_INIT) {
|
if (*lastValue == 0 || *lastValue == CS_LAST_VALUE_INIT) {
|
||||||
*lastValue = -lswTimerValue(ls->v1);
|
*lastValue = -lswTimerValue(ls->v1);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (*lastValue < 0) {
|
else if (*lastValue < 0) {
|
||||||
if (++(*lastValue) == 0)
|
if (++(*lastValue) == 0)
|
||||||
*lastValue = lswTimerValue(ls->v2);
|
*lastValue = lswTimerValue(ls->v2);
|
||||||
|
|
|
@ -39,11 +39,6 @@ enum FrSkyDataState {
|
||||||
|
|
||||||
#define FRSKY_SPORT_PACKET_SIZE 9
|
#define FRSKY_SPORT_PACKET_SIZE 9
|
||||||
|
|
||||||
#define WSHH_TIMEOUT10ms 60 // 600ms
|
|
||||||
|
|
||||||
#define FRSKY_SPORT_AVERAGING 4
|
|
||||||
#define FRSKY_D_AVERAGING 8
|
|
||||||
|
|
||||||
// Enumerate FrSky packet codes
|
// Enumerate FrSky packet codes
|
||||||
#define LINKPKT 0xfe
|
#define LINKPKT 0xfe
|
||||||
#define USRPKT 0xfd
|
#define USRPKT 0xfd
|
||||||
|
@ -56,7 +51,6 @@ enum FrSkyDataState {
|
||||||
#define RSSI2PKT 0xf6
|
#define RSSI2PKT 0xf6
|
||||||
#define RSSI_REQUEST 0xf1
|
#define RSSI_REQUEST 0xf1
|
||||||
|
|
||||||
|
|
||||||
// FrSky PRIM IDs (1 byte)
|
// FrSky PRIM IDs (1 byte)
|
||||||
#define DATA_FRAME 0x10
|
#define DATA_FRAME 0x10
|
||||||
|
|
||||||
|
@ -99,7 +93,6 @@ enum FrSkyDataState {
|
||||||
|
|
||||||
#define VFAS_D_HIPREC_OFFSET 2000
|
#define VFAS_D_HIPREC_OFFSET 2000
|
||||||
|
|
||||||
|
|
||||||
// FrSky new DATA IDs (2 bytes)
|
// FrSky new DATA IDs (2 bytes)
|
||||||
#define ALT_FIRST_ID 0x0100
|
#define ALT_FIRST_ID 0x0100
|
||||||
#define ALT_LAST_ID 0x010f
|
#define ALT_LAST_ID 0x010f
|
||||||
|
@ -205,52 +198,44 @@ enum FrSkyDataState {
|
||||||
#define DATA_ID_SP2UH 0x45 // 5
|
#define DATA_ID_SP2UH 0x45 // 5
|
||||||
#define DATA_ID_SP2UR 0xC6 // 6
|
#define DATA_ID_SP2UR 0xC6 // 6
|
||||||
|
|
||||||
#define IS_HIDDEN_TELEMETRY_VALUE(id) ((id == SP2UART_A_ID) || (id == SP2UART_B_ID) || (id == XJT_VERSION_ID) || (id == RAS_ID) || (id == FACT_TEST_ID))
|
inline bool IS_HIDDEN_TELEMETRY_VALUE(uint16_t id)
|
||||||
|
{
|
||||||
|
return (id == SP2UART_A_ID) || (id == SP2UART_B_ID) || (id == XJT_VERSION_ID) || (id == RAS_ID) || (id == FACT_TEST_ID);
|
||||||
|
}
|
||||||
|
|
||||||
#define ALARM_GREATER(channel, alarm) ((g_model.frsky.channels[channel].alarms_greater >> alarm) & 1)
|
class TelemetryData {
|
||||||
#define ALARM_LEVEL(channel, alarm) ((g_model.frsky.channels[channel].alarms_level >> (2*alarm)) & 3)
|
public:
|
||||||
|
TelemetryExpiringDecorator<TelemetryValue> swrInternal;
|
||||||
|
TelemetryExpiringDecorator<TelemetryValue> swrExternal;
|
||||||
|
TelemetryFilterDecorator<TelemetryValue> rssi;
|
||||||
|
uint16_t xjtVersion;
|
||||||
|
bool varioHighPrecision;
|
||||||
|
|
||||||
#define TELEMETRY_STREAMING() (telemetryData.rssi.value > 0)
|
void setSwr(uint8_t module, uint8_t value)
|
||||||
#define TELEMETRY_RSSI() (telemetryData.rssi.value)
|
{
|
||||||
#define TELEMETRY_RSSI_MIN() (telemetryData.rssi.min)
|
if (module == 0)
|
||||||
|
swrInternal.set(value);
|
||||||
|
else
|
||||||
|
swrExternal.set(value);
|
||||||
|
}
|
||||||
|
|
||||||
#define TELEMETRY_CELL_VOLTAGE_MUTLIPLIER 1
|
void clear()
|
||||||
|
{
|
||||||
|
memset(this, 0, sizeof(*this));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
#define TELEMETRY_GPS_SPEED_BP telemetryData.hub.gpsSpeed_bp
|
extern TelemetryData telemetryData;
|
||||||
#define TELEMETRY_GPS_SPEED_AP telemetryData.hub.gpsSpeed_ap
|
|
||||||
|
|
||||||
#define TELEMETRY_ABSOLUTE_GPS_ALT (telemetryData.hub.gpsAltitude)
|
inline bool TELEMETRY_STREAMING()
|
||||||
#define TELEMETRY_RELATIVE_GPS_ALT (telemetryData.hub.gpsAltitude + telemetryData.hub.gpsAltitudeOffset)
|
{
|
||||||
#define TELEMETRY_RELATIVE_GPS_ALT_BP (TELEMETRY_RELATIVE_GPS_ALT / 100)
|
return telemetryData.rssi.value() > 0;
|
||||||
|
}
|
||||||
|
|
||||||
#define TELEMETRY_RELATIVE_BARO_ALT_BP (telemetryData.hub.baroAltitude / 100)
|
inline uint8_t TELEMETRY_RSSI()
|
||||||
#define TELEMETRY_RELATIVE_BARO_ALT_AP (telemetryData.hub.baroAltitude % 100)
|
{
|
||||||
|
return telemetryData.rssi.value();
|
||||||
#define TELEMETRY_BARO_ALT_PREPARE() div_t baroAltitudeDivision = div(getConvertedTelemetryValue(telemetryData.hub.baroAltitude, UNIT_DIST), 100)
|
}
|
||||||
#define TELEMETRY_BARO_ALT_FORMAT "%c%d.%02d,"
|
|
||||||
#define TELEMETRY_BARO_ALT_ARGS telemetryData.hub.baroAltitude < 0 ? '-' : ' ', abs(baroAltitudeDivision.quot), abs(baroAltitudeDivision.rem),
|
|
||||||
#define TELEMETRY_GPS_ALT_FORMAT "%c%d.%02d,"
|
|
||||||
#define TELEMETRY_GPS_ALT_ARGS telemetryData.hub.gpsAltitude < 0 ? '-' : ' ', abs(telemetryData.hub.gpsAltitude / 100), abs(telemetryData.hub.gpsAltitude % 100),
|
|
||||||
#define TELEMETRY_SPEED_UNIT (IS_IMPERIAL_ENABLE() ? SPEED_UNIT_IMP : SPEED_UNIT_METR)
|
|
||||||
#define TELEMETRY_GPS_SPEED_FORMAT "%d,"
|
|
||||||
#define TELEMETRY_GPS_SPEED_ARGS telemetryData.hub.gpsSpeed_bp,
|
|
||||||
|
|
||||||
#define TELEMETRY_CELLS_ARGS telemetryData.hub.cellsSum / 10, telemetryData.hub.cellsSum % 10, TELEMETRY_CELL_VOLTAGE(0)/100, TELEMETRY_CELL_VOLTAGE(0)%100, TELEMETRY_CELL_VOLTAGE(1)/100, TELEMETRY_CELL_VOLTAGE(1)%100, TELEMETRY_CELL_VOLTAGE(2)/100, TELEMETRY_CELL_VOLTAGE(2)%100, TELEMETRY_CELL_VOLTAGE(3)/100, TELEMETRY_CELL_VOLTAGE(3)%100, TELEMETRY_CELL_VOLTAGE(4)/100, TELEMETRY_CELL_VOLTAGE(4)%100, TELEMETRY_CELL_VOLTAGE(5)/100, TELEMETRY_CELL_VOLTAGE(5)%100, TELEMETRY_CELL_VOLTAGE(6)/100, TELEMETRY_CELL_VOLTAGE(6)%100, TELEMETRY_CELL_VOLTAGE(7)/100, TELEMETRY_CELL_VOLTAGE(7)%100, TELEMETRY_CELL_VOLTAGE(8)/100, TELEMETRY_CELL_VOLTAGE(8)%100, TELEMETRY_CELL_VOLTAGE(9)/100, TELEMETRY_CELL_VOLTAGE(9)%100, TELEMETRY_CELL_VOLTAGE(10)/100, TELEMETRY_CELL_VOLTAGE(10)%100, TELEMETRY_CELL_VOLTAGE(11)/100, TELEMETRY_CELL_VOLTAGE(11)%100,
|
|
||||||
#define TELEMETRY_CELLS_FORMAT "%d.%d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,%d.%02d,"
|
|
||||||
#define TELEMETRY_CELLS_LABEL "Cell volts,Cell 1,Cell 2,Cell 3,Cell 4,Cell 5,Cell 6,Cell 7,Cell 8,Cell 9,Cell 10,Cell 11,Cell 12,"
|
|
||||||
|
|
||||||
#define TELEMETRY_CURRENT_FORMAT "%d.%d,"
|
|
||||||
#define TELEMETRY_CURRENT_ARGS telemetryData.hub.current / 10, telemetryData.hub.current % 10,
|
|
||||||
#define TELEMETRY_VFAS_FORMAT "%d.%d,"
|
|
||||||
#define TELEMETRY_VFAS_ARGS telemetryData.hub.vfas / 10, telemetryData.hub.vfas % 10,
|
|
||||||
#define TELEMETRY_VSPEED_FORMAT "%c%d.%02d,"
|
|
||||||
#define TELEMETRY_VSPEED_ARGS telemetryData.hub.varioSpeed < 0 ? '-' : ' ', abs(telemetryData.hub.varioSpeed / 100), abs(telemetryData.hub.varioSpeed % 100),
|
|
||||||
#define TELEMETRY_ASPEED_FORMAT "%d.%d,"
|
|
||||||
#define TELEMETRY_ASPEED_ARGS telemetryData.hub.airSpeed / 10, telemetryData.hub.airSpeed % 10,
|
|
||||||
#define TELEMETRY_OPENXSENSOR() (0)
|
|
||||||
|
|
||||||
#define TELEMETRY_CELL_VOLTAGE(k) (telemetryData.hub.cellVolts[k] * TELEMETRY_CELL_VOLTAGE_MUTLIPLIER)
|
|
||||||
#define TELEMETRY_MIN_CELL_VOLTAGE (telemetryData.hub.minCellVolts * TELEMETRY_CELL_VOLTAGE_MUTLIPLIER)
|
|
||||||
|
|
||||||
#define START_STOP 0x7E
|
#define START_STOP 0x7E
|
||||||
#define BYTESTUFF 0x7D
|
#define BYTESTUFF 0x7D
|
||||||
|
@ -280,25 +265,6 @@ void telemetryInit(uint8_t protocol);
|
||||||
|
|
||||||
void telemetryInterrupt10ms();
|
void telemetryInterrupt10ms();
|
||||||
|
|
||||||
class TelemetryData {
|
|
||||||
public:
|
|
||||||
TelemetryExpiringDecorator<TelemetryValue> swrInternal;
|
|
||||||
TelemetryExpiringDecorator<TelemetryValue> swrExternal;
|
|
||||||
TelemetryFilterDecorator<TelemetryValue> rssi;
|
|
||||||
uint16_t xjtVersion;
|
|
||||||
bool varioHighPrecision;
|
|
||||||
|
|
||||||
void setSwr(uint8_t module, uint8_t value)
|
|
||||||
{
|
|
||||||
if (module == 0)
|
|
||||||
swrInternal.set(value);
|
|
||||||
else
|
|
||||||
swrExternal.set(value);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
extern TelemetryData telemetryData;
|
|
||||||
|
|
||||||
bool pushFrskyTelemetryData(uint8_t data); // returns true when end of frame detected
|
bool pushFrskyTelemetryData(uint8_t data); // returns true when end of frame detected
|
||||||
void processFrskyTelemetryData(uint8_t data);
|
void processFrskyTelemetryData(uint8_t data);
|
||||||
|
|
||||||
|
|
|
@ -71,10 +71,10 @@ inline bool isBadAntennaDetected()
|
||||||
if (!isRasValueValid())
|
if (!isRasValueValid())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (telemetryData.swrInternal.isFresh() && telemetryData.swrInternal.value > FRSKY_BAD_ANTENNA_THRESHOLD)
|
if (telemetryData.swrInternal.isFresh() && telemetryData.swrInternal.value() > FRSKY_BAD_ANTENNA_THRESHOLD)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (telemetryData.swrExternal.isFresh() && telemetryData.swrExternal.value > FRSKY_BAD_ANTENNA_THRESHOLD)
|
if (telemetryData.swrExternal.isFresh() && telemetryData.swrExternal.value() > FRSKY_BAD_ANTENNA_THRESHOLD)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
|
@ -210,15 +210,12 @@ void telemetryInterrupt10ms()
|
||||||
{
|
{
|
||||||
|
|
||||||
if (TELEMETRY_STREAMING()) {
|
if (TELEMETRY_STREAMING()) {
|
||||||
if (!TELEMETRY_OPENXSENSOR()) {
|
for (int i=0; i<MAX_TELEMETRY_SENSORS; i++) {
|
||||||
for (int i=0; i<MAX_TELEMETRY_SENSORS; i++) {
|
const TelemetrySensor & sensor = g_model.telemetrySensors[i];
|
||||||
const TelemetrySensor & sensor = g_model.telemetrySensors[i];
|
if (sensor.type == TELEM_TYPE_CALCULATED) {
|
||||||
if (sensor.type == TELEM_TYPE_CALCULATED) {
|
telemetryItems[i].per10ms(sensor);
|
||||||
telemetryItems[i].per10ms(sensor);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(WS_HOW_HIGH)
|
#if defined(WS_HOW_HIGH)
|
||||||
|
|
|
@ -29,31 +29,37 @@
|
||||||
|
|
||||||
class TelemetryValue {
|
class TelemetryValue {
|
||||||
public:
|
public:
|
||||||
uint8_t value;
|
uint8_t value()
|
||||||
|
{
|
||||||
|
return _value;
|
||||||
|
}
|
||||||
|
|
||||||
void set(uint8_t value)
|
void set(uint8_t value)
|
||||||
{
|
{
|
||||||
this->value = value;
|
_value = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void reset()
|
void reset()
|
||||||
{
|
{
|
||||||
set(0);
|
set(0);
|
||||||
};
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
uint8_t _value;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
class TelemetryFilterDecorator: public T {
|
class TelemetryFilterDecorator: public T {
|
||||||
public:
|
public:
|
||||||
uint8_t values[TELEMETRY_AVERAGE_COUNT];
|
|
||||||
void set(uint8_t value)
|
void set(uint8_t value)
|
||||||
{
|
{
|
||||||
if (this->value == 0 || value == 0) {
|
if (value == 0 || this->_value == 0) {
|
||||||
memset(values, value, TELEMETRY_AVERAGE_COUNT);
|
memset(values, value, TELEMETRY_AVERAGE_COUNT);
|
||||||
this->value = value;
|
this->_value = value;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
//calculate the average from values[] and value
|
// calculate the average from values[] and value
|
||||||
//also shift readings in values [] array
|
// also shift readings in values [] array
|
||||||
unsigned int sum = values[0];
|
unsigned int sum = values[0];
|
||||||
for (int i=0; i<TELEMETRY_AVERAGE_COUNT-1; i++) {
|
for (int i=0; i<TELEMETRY_AVERAGE_COUNT-1; i++) {
|
||||||
uint8_t tmp = values[i+1];
|
uint8_t tmp = values[i+1];
|
||||||
|
@ -62,49 +68,65 @@ class TelemetryFilterDecorator: public T {
|
||||||
}
|
}
|
||||||
values[TELEMETRY_AVERAGE_COUNT-1] = value;
|
values[TELEMETRY_AVERAGE_COUNT-1] = value;
|
||||||
sum += value;
|
sum += value;
|
||||||
this->value = sum / (TELEMETRY_AVERAGE_COUNT+1);
|
this->_value = sum / (TELEMETRY_AVERAGE_COUNT+1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void reset()
|
void reset()
|
||||||
{
|
{
|
||||||
memclear(this, sizeof(*this));
|
memclear(this, sizeof(*this));
|
||||||
};
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
uint8_t values[TELEMETRY_AVERAGE_COUNT];
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
class TelemetryExpiringDecorator: public T {
|
class TelemetryExpiringDecorator: public T {
|
||||||
public:
|
public:
|
||||||
tmr10ms_t expirationTime;
|
|
||||||
void set(uint8_t value)
|
void set(uint8_t value)
|
||||||
{
|
{
|
||||||
T::set(value);
|
T::set(value);
|
||||||
expirationTime = get_tmr10ms() + 1000/*10s*/;
|
expirationTime = get_tmr10ms() + 1000/*10s*/;
|
||||||
}
|
}
|
||||||
|
|
||||||
void reset()
|
void reset()
|
||||||
{
|
{
|
||||||
memclear(this, sizeof(*this));
|
memclear(this, sizeof(*this));
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isFresh()
|
bool isFresh()
|
||||||
{
|
{
|
||||||
return get_tmr10ms() < expirationTime;
|
return get_tmr10ms() < expirationTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
tmr10ms_t expirationTime;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
class TelemetryMinDecorator: public T {
|
class TelemetryMinDecorator: public T {
|
||||||
public:
|
public:
|
||||||
uint8_t min;
|
|
||||||
void set(uint8_t value)
|
void set(uint8_t value)
|
||||||
{
|
{
|
||||||
T::set(value);
|
T::set(value);
|
||||||
if (!min || value < min) {
|
if (!_min || value < _min) {
|
||||||
min = value;
|
_min = value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t min()
|
||||||
|
{
|
||||||
|
return _min;
|
||||||
|
}
|
||||||
|
|
||||||
void reset()
|
void reset()
|
||||||
{
|
{
|
||||||
memclear(this, sizeof(*this));
|
memclear(this, sizeof(*this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected:
|
||||||
|
uint8_t _min;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // _TELEMETRY_HOLDERS_H_
|
#endif // _TELEMETRY_HOLDERS_H_
|
||||||
|
|
|
@ -34,7 +34,7 @@ if(GTEST_INCDIR AND GTEST_SRCDIR AND Qt5Widgets_FOUND)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-ms-bitfields")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-ms-bitfields")
|
||||||
endif()
|
endif()
|
||||||
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0")
|
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -O0")
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0")
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -O0 ${WARNING_FLAGS}")
|
||||||
|
|
||||||
use_cxx11() # ensure gnu++11 in CXX_FLAGS with CMake < 3.1
|
use_cxx11() # ensure gnu++11 in CXX_FLAGS with CMake < 3.1
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,6 @@ PACK(struct RamBackupUncompressed {
|
||||||
extern Backup::RamBackupUncompressed ramBackupUncompressed;
|
extern Backup::RamBackupUncompressed ramBackupUncompressed;
|
||||||
TEST(Storage, BackupAndRestore)
|
TEST(Storage, BackupAndRestore)
|
||||||
{
|
{
|
||||||
|
|
||||||
rambackupWrite();
|
rambackupWrite();
|
||||||
Backup::RamBackupUncompressed ramBackupRestored;
|
Backup::RamBackupUncompressed ramBackupRestored;
|
||||||
if (uncompress((uint8_t *)&ramBackupRestored, sizeof(ramBackupRestored), ramBackup->data, ramBackup->size) != sizeof(ramBackupUncompressed))
|
if (uncompress((uint8_t *)&ramBackupRestored, sizeof(ramBackupRestored), ramBackup->data, ramBackup->size) != sizeof(ramBackupUncompressed))
|
||||||
|
@ -55,10 +54,10 @@ TEST(Eeprom, 100_random_writes)
|
||||||
|
|
||||||
storageFormat();
|
storageFormat();
|
||||||
|
|
||||||
for(int i=0; i<100; i++) {
|
for (int i = 0; i < 100; i++) {
|
||||||
int size = rand()%800;
|
int size = rand() % 800;
|
||||||
for(int j=0; j<size; j++) {
|
for (int j = 0; j < size; j++) {
|
||||||
buf[j] = rand() < (RAND_MAX/10000*i) ? 0 : (j&0xff);
|
buf[j] = rand() < (RAND_MAX / 10000 * i) ? 0 : (j & 0xff);
|
||||||
}
|
}
|
||||||
f.writeRlc(5, 5, buf, size, 100);
|
f.writeRlc(5, 5, buf, size, 100);
|
||||||
// printf("size=%4d red=%4d\n\n\n", size, f.size());
|
// printf("size=%4d red=%4d\n\n\n", size, f.size());
|
||||||
|
@ -77,7 +76,8 @@ TEST(Eeprom, test2)
|
||||||
|
|
||||||
storageFormat();
|
storageFormat();
|
||||||
|
|
||||||
for(int i=0; i<1000; i++) buf[i]='6'+i%4;
|
for (int i = 0; i < 1000; i++)
|
||||||
|
buf[i] = '6' + i % 4;
|
||||||
|
|
||||||
f.writeRlc(6, 6, buf, 300, 100);
|
f.writeRlc(6, 6, buf, 300, 100);
|
||||||
|
|
||||||
|
@ -86,7 +86,9 @@ TEST(Eeprom, test2)
|
||||||
for(int i=0; i<500; i++){
|
for(int i=0; i<500; i++){
|
||||||
uint8_t b;
|
uint8_t b;
|
||||||
uint16_t n=f.readRlc(&b,1);
|
uint16_t n=f.readRlc(&b,1);
|
||||||
if(n) EXPECT_EQ(b, ('6'+sz%4));
|
if (n) {
|
||||||
|
EXPECT_EQ(b, ('6' + sz % 4));
|
||||||
|
}
|
||||||
sz+=n;
|
sz+=n;
|
||||||
}
|
}
|
||||||
EXPECT_EQ(sz, 300);
|
EXPECT_EQ(sz, 300);
|
||||||
|
@ -100,7 +102,8 @@ TEST(Eeprom, storageCheckImmediately)
|
||||||
|
|
||||||
storageFormat();
|
storageFormat();
|
||||||
|
|
||||||
for(int i=0; i<1000; i++) buf[i]='6'+i%4;
|
for (int i = 0; i < 1000; i++)
|
||||||
|
buf[i]='6'+i%4;
|
||||||
|
|
||||||
theFile.writeRlc(6, 6, buf, 300, false);
|
theFile.writeRlc(6, 6, buf, 300, false);
|
||||||
|
|
||||||
|
@ -108,11 +111,13 @@ TEST(Eeprom, storageCheckImmediately)
|
||||||
|
|
||||||
theFile.openRd(6);
|
theFile.openRd(6);
|
||||||
uint16_t sz=0;
|
uint16_t sz=0;
|
||||||
for(int i=0; i<500; i++){
|
for (int i = 0; i < 500; i++) {
|
||||||
uint8_t b;
|
uint8_t b;
|
||||||
uint16_t n=theFile.readRlc(&b,1);
|
uint16_t n = theFile.readRlc(&b, 1);
|
||||||
if(n) EXPECT_EQ(b, ('6'+sz%4));
|
if (n) {
|
||||||
sz+=n;
|
EXPECT_EQ(b, ('6' + sz % 4));
|
||||||
|
}
|
||||||
|
sz += n;
|
||||||
}
|
}
|
||||||
EXPECT_EQ(sz, 300);
|
EXPECT_EQ(sz, 300);
|
||||||
}
|
}
|
||||||
|
@ -125,19 +130,22 @@ TEST(Eeprom, copy)
|
||||||
|
|
||||||
storageFormat();
|
storageFormat();
|
||||||
|
|
||||||
for(int i=0; i<1000; i++) buf[i]='6'+i%4;
|
for (int i = 0; i < 1000; i++)
|
||||||
|
buf[i] = '6' + i % 4;
|
||||||
|
|
||||||
theFile.writeRlc(5, 6, buf, 300, true);
|
theFile.writeRlc(5, 6, buf, 300, true);
|
||||||
|
|
||||||
theFile.copy(6, 5);
|
theFile.copy(6, 5);
|
||||||
|
|
||||||
theFile.openRd(6);
|
theFile.openRd(6);
|
||||||
uint16_t sz=0;
|
uint16_t sz = 0;
|
||||||
for(int i=0; i<500; i++){
|
for (int i = 0; i < 500; i++) {
|
||||||
uint8_t b;
|
uint8_t b;
|
||||||
uint16_t n=theFile.readRlc(&b,1);
|
uint16_t n = theFile.readRlc(&b, 1);
|
||||||
if(n) EXPECT_EQ(b, ('6'+sz%4));
|
if (n) {
|
||||||
sz+=n;
|
EXPECT_EQ(b, ('6' + sz % 4));
|
||||||
|
}
|
||||||
|
sz += n;
|
||||||
}
|
}
|
||||||
EXPECT_EQ(sz, 300);
|
EXPECT_EQ(sz, 300);
|
||||||
}
|
}
|
||||||
|
@ -150,7 +158,8 @@ TEST(Eeprom, rm)
|
||||||
|
|
||||||
storageFormat();
|
storageFormat();
|
||||||
|
|
||||||
for(int i=0; i<1000; i++) buf[i]='6'+i%4;
|
for (int i = 0; i < 1000; i++)
|
||||||
|
buf[i] = '6' + i % 4;
|
||||||
|
|
||||||
theFile.writeRlc(5, 6, buf, 300, true);
|
theFile.writeRlc(5, 6, buf, 300, true);
|
||||||
|
|
||||||
|
@ -164,9 +173,11 @@ TEST(Eeprom, rm)
|
||||||
uint16_t sz=0;
|
uint16_t sz=0;
|
||||||
for(int i=0; i<500; i++){
|
for(int i=0; i<500; i++){
|
||||||
uint8_t b;
|
uint8_t b;
|
||||||
uint16_t n=theFile.readRlc(&b,1);
|
uint16_t n = theFile.readRlc(&b, 1);
|
||||||
if(n) EXPECT_EQ(b, ('6'+sz%4));
|
if (n) {
|
||||||
sz+=n;
|
EXPECT_EQ(b, ('6' + sz % 4));
|
||||||
|
}
|
||||||
|
sz += n;
|
||||||
}
|
}
|
||||||
EXPECT_EQ(sz, 0);
|
EXPECT_EQ(sz, 0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,19 +45,16 @@ TEST(FrSky, TelemetryValueWithMinAveraging)
|
||||||
int testPos = 0;
|
int testPos = 0;
|
||||||
//test of averaging
|
//test of averaging
|
||||||
TelemetryMinDecorator<TelemetryFilterDecorator<TelemetryValue>> testVal;
|
TelemetryMinDecorator<TelemetryFilterDecorator<TelemetryValue>> testVal;
|
||||||
testVal.value = 0;
|
testVal.reset();
|
||||||
testVal.set(10);
|
testVal.set(10);
|
||||||
EXPECT_EQ(RAW_FRSKY_MINMAX(testVal), 10);
|
EXPECT_EQ(testVal.value(), expected[testPos++]);
|
||||||
EXPECT_EQ(testVal.value, expected[testPos++]);
|
for (int n = 2; n < 10; ++n) {
|
||||||
for(int n=2; n<10; ++n) {
|
testVal.set(n * 10);
|
||||||
testVal.set(n*10);
|
EXPECT_EQ(testVal.value(), expected[testPos++]);
|
||||||
EXPECT_EQ(RAW_FRSKY_MINMAX(testVal), n*10);
|
|
||||||
EXPECT_EQ(testVal.value, expected[testPos++]);
|
|
||||||
}
|
}
|
||||||
for(int n=2; n<10; ++n) {
|
for (int n = 2; n < 10; ++n) {
|
||||||
testVal.set(100);
|
testVal.set(100);
|
||||||
EXPECT_EQ(RAW_FRSKY_MINMAX(testVal), 100);
|
EXPECT_EQ(testVal.value(), expected[testPos++]);
|
||||||
EXPECT_EQ(testVal.value, expected[testPos++]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -190,8 +187,6 @@ void generateSportCellPacket(uint8_t * packet, uint8_t cells, uint8_t battnumber
|
||||||
setSportPacketCrc(packet);
|
setSportPacketCrc(packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define _V(volts) (volts/TELEMETRY_CELL_VOLTAGE_MUTLIPLIER)
|
|
||||||
|
|
||||||
TEST(FrSkySPORT, FrSkyDCells)
|
TEST(FrSkySPORT, FrSkyDCells)
|
||||||
{
|
{
|
||||||
MODEL_RESET();
|
MODEL_RESET();
|
||||||
|
@ -227,12 +222,12 @@ TEST(FrSkySPORT, frskySetCellVoltage)
|
||||||
allowNewSensors = true;
|
allowNewSensors = true;
|
||||||
|
|
||||||
// test that simulates 3 cell battery
|
// test that simulates 3 cell battery
|
||||||
generateSportCellPacket(packet, 3, 0, _V(410), _V(420)); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 3, 0, 410, 420); sportProcessTelemetryPacket(packet);
|
||||||
EXPECT_EQ(checkSportPacket(packet), true) << "Bad CRC generation in setSportPacketCrc()";
|
EXPECT_EQ(checkSportPacket(packet), true) << "Bad CRC generation in setSportPacketCrc()";
|
||||||
generateSportCellPacket(packet, 3, 2, _V(430), _V( 0)); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 3, 2, 430, 0); sportProcessTelemetryPacket(packet);
|
||||||
|
|
||||||
generateSportCellPacket(packet, 3, 0, _V(405), _V(300)); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 3, 0, 405, 300); sportProcessTelemetryPacket(packet);
|
||||||
generateSportCellPacket(packet, 3, 2, _V(430), _V( 0)); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 3, 2, 430, 0); sportProcessTelemetryPacket(packet);
|
||||||
|
|
||||||
EXPECT_EQ(telemetryItems[0].cells.count, 3);
|
EXPECT_EQ(telemetryItems[0].cells.count, 3);
|
||||||
EXPECT_EQ(telemetryItems[0].cells.values[0].value, 405);
|
EXPECT_EQ(telemetryItems[0].cells.values[0].value, 405);
|
||||||
|
@ -243,11 +238,11 @@ TEST(FrSkySPORT, frskySetCellVoltage)
|
||||||
EXPECT_EQ(telemetryItems[0].valueMin, 1135);
|
EXPECT_EQ(telemetryItems[0].valueMin, 1135);
|
||||||
EXPECT_EQ(telemetryItems[0].valueMax, 1260);
|
EXPECT_EQ(telemetryItems[0].valueMax, 1260);
|
||||||
|
|
||||||
generateSportCellPacket(packet, 3, 0, _V(405), _V(250)); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 3, 0, 405, 250); sportProcessTelemetryPacket(packet);
|
||||||
generateSportCellPacket(packet, 3, 2, _V(430), _V( 0)); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 3, 2, 430, 0); sportProcessTelemetryPacket(packet);
|
||||||
|
|
||||||
generateSportCellPacket(packet, 3, 0, _V(410), _V(420)); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 3, 0, 410, 420); sportProcessTelemetryPacket(packet);
|
||||||
generateSportCellPacket(packet, 3, 2, _V(430), _V( 0)); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 3, 2, 430, 0); sportProcessTelemetryPacket(packet);
|
||||||
|
|
||||||
EXPECT_EQ(telemetryItems[0].cells.count, 3);
|
EXPECT_EQ(telemetryItems[0].cells.count, 3);
|
||||||
EXPECT_EQ(telemetryItems[0].cells.values[0].value, 410);
|
EXPECT_EQ(telemetryItems[0].cells.values[0].value, 410);
|
||||||
|
@ -259,9 +254,9 @@ TEST(FrSkySPORT, frskySetCellVoltage)
|
||||||
EXPECT_EQ(telemetryItems[0].valueMax, 1260);
|
EXPECT_EQ(telemetryItems[0].valueMax, 1260);
|
||||||
|
|
||||||
//add another two cells - 5 cell battery
|
//add another two cells - 5 cell battery
|
||||||
generateSportCellPacket(packet, 5, 0, _V(418), _V(408)); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 5, 0, 418, 408); sportProcessTelemetryPacket(packet);
|
||||||
generateSportCellPacket(packet, 5, 2, _V(415), _V(420)); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 5, 2, 415, 420); sportProcessTelemetryPacket(packet);
|
||||||
generateSportCellPacket(packet, 5, 4, _V(410), _V( 0)); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 5, 4, 410, 0); sportProcessTelemetryPacket(packet);
|
||||||
|
|
||||||
EXPECT_EQ(telemetryItems[0].cells.count, 5);
|
EXPECT_EQ(telemetryItems[0].cells.count, 5);
|
||||||
EXPECT_EQ(telemetryItems[0].cells.values[0].value, 418);
|
EXPECT_EQ(telemetryItems[0].cells.values[0].value, 418);
|
||||||
|
@ -275,9 +270,9 @@ TEST(FrSkySPORT, frskySetCellVoltage)
|
||||||
EXPECT_EQ(telemetryItems[0].valueMax, 2071);
|
EXPECT_EQ(telemetryItems[0].valueMax, 2071);
|
||||||
|
|
||||||
//simulate very low voltage for cell 3
|
//simulate very low voltage for cell 3
|
||||||
generateSportCellPacket(packet, 5, 0, _V(418), _V(408)); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 5, 0, 418, 408); sportProcessTelemetryPacket(packet);
|
||||||
generateSportCellPacket(packet, 5, 2, _V(100), _V(420)); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 5, 2, 100, 420); sportProcessTelemetryPacket(packet);
|
||||||
generateSportCellPacket(packet, 5, 4, _V(410), _V( 0)); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 5, 4, 410, 0); sportProcessTelemetryPacket(packet);
|
||||||
|
|
||||||
EXPECT_EQ(telemetryItems[0].cells.count, 5);
|
EXPECT_EQ(telemetryItems[0].cells.count, 5);
|
||||||
EXPECT_EQ(telemetryItems[0].cells.values[0].value, 418);
|
EXPECT_EQ(telemetryItems[0].cells.values[0].value, 418);
|
||||||
|
@ -291,10 +286,10 @@ TEST(FrSkySPORT, frskySetCellVoltage)
|
||||||
EXPECT_EQ(telemetryItems[0].valueMax, 2071);
|
EXPECT_EQ(telemetryItems[0].valueMax, 2071);
|
||||||
|
|
||||||
//back to normal (but with reversed order of packets)
|
//back to normal (but with reversed order of packets)
|
||||||
generateSportCellPacket(packet, 5, 4, _V(410), _V( 0)); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 5, 4, 410, 0); sportProcessTelemetryPacket(packet);
|
||||||
generateSportCellPacket(packet, 5, 0, _V(418), _V(408)); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 5, 0, 418, 408); sportProcessTelemetryPacket(packet);
|
||||||
generateSportCellPacket(packet, 5, 2, _V(412), _V(420)); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 5, 2, 412, 420); sportProcessTelemetryPacket(packet);
|
||||||
generateSportCellPacket(packet, 5, 4, _V(410), _V( 0)); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 5, 4, 410, 0); sportProcessTelemetryPacket(packet);
|
||||||
|
|
||||||
EXPECT_EQ(telemetryItems[0].cells.count, 5);
|
EXPECT_EQ(telemetryItems[0].cells.count, 5);
|
||||||
EXPECT_EQ(telemetryItems[0].cells.values[0].value, 418);
|
EXPECT_EQ(telemetryItems[0].cells.values[0].value, 418);
|
||||||
|
@ -334,8 +329,8 @@ TEST(FrSkySPORT, frskySetCellVoltageTwoSensors)
|
||||||
allowNewSensors = true;
|
allowNewSensors = true;
|
||||||
|
|
||||||
//sensor 1: 3 cell battery
|
//sensor 1: 3 cell battery
|
||||||
generateSportCellPacket(packet, 3, 0, _V(418), _V(416)); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 3, 0, 418, 416); sportProcessTelemetryPacket(packet);
|
||||||
generateSportCellPacket(packet, 3, 2, _V(415), _V( 0)); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 3, 2, 415, 0); sportProcessTelemetryPacket(packet);
|
||||||
|
|
||||||
EXPECT_EQ(telemetryItems[0].cells.count, 3);
|
EXPECT_EQ(telemetryItems[0].cells.count, 3);
|
||||||
EXPECT_EQ(telemetryItems[0].cells.values[0].value, 418);
|
EXPECT_EQ(telemetryItems[0].cells.values[0].value, 418);
|
||||||
|
@ -347,8 +342,8 @@ TEST(FrSkySPORT, frskySetCellVoltageTwoSensors)
|
||||||
EXPECT_EQ(telemetryItems[0].valueMax, 1249);
|
EXPECT_EQ(telemetryItems[0].valueMax, 1249);
|
||||||
|
|
||||||
//sensor 2: 4 cell battery
|
//sensor 2: 4 cell battery
|
||||||
generateSportCellPacket(packet, 4, 0, _V(410), _V(420), DATA_ID_FLVSS+1); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 4, 0, 410, 420, DATA_ID_FLVSS+1); sportProcessTelemetryPacket(packet);
|
||||||
generateSportCellPacket(packet, 4, 2, _V(400), _V(405), DATA_ID_FLVSS+1); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 4, 2, 400, 405, DATA_ID_FLVSS+1); sportProcessTelemetryPacket(packet);
|
||||||
|
|
||||||
EXPECT_EQ(telemetryItems[1].cells.count, 4);
|
EXPECT_EQ(telemetryItems[1].cells.count, 4);
|
||||||
EXPECT_EQ(telemetryItems[1].cells.values[0].value, 410);
|
EXPECT_EQ(telemetryItems[1].cells.values[0].value, 410);
|
||||||
|
@ -372,10 +367,10 @@ TEST(FrSkySPORT, frskySetCellVoltageTwoSensors)
|
||||||
EXPECT_EQ(telemetryItems[2].valueMax, 287);
|
EXPECT_EQ(telemetryItems[2].valueMax, 287);
|
||||||
|
|
||||||
//now change some voltages
|
//now change some voltages
|
||||||
generateSportCellPacket(packet, 3, 2, _V(415), _V( 0)); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 3, 2, 415, 0); sportProcessTelemetryPacket(packet);
|
||||||
generateSportCellPacket(packet, 4, 2, _V(390), _V(370), DATA_ID_FLVSS+1); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 4, 2, 390, 370, DATA_ID_FLVSS+1); sportProcessTelemetryPacket(packet);
|
||||||
generateSportCellPacket(packet, 3, 0, _V(420), _V(410)); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 3, 0, 420, 410); sportProcessTelemetryPacket(packet);
|
||||||
generateSportCellPacket(packet, 4, 0, _V(410), _V(420), DATA_ID_FLVSS+1); sportProcessTelemetryPacket(packet);
|
generateSportCellPacket(packet, 4, 0, 410, 420, DATA_ID_FLVSS+1); sportProcessTelemetryPacket(packet);
|
||||||
|
|
||||||
telemetryWakeup();
|
telemetryWakeup();
|
||||||
|
|
||||||
|
|
|
@ -81,10 +81,8 @@ inline void MIXER_RESET()
|
||||||
inline void TELEMETRY_RESET()
|
inline void TELEMETRY_RESET()
|
||||||
{
|
{
|
||||||
#if defined(TELEMETRY_FRSKY)
|
#if defined(TELEMETRY_FRSKY)
|
||||||
memclear(&telemetryData, sizeof(telemetryData));
|
telemetryData.clear();
|
||||||
TELEMETRY_RSSI() = 100;
|
telemetryData.rssi.set(100);
|
||||||
#endif
|
|
||||||
#if defined(TELEMETRY_FRSKY)
|
|
||||||
for (int i=0; i<MAX_TELEMETRY_SENSORS; i++) {
|
for (int i=0; i<MAX_TELEMETRY_SENSORS; i++) {
|
||||||
telemetryItems[i].clear();
|
telemetryItems[i].clear();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue