c3_client: support legacy and new cereal layouts

This commit is contained in:
1okko
2026-09-29 20:38:51 +08:00
parent bc5d3dec33
commit 4f59b60dfb
+17 -4
View File
@@ -403,10 +403,23 @@ async def execute_messaging():
"""获取 messaging 实时数据:进程状态、设备状态、车辆状态、控制状态
使用 subprocess 独立进程执行同步 SubMaster 操作,避免在 async 协程中阻塞事件循环"""
try:
script = r'''import sys, json
sys.path.insert(0, "/data/openpilot")
from cereal.messaging import SubMaster, pub_sock, recv_one_or_none
from cereal import log
script = r'''import sys, json, os
# 自动适配新旧 sunnypilot 布局:
# 旧布局: /data/openpilot/cereal
# 新布局: /data/openpilot/openpilot/cereal (包根为 /data/openpilot/openpilot)
_ROOTS = ["/data/openpilot/openpilot", "/data/openpilot"]
for _r in _ROOTS:
if os.path.isdir(os.path.join(_r, "cereal")):
if _r not in sys.path:
sys.path.insert(0, _r)
break
try:
from cereal.messaging import SubMaster, pub_sock, recv_one_or_none
from cereal import log
except ModuleNotFoundError:
# 兜底:显式 openpilot. 前缀导入
from openpilot.cereal.messaging import SubMaster, pub_sock, recv_one_or_none
from openpilot.cereal import log
import time
# 分别订阅每个 topic 并单独等待,避免一次 update 等不全