BK Wi-Fi MESH配网及网络控制API介绍

[English]

1.简介

Wi-Fi MESH配网提供APP配网和API配网两种方式,均可实现空闲MESH节点发现,MESH节点组网,查询网络拓扑,网络控制,OTA等功能。API接口配网主要用于云端配网。APP配网请参考文档《博通集成Wi-Fi Mesh App使用介绍文档》。

本文档主要介绍Wi-Fi Mesh配网及网络控制API的使用方法,供开发者参考。

2.Wi-Fi MESH配网及网络控制API功能

BK MESH API提供接口,用于获取空闲节点列表,配置MESH网络的各项参数,以及查询网络拓扑(只支持树状)和控制设备等,通过BK MESH API实现对MESH网络的查询及控制。

主要包括以下步骤:

  • I 获取空闲节点

    可在网关节点或任意节点处调用API获取空闲节点,即可获得当前空口环境中全部符合条件的空闲MESH节点的信息,为下一步配网做准备;

  • II 空闲节点配网

    获取到空闲节点后,可在网关节点或任意空闲MESH节点处调用API,向MESH节点发送配网信息,如配网节点数量,指定根节点等,实现空闲节点配网组网,形成MESH网络。

    API接口接收到配网请求后,验证配网信息的有效性,将配网信息传递给MESH节点,各节点根据配置信息开始执行配网操作,如扫描,连接,配置MESH网络等。

  • III MESH网络控制

    MESH网络组网成功后,可在根节点调用API,进行以下操作,对MESH网络进行查询或者控制。

    • 查询网络拓扑

      在根节点处调用API,查询网络拓扑(只支持树状),可获取到当前网络情况,如在线节点数,网络层级,节点拓扑关系等;

    • 修改MESH网络

      在根节点处调用API,可实现对MESH网络的控制,如增加MESH网络节点数量、删除MESH网络中部分节点或全部节点、修改网络配置等;

    • 设置用户信息/查询用户信息

      在根节点处调用API,配置或者查询用户信息;

    • OTA升级

      在根节点处调用API,配置OTA升级信息,启动OTA升级或者通过查询OTA升级状态来确认升级是否完成;

    • 节点重置

      当存在某个节点从MESH网络断开且无法重新加入网络时,可使用节点重置功能将该节点Reset,使其恢复到空闲节点状态。

    • 获取节点状态信息

      查询节点的状态信息,如状态,层级,父节点以及与起相关联的节点数。

3 Wi-Fi MESH配网及网络控制API使用说明

3.1 设置模式及回调

3.1.1 模式

所有mesh节点在初始化时调用此接口,配置模式;

API:

bk_err_t bk_wifi_mesh_set_net_mode(uint8_t net_mode);

  • uint8_t net_mode,1:指示广域网模式;2:局域网模式;3:局域网模式,但根节点sta连接了AP;

3.1.2 注册回调函数

在调用配网API之前在所有mesh节点处调用API注册回调函数,用于后续获取空闲节点列表/获取拓扑结果/获取删除节点结果/获取用户信息等;

API:

bk_err_t bk_wifi_mesh_set_api_mode(void* event_cb);

  • int event_cb(void *arg, event_module_t event_module, int event_id, void *event_data);
    • event_data: 返回的数据,具体内容请参考各api说明

    • event_module: 3(表示当前event为mesh事件)

    • event_id:
      • 0- BK_MESH_EVENT_GET_IDLE_NODE

      • 1- BK_MESH_EVENT_GET_TOPO

      • 2- BK_MESH_EVENT_RM_NODE

      • 3- BK_MESH_EVENT_GET_VENDOR

3.2 获取空闲节点列表

可在网关节点或任意节点调用API接口,并注册回调函数获取空闲节点列表,mesh节点收到请求后,将返回全部空闲节点列表。

Uart

获取空闲节点示意图

3.2.1 API说明

API:

bk_err_t bk_wifi_mesh_get_idle_node(void);

备注

1、在调用此API接口之前,需要先调用bk_wifi_mesh_set_api_mode函数设置回调函数以获取空闲节点列表。

2、可通过在projet中修改CONFIG_BK_WIFI_MESH_FREE_AP_SSID宏的值改变空闲节点名称;

3.2.2 返回数据格式

Uart

返回空闲节点列表数据格式含义如下:

  • Length:为Length后面的所有字段的长度

  • node_num:表示返回空闲节点的数量;

  • node_info_list:仅node_num不为0时存在,表示空闲节点的mac_addr;

3.3 空闲节点配网

可在网关节点或任意空闲节点调用API接口,通知mesh节点配网,mesh节点收到请求后,开始配网并通知其他节点。

Uart

空闲节点配网示意图

3.3.1 API说明

API:

bk_err_t bk_wifi_mesh_net_cfg(const bk_wifi_mesh_net_cfg_t *config);

必选参数:

  • uint16_t node_num; 表示本次配网的mesh节点数量,大于0的整数;

  • char *node_mac_list; 本次配网的mesh节点对应的mac addr;

  • uint8_t max_mesh_num; mesh节点最大允许连接的mesh节点个数,1~10为有效值,为0表示使用默认值10;

  • uint8_t design_root[WIFI_MAC_LEN]; 指定根节点的mac地址;

广域网时,如下参数为必选

  • char router_ssid[WIFI_SSID_STR_LEN]; 广域网配网时使用,根节点关联的AP的ssid;

  • char router_pw[WIFI_PASSWORD_LEN]; 广域网配网时使用,根节点关联的AP的pw;

可选参数:

  • uint32_t net_token;token配网口令,为0表示将使用随机token;

  • uint8_t mesh_id;mesh网络标识符,为0表示使用默认值;

  • char sap_ssid[WIFI_SSID_STR_LEN];表示配网时设置的sap的ssid,为0表示使用默认值;

  • char sap_pw[WIFI_PASSWORD_LEN];表示配网时设置的sap的pw,为0表示使用默认值;

  • uint8_t max_level;mesh网络的最大层数,可设置为不小于1的整数,为0表示使用默认值10;

备注

1、【必选参数】表示调用API进行操作时必须要设置的值,否则操作不生效。

2、可配合3.3.1查询拓扑确认组网结果及网络结构

3.4 MESH网络控制

3.4.1 查询拓扑

在根节点处调用API接口,查询mesh网络结构,根节点收到查询请求后,返回拓扑结构。

Uart

查询拓扑示意图

3.4.1.1 API说明

API:

bk_err_t bk_wifi_mesh_get_topo(void);

备注

在调用此API接口之前,需要先调用bk_wifi_mesh_set_api_mode函数设置回调函数以获取拓扑结果,此API不直接返回拓扑。

3.4.1.2返回数据格式

Uart

Mesh节点返回拓扑结构格式消息格式见上图,各参数含义如下:

  • Length;表示Length后面的所有字段的长度;

  • Result;表示返回拓扑说明,0:表示返回当前拓扑结果;1:表示当前无拓扑结果,返回拓扑为空;2:表示当前mesh网络不稳定,拓扑结果大于配网节点数,可10s后再次查询(最大重复3次);

  • Max Conn Num:表示mesh网络中配置的最大mesh连接个数,由Mesh节点带回当前的配置的值;

  • Max Non Mesh Num:最大non mesh节点连接个数,由Mesh节点带回当前的配置的值;

  • Max Level:最大mesh网络层数,由Mesh节点带回当前的配置的值;

  • Node Num:指示,本次上报的当前Mesh网络的节点个数;

  • Node Info List:mesh网络的节点信息;

    • Level:表示该节点的层级;

    • Node Mac Addr:表示该节点的MAC地址;

    • Parent Mac Addr:表示该节点的父节点信息,全FFFFFFFFFFFF表示没有父节点信息;

    • Mesh Conn Left:表示该节点还剩余的mesh节点连接数量;

    • Non Mesh Conn Left:表示该节点还剩余的non-mesh节点连接数量;

3.4.2 增加节点

在根节点处调用API接口,通知mesh节点增加节点,mesh节点收到请求后,通知其他节点加入MESH网络。

Uart

增加节点示意图

3.4.2.1 API说明

API:

bk_err_t bk_wifi_mesh_add_node(const bk_wifi_mesh_add_node_t *add_node);

必选参数:

  • uint16_t node_num; 表示本次加入网络的mesh节点数量;

  • char *node_mac_list; 本次加入mesh网络的mesh节点对应的mac addr;

可选参数:

  • char *design_parent; 增加节点分别对应的父节点;

备注

可配合3.3.1查询拓扑来检查节点是否加入网络;

3.4.3 删除节点

在根节点处调用API接口,根节点收到删除请求后,通知MESH网络中的节点删除。

Uart

删除节点示意图

3.4.3.1 API说明

API:

bk_err_t bk_wifi_mesh_remove_node(uint16_t node_num, uint8_t *node_mac_list);

必选参数:

  • uint16_t node_num; 表示本次删除的mesh节点数量

  • char *node_mac_list; 本次删除的节点对应的mac addr

备注

在调用此API接口之前,需要先调用bk_wifi_mesh_set_api_mode函数设置回调函数以获取删除结果,此API不直接返回结果。

3.4.3.2返回数据格式

Uart

Mesh节点返回删除节点结果消息格式见上图,各参数含义:

  • Length:表示Length后面的所有字段的长度

  • node_num:表示删除节点失败的个数,为0表示全部节点删除成功;

  • node_info_list:仅node_num不为0时存在,携带失败node_info_list;

3.4.4 修改配置

可在根节点处调用API接口,通知修改网络配置,mesh节点收到请求后,通知MESH网络中的节点修改MESH网络配置。

Uart

修改配置示意图

3.4.4.1 API说明

API:

bk_err_t bk_wifi_mesh_change_cfg(const bk_wifi_mesh_change_cfg_t *change_cfg);

必选参数:

  • uint16_t node_num; 表示修改mesh网络配置的节点数量

  • char *node_mac_list; 表示修改mesh网络配置的节点对应的mac addr

可选参数:

  • char *design_parent; 修改配置的节点指定的父节点

  • uint8_t max_mesh_num; 表示修改的mesh节点最大允许连接的mesh节点个数,1~10为有效值;

  • uint8_t max_level; 修改mesh网络的最大层数,可设置为不小于1的整数;

备注

可配合3.3.1查询网络拓扑确认修改配置是否生效

3.4.5 设置用户信息

在根节点处调用API接口,设置用户信息,节点收到设置请求后,通知MESH网络中的其他节点。

Uart

设置用户信息示意图

3.4.5.1 API说明

API:

bk_err_t bk_wifi_mesh_set_vendor(const bk_wifi_mesh_vendor_t *set_vendor);

必选参数:

  • uint16_t node_num; 表示本次设置用户信息的mesh节点数量;

  • char *node_mac_list; 本次设置用户信息的节点对应的mac addr;

  • uint16_t vendor_len; 表示设置用户信息的整体长度。

  • char *vendor_ptr; 为用户自定义字段

3.4.6 获取用户信息

在根节点处调用API接口,获取用户信息,mesh节点收到请求后,汇总节点用户信息返回。

Uart

获取用户信息示意图

3.4.6.1 API说明

API:

bk_err_t bk_wifi_mesh_get_vendor(const bk_wifi_mesh_vendor_t *get_vendor);

必选参数:

  • uint16_t node_num; 表示本次获取用户信息的mesh节点数量;

  • char *node_mac_list; 本次获取用户信息的节点对应的mac addr;

  • uint16_t vendor_len; 表示获取用户信息的长度。

  • char *vendor_ptr; 为用户自定义字段,指定了本次获取的用户信息类型

备注

在调用此API接口之前,需要先调用bk_wifi_mesh_set_api_mode函数设置回调函数以获取用户信息,此API不直接返回结果。

3.4.6.2返回数据格式

Uart

Mesh节点返回消息格式见上图,各参数含义如下:

  • Length:表示Length后面的所有字段的长度

  • Node num:表示返回用户信息的节点数

  • Vendor info result:表示各节点的用户信息

    • Node mac addr – 该节点的mac addr

    • vendor length – 用户信息的长度

    • vendor specific – 用户信息

3.4.7 OTA升级

在根节点处调用API接口,通知OTA升级,根节点收到请求后,通知MESH网络中的所有节点将要开始OTA升级,然后根节点根据ota_type采用不同的方式下载升级固件,并将固件通知给MESH网络中的所有mesh节点。

Uart

OTA升级示意图

3.4.7.1 API说明

API:

bk_err_t bk_wifi_mesh_ota_start(const bk_wifi_mesh_ota_t *ota_cfg);

必选参数:

  • uint8_t ota_type; 表示本次ota升级的类型,1代表云端升级,2代表app升级,3代表串口升级;

  • uint8_t upgrade_type; 表示本次模式,0代表升级全部,1代表升级单个,2代表升级部分;

  • uint16_t node_num; 表示本次ota升级的mesh节点数量;

  • uint8_t * node_mac_list; 表示升级节点的mac地址;

  • char ap_ssid[WIFI_SSID_STR_LEN]; 【ota_type = 2时为必选参数】 ,表示手机热点的ssid;

  • char ap_pw[WIFI_PASSWORD_LEN]; 【ota_type = 2时为必选参数】 ,表示手机热点的pw;

  • uint8_t url_len; 【ota_type为1和2时为必选参数】,代表url长度;

  • char *url_ptr; 【ota_type为1和2时为必选参数】;

备注

1、ota_type为3时,用户通过UART直接将升级固件发送到根节点的OTA分区而非通过url下载固件。

2、可配合3.3.8查询OTA升级进度。

3.4.8 获取OTA状态

在根节点处调用API接口,获取ota升级状态,根节点收到消息后,会返回当前ota状态。

Uart

获取OTA状态示意图

3.4.8.1 API说明

API:

uint8_t bk_wifi_mesh_get_ota_state(void);

3.4.8.2返回数据格式

uint8_t ota_status;

参数含义如下:

  • OTA status:

    • 0表示空闲状态,未在OTA升级;

    • 1表示当前在OTA升级过程中;

    • 2表示rbl下载失败;

    • 3表示未扫描到手机热点,请确认输入热点名称是否正确;

    • 4表示手机热点密码错误,请确认输入热点密码是否正确;

    • 5表示与热点连接失败,请重试;

3.4.9 Reset节点

在需要进行reset操作的节点处调用API接口,通知该节点reset,mesh节点收到reset消息后,会清除falsh并退出mesh网络恢复为空闲节点。

Uart

Reset节点示意图

3.4.9.1 API说明

API:

bk_err_t bk_wifi_mesh_reset_node(const bk_wifi_mesh_reset_node_t *reset_node);

必选参数:

  • uint16_t node_num; 表示本次reset节点的数量;

  • uint8_t * node_mac_list; 表示reset节点的mac地址;

3.4.10 获取节点状态信息

在非网关节点处调用API接口获取节点信息,mesh节点收到消息后,返回节点当前状态信息。

3.4.9.1 API说明

API:

bk_err_t bk_wifi_mesh_status_info(bk_wifi_mesh_status_t *link_status);

返回参数含义:

  • bk_mesh_link_state_t state; 表示节点连接状态,0:空闲节点;1:节点组网中;2:组网完成,加入mesh网络;3:网络恢复中

  • uint8_t level; 表示节点在mesh网络中的层级;

  • uint8_t link_mesh_num; 表示与该节点连接的mesh节点数;

  • uint8_t link_non_mesh_num; 表示与该节点连接的非mesh节点数;

  • uint8_t parent_mac[6]:表示节点连接的父节点的mac地址;