mazda-9.4

This commit is contained in:
jakethesake420
2023-11-06 16:32:31 -06:00
parent eed0ddc3b8
commit e59df06eea
22 changed files with 738 additions and 164 deletions
+2
View File
@@ -180,10 +180,12 @@ std::unordered_map<std::string, uint32_t> keys = {
{"Offroad_UpdateFailed", CLEAR_ON_MANAGER_START},
{"OpenpilotEnabledToggle", PERSISTENT},
{"PandaHeartbeatLost", CLEAR_ON_MANAGER_START | CLEAR_ON_OFFROAD_TRANSITION},
{"OpenpilotLongitudinalControl", PERSISTENT},
{"PandaSignatures", CLEAR_ON_MANAGER_START},
{"Passive", PERSISTENT},
{"PrimeType", PERSISTENT},
{"RecordFront", PERSISTENT},
{"RecordRoad", PERSISTENT},
{"RecordFrontLock", PERSISTENT}, // for the internal fleet
{"ReplayControlsState", CLEAR_ON_MANAGER_START | CLEAR_ON_ONROAD_TRANSITION},
{"ShouldDoUpdate", CLEAR_ON_MANAGER_START},
+85
View File
@@ -93,3 +93,88 @@ class Ratekeeper:
self._frame += 1
self._remaining = remaining
return lagged
class DurationTimer:
def __init__(self, duration=0, step=DT_CTRL) -> None:
self.step = step
self.duration = duration
self.was_reset = False
self.timer = 0
self.min = float("-inf") # type: float
self.max = float("inf") # type: float
def tick_obj(self) -> None:
self.timer += self.step
# reset on overflow
self.reset() if (self.timer == (self.max or self.min)) else None
def reset(self) -> None:
"""Resets this objects timer"""
self.timer = 0
self.was_reset = True
def active(self) -> bool:
"""Returns true if time since last reset is less than duration"""
return bool(round(self.timer,2) < self.duration)
def adjust(self, duration) -> None:
"""Adjusts the duration of the timer"""
self.duration = duration
def once_after_reset(self) -> bool:
"""Returns true only one time after calling reset()"""
ret = self.was_reset
self.was_reset = False
return ret
@staticmethod
def interval_obj(rate, frame) -> bool:
if frame % rate == 0: # Highlighting shows "frame" in white
return True
return False
class ModelTimer(DurationTimer):
frame = 0 # type: int
objects = [] # type: List[DurationTimer]
def __init__(self, duration=0) -> None:
self.step = DT_MDL
super().__init__(duration, self.step)
self.__class__.objects.append(self)
@classmethod
def tick(cls) -> None:
cls.frame += 1
for obj in cls.objects:
ModelTimer.tick_obj(obj)
@classmethod
def reset_all(cls) -> None:
for obj in cls.objects:
obj.reset()
@classmethod
def interval(cls, rate) -> bool:
return ModelTimer.interval_obj(rate, cls.frame)
class ControlsTimer(DurationTimer):
frame = 0
objects = [] # type: List[DurationTimer]
def __init__(self, duration=0) -> None:
self.step = DT_CTRL
super().__init__(duration=duration, step=self.step)
self.__class__.objects.append(self)
@classmethod
def tick(cls) -> None:
cls.frame += 1
for obj in cls.objects:
ControlsTimer.tick_obj(obj)
@classmethod
def reset_all(cls) -> None:
for obj in cls.objects:
obj.reset()
@classmethod
def interval(cls, rate) -> bool:
return ControlsTimer.interval_obj(rate, cls.frame)