"""Адаптивный таймаут ожидания ответа ЭБУ (AndrOBD AdaptiveTiming). Динамически подстраивается под скорость ответа: - Успешный ответ → уменьшаем таймаут - Таймаут/NO DATA → увеличиваем таймаут - BUS ERROR → сброс до DEFAULT ATST = таймаут / 4 (отправляется в ELM327 как ATSTxx). """ class AdaptiveTiming: """Адаптивный таймаут ожидания ответа (AndrOBD AdaptiveTiming). ATST = таймаут / 4 (отправляется в ELM327 как ATSTxx). """ DEFAULT = 500 # мс — начальный таймаут MIN = 50 # мс — минимальный MAX = 2000 # мс — максимальный STEP = 20 # мс — шаг изменения RES = 4 # делитель для ATST def __init__(self): """Начальный таймаут = DEFAULT.""" self._t = self.DEFAULT self._min = self.MIN @property def ms(self) -> int: """Текущий таймаут в миллисекундах.""" return self._t @property def atst(self) -> int: """Значение для ATST (таймаут / 4).""" return max(1, self._t // self.RES) def increase(self): """Увеличить таймаут на STEP (ЭБУ медленно отвечает).""" """Увеличить таймаут (ЭБУ медленно отвечает).""" if self._t + self.STEP < self.MAX: self._t += self.STEP def decrease(self): """Уменьшить таймаут на STEP (ЭБУ отвечает быстро).""" """Уменьшить таймаут (ЭБУ отвечает быстро).""" if self._t - self.STEP >= self._min: self._t -= self.STEP def reset(self): """Сброс до DEFAULT (после BUS ERROR / инициализации).""" """Сбросить до DEFAULT (после BUS ERROR).""" self._t = self.DEFAULT