UART 控制指令
对应源码:
components/airlink/include/luat_airlink_drv_uart.h,components/airlink/src/driver/luat_airlink_drv_uart.c启用宏:
LUAT_USE_AIRLINK_EXEC_UART(主指令),LUAT_USE_DRV_UART(回调)
UART 指令用于在两端之间透明地操作 UART 接口, 例如让 Air8101 通过 Air780EPM 的辅助 UART 接 GNSS 模块.
通用 payload 头
所有 driver 指令的 data 字段前 8 字节是 seq_id (uint64_t, 小端, 单调递增), 用于匹配 cmd 0x08 result 回调. 详见 指令层描述.
指令列表
| cmd | 名称 | 方向 | 说明 |
|---|---|---|---|
| 0x400 | uart_setup | 主→从 | 配置 UART (波特率/数据位/停止位等) |
| 0x401 | uart_write | 主→从 | 向 UART 发送数据 (按 1535B 分段) |
| 0x402 | uart_close | 主→从 | 关闭 UART |
| 0x410 | uart_data_cb | 从→主 | UART 接收到数据的回调 |
| 0x411 | uart_sent_cb | 从→主 | UART 发送完成的回调 |
各指令详细定义
uart_setup (0x400)
配置 UART.
| 字段 | 长度 | 含义 |
|---|---|---|
| seq_id | 8B | 序列号 |
| uart_conf | NB | luat_uart_t 结构 (含 id/baud_rate/data_bits/stop_bits/parity 等) |
引用源码头文件 include/luat_uart.h 中的 luat_uart_t 结构定义.
uart_write (0x401)
向 UART 发送数据.
| 字段 | 长度 | 含义 |
|---|---|---|
| seq_id | 8B | 序列号 |
| uart_id | 1B | UART id |
| data | NB | 写入数据 |
分段: 客户端自动按 1535 字节分段, 避免单次过大 (src/driver/luat_airlink_drv_uart.c:36-61).
size_t segment_size = 1535;
while (remaining > 0) {
size_t chunk = (remaining > segment_size) ? segment_size : remaining;
// 构造 cmd 0x401, 长度 = chunk + 1 + 8
// 入队, 累计 sent_total
}
RPC 模式注意: 在 RPC 模式下,
luat_airlink_drv_uart_write()必须循环调用nb_call直到所有数据发送完毕 (每次最多UART_WRITE_RPC_MAX = 500字节), 不能依赖单次调用 (AGENTS.md:147-149).
uart_close (0x402)
关闭 UART.
| 字段 | 长度 | 含义 |
|---|---|---|
| seq_id | 8B | 序列号 |
| uart_id | 1B | UART id |
uart_data_cb (0x410)
UART 接收到数据的回调. 响应方向 (从→主).
| 字段 | 长度 | 含义 |
|---|---|---|
| uart_id | 1B | UART id |
| data | NB | 接收到的数据 |
特殊处理: uart_id 10-19 在从机端被映射为内部缓冲 0-9 (用于 GNSS 等场景), 4096 字节环形缓冲, 满则丢弃旧数据保留新数据 (
src/driver/luat_airlink_drv_uart.c:90-129).
uart_sent_cb (0x411)
UART 发送完成的回调. 响应方向 (从→主).
| 字段 | 长度 | 含义 |
|---|---|---|
| uart_id | 1B | UART id |