优化前端,优化前端指令,优化自定义控制

This commit is contained in:
minghanchen
2026-08-24 09:40:16 +08:00
parent fff7657fea
commit 8d05815773
130 changed files with 5543 additions and 2206 deletions
+41 -10
View File
@@ -5,7 +5,7 @@
`monitor-only` 桥,桥进程会拒绝所有发送请求。服务启动后由一个常驻监听线程
持续缓存最新的已验证状态,HTTP 接口不会为每次前端请求反复开关 USB 设备。
Linux 只读状态模式的前端刷新周期为 500 ms;缓存只保留 3 秒内的新鲜反馈,
断线后会自动关闭旧桥并重试连接。监听通道只接受本文列出的 11 个标准帧 ID,
断线后会自动关闭旧桥并重试连接。监听通道只接受本文列出的 12 个标准帧 ID,
同时在 SDK 桥内保留同样的软件过滤,避免把无关总线流量转发给服务进程。
## 硬件和总线基线
@@ -21,7 +21,8 @@ Linux 只读状态模式的前端刷新周期为 500 ms;缓存只保留 3 秒
前端车辆概况依赖 `0x342`(档位)、`0x4EB/0x07`(车速)和 `0x407`
(门锁)。主驾座椅依赖 `0x4FA`、`0x494`。收到其他帧不能替代这些已验证
反馈。
反馈。车身设备还会按帧独立更新:`0x388` 四窗、`0x404` 空调、`0x41A`
遮阳帘、`0x42E/0x3F3/0x3FF` 车内灯光,以及 `0x38A` 前部灯光。
## 前端有线 / 无线选择
@@ -29,7 +30,7 @@ Linux 只读状态模式的前端刷新周期为 500 ms;缓存只保留 3 秒
- 有线控制:状态和控制都走后端 ZLG CH1。
- 无线控制:状态订阅 `n7/n7-headunit/can/state`,控制发布到
`n7/can_control`;默认 Broker 为 `127.0.0.1:1883`。MQTT CAN0 专用于
`n7/n7-headunit/can/command`;默认 Broker 为 `127.0.0.1:1883`。MQTT CAN0 专用于
副驾座椅,MQTT CAN1 专用于除副驾座椅外的车辆状态和控制。
选择保存在当前浏览器,并随车辆状态请求和控制请求一起传给后端。切换传输时
@@ -37,7 +38,8 @@ Linux 只读状态模式的前端刷新周期为 500 ms;缓存只保留 3 秒
共用同一套编译范围检查、P 挡/零车速预检、反馈目标匹配和硬件批准令牌;MQTT
发布成功只证明 Broker 接收了消息,不能替代 ECU 状态反馈。
MQTT 主题只承载原始 CAN 帧,不接受已经解析的车辆状态 JSON。规范帧格式为:
MQTT 状态主题只承载原始 CAN 帧,不接受已经解析的车辆状态 JSON。接收侧继续
兼容下面的规范单帧格式:
```json
{
@@ -54,11 +56,36 @@ MQTT 主题只承载原始 CAN 帧,不接受已经解析的车辆状态 JSON
}
```
车机实际使用的 `n7-can-signals/v1` 状态包由顶层 `signals` 承载同样的原始帧。
`n7/n7-headunit/can/state` 可以发送单帧对象,也可以发送
`{"frames":[...]}` 批次。接收侧兼容 `can_id`、`canId`、`frame_id` 和
`dataHex` 等常见字段名,但仍强制 CAN0/CAN1、11 位 ID、1–64 字节长度和
逐通道反馈 ID 白名单。`n7/can_control` 始终由后端输出上述规范单帧格式,
其中 `channel` 保留编译计划选择的通道。
逐通道反馈 ID 白名单。
自然语言指令仍先由后端编译、检查白名单和车辆安全条件。每个已批准的 CAN 帧
再转换为车机 App `CanCommand` 格式并发布到
`n7/n7-headunit/can/command`:
```json
{
"requestId": "cognitive-agent-0e77879b83fd47a9bf12efb3d20dfae7",
"channel": "can1",
"canId": "0x431",
"frameType": "fd",
"brs": true,
"extended": false,
"remote": false,
"data": "10 00 00 00 00 00 00 00",
"repeat": 1,
"intervalMs": 0,
"responseTimeoutMs": 1500
}
```
每次发布生成不同的 `requestId`。MQTT 外层固定 `repeat=1`,原有执行器继续负责
矩阵要求的重复次数、周期和动作后的安全停止,不会在车机端再次叠加重复发送。
CAN0 输出 `classic` 且禁用 BRS;CAN1 按编译结果输出 Classic CAN 或合法长度的
FD+BRS。车机按通道、控制 ID 和帧类型推断预期反馈 ID。
无线通道边界为:
@@ -82,7 +109,9 @@ MQTT 主题只承载原始 CAN 帧,不接受已经解析的车辆状态 JSON
- CAN1 只以
`/home/orin/project511/project-code/canfd/CAN矩阵表_filled.xlsx` 为准。
例如 `0x42E` 颜色值只有 `0x01–0x1F` 有效,保留值不会显示为
真实颜色。
真实颜色。`0x388` 的四窗关好位按矩阵解析;byte 3–6 的四窗百分比另有
`project-code/canfd/window_native.txt` 实车变化轨迹和车端原始帧证据,
因此只有数值落在 `0–100` 时才显示为开度。
MQTT 消息自带的 `can0Seat.parsed` 和 `can1Vehicle.parsed` 只可用于车端
诊断,后端不使用它们更新状态或通过安全门禁。
@@ -159,9 +188,11 @@ make dev
curl -s http://127.0.0.1:8000/api/runtime
```
车辆状态接口应返回 `source=physical_can_ch1`、实际收到的
`observed_frame_ids`,以及缺失反馈列表。发送成功、CAN ACK 和状态反馈是不同
证据层级;只有接口实际收到并解码目标反馈才会更新前端。
车辆状态接口在有线模式应返回 `source=physical_can_ch1`,在无线模式应返回
`source=wireless_mqtt_ch1`,并包含实际收到的 `observed_frame_ids` 和缺失反馈
列表。前端“整车设备状态”会把这两个来源都作为权威实时状态,并明确显示
“有线 CAN”或“无线 CAN”。发送成功、CAN ACK 和状态反馈是不同证据层级;
只有接口实际收到并解码目标反馈才会更新前端。
## SDK 自检