系统通知与日志指令
对应源码:
components/airlink/src/luat_airlink_cmds.c,components/airlink/src/exec/luat_airlink_cmd_exec_basic.c,components/airlink/binding/luat_lib_airlink.c
本类指令覆盖自定义数据透传 (sdata)、自测 (nop)、系统事件广播 (sys_pub) 与日志透传 (log).
指令列表
| cmd | 名称 | 方向 | 启用宏 | 说明 |
|---|---|---|---|---|
| 0x20 | sdata | 主→从 或 从→主 | LUAT_USE_AIRLINK_EXEC_SDATA |
自定义数据透传, fire-and-forget |
| 0x21 | nop | 主→从 或 从→主 | always | 空操作, 自测用 |
| 0x80 | notify_sys_pub | 从→主 | LUAT_USE_AIRLINK_EXEC_NOTIFY |
系统事件广播 (WLAN 状态变化等) |
| 0x81 | notify_log | 从→主 | LUAT_USE_AIRLINK_EXEC_NOTIFY |
对端日志透传 |
sdata (0x20)
应用层自定义数据透传, 用于两端业务代码之间的轻量级消息.
调用方式 (Lua)
-- 发送自定义数据 (zbuff 或 string)
airlink.sdata("hello from master")
-- 接收对端 sdata
sys.subscribe("AIRLINK_SDATA", function(data)
print("recv:", data)
end)
数据路径 (重要)
来源:
components/airlink/AGENTS.md:151-155
| 模式 | 路径 | 分块 |
|---|---|---|
RPC 模式 (对端 flags.rpc_supported = 1) |
走 nb_notify (cmd 0x30, rpc_id=0x0500), 按 1400 字节 分块 |
自动 |
| raw 模式 (无 RPC) | 走 cmd 0x20 直接发送 | 无 |
| 端 | 行为 |
|---|---|
| 客户端 | luat_airlink_sdata_send() 根据对端能力选择 raw cmd 0x20 或 nb_notify |
| 服务端 | cmd_exec_rpc_sdata.c 收到 notify → 解码 SdataNotify → 调用 luat_airlink_cmd_exec_sdata_data() → 发布 AIRLINK_SDATA 事件 |
限制
- 单次 data 最大 1400 字节 (RPC 分块阈值); 超过会被自动分块, 但接收端不感知分块, 收到完整数据
- raw 模式下不应超过 1500 字节 (链路层上限)
nop (0x21)
空操作指令, 仅作为链路可用性的快速探测. airlink.test(count) 内部调用此指令.
| 项目 | 值 |
|---|---|
| cmd | 0x21 |
| data | 无 |
notify_sys_pub (0x80)
系统事件广播, 从机主动发送, 主机通过 sys.subscribe("AIRLINK_*") 接收.
data 格式
变长键值对序列, 按 type tag 分隔:
[type_tag:1B] [value:N B] [type_tag:1B] [value:N B] ...
| type_tag | 后续值类型 | 说明 |
|---|---|---|
luat_airlink_syspub_addstring |
uint16 len + bytes | 添加字符串 (如 "WLAN_STA_INC", "CONNECTED", "DISCONNECTED") |
luat_airlink_syspub_addint32 |
4 bytes, 大端 | 添加 int32 (如 disconnect_reason) |
luat_airlink_syspub_addfloat32 |
4 bytes | 添加 float32 |
luat_airlink_syspub_addbool |
1 byte | 添加 bool |
luat_airlink_syspub_addnil |
0 bytes | 添加 nil |
典型事件序列
STA 连接成功
"WLAN_STA_INC" "CONNECTED" "<ssid>" "<bssid:6>"
STA 断开
"WLAN_STA_INC" "DISCONNECTED" <reason:int32>
AP 客户端连接
"WLAN_AP_INC" "CONNECTED" "<mac:6>"
启用
启用宏 LUAT_USE_AIRLINK_EXEC_NOTIFY. 事件组装在 components/airlink/src/devinfo/luat_airlink_devinfo_wlan.c 的 wifi_evt_handler() 中.
notify_log (0x81)
对端日志透传, 从机把本地日志通过 AirLink 发给主机, 主机按 LUAT_LOG_TAG 重新打印.
| 项目 | 值 |
|---|---|
| cmd | 0x81 |
| data | 对端日志原文 (含 LUAT_LOG_TAG 前缀和级别) |
用途: 远程调试, 在主机开发环境直接看到从机的日志输出, 不需要物理上接串口.
不支持的指令
收到未实现的 cmd id, 应直接忽略, 不回响应, 保证版本兼容性. 详细规则见 指令层描述.