Netmgr 是AliOS Things的网络管理模块,主要管理设备连网操作。目前支持两种网络:蜂窝(Cellular)网络和Wi-Fi网络。

蜂窝网络

使用者通过调用相关API,完成入网及获取IP的功能。

Wi-Fi网络

使用者通过调用相关的API,完成连接指定Wi-Fi,获取IP的功能,或者启动Wi-Fi配网功能。

API

netmgr的主要API如下表所示:

API API说明 Wi-Fi Cellular
netmgr_init 初始化 Y Y
netmgr_deinit 反初始化 Y Y
netmgr_start 启动 Y Y
netmgr_connect 连接指定网络 Y N
netmgr_stats 获取网络参数 Y Y

事件监听

使用aos_register_event_filter函数通过注册回调函数来监听Cellular/Wi-Fi的获取IP事件。

int aos_register_event_filter(uint16_t type, aos_event_cb cb, void *priv);
			
其中type事件类型(type)以及获取IP的事件码(code)信息如下:
/* WiFi event */
#define  EV_WIFI                  0x0002
#define  CODE_WIFI_ON_GOT_IP      5

/* cellular event */
#define  EV_CELLULAR                  0x0005
#define  CODE_CELLULAR_ON_GOT_IP      5

回调函数的定义如下,当有事件触发的时候,可以从event里读出当前的事件类型(type)以及对应的事件码(code)

typedef void (*aos_event_cb)(input_event_t *event, void *private_data);

使用

添加组件

输入aos make menuconfig进入如下界面:

选择Network:

选择Config Network Interface Types来选择网络类型:

选择Wi-Fi/Cellular,保存退出。

包含头文件

#include "netmgr.h"

使用示例

启动Wi-Fi配网

static void wifi_service_event(input_event_t *event, void *priv_data)
{
    if (event->type != EV_WIFI) {
        return;
    }

    if (event->code != CODE_WIFI_ON_GOT_IP) {
        return;
    }
    
    // add application start logic here
}

void start_netmgr(void) {
    netmgr_init();
    aos_register_event_filter(EV_WIFI, wifi_service_event, NULL);
    netmgr_start(true);
}

直接连接W-iFi

void start_netmgr(void)
{
    netmgr_init();
    netmgr_connect("Test_WiFi", "123456", 10000);
}

蜂窝网络连接

void start_netmgr(void)
{
    netmgr_init();
    netmgr_start(false);
}

API详情

netmgr_init

初始化netmgr模块

函数原型

int32_t netmgr_init(void);

参数列表

参数名称 参数描述 参数示例

返回参数

0,成功

小于0, 失败

备注

在蜂窝网络场景下,初始化变量,及注册网络相关事件处理函数。网络相关事件具体包括:建立连接,断开连接,或得到IP。

在Wi-Fi网络场景下,初始化变量,注册网络相关事件处理函数,读取存储在flash上的SSID和Password,注册Wi-Fi配网方法。

netmgr_deinit

反初始化netmgr

函数原型

void netmgr_deinit(void);

参数列表

参数名称 参数描述 参数示例

返回参数

备注

释放相关申请资源。

netmgr_start

启动netmgr

函数原型

int32_t netmgr_start(bool autoconfig);

参数列表

参数名称 参数描述 参数示例
autoconfig 是否自动发起Wi-Fi配网

返回参数

0,成功

小于0, 失败

备注

在蜂窝网场景下,该函数可以不做调用。

在Wi-Fi场景下,当传输参数autoconfig是false,检查flash是否存有合法SSID和Password。如果有,则开始连接,否则不做任何操作。当传入参数autoconfig是true,检查flash是否存有合法SSID和Password。如果有,则开始连接,否则开始W-iFi配网流程。

netmgr_connect

连接网络

函数原型

int32_t netmgr_connect(const char *ssid, const uint8_t *password, uint32_t timeout);

参数列表

参数名称 参数描述 参数示例
ssid Wi-Fi SSID aliyun
password 密码 12345678
timeout 超时时间 100

返回参数

0,成功

-1, 入参错误

-2,连接超时

备注

该API只在Wi-Fi网络场景下使用。根据传入的SSID和Password,在指定的时间内(timeout)连接Wi-Fi。

netmgr_stats

获取网络统计信息,现在主要是IP地址。

函数原型

void netmgr_stats(int32_t interface, netmgr_stats_t *stats);

参数列表

参数名称 参数描述 参数示例
interface 网卡名字 eth1
stats 网卡统计信息 123456

返回参数

备注

#define IP_STR_SIZE 32
typedef struct netmgr_stats_s {
    bool ip_available;
    char ip[IP_STR_SIZE];
} netmgr_stats_t;

命令行CLI

启动网络连接

netmgr start

Wi-Fi场景会连接存储在flash中的SSID/PASSWORD,如果没有存储有效SSID/PASSWORD,则启动Wi-Fi配网流程。

清除存储的SSID/PASSWORD

netmgr clear

获取网络参数

netmgr stats

连接指定SSID/PASSWORD

netmgr connect SSID PASSWORD