
* fix.. speed_limit error... * draw tpms settings. * fix.. traffic light stopping only.. * fix.. waze cam * fix.. waze... * add setting (Enable comma connect ) * auto detect LFA2 * fix.. cruisespeed1 * vff2 driving model. * fix.. * agnos 12.3 * fix.. * ff * ff * test * ff * fix.. drawTurnInfo.. * Update drive_helpers.py * fix.. support eng voice eng sounds fix settings... english fix.. mph.. fix.. roadlimit speed bug.. * new vff model.. 250608 * fix soundd.. * fix safe exit speed.. * fix.. sounds. * fix.. radar timeStep.. * KerryGold model * Update drive_helpers.py * fix.. model. * fix.. * fix.. * Revert "fix.." This reverts commit b09ec459afb855c533d47fd7e8a1a6b1a09466e7. * Revert "fix.." This reverts commit 290bec6b83a4554ca232d531a911edccf94a2156. * fix esim * add more acc table. 10kph * kg update.. * fix cruisebutton mode3 * test atc..cond. * fix.. canfd * fix.. angle control limit
47 lines
1.3 KiB
Python
47 lines
1.3 KiB
Python
import os
|
|
import subprocess
|
|
|
|
def sudo_write(val: str, path: str) -> None:
|
|
try:
|
|
with open(path, 'w') as f:
|
|
f.write(str(val))
|
|
except PermissionError:
|
|
os.system(f"sudo chmod a+w {path}")
|
|
try:
|
|
with open(path, 'w') as f:
|
|
f.write(str(val))
|
|
except PermissionError:
|
|
# fallback for debugfs files
|
|
os.system(f"sudo su -c 'echo {val} > {path}'")
|
|
|
|
def sudo_read(path: str) -> str:
|
|
try:
|
|
return subprocess.check_output(f"sudo cat {path}", shell=True, encoding='utf8').strip()
|
|
except Exception:
|
|
return ""
|
|
|
|
class MovingAverage:
|
|
def __init__(self, window_size: int):
|
|
self.window_size: int = window_size
|
|
self.buffer: list[float] = [0.0] * window_size
|
|
self.index: int = 0
|
|
self.count: int = 0
|
|
self.sum: float = 0.0
|
|
|
|
def add_value(self, new_value: float):
|
|
# Update the sum: subtract the value being replaced and add the new value
|
|
self.sum -= self.buffer[self.index]
|
|
self.buffer[self.index] = new_value
|
|
self.sum += new_value
|
|
|
|
# Update the index in a circular manner
|
|
self.index = (self.index + 1) % self.window_size
|
|
|
|
# Track the number of added values (for partial windows)
|
|
self.count = min(self.count + 1, self.window_size)
|
|
|
|
def get_average(self) -> float:
|
|
if self.count == 0:
|
|
return float('nan')
|
|
return self.sum / self.count
|