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
|
@ -42,9 +42,8 @@ void menuRadioDiagAnalogs(event_t event)
|
|||
// RAS
|
||||
if ((isModuleXJT(INTERNAL_MODULE) && IS_INTERNAL_MODULE_ON()) || (isModulePXX1(EXTERNAL_MODULE) && !IS_INTERNAL_MODULE_ON())) {
|
||||
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");
|
||||
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
|
||||
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");
|
||||
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");
|
||||
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
|
||||
lcdDrawTextAlignedLeft(y, "RAS");
|
||||
if (telemetryData.swrInternal.isFresh())
|
||||
lcdDrawNumber(HW_SETTINGS_COLUMN2, y, telemetryData.swrInternal.value);
|
||||
lcdDrawNumber(HW_SETTINGS_COLUMN2, y, telemetryData.swrInternal.value());
|
||||
else
|
||||
lcdDrawText(HW_SETTINGS_COLUMN2, y, "---");
|
||||
lcdDrawText(lcdNextPos, y, "/");
|
||||
#endif
|
||||
if (telemetryData.swrExternal.isFresh())
|
||||
lcdDrawNumber(lcdNextPos, y, telemetryData.swrExternal.value);
|
||||
lcdDrawNumber(lcdNextPos, y, telemetryData.swrExternal.value());
|
||||
else
|
||||
lcdDrawText(lcdNextPos, y, "---");
|
||||
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)
|
||||
{
|
||||
if (isRasValueValid()) {
|
||||
lua_pushinteger(L, telemetryData.swrInternal.value);
|
||||
lua_pushinteger(L, telemetryData.swrInternal.value());
|
||||
}
|
||||
else {
|
||||
lua_pushnil(L);
|
||||
|
|
|
@ -1842,17 +1842,7 @@ void opentxInit()
|
|||
// 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.
|
||||
// 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);
|
||||
#if __clang__
|
||||
// Restore warnings
|
||||
#pragma clang diagnostic pop
|
||||
#endif
|
||||
|
||||
// lua widget state must also be prepared before the call to storageReadAll()
|
||||
LUA_INIT_THEMES_AND_WIDGETS();
|
||||
|
|
|
@ -788,6 +788,7 @@ void logicalSwitchesTimerTick()
|
|||
if (*lastValue == 0 || *lastValue == CS_LAST_VALUE_INIT) {
|
||||
*lastValue = -lswTimerValue(ls->v1);
|
||||
}
|
||||
|
||||
else if (*lastValue < 0) {
|
||||
if (++(*lastValue) == 0)
|
||||
*lastValue = lswTimerValue(ls->v2);
|
||||
|
|
|
@ -39,11 +39,6 @@ enum FrSkyDataState {
|
|||
|
||||
#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
|
||||
#define LINKPKT 0xfe
|
||||
#define USRPKT 0xfd
|
||||
|
@ -56,7 +51,6 @@ enum FrSkyDataState {
|
|||
#define RSSI2PKT 0xf6
|
||||
#define RSSI_REQUEST 0xf1
|
||||
|
||||
|
||||
// FrSky PRIM IDs (1 byte)
|
||||
#define DATA_FRAME 0x10
|
||||
|
||||
|
@ -99,7 +93,6 @@ enum FrSkyDataState {
|
|||
|
||||
#define VFAS_D_HIPREC_OFFSET 2000
|
||||
|
||||
|
||||
// FrSky new DATA IDs (2 bytes)
|
||||
#define ALT_FIRST_ID 0x0100
|
||||
#define ALT_LAST_ID 0x010f
|
||||
|
@ -205,52 +198,44 @@ enum FrSkyDataState {
|
|||
#define DATA_ID_SP2UH 0x45 // 5
|
||||
#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)
|
||||
#define ALARM_LEVEL(channel, alarm) ((g_model.frsky.channels[channel].alarms_level >> (2*alarm)) & 3)
|
||||
class TelemetryData {
|
||||
public:
|
||||
TelemetryExpiringDecorator<TelemetryValue> swrInternal;
|
||||
TelemetryExpiringDecorator<TelemetryValue> swrExternal;
|
||||
TelemetryFilterDecorator<TelemetryValue> rssi;
|
||||
uint16_t xjtVersion;
|
||||
bool varioHighPrecision;
|
||||
|
||||
#define TELEMETRY_STREAMING() (telemetryData.rssi.value > 0)
|
||||
#define TELEMETRY_RSSI() (telemetryData.rssi.value)
|
||||
#define TELEMETRY_RSSI_MIN() (telemetryData.rssi.min)
|
||||
void setSwr(uint8_t module, uint8_t value)
|
||||
{
|
||||
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
|
||||
#define TELEMETRY_GPS_SPEED_AP telemetryData.hub.gpsSpeed_ap
|
||||
extern TelemetryData telemetryData;
|
||||
|
||||
#define TELEMETRY_ABSOLUTE_GPS_ALT (telemetryData.hub.gpsAltitude)
|
||||
#define TELEMETRY_RELATIVE_GPS_ALT (telemetryData.hub.gpsAltitude + telemetryData.hub.gpsAltitudeOffset)
|
||||
#define TELEMETRY_RELATIVE_GPS_ALT_BP (TELEMETRY_RELATIVE_GPS_ALT / 100)
|
||||
inline bool TELEMETRY_STREAMING()
|
||||
{
|
||||
return telemetryData.rssi.value() > 0;
|
||||
}
|
||||
|
||||
#define TELEMETRY_RELATIVE_BARO_ALT_BP (telemetryData.hub.baroAltitude / 100)
|
||||
#define TELEMETRY_RELATIVE_BARO_ALT_AP (telemetryData.hub.baroAltitude % 100)
|
||||
|
||||
#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)
|
||||
inline uint8_t TELEMETRY_RSSI()
|
||||
{
|
||||
return telemetryData.rssi.value();
|
||||
}
|
||||
|
||||
#define START_STOP 0x7E
|
||||
#define BYTESTUFF 0x7D
|
||||
|
@ -280,25 +265,6 @@ void telemetryInit(uint8_t protocol);
|
|||
|
||||
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
|
||||
void processFrskyTelemetryData(uint8_t data);
|
||||
|
||||
|
|
|
@ -71,10 +71,10 @@ inline bool isBadAntennaDetected()
|
|||
if (!isRasValueValid())
|
||||
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;
|
||||
|
||||
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 false;
|
||||
|
@ -210,7 +210,6 @@ void telemetryInterrupt10ms()
|
|||
{
|
||||
|
||||
if (TELEMETRY_STREAMING()) {
|
||||
if (!TELEMETRY_OPENXSENSOR()) {
|
||||
for (int i=0; i<MAX_TELEMETRY_SENSORS; i++) {
|
||||
const TelemetrySensor & sensor = g_model.telemetrySensors[i];
|
||||
if (sensor.type == TELEM_TYPE_CALCULATED) {
|
||||
|
@ -219,8 +218,6 @@ void telemetryInterrupt10ms()
|
|||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#if defined(WS_HOW_HIGH)
|
||||
if (wshhStreaming > 0) {
|
||||
wshhStreaming--;
|
||||
|
|
|
@ -29,27 +29,33 @@
|
|||
|
||||
class TelemetryValue {
|
||||
public:
|
||||
uint8_t value;
|
||||
uint8_t value()
|
||||
{
|
||||
return _value;
|
||||
}
|
||||
|
||||
void set(uint8_t value)
|
||||
{
|
||||
this->value = value;
|
||||
_value = value;
|
||||
}
|
||||
|
||||
void reset()
|
||||
{
|
||||
set(0);
|
||||
};
|
||||
}
|
||||
|
||||
protected:
|
||||
uint8_t _value;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
class TelemetryFilterDecorator: public T {
|
||||
public:
|
||||
uint8_t values[TELEMETRY_AVERAGE_COUNT];
|
||||
void set(uint8_t value)
|
||||
{
|
||||
if (this->value == 0 || value == 0) {
|
||||
if (value == 0 || this->_value == 0) {
|
||||
memset(values, value, TELEMETRY_AVERAGE_COUNT);
|
||||
this->value = value;
|
||||
this->_value = value;
|
||||
}
|
||||
else {
|
||||
// calculate the average from values[] and value
|
||||
|
@ -62,49 +68,65 @@ class TelemetryFilterDecorator: public T {
|
|||
}
|
||||
values[TELEMETRY_AVERAGE_COUNT-1] = value;
|
||||
sum += value;
|
||||
this->value = sum / (TELEMETRY_AVERAGE_COUNT+1);
|
||||
this->_value = sum / (TELEMETRY_AVERAGE_COUNT+1);
|
||||
}
|
||||
}
|
||||
|
||||
void reset()
|
||||
{
|
||||
memclear(this, sizeof(*this));
|
||||
};
|
||||
}
|
||||
|
||||
protected:
|
||||
uint8_t values[TELEMETRY_AVERAGE_COUNT];
|
||||
};
|
||||
|
||||
template <class T>
|
||||
class TelemetryExpiringDecorator: public T {
|
||||
public:
|
||||
tmr10ms_t expirationTime;
|
||||
void set(uint8_t value)
|
||||
{
|
||||
T::set(value);
|
||||
expirationTime = get_tmr10ms() + 1000/*10s*/;
|
||||
}
|
||||
|
||||
void reset()
|
||||
{
|
||||
memclear(this, sizeof(*this));
|
||||
}
|
||||
|
||||
bool isFresh()
|
||||
{
|
||||
return get_tmr10ms() < expirationTime;
|
||||
}
|
||||
|
||||
protected:
|
||||
tmr10ms_t expirationTime;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
class TelemetryMinDecorator: public T {
|
||||
public:
|
||||
uint8_t min;
|
||||
void set(uint8_t value)
|
||||
{
|
||||
T::set(value);
|
||||
if (!min || value < min) {
|
||||
min = value;
|
||||
if (!_min || value < _min) {
|
||||
_min = value;
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t min()
|
||||
{
|
||||
return _min;
|
||||
}
|
||||
|
||||
void reset()
|
||||
{
|
||||
memclear(this, sizeof(*this));
|
||||
}
|
||||
|
||||
protected:
|
||||
uint8_t _min;
|
||||
};
|
||||
|
||||
#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")
|
||||
endif()
|
||||
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
|
||||
|
||||
|
|
|
@ -35,7 +35,6 @@ PACK(struct RamBackupUncompressed {
|
|||
extern Backup::RamBackupUncompressed ramBackupUncompressed;
|
||||
TEST(Storage, BackupAndRestore)
|
||||
{
|
||||
|
||||
rambackupWrite();
|
||||
Backup::RamBackupUncompressed ramBackupRestored;
|
||||
if (uncompress((uint8_t *)&ramBackupRestored, sizeof(ramBackupRestored), ramBackup->data, ramBackup->size) != sizeof(ramBackupUncompressed))
|
||||
|
@ -77,7 +76,8 @@ TEST(Eeprom, test2)
|
|||
|
||||
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);
|
||||
|
||||
|
@ -86,7 +86,9 @@ TEST(Eeprom, test2)
|
|||
for(int i=0; i<500; i++){
|
||||
uint8_t b;
|
||||
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;
|
||||
}
|
||||
EXPECT_EQ(sz, 300);
|
||||
|
@ -100,7 +102,8 @@ TEST(Eeprom, storageCheckImmediately)
|
|||
|
||||
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);
|
||||
|
||||
|
@ -111,7 +114,9 @@ TEST(Eeprom, storageCheckImmediately)
|
|||
for (int i = 0; i < 500; i++) {
|
||||
uint8_t b;
|
||||
uint16_t n = theFile.readRlc(&b, 1);
|
||||
if(n) EXPECT_EQ(b, ('6'+sz%4));
|
||||
if (n) {
|
||||
EXPECT_EQ(b, ('6' + sz % 4));
|
||||
}
|
||||
sz += n;
|
||||
}
|
||||
EXPECT_EQ(sz, 300);
|
||||
|
@ -125,7 +130,8 @@ TEST(Eeprom, copy)
|
|||
|
||||
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);
|
||||
|
||||
|
@ -136,7 +142,9 @@ TEST(Eeprom, copy)
|
|||
for (int i = 0; i < 500; i++) {
|
||||
uint8_t b;
|
||||
uint16_t n = theFile.readRlc(&b, 1);
|
||||
if(n) EXPECT_EQ(b, ('6'+sz%4));
|
||||
if (n) {
|
||||
EXPECT_EQ(b, ('6' + sz % 4));
|
||||
}
|
||||
sz += n;
|
||||
}
|
||||
EXPECT_EQ(sz, 300);
|
||||
|
@ -150,7 +158,8 @@ TEST(Eeprom, rm)
|
|||
|
||||
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);
|
||||
|
||||
|
@ -165,7 +174,9 @@ TEST(Eeprom, rm)
|
|||
for(int i=0; i<500; i++){
|
||||
uint8_t b;
|
||||
uint16_t n = theFile.readRlc(&b, 1);
|
||||
if(n) EXPECT_EQ(b, ('6'+sz%4));
|
||||
if (n) {
|
||||
EXPECT_EQ(b, ('6' + sz % 4));
|
||||
}
|
||||
sz += n;
|
||||
}
|
||||
EXPECT_EQ(sz, 0);
|
||||
|
|
|
@ -45,19 +45,16 @@ TEST(FrSky, TelemetryValueWithMinAveraging)
|
|||
int testPos = 0;
|
||||
//test of averaging
|
||||
TelemetryMinDecorator<TelemetryFilterDecorator<TelemetryValue>> testVal;
|
||||
testVal.value = 0;
|
||||
testVal.reset();
|
||||
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) {
|
||||
testVal.set(n * 10);
|
||||
EXPECT_EQ(RAW_FRSKY_MINMAX(testVal), n*10);
|
||||
EXPECT_EQ(testVal.value, expected[testPos++]);
|
||||
EXPECT_EQ(testVal.value(), expected[testPos++]);
|
||||
}
|
||||
for (int n = 2; n < 10; ++n) {
|
||||
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);
|
||||
}
|
||||
|
||||
#define _V(volts) (volts/TELEMETRY_CELL_VOLTAGE_MUTLIPLIER)
|
||||
|
||||
TEST(FrSkySPORT, FrSkyDCells)
|
||||
{
|
||||
MODEL_RESET();
|
||||
|
@ -227,12 +222,12 @@ TEST(FrSkySPORT, frskySetCellVoltage)
|
|||
allowNewSensors = true;
|
||||
|
||||
// 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()";
|
||||
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, 2, _V(430), _V( 0)); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 3, 0, 405, 300); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 3, 2, 430, 0); sportProcessTelemetryPacket(packet);
|
||||
|
||||
EXPECT_EQ(telemetryItems[0].cells.count, 3);
|
||||
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].valueMax, 1260);
|
||||
|
||||
generateSportCellPacket(packet, 3, 0, _V(405), _V(250)); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 3, 2, _V(430), _V( 0)); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 3, 0, 405, 250); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 3, 2, 430, 0); sportProcessTelemetryPacket(packet);
|
||||
|
||||
generateSportCellPacket(packet, 3, 0, _V(410), _V(420)); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 3, 2, _V(430), _V( 0)); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 3, 0, 410, 420); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 3, 2, 430, 0); sportProcessTelemetryPacket(packet);
|
||||
|
||||
EXPECT_EQ(telemetryItems[0].cells.count, 3);
|
||||
EXPECT_EQ(telemetryItems[0].cells.values[0].value, 410);
|
||||
|
@ -259,9 +254,9 @@ TEST(FrSkySPORT, frskySetCellVoltage)
|
|||
EXPECT_EQ(telemetryItems[0].valueMax, 1260);
|
||||
|
||||
//add another two cells - 5 cell battery
|
||||
generateSportCellPacket(packet, 5, 0, _V(418), _V(408)); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 5, 2, _V(415), _V(420)); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 5, 4, _V(410), _V( 0)); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 5, 0, 418, 408); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 5, 2, 415, 420); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 5, 4, 410, 0); sportProcessTelemetryPacket(packet);
|
||||
|
||||
EXPECT_EQ(telemetryItems[0].cells.count, 5);
|
||||
EXPECT_EQ(telemetryItems[0].cells.values[0].value, 418);
|
||||
|
@ -275,9 +270,9 @@ TEST(FrSkySPORT, frskySetCellVoltage)
|
|||
EXPECT_EQ(telemetryItems[0].valueMax, 2071);
|
||||
|
||||
//simulate very low voltage for cell 3
|
||||
generateSportCellPacket(packet, 5, 0, _V(418), _V(408)); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 5, 2, _V(100), _V(420)); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 5, 4, _V(410), _V( 0)); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 5, 0, 418, 408); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 5, 2, 100, 420); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 5, 4, 410, 0); sportProcessTelemetryPacket(packet);
|
||||
|
||||
EXPECT_EQ(telemetryItems[0].cells.count, 5);
|
||||
EXPECT_EQ(telemetryItems[0].cells.values[0].value, 418);
|
||||
|
@ -291,10 +286,10 @@ TEST(FrSkySPORT, frskySetCellVoltage)
|
|||
EXPECT_EQ(telemetryItems[0].valueMax, 2071);
|
||||
|
||||
//back to normal (but with reversed order of packets)
|
||||
generateSportCellPacket(packet, 5, 4, _V(410), _V( 0)); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 5, 0, _V(418), _V(408)); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 5, 2, _V(412), _V(420)); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 5, 4, _V(410), _V( 0)); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 5, 4, 410, 0); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 5, 0, 418, 408); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 5, 2, 412, 420); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 5, 4, 410, 0); sportProcessTelemetryPacket(packet);
|
||||
|
||||
EXPECT_EQ(telemetryItems[0].cells.count, 5);
|
||||
EXPECT_EQ(telemetryItems[0].cells.values[0].value, 418);
|
||||
|
@ -334,8 +329,8 @@ TEST(FrSkySPORT, frskySetCellVoltageTwoSensors)
|
|||
allowNewSensors = true;
|
||||
|
||||
//sensor 1: 3 cell battery
|
||||
generateSportCellPacket(packet, 3, 0, _V(418), _V(416)); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 3, 2, _V(415), _V( 0)); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 3, 0, 418, 416); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 3, 2, 415, 0); sportProcessTelemetryPacket(packet);
|
||||
|
||||
EXPECT_EQ(telemetryItems[0].cells.count, 3);
|
||||
EXPECT_EQ(telemetryItems[0].cells.values[0].value, 418);
|
||||
|
@ -347,8 +342,8 @@ TEST(FrSkySPORT, frskySetCellVoltageTwoSensors)
|
|||
EXPECT_EQ(telemetryItems[0].valueMax, 1249);
|
||||
|
||||
//sensor 2: 4 cell battery
|
||||
generateSportCellPacket(packet, 4, 0, _V(410), _V(420), DATA_ID_FLVSS+1); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 4, 2, _V(400), _V(405), DATA_ID_FLVSS+1); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 4, 0, 410, 420, 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.values[0].value, 410);
|
||||
|
@ -372,10 +367,10 @@ TEST(FrSkySPORT, frskySetCellVoltageTwoSensors)
|
|||
EXPECT_EQ(telemetryItems[2].valueMax, 287);
|
||||
|
||||
//now change some voltages
|
||||
generateSportCellPacket(packet, 3, 2, _V(415), _V( 0)); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 4, 2, _V(390), _V(370), DATA_ID_FLVSS+1); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 3, 0, _V(420), _V(410)); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 4, 0, _V(410), _V(420), DATA_ID_FLVSS+1); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 3, 2, 415, 0); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 4, 2, 390, 370, DATA_ID_FLVSS+1); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 3, 0, 420, 410); sportProcessTelemetryPacket(packet);
|
||||
generateSportCellPacket(packet, 4, 0, 410, 420, DATA_ID_FLVSS+1); sportProcessTelemetryPacket(packet);
|
||||
|
||||
telemetryWakeup();
|
||||
|
||||
|
|
|
@ -81,10 +81,8 @@ inline void MIXER_RESET()
|
|||
inline void TELEMETRY_RESET()
|
||||
{
|
||||
#if defined(TELEMETRY_FRSKY)
|
||||
memclear(&telemetryData, sizeof(telemetryData));
|
||||
TELEMETRY_RSSI() = 100;
|
||||
#endif
|
||||
#if defined(TELEMETRY_FRSKY)
|
||||
telemetryData.clear();
|
||||
telemetryData.rssi.set(100);
|
||||
for (int i=0; i<MAX_TELEMETRY_SENSORS; i++) {
|
||||
telemetryItems[i].clear();
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue