1
0
Fork 0
mirror of https://github.com/opentx/opentx.git synced 2025-07-13 19:40:20 +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(AUTOSOURCE "Automatic source detection in menus" ON)
option(AUTOSWITCH "Automatic switch detection in menus" ON) option(AUTOSWITCH "Automatic switch detection in menus" ON)
option(JITTER_MEASURE "Enable ADC jitter measurement" OFF) 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(WATCHDOG_DISABLED "Disable hardware Watchdog on Horus" OFF) # TODO remove it when it's OK
option(SIMU_AUDIO "Enable simulator audio" OFF) 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) 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) add_definitions(-DJITTER_MEASURE)
endif() endif()
if(JITTER_FILTER)
add_definitions(-DJITTER_FILTER)
endif()
if(WATCHDOG_DISABLED) if(WATCHDOG_DISABLED)
add_definitions(-DWATCHDOG_DISABLED) add_definitions(-DWATCHDOG_DISABLED)
endif() endif()

View file

@ -892,7 +892,9 @@ PACK(struct TrainerData {
NOBACKUP(uint32_t globalTimer); \ NOBACKUP(uint32_t globalTimer); \
NOBACKUP(uint8_t btBaudrate); \ NOBACKUP(uint8_t btBaudrate); \
NOBACKUP(uint8_t countryCode); \ 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(char ttsLanguage[2]); \
NOBACKUP(int8_t beepVolume:4); \ NOBACKUP(int8_t beepVolume:4); \
NOBACKUP(int8_t wavVolume:4); \ NOBACKUP(int8_t wavVolume:4); \

View file

@ -46,6 +46,7 @@ enum menuGeneralHwItems {
ITEM_SETUP_HW_SH, ITEM_SETUP_HW_SH,
ITEM_SETUP_HW_BLUETOOTH, ITEM_SETUP_HW_BLUETOOTH,
// ITEM_SETUP_HW_UART3_MODE, // ITEM_SETUP_HW_UART3_MODE,
ITEM_SETUP_HW_JITTER_FILTER,
ITEM_SETUP_HW_BAT_CAL, ITEM_SETUP_HW_BAT_CAL,
ITEM_SETUP_HW_MAX ITEM_SETUP_HW_MAX
}; };
@ -177,6 +178,14 @@ bool menuGeneralHardware(evt_t event)
break; break;
#endif #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: case ITEM_SETUP_HW_BAT_CAL:
lcdDrawText(MENUS_MARGIN_LEFT, y, STR_BATT_CALIB); lcdDrawText(MENUS_MARGIN_LEFT, y, STR_BATT_CALIB);
lcdDrawNumber(HW_SETTINGS_COLUMN, y, getBatteryVoltage(), attr|LEFT|PREC2, 0, NULL, "V"); 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_SR)
CASE_REV9E(ITEM_SETUP_HW_BLUETOOTH) CASE_REV9E(ITEM_SETUP_HW_BLUETOOTH)
ITEM_SETUP_HW_UART3_MODE, ITEM_SETUP_HW_UART3_MODE,
ITEM_SETUP_HW_JITTER_FILTER,
ITEM_SETUP_HW_MAX ITEM_SETUP_HW_MAX
}; };
@ -211,6 +212,12 @@ void menuGeneralHardware(uint8_t event)
serial2Init(g_eeGeneral.serial2Mode, MODEL_TELEMETRY_PROTOCOL()); serial2Init(g_eeGeneral.serial2Mode, MODEL_TELEMETRY_PROTOCOL());
} }
break; 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; tmr10ms_t jitterResetTime = 0;
#endif #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 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) #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++) { for (uint8_t x=0; x<NUMBER_ANALOG; x++) {
uint16_t v = getAnalogValue(x) >> (1 - ANALOG_SCALE); uint16_t v = getAnalogValue(x) >> (1 - ANALOG_SCALE);
#if defined(VIRTUALINPUTS) && defined(JITTER_FILTER) #if defined(VIRTUALINPUTS)
// Jitter filter: // Jitter filter:
// * pass trough any big change directly // * pass trough any big change directly
// * for small change use Modified moving average (MMA) filter // * for small change use Modified moving average (MMA) filter
@ -1581,7 +1581,7 @@ void getADC()
// * <out> = s_anaFilt[x] // * <out> = s_anaFilt[x]
uint16_t previous = s_anaFilt[x] / JITTER_ALPHA; uint16_t previous = s_anaFilt[x] / JITTER_ALPHA;
uint16_t diff = (v > previous) ? (v - previous) : (previous - v); 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 // apply jitter filter
s_anaFilt[x] = (s_anaFilt[x] - previous) + v; s_anaFilt[x] = (s_anaFilt[x] - previous) + v;
} }

View file

@ -585,6 +585,11 @@ uint16_t anaIn(uint8_t chan)
return 0; 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) void createBitmap(int index, uint16_t *data, int x, int y, int w, int h)
{ {
th9xSim->createBitmap(index, data, x, y, w, 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}; 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) uint16_t getAnalogValue(uint8_t index)
{ {
if (ana_direction[index] < 0) if (ana_direction[index] < 0)
@ -250,3 +251,4 @@ uint16_t getAnalogValue(uint8_t index)
else else
return adcValues[index]; return adcValues[index];
} }
#endif // #if !defined(SIMU)

View file

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

View file

@ -136,7 +136,9 @@ void adcRead()
} }
#if !defined(SIMU)
uint16_t getAnalogValue(uint8_t value) uint16_t getAnalogValue(uint8_t value)
{ {
return adcValues[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) uint16_t getAnalogValue(uint8_t index)
{ {
if (IS_POT(index) && !IS_POT_AVAILABLE(index)) { if (IS_POT(index) && !IS_POT_AVAILABLE(index)) {
@ -189,3 +190,4 @@ uint16_t getAnalogValue(uint8_t index)
else else
return adcValues[index]; 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) 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) 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) qt5_use_modules(gtests Core Widgets)
add_dependencies(gtests ${FIRMWARE_DEPENDENCIES} gtests-lib) add_dependencies(gtests ${FIRMWARE_DEPENDENCIES} gtests-lib)

View file

@ -31,6 +31,11 @@ uint16_t anaIn(uint8_t chan)
return 0; return 0;
} }
uint16_t getAnalogValue(uint8_t index)
{
return anaIn(index);
}
static char _zchar2stringResult[200]; static char _zchar2stringResult[200];
const char * zchar2string(const char * zstring, int size) 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_TELEMETRY[] PROGMEM = TR_MENU_TELEMETRY;
const pm_char STR_MENU_OTHER[] PROGMEM = TR_MENU_OTHER; const pm_char STR_MENU_OTHER[] PROGMEM = TR_MENU_OTHER;
const pm_char STR_MENU_INVERT[] PROGMEM = TR_MENU_INVERT; const pm_char STR_MENU_INVERT[] PROGMEM = TR_MENU_INVERT;
const pm_char STR_JITTER_FILTER[] PROGMEM = TR_JITTER_FILTER;
#endif #endif
#if MENUS_LOCK == 1 #if MENUS_LOCK == 1

View file

@ -922,6 +922,7 @@ extern const pm_char STR_BLCOLOR[];
extern const pm_char STR_MENU_TELEMETRY[]; extern const pm_char STR_MENU_TELEMETRY[];
extern const pm_char STR_MENU_OTHER[]; extern const pm_char STR_MENU_OTHER[];
extern const pm_char STR_MENU_INVERT[]; extern const pm_char STR_MENU_INVERT[];
extern const pm_char STR_JITTER_FILTER[];
#endif #endif
#if MENUS_LOCK == 1 #if MENUS_LOCK == 1

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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