diff --git a/sunnypilot/selfdrive/controls/lib/auto_lane_change.py b/sunnypilot/selfdrive/controls/lib/auto_lane_change.py index 00980b2e5f..dc679dfeeb 100644 --- a/sunnypilot/selfdrive/controls/lib/auto_lane_change.py +++ b/sunnypilot/selfdrive/controls/lib/auto_lane_change.py @@ -4,32 +4,31 @@ Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors. This file is part of sunnypilot and is licensed under the MIT License. See the LICENSE.md file in the root directory for more details. """ -from enum import IntEnum - from cereal import log -from openpilot.common.realtime import DT_MDL + from openpilot.common.params import Params +from openpilot.common.realtime import DT_MDL -class AutoLaneChangeState(IntEnum): +class AutoLaneChangeState: OFF = -1 - NUDGE = 0 + NUDGE = 0 # default NUDGELESS = 1 HALF_SECOND = 2 ONE_SECOND = 3 ONE_POINT_FIVE_SECOND = 4 TWO_SECONDS = 5 - THREE_SECONDS = 6 # default + THREE_SECONDS = 6 AUTO_LANE_CHANGE_TIMER = { - AutoLaneChangeState.OFF: 0.0, # Off - AutoLaneChangeState.NUDGE: 0.0, # Nudge - AutoLaneChangeState.NUDGELESS: 0.1, # Nudgeless - AutoLaneChangeState.HALF_SECOND: 0.5, # 0.5-second delay - AutoLaneChangeState.ONE_SECOND: 1.0, # 1-second delay - AutoLaneChangeState.TWO_SECONDS: 2.0, # 2-second delay - AutoLaneChangeState.THREE_SECONDS: 3.0, # 3-second delay + AutoLaneChangeState.OFF: 0.0, # Off + AutoLaneChangeState.NUDGE: 0.0, # Nudge + AutoLaneChangeState.NUDGELESS: 0.1, # Nudgeless + AutoLaneChangeState.HALF_SECOND: 0.5, # 0.5-second delay + AutoLaneChangeState.ONE_SECOND: 1.0, # 1-second delay + AutoLaneChangeState.TWO_SECONDS: 2.0, # 2-second delay + AutoLaneChangeState.THREE_SECONDS: 3.0, # 3-second delay } TIMER_DISABLED = -1 @@ -44,20 +43,20 @@ class AutoLaneChangeController: self.lane_change_set_timer = AutoLaneChangeState.NUDGE self.lane_change_bsm_delay = False self.prev_brake_pressed = False - self.lane_change_delay = 0.0 + self.lane_change_delay = 0 self._blindspot_detected = False self._brake_pressed = False self.auto_lane_change_allowed = False self.read_params() - def reset(self): + def reset(self) -> None: # Auto reset if parent state indicates we should if self.DH.lane_change_state == log.LaneChangeState.off and \ self.DH.lane_change_direction == log.LaneChangeDirection.none: self.lane_change_wait_timer = 0.0 self.prev_brake_pressed = False - def read_params(self): + def read_params(self) -> None: self.param_read_counter += 1 if self.param_read_counter % 50 == 0: self.lane_change_bsm_delay = self.params.get_bool("AutoLaneChangeBsmDelay") @@ -66,19 +65,19 @@ class AutoLaneChangeController: except (ValueError, TypeError): self.lane_change_set_timer = AutoLaneChangeState.NUDGE - def update_lane_change_timers(self): + def update_lane_change_timers(self) -> None: self.lane_change_delay = AUTO_LANE_CHANGE_TIMER.get(self.lane_change_set_timer, - AUTO_LANE_CHANGE_TIMER[AutoLaneChangeState.THREE_SECONDS]) + AUTO_LANE_CHANGE_TIMER[AutoLaneChangeState.NUDGE]) self.lane_change_wait_timer += DT_MDL - if self.lane_change_bsm_delay and self._blindspot_detected and self.lane_change_delay: + if self.lane_change_bsm_delay and self._blindspot_detected and self.lane_change_delay > 0: if self.lane_change_delay == AUTO_LANE_CHANGE_TIMER[AutoLaneChangeState.NUDGELESS]: self.lane_change_wait_timer = TIMER_DISABLED else: self.lane_change_wait_timer = self.lane_change_delay - 1 - def update_allowed(self): + def update_allowed(self) -> None: # Auto lane change allowed if: # 1. A valid delay is set (non-zero) # 2. We've waited long enough @@ -87,11 +86,11 @@ class AutoLaneChangeController: self.lane_change_wait_timer > self.lane_change_delay and \ not self.prev_brake_pressed - def update(self, blindspot_detected: bool, brake_pressed: bool): - self.read_params() + def update(self, blindspot_detected: bool, brake_pressed: bool) -> None: self._blindspot_detected = blindspot_detected self._brake_pressed = brake_pressed + self.read_params() self.update_lane_change_timers() self.update_allowed()