更新时间:2024-10-18 05:50:59下载pdf
设备生成热点(AP),App 连接设备 AP 并下发路由器信息和 Token 等激活信息给设备,由设备完成激活。
热点配网流程的业务逻辑已经在 TuyaOS SDK 内部实现,TuyaOS SDK 定义一套 TuyaOS Kernel Layer(简称 TKL)接口来屏蔽硬件和系统差异,TKL 接口由您实现,在 TKL 接口完成底层硬件的操作。本文将提供 Wi-Fi TKL 接口开发指导。
热点配网过程中,TuyaOS SDK 需要获取和切换无线工作模式,开启和关闭 AP,连接路由器,获取无线连接状态,以及获取无线接口 IP 地址等,需要您适配以下 TKL 接口。
tkl_wifi_init
OPERATE_RET tkl_wifi_init(WIFI_EVENT_CB cb);
TuyaOS SDK 初始化时调用该接口,该接口的参数是无线连接状态变化的通知回调函数指针,需要应用实时监控无线连接的状态变化。当无线连接状态发生变化时,使用通知回调函数指针把其状态传递给 TuyaOS SDK。
例如,当成功连接到路由器并分配到 IP 地址时,执行 cb(WFE_CONNECTED, NULL)
。当连接路由器失败时,执行 cb(WFE_CONNECT_FAILED, NULL)
。当断开路由器连接时,执行 cb(WFE_DISCONNECTED, NULL)
。
tkl_wifi_scan_ap
OPERATE_RET tkl_wifi_scan_ap(CONST SCHAR_T *ssid, AP_IF_S **ap_ary, UINT_T *num)
TuyaOS SDK 在蓝牙启动广播时,会主动调用该接口。该接口的作用是扫描当前环境,获取所有 AP,并传递给 App 端。应用需要在接口中实现该功能。
tkl_wifi_start_ap
OPERATE_RET tkl_wifi_start_ap(CONST WF_AP_CFG_IF_S *cfg);
TuyaOS SDK 初始化时,若设备处于未配网状态,则调用该接口来开启设备的 AP,允许手机连接,建立局域网通讯来传输配网信息。应用需要在接口中实现启动 AP 的功能。
tkl_wifi_stop_ap
OPERATE_RET tkl_wifi_stop_ap(VOID_T);
当 TuyaOS SDK 配网结束时,会调用该接口,用于关闭设备的 AP。应用需要在接口中实现关闭 AP 的功能。
tkl_wifi_get_mac
OPERATE_RET tkl_wifi_get_mac(CONST WF_IF_E wf, NW_MAC_S *mac)
当 TuyaOS SDK 启动时,会调用该接口,设备发出的 AP 热点名称的后缀带有 MAC 地址的后 4 位。
tkl_wifi_set_work_mode
OPERATE_RET tkl_wifi_set_work_mode(CONST WF_WK_MD_E mode);
当 TuyaOS SDK 需要切换无线的工作模式时,调用该接口。通常是在 tkl_wifi_stop_ap
接口之前调用该接口设置 AP 模式,在 tkl_wifi_station_connect
之前调用该接口设置 Station 模式。应用需要在接口中根据 mode
参数把无线切换到对应的工作模式。
tkl_wifi_get_work_mode
OPERATE_RET tkl_wifi_get_work_mode(WF_WK_MD_E *mode);
当 TuyaOS SDK 需要获取无线的工作模式时,调用该接口。返回的工作模式要求与 tkl_wifi_set_work_mode
接口设置的工作模式一致,否则可能会影响配网流程。
tkl_wifi_station_connect
OPERATE_RET tkl_wifi_station_connect(CONST SCHAR_T *ssid, CONST SCHAR_T *passwd);
当 TuyaOS SDK 接收到来自手机 App 的配网信息后,调用该接口。应用需要在接口中实现连接路由器的功能。
tkl_wifi_station_disconnect
OPERATE_RET tkl_wifi_station_disconnect(VOID_T);
当 TuyaOS SDK 需要断开路由器连接时,调用该接口。应用需要在接口中实现断开路由器的功能。
tkl_wifi_station_get_status
OPERATE_RET tkl_wifi_station_get_status(WF_STATION_STAT_E *stat);
当 TuyaOS SDK 需要获取当前无线连接状态时,调用该接口。TuyaOS SDK 需要获取 WSS_GOT_IP
状态才会走配网流程,所以当设备连接到路由器并且分配到 IP 地址,需要返回 WSS_GOT_IP
。
tkl_wifi_get_ip
OPERATE_RET tkl_wifi_get_ip(CONST WF_IF_E wf, NW_IP_S *ip);
当 TuyaOS SDK 需要获取当前无线接口的 IP 地址时,调用该接口。应用需要在接口中根据 wf
参数来获取 AP 或 Station 接口的 IP 地址。
以上是 AP 配网必要实现的接口,Wi-Fi 中的其他 TKL 接口实现,参考 移植 TuyaOS 到 Linux 平台。
设置配网模式为 AP 配网。
GW_WF_START_MODE mode = WF_START_AP_ONLY;
TuyaOS SDK 启动 AP 配网时,会获取 Wi-Fi 驱动里的 IP 地址,以便确认 Wi-Fi 驱动是否正常。Wi-Fi 适配层 tkl_wifi_get_ip
接口需要给 TuyaOS SDK 回复一个默认 IP 地址。如果 Wi-Fi 驱动没有默认 IP 地址,那么返回值为 0
,否则 TuyaOS SDK 会认为 Wi-Fi 驱动异常而终止配网。报错日志如下:
在适配 tkl_wifi_start_ap
接口时,要把 TuyaOS SDK 下发的结构体指针入参下的所有成员设置到 Wi-Fi 驱动里,适配层不可随意修改。如 TuyaOS SDK 下发的结构体指针入参中的 IP 地址 192.168.176.1
,那么 AP 热点发出来的 IP 地址需是 192.168.176.1
,否则会导致 App 下发的 AP 配网协议与 TuyaOS SDK 不一致而配网失败。报错日志如下:
在切换到 Station 模式之前,Wi-Fi 驱动可能有自己默认的 IP 地址。那么设备连上路由器之后,将 Wi-Fi 适配层 tkl_wifi_get_ip
接口中的 IP 地址替换成路由器分配的 IP 地址,否则会出现配网超时等现象。
所有的适配接口都不允许阻塞,耗时的任务建议做异步处理,否则会出现配网超时等问题。
接口返回值:除了获取 IP 地址接口,如果其他无线配网相关的适配接口返回值为非 0
,那么无线配网都会被终止。在 Wi-Fi 适配层接口中,如果无实际 Wi-Fi 平台报错的情况下,都要保证返回值为 0
。
另外,TuyaOS SDK 会定时调用 Wi-Fi 适配层 tkl_wifi_station_get_status
接口查询 Wi-Fi 状态,该接口必须在 1 秒时间内快速响应。
该内容对您有帮助吗?
是意见反馈该内容对您有帮助吗?
是意见反馈