1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-13 11:29:51 +03:00

Projectkk2glider/issue 3432 jitter filter option (#3452)

* Fixes #3432: radio option added to turn on/off ADC jitter filter (ported from master)

* Gtests fix

* Re #3432: compilation fix

* Re #3432: existing field split to accommodate the new option without the RadioData size change
This commit is contained in:
Damjan Adamic 2016-05-02 19:26:08 +02:00 committed by Bertrand Songis
parent 9924695b1d
commit 97cc58e323
25 changed files with 112 additions and 56 deletions

View file

@ -18,7 +18,6 @@ option(FAI "Competition mode (no telemetry)" OFF)
option(AUTOSOURCE "Automatic source detection in menus" ON)
option(AUTOSWITCH "Automatic switch detection in menus" ON)
option(JITTER_MEASURE "Enable ADC jitter measurement" OFF)
option(JITTER_FILTER "Enable ADC jitter filtering" ON)
option(WATCHDOG_DISABLED "Disable hardware Watchdog on Horus" OFF) # TODO remove it when it's OK
option(SIMU_AUDIO "Enable simulator audio" OFF)
option(SIMU_DISKIO "Enable disk IO simulation in simulator. Simulator will use FatFs module and simulated IO layer that uses \"./sdcard.image\" file as image of SD card. This file must contain whole SD card from first to last sector" OFF)
@ -867,10 +866,6 @@ if(JITTER_MEASURE)
add_definitions(-DJITTER_MEASURE)
endif()
if(JITTER_FILTER)
add_definitions(-DJITTER_FILTER)
endif()
if(WATCHDOG_DISABLED)
add_definitions(-DWATCHDOG_DISABLED)
endif()

View file

@ -892,7 +892,9 @@ PACK(struct TrainerData {
NOBACKUP(uint32_t globalTimer); \
NOBACKUP(uint8_t btBaudrate); \
NOBACKUP(uint8_t countryCode); \
NOBACKUP(uint8_t imperial); \
NOBACKUP(uint8_t imperial:1); \
NOBACKUP(uint8_t jitterFilter:1); /* 0 - active */\
NOBACKUP(uint8_t spareExtra:6); \
NOBACKUP(char ttsLanguage[2]); \
NOBACKUP(int8_t beepVolume:4); \
NOBACKUP(int8_t wavVolume:4); \

View file

@ -46,6 +46,7 @@ enum menuGeneralHwItems {
ITEM_SETUP_HW_SH,
ITEM_SETUP_HW_BLUETOOTH,
// ITEM_SETUP_HW_UART3_MODE,
ITEM_SETUP_HW_JITTER_FILTER,
ITEM_SETUP_HW_BAT_CAL,
ITEM_SETUP_HW_MAX
};
@ -177,6 +178,14 @@ bool menuGeneralHardware(evt_t event)
break;
#endif
case ITEM_SETUP_HW_JITTER_FILTER:
{
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_JITTER_FILTER);
uint8_t b = 1-g_eeGeneral.jitterFilter;
g_eeGeneral.jitterFilter = 1 - editCheckBox(b, HW_SETTINGS_COLUMN, y, attr, event);
break;
}
case ITEM_SETUP_HW_BAT_CAL:
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_BATT_CALIB);
lcdDrawNumber(HW_SETTINGS_COLUMN, y, getBatteryVoltage(), attr|LEFT|PREC2, 0, NULL, "V");

View file

@ -56,6 +56,7 @@ enum menuGeneralHwItems {
CASE_REV9E(ITEM_SETUP_HW_SR)
CASE_REV9E(ITEM_SETUP_HW_BLUETOOTH)
ITEM_SETUP_HW_UART3_MODE,
ITEM_SETUP_HW_JITTER_FILTER,
ITEM_SETUP_HW_MAX
};
@ -211,6 +212,12 @@ void menuGeneralHardware(uint8_t event)
serial2Init(g_eeGeneral.serial2Mode, MODEL_TELEMETRY_PROTOCOL());
}
break;
case ITEM_SETUP_HW_JITTER_FILTER:
{
uint8_t b = 1-g_eeGeneral.jitterFilter;
g_eeGeneral.jitterFilter = 1 - editCheckBox(b, HW_SETTINGS_COLUMN, y, STR_JITTER_FILTER, attr, event);
break;
}
}
}
}

View file

@ -1474,7 +1474,7 @@ JitterMeter<uint16_t> avgJitter[NUMBER_ANALOG];
tmr10ms_t jitterResetTime = 0;
#endif
#if defined(VIRTUALINPUTS) && defined(JITTER_FILTER)
#if defined(VIRTUALINPUTS)
#define JITTER_FILTER_STRENGTH 4 // tune this value, bigger value - more filtering (range: 1-5) (see explanation below)
#define ANALOG_SCALE 1 // tune this value, bigger value - more filtering (range: 0-1) (see explanation below)
@ -1544,7 +1544,7 @@ void getADC()
for (uint8_t x=0; x<NUMBER_ANALOG; x++) {
uint16_t v = getAnalogValue(x) >> (1 - ANALOG_SCALE);
#if defined(VIRTUALINPUTS) && defined(JITTER_FILTER)
#if defined(VIRTUALINPUTS)
// Jitter filter:
// * pass trough any big change directly
// * for small change use Modified moving average (MMA) filter
@ -1581,7 +1581,7 @@ void getADC()
// * <out> = s_anaFilt[x]
uint16_t previous = s_anaFilt[x] / JITTER_ALPHA;
uint16_t diff = (v > previous) ? (v - previous) : (previous - v);
if (diff < 10 * ANALOG_MULTIPLIER) {
if (!g_eeGeneral.jitterFilter && diff < (10*ANALOG_MULTIPLIER)) { // g_eeGeneral.jitterFilter is inverted, 0 - active
// apply jitter filter
s_anaFilt[x] = (s_anaFilt[x] - previous) + v;
}

View file

@ -585,6 +585,11 @@ uint16_t anaIn(uint8_t chan)
return 0;
}
uint16_t getAnalogValue(uint8_t index)
{
return anaIn(index);
}
void createBitmap(int index, uint16_t *data, int x, int y, int w, int h)
{
th9xSim->createBitmap(index, data, x, y, w, h);

View file

@ -243,6 +243,7 @@ void adcRead()
const int8_t ana_direction[NUMBER_ANALOG] = {1,-1,1,-1, -1,1,-1, -1,-1, -1,1, 0,0,0};
#if !defined(SIMU)
uint16_t getAnalogValue(uint8_t index)
{
if (ana_direction[index] < 0)
@ -250,3 +251,4 @@ uint16_t getAnalogValue(uint8_t index)
else
return adcValues[index];
}
#endif // #if !defined(SIMU)

View file

@ -24,6 +24,11 @@ uint16_t anaIn(uint8_t chan)
return g_anas[chan];
}
uint16_t getAnalogValue(uint8_t index)
{
return anaIn(index);
}
bool hasExtendedTrims()
{
return g_model.extendedTrims;

View file

@ -136,7 +136,9 @@ void adcRead()
}
#if !defined(SIMU)
uint16_t getAnalogValue(uint8_t value)
{
return adcValues[value];
}
#endif // #if !defined(SIMU)

View file

@ -173,6 +173,7 @@ void adcStop()
{
}
#if !defined(SIMU)
uint16_t getAnalogValue(uint8_t index)
{
if (IS_POT(index) && !IS_POT_AVAILABLE(index)) {
@ -189,3 +190,4 @@ uint16_t getAnalogValue(uint8_t index)
else
return adcValues[index];
}
#endif // #if !defined(SIMU)

View file

@ -16,6 +16,15 @@ if(EXISTS "${GTEST_SRCDIR}/src/gtest-all.cc")
file(GLOB TEST_SRC_FILES ${RADIO_SRC_DIRECTORY}/tests/*.cpp)
if (${CMAKE_VERSION} VERSION_LESS 3.1.0})
set(COMMON_CPP_FLAGS "${COMMON_FLAGS} -std=gnu++11")
message("USING -std=gnu++11")
else()
set(COMMON_CPP_FLAGS ${COMMON_FLAGS})
endif()
set(CMAKE_C_FLAGS_DEBUG "${COMMON_FLAGS} -g -O0")
set(CMAKE_CXX_FLAGS_DEBUG "${COMMON_CPP_FLAGS} -g -O0")
add_executable(gtests EXCLUDE_FROM_ALL ${TEST_SRC_FILES} ${CMAKE_CURRENT_SOURCE_DIR}/location.h ${RADIO_SRC} ../targets/simu/simpgmspace.cpp)
qt5_use_modules(gtests Core Widgets)
add_dependencies(gtests ${FIRMWARE_DEPENDENCIES} gtests-lib)

View file

@ -31,6 +31,11 @@ uint16_t anaIn(uint8_t chan)
return 0;
}
uint16_t getAnalogValue(uint8_t index)
{
return anaIn(index);
}
static char _zchar2stringResult[200];
const char * zchar2string(const char * zstring, int size)
{

View file

@ -660,6 +660,7 @@ const pm_char STR_REMOVE_SCREEN[] PROGMEM = TR_REMOVE_SCREEN;
const pm_char STR_MENU_TELEMETRY[] PROGMEM = TR_MENU_TELEMETRY;
const pm_char STR_MENU_OTHER[] PROGMEM = TR_MENU_OTHER;
const pm_char STR_MENU_INVERT[] PROGMEM = TR_MENU_INVERT;
const pm_char STR_JITTER_FILTER[] PROGMEM = TR_JITTER_FILTER;
#endif
#if MENUS_LOCK == 1

View file

@ -189,23 +189,23 @@ extern const pm_char STR_OPEN9X[];
#define OFS_TARANIS_PROTOCOLS (OFS_VTRAINERMODES + sizeof(TR_VTRAINERMODES))
#define OFS_XJT_PROTOCOLS (OFS_TARANIS_PROTOCOLS + sizeof(TR_TARANIS_PROTOCOLS))
#define OFS_DSM_PROTOCOLS (OFS_XJT_PROTOCOLS + sizeof(TR_XJT_PROTOCOLS))
#if defined(MULTIMODULE)
#define OFS_MULTI_PROTOCOLS (OFS_DSM_PROTOCOLS + sizeof(TR_DSM_PROTOCOLS))
#define OFS_SUBTYPE_FLYSKY (OFS_MULTI_PROTOCOLS + sizeof(TR_MULTI_PROTOCOLS))
#define OFS_SUBTYPE_FRSKY (OFS_SUBTYPE_FLYSKY + sizeof(TR_SUBTYPE_FLYSKY))
#define OFS_SUBTYPE_HISKY (OFS_SUBTYPE_FRSKY + sizeof(TR_SUBTYPE_FRSKY))
#define OFS_SUBTYPE_YD717 (OFS_SUBTYPE_HISKY + sizeof(TR_SUBTYPE_HISKY))
#define OFS_SUBTYPE_SYMAX (OFS_SUBTYPE_YD717 + sizeof(TR_SUBTYPE_YD717))
#define OFS_SUBTYPE_CX10 (OFS_SUBTYPE_SYMAX + sizeof(TR_SUBTYPE_SYMAX))
#define OFS_SUBTYPE_CG023 (OFS_SUBTYPE_CX10 + sizeof(TR_SUBTYPE_CX10))
#define OFS_SUBTYPE_KN (OFS_SUBTYPE_CG023 + sizeof(TR_SUBTYPE_CG023))
#define OFS_SUBTYPE_MT99 (OFS_SUBTYPE_KN + sizeof(TR_SUBTYPE_KN))
#define OFS_SUBTYPE_MJXQ (OFS_SUBTYPE_MT99 + sizeof(TR_SUBTYPE_MT99))
#define OFS_OPTIONS_DSM (OFS_SUBTYPE_MJXQ + sizeof(TR_SUBTYPE_MJXQ))
#define OFS_VOLTSRC (OFS_OPTIONS_DSM + sizeof(TR_OPTIONS_DSM))
#else
#define OFS_VOLTSRC (OFS_DSM_PROTOCOLS + sizeof(TR_DSM_PROTOCOLS))
#endif
#if defined(MULTIMODULE)
#define OFS_MULTI_PROTOCOLS (OFS_DSM_PROTOCOLS + sizeof(TR_DSM_PROTOCOLS))
#define OFS_SUBTYPE_FLYSKY (OFS_MULTI_PROTOCOLS + sizeof(TR_MULTI_PROTOCOLS))
#define OFS_SUBTYPE_FRSKY (OFS_SUBTYPE_FLYSKY + sizeof(TR_SUBTYPE_FLYSKY))
#define OFS_SUBTYPE_HISKY (OFS_SUBTYPE_FRSKY + sizeof(TR_SUBTYPE_FRSKY))
#define OFS_SUBTYPE_YD717 (OFS_SUBTYPE_HISKY + sizeof(TR_SUBTYPE_HISKY))
#define OFS_SUBTYPE_SYMAX (OFS_SUBTYPE_YD717 + sizeof(TR_SUBTYPE_YD717))
#define OFS_SUBTYPE_CX10 (OFS_SUBTYPE_SYMAX + sizeof(TR_SUBTYPE_SYMAX))
#define OFS_SUBTYPE_CG023 (OFS_SUBTYPE_CX10 + sizeof(TR_SUBTYPE_CX10))
#define OFS_SUBTYPE_KN (OFS_SUBTYPE_CG023 + sizeof(TR_SUBTYPE_CG023))
#define OFS_SUBTYPE_MT99 (OFS_SUBTYPE_KN + sizeof(TR_SUBTYPE_KN))
#define OFS_SUBTYPE_MJXQ (OFS_SUBTYPE_MT99 + sizeof(TR_SUBTYPE_MT99))
#define OFS_OPTIONS_DSM (OFS_SUBTYPE_MJXQ + sizeof(TR_SUBTYPE_MJXQ))
#define OFS_VOLTSRC (OFS_OPTIONS_DSM + sizeof(TR_OPTIONS_DSM))
#else
#define OFS_VOLTSRC (OFS_DSM_PROTOCOLS + sizeof(TR_DSM_PROTOCOLS))
#endif
#define OFS_CURVE_TYPES (OFS_VOLTSRC + sizeof(TR_VOLTSRC))
#define OFS_VSENSORTYPES (OFS_CURVE_TYPES + sizeof(TR_CURVE_TYPES))
#define OFS_VFORMULAS (OFS_VSENSORTYPES + sizeof(TR_VSENSORTYPES))
@ -321,22 +321,22 @@ extern const pm_char STR_OPEN9X[];
#define STR_TARANIS_PROTOCOLS (STR_OPEN9X + OFS_TARANIS_PROTOCOLS)
#define STR_XJT_PROTOCOLS (STR_OPEN9X + OFS_XJT_PROTOCOLS)
#define STR_DSM_PROTOCOLS (STR_OPEN9X + OFS_DSM_PROTOCOLS)
#if defined(MULTIMODULE)
#define STR_MULTI_PROTOCOLS (STR_OPEN9X + OFS_MULTI_PROTOCOLS)
#define STR_SUBTYPE_FLYSKY (STR_OPEN9X + OFS_SUBTYPE_FLYSKY)
#define STR_SUBTYPE_FRSKY (STR_OPEN9X + OFS_SUBTYPE_FRSKY)
#define STR_SUBTYPE_HISKY (STR_OPEN9X + OFS_SUBTYPE_HISKY)
#define STR_SUBTYPE_YD717 (STR_OPEN9X + OFS_SUBTYPE_YD717)
#define STR_SUBTYPE_SYMAX (STR_OPEN9X + OFS_SUBTYPE_SYMAX)
#define STR_SUBTYPE_CX10 (STR_OPEN9X + OFS_SUBTYPE_CX10)
#define STR_SUBTYPE_CG023 (STR_OPEN9X + OFS_SUBTYPE_CG023)
#define STR_SUBTYPE_KN (STR_OPEN9X + OFS_SUBTYPE_KN)
#define STR_SUBTYPE_MT99 (STR_OPEN9X + OFS_SUBTYPE_MT99)
#define STR_SUBTYPE_MJXQ (STR_OPEN9X + OFS_SUBTYPE_MJXQ)
#define STR_OPTIONS_DSM (STR_OPEN9X + OFS_OPTIONS_DSM)
#endif
#define STR_CURVE_TYPES (STR_OPEN9X + OFS_CURVE_TYPES)
#define STR_VSENSORTYPES (STR_OPEN9X + OFS_VSENSORTYPES)
#if defined(MULTIMODULE)
#define STR_MULTI_PROTOCOLS (STR_OPEN9X + OFS_MULTI_PROTOCOLS)
#define STR_SUBTYPE_FLYSKY (STR_OPEN9X + OFS_SUBTYPE_FLYSKY)
#define STR_SUBTYPE_FRSKY (STR_OPEN9X + OFS_SUBTYPE_FRSKY)
#define STR_SUBTYPE_HISKY (STR_OPEN9X + OFS_SUBTYPE_HISKY)
#define STR_SUBTYPE_YD717 (STR_OPEN9X + OFS_SUBTYPE_YD717)
#define STR_SUBTYPE_SYMAX (STR_OPEN9X + OFS_SUBTYPE_SYMAX)
#define STR_SUBTYPE_CX10 (STR_OPEN9X + OFS_SUBTYPE_CX10)
#define STR_SUBTYPE_CG023 (STR_OPEN9X + OFS_SUBTYPE_CG023)
#define STR_SUBTYPE_KN (STR_OPEN9X + OFS_SUBTYPE_KN)
#define STR_SUBTYPE_MT99 (STR_OPEN9X + OFS_SUBTYPE_MT99)
#define STR_SUBTYPE_MJXQ (STR_OPEN9X + OFS_SUBTYPE_MJXQ)
#define STR_OPTIONS_DSM (STR_OPEN9X + OFS_OPTIONS_DSM)
#endif
#define STR_CURVE_TYPES (STR_OPEN9X + OFS_CURVE_TYPES)
#define STR_VSENSORTYPES (STR_OPEN9X + OFS_VSENSORTYPES)
#define STR_VFORMULAS (STR_OPEN9X + OFS_VFORMULAS)
#define STR_VPREC (STR_OPEN9X + OFS_VPREC)
#define STR_VCELLINDEX (STR_OPEN9X + OFS_VCELLINDEX)
@ -560,19 +560,19 @@ extern const pm_char STR_GF[];
#if defined(FAS_OFFSET) || !defined(CPUM64)
extern const pm_char STR_FAS_OFFSET[];
#endif
#if defined(MULTIMODULE)
extern const pm_char STR_MULTI_OPTION[];
extern const pm_char STR_MULTI_VIDFREQ[];
extern const pm_char STR_MULTI_RFTUNE[];
extern const pm_char STR_MULTI_AUTOBIND[];
extern const pm_char STR_MULTI_LOWPOWER[];
extern const pm_char STR_MULTI_DSMFRAME[];
#endif
#if defined(DSM2) || defined(PXX)
extern const pm_char STR_RXNUM[];
#endif
#endif
#if defined(MULTIMODULE)
extern const pm_char STR_MULTI_OPTION[];
extern const pm_char STR_MULTI_VIDFREQ[];
extern const pm_char STR_MULTI_RFTUNE[];
extern const pm_char STR_MULTI_AUTOBIND[];
extern const pm_char STR_MULTI_LOWPOWER[];
extern const pm_char STR_MULTI_DSMFRAME[];
#endif
#if defined(DSM2) || defined(PXX)
extern const pm_char STR_RXNUM[];
#endif
#if defined(PXX) || defined(CPUARM)
extern const pm_char STR_SYNCMENU[];
@ -922,6 +922,7 @@ extern const pm_char STR_BLCOLOR[];
extern const pm_char STR_MENU_TELEMETRY[];
extern const pm_char STR_MENU_OTHER[];
extern const pm_char STR_MENU_INVERT[];
extern const pm_char STR_JITTER_FILTER[];
#endif
#if MENUS_LOCK == 1
@ -1011,4 +1012,4 @@ extern const pm_char STR_BLCOLOR[];
#define CHR_HOUR TR_CHR_HOUR
#define CHR_INPUT TR_CHR_INPUT
#endif // _TRANSLATIONS_H_
#endif // _TRANSLATIONS_H_

View file

@ -1190,6 +1190,7 @@
#define TR_MENU_TELEMETRY "\321Telemetrie"
#define TR_MENU_OTHER "Ostatní"
#define TR_MENU_INVERT "Invertovat"
#define TR_JITTER_FILTER "ADC Filter"
#define ZSTR_RSSI "RSSI"
#define ZSTR_SWR "SWR"

View file

@ -1193,6 +1193,7 @@
#define TR_MENU_TELEMETRY "\321Telemetrie"
#define TR_MENU_OTHER " Weitere"
#define TR_MENU_INVERT "Invertieren<!>"
#define TR_JITTER_FILTER "ADC Filter"
// ----------------------------------------------------------------
#define ZSTR_RSSI "RSSI"
#define ZSTR_SWR "SWR"

View file

@ -1207,6 +1207,7 @@
#define TR_MENU_TELEMETRY "\321Telemetry"
#define TR_MENU_OTHER "Other"
#define TR_MENU_INVERT "Invert"
#define TR_JITTER_FILTER "ADC Filter"
#define ZSTR_RSSI "RSSI"
#define ZSTR_SWR "SWR"

View file

@ -1153,6 +1153,7 @@
#define TR_MENU_TELEMETRY "\321Telemetry"
#define TR_MENU_OTHER "Other"
#define TR_MENU_INVERT "Invert"
#define TR_JITTER_FILTER "ADC Filter"
#define ZSTR_RSSI "RSSI"
#define ZSTR_SWR "SWR"

View file

@ -1153,6 +1153,7 @@
#define TR_MENU_TELEMETRY "\321Telemetry"
#define TR_MENU_OTHER "Other"
#define TR_MENU_INVERT "Invert"
#define TR_JITTER_FILTER "ADC Filter"
#define ZSTR_RSSI "RSSI"
#define ZSTR_SWR "SWR"

View file

@ -1180,6 +1180,7 @@
#define TR_MENU_TELEMETRY "\321Télémesure"
#define TR_MENU_OTHER "Autres"
#define TR_MENU_INVERT "Inverser"
#define TR_JITTER_FILTER "ADC Filter"
#define ZSTR_RSSI "RSSI"
#define ZSTR_SWR "SWR"

View file

@ -1189,6 +1189,7 @@
#define TR_MENU_TELEMETRY "\321Telemetry"
#define TR_MENU_OTHER "Altro"
#define TR_MENU_INVERT "Inverti"
#define TR_JITTER_FILTER "ADC Filter"
#define ZSTR_RSSI "RSSI"
#define ZSTR_SWR "SWR"

View file

@ -1204,6 +1204,7 @@
#define TR_MENU_TELEMETRY "\321Telemetrie"
#define TR_MENU_OTHER "Verdere"
#define TR_MENU_INVERT "Inverteer"
#define TR_JITTER_FILTER "ADC Filter"
#define ZSTR_RSSI "RSSI"
#define ZSTR_SWR "SWR"

View file

@ -1191,6 +1191,7 @@
#define TR_MENU_TELEMETRY "\321Telemetry"
#define TR_MENU_OTHER "Inny "
#define TR_MENU_INVERT "Odwróć"
#define TR_JITTER_FILTER "ADC Filter"
#define ZSTR_RSSI "RSSI"
#define ZSTR_SWR "SWR"

View file

@ -1149,6 +1149,7 @@
#define TR_MENU_TELEMETRY "\321Telemetry"
#define TR_MENU_OTHER "Other"
#define TR_MENU_INVERT "Invert"
#define TR_JITTER_FILTER "ADC Filter"
#define ZSTR_RSSI "RSSI"
#define ZSTR_SWR "SWR"

View file

@ -1205,6 +1205,7 @@
#define TR_MENU_TELEMETRY "\321Telemetri"
#define TR_MENU_OTHER "Annat"
#define TR_MENU_INVERT "Invertera"
#define TR_JITTER_FILTER "ADC Filter"
#define ZSTR_RSSI "RSSI"
#define ZSTR_SWR "SWR"