跳转至

系统通知与日志指令

对应源码: 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.cwifi_evt_handler() 中.

notify_log (0x81)

对端日志透传, 从机把本地日志通过 AirLink 发给主机, 主机按 LUAT_LOG_TAG 重新打印.

项目
cmd 0x81
data 对端日志原文 (含 LUAT_LOG_TAG 前缀和级别)

用途: 远程调试, 在主机开发环境直接看到从机的日志输出, 不需要物理上接串口.

不支持的指令

收到未实现的 cmd id, 应直接忽略, 不回响应, 保证版本兼容性. 详细规则见 指令层描述.

问一下 AI