Skip to content

Commit

Permalink
fix: switch position if disabled or transitioning
Browse files Browse the repository at this point in the history
  • Loading branch information
raphaelcoeffic authored and pfeerick committed Jun 25, 2023
1 parent 18da85e commit 9007fb4
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 12 deletions.
1 change: 1 addition & 0 deletions radio/src/boards/generic_stm32/switches.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,7 @@ uint8_t switchGetMaxFctSwitches()
uint32_t switchState(uint8_t pos_idx)
{
auto d = div(pos_idx, 3);
if (d.quot >= n_total_switches) return 0;
return stm32_switch_get_state(&_switch_defs[d.quot], (SwitchHwPos)d.rem);
}

Expand Down
13 changes: 4 additions & 9 deletions radio/src/logs.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -102,15 +102,10 @@ void initLoggingTimer() { // called cyclic

void writeHeader();

#if defined(PCBFRSKY) || defined(PCBNV14)
int getSwitchState(uint8_t swtch) {
int value = getValue(MIXSRC_FIRST_SWITCH + swtch);
return (value == 0) ? 0 : (value < 0) ? -1 : +1;
}
#else
#define GET_2POS_STATE(sw) (switchState(SW_ ## sw) ? -1 : 1)
#define GET_3POS_STATE(sw) (switchState(SW_ ## sw ## 0) ? -1 : (switchState(SW_ ## sw ## 2) ? 1 : 0))
#endif
int getSwitchState(uint8_t swtch) {
int value = getValue(MIXSRC_FIRST_SWITCH + swtch);
return (value == 0) ? 0 : (value < 0) ? -1 : +1;
}

void logsInit()
{
Expand Down
13 changes: 10 additions & 3 deletions radio/src/switches.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ static uint64_t checkSwitchPosition(uint8_t idx, bool startup)
break;

case SWITCH_HW_MID:
if (startup || SWITCH_POSITION(index) ||
if (startup || SWITCH_POSITION(index + 1) ||
g_eeGeneral.switchesDelay == SWITCHES_DELAY_NONE ||
(switchesMidposStart[idx] &&
(tmr10ms_t)(get_tmr10ms() - switchesMidposStart[idx]) >
Expand Down Expand Up @@ -308,6 +308,7 @@ void getSwitchesPosition(bool startup)
{
uint64_t newPos = 0;
for (unsigned i = 0; i < switchGetMaxSwitches(); i++) {
if (!SWITCH_EXISTS(i)) continue;
newPos |= checkSwitchPosition(i, startup);
}

Expand Down Expand Up @@ -570,8 +571,14 @@ bool getSwitch(swsrc_t swtch, uint8_t flags)
if (cs_idx < max_reg_pos) {
if (flags & GETSWITCH_MIDPOS_DELAY)
result = SWITCH_POSITION(cs_idx);
else
result = switchState(cs_idx);
else {
div_t qr = div(cs_idx, 3);
if (SWITCH_EXISTS(qr.quot)) {
result = switchState(cs_idx);
} else {
result = false;
}
}
}
#if defined(FUNCTION_SWITCHES)
else if (cs_idx - max_reg_pos < switchGetMaxFctSwitches() * 3) {
Expand Down

0 comments on commit 9007fb4

Please sign in to comment.