Files

54 lines
2.1 KiB
Python

"""Адаптивный таймаут ожидания ответа ЭБУ (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