feat(radio): add trims to autosource and autoswitch if configured as 3P switch (#7024)

This commit is contained in:
3djc
2026-03-20 18:54:37 +10:00
committed by GitHub
parent 545602556d
commit 769e559837
2 changed files with 26 additions and 5 deletions
+12
View File
@@ -482,6 +482,16 @@ int8_t getMovedSource(uint8_t min)
}
}
static int16_t trimStates[MAX_TRIMS];
if (result == 0) {
for (uint8_t i = 0; i < MAX_TRIMS; i++) {
if (abs(getTrimValue(mixerCurrentFlightMode, i) - trimStates[i]) > 0) {
result = MIXSRC_FIRST_TRIM + i;
break;
}
}
}
static int16_t sourcesStates[MAX_ANALOG_INPUTS];
if (result == 0) {
for (uint8_t i = 0; i < MAX_ANALOG_INPUTS; i++) {
@@ -505,9 +515,11 @@ int8_t getMovedSource(uint8_t min)
if (result || recent) {
memcpy(inputsStates, anas, sizeof(inputsStates));
memcpy(sourcesStates, calibratedAnalogs, sizeof(sourcesStates));
for (uint8_t i = 0; i < MAX_TRIMS; i++) trimStates[i] = getTrimValue(mixerCurrentFlightMode, i);
}
s_move_last_time = get_tmr10ms();
return result;
}
#endif
+14 -5
View File
@@ -88,7 +88,7 @@ uint8_t potsPos[MAX_POTS];
#if defined(FUNCTION_SWITCHES)
// Customizable switches
//
//
// Non pushed : SWSRC_Sx0 = -1024 = Sx(up) = state 0
// Pushed : SWSRC_Sx2 = +1024 = Sx(down) = state 1
@@ -311,17 +311,17 @@ int switchLookupIdx(const char* name, size_t len)
if (strncmp(sw_name, name, len) == 0) return i;
}
return -1;
return -1;
}
char switchGetLetter(uint8_t idx)
{
if (idx >= switchGetMaxAllSwitches() + MAX_FLEX_SWITCHES)
return -1;
const char* name = switchGetDefaultName(idx);
if (!name) return -1;
return name[strlen(name) - 1];
}
@@ -393,7 +393,7 @@ void getSwitchesPosition(bool startup)
if (!SWITCH_EXISTS(i)) continue;
newPos |= checkSwitchPosition(i, startup);
}
switchesPos = newPos;
auto max_pots = adcGetMaxInputs(ADC_INPUT_FLEX);
@@ -861,6 +861,15 @@ swsrc_t getMovedSwitch()
}
}
// Trims: only detect trims configured as 3P
for (int i = 0; i < keysGetMaxTrims(); i++) {
if (getRawTrimValue(mixerCurrentFlightMode, i).mode == TRIM_MODE_3POS) {
uint8_t tidx = inputMappingConvertMode(i) * 2;
if (trimDown(tidx)) result = SWSRC_FIRST_TRIM + i * 2;
else if (trimDown(tidx+1)) result = SWSRC_FIRST_TRIM + i * 2 + 1;
}
}
if ((tmr10ms_t)(get_tmr10ms() - s_move_last_time) > 100)
result = 0;