diff --git a/radio/src/mixer.cpp b/radio/src/mixer.cpp index 39bcc4b66..453e0c37f 100644 --- a/radio/src/mixer.cpp +++ b/radio/src/mixer.cpp @@ -487,20 +487,7 @@ void evalInputs(uint8_t mode) BeepANACenter anaCenter = 0; #if defined(STICK_DEAD_ZONE) - static int16_t P_OFFSET = 0; - static int16_t N_OFFSET = 0; - static float aParam = 0.0f; - static float bParam = 0.0f; - static int16_t lastDeadZone = -1; - - if (lastDeadZone != g_eeGeneral.stickDeadZone) { - P_OFFSET = - (g_eeGeneral.stickDeadZone ? 2 << (g_eeGeneral.stickDeadZone - 1) : 0); - N_OFFSET = (-1) * P_OFFSET; - aParam = 1024.0 / (1024.0 - (float)P_OFFSET); - bParam = 1024.0 * (aParam - 1.0f); - lastDeadZone = g_eeGeneral.stickDeadZone; - } + int16_t deadZoneOffset = g_eeGeneral.stickDeadZone ? 2 << (g_eeGeneral.stickDeadZone - 1) : 0; #endif auto max_calib_analogs = adcGetInputOffset(ADC_INPUT_VBAT); @@ -515,16 +502,15 @@ void evalInputs(uint8_t mode) #if defined(STICK_DEAD_ZONE) // dead zone invented by FlySky in my opinion it should goes into ADC - // float calculations are not efficient if (g_eeGeneral.stickDeadZone && ch != inputMappingGetThrottle()) { - if (v > P_OFFSET) { + if (v > deadZoneOffset) { // y=ax+b - v = (int)((aParam * (float)v) - bParam); - } else if ((v <= P_OFFSET) && (v >= N_OFFSET)) { + v = (int16_t)((int32_t)(v - deadZoneOffset) * 1024L / (1024L - deadZoneOffset)); + } else if (v < -deadZoneOffset) { + // y=ax+b + v = (int16_t)((int32_t)(v + deadZoneOffset) * 1024L / (1024L - deadZoneOffset)); + } else { v = 0; - } else if (v < N_OFFSET) { - // y=ax+b - v = (int)((aParam * (float)v) + bParam); } } #endif diff --git a/radio/src/storage/storage_common.cpp b/radio/src/storage/storage_common.cpp index b6b034b46..394f95d52 100644 --- a/radio/src/storage/storage_common.cpp +++ b/radio/src/storage/storage_common.cpp @@ -100,11 +100,6 @@ void postRadioSettingsLoad() g_eeGeneral.internalModule = DEFAULT_INTERNAL_MODULE; } #endif -#if defined(STICK_DEAD_ZONE) - if (!g_eeGeneral.stickDeadZone) { - g_eeGeneral.stickDeadZone = DEFAULT_STICK_DEADZONE; - } -#endif #if !defined(DEBUG) // clean up leftovers from a previous DEBUG config for (uint8_t port_nr = 0; port_nr < MAX_AUX_SERIAL; port_nr++) {