一、分析模板demo-winder
回到设备侧开发指导,winder案例工程结构如下:
├── BUILD.gn
├── include
│ ├── code_tab.h // 字母和汉字编码
│ ├── common.h // 设备初始化相关接口
│ ├── defines.h // 通用宏及调试宏定义
│ ├── keypad.h // 按键相关接口
│ ├── led.h // LED等控制相关接口
│ ├── netcfg.h // 无感配网注册相关接口
│ ├── network_config_service.h //无感配网相关头文件。
│ ├── oled.h // OLED 相关接口
│ ├── pwm.h // PWM 相关接口
│ ├── sensor.h // 传感器相关接口
│ └── winder.h // 风扇相关宏定义
├── libs
│ ├── libhilinkadapter_3861.a // 无感配网相关库文件。
│ └── libnetcfgdevicesdk.a // 无感配网相关库文件。
└── src
├── common.c // 设备相关初始化操作
├── keypad.c // 按键驱动模块
├── led.c // LED灯相关控制实现
├── netcfg.c // NAN相关操作和联网动作
├── oled.c // 与OLED 模块相关
├── pwm.c // PWM相关控制实现
├── sensor.c // 传感器相关
└── winder.c // 风扇主函数入口,及相关控制逻辑的实现
找出设备配网依赖,总结如下:
include:
│ ├── netcfg.h // 无感配网注册相关接口
│ ├── network_config_service.h //无感配网相关头文件。
libs:
├── libs
│ ├── libhilinkadapter_3861.a // 无感配网相关库文件。
│ └── libnetcfgdevicesdk.a // 无感配网相关库文件。
src:
├── netcfg.c // NAN相关操作和联网动作
二、配网函数API
我们分析配网相关的几个文件。
① network_config_service.h文件_StartNetCfg()函数:开始配网入口。
DevInfo是配网信息,在netcfg.c中引用如下:
const char *g_ssid = "SmartFan ";
const char *g_pinCode = "11111111";
const char *g_productId = "1";
const char *g_sn = "0123/.,.,4567890123450123456789012345";
···
devInfo[0].key = "productId";
devInfo[1].key = "sn";
devInfo[0].value = g_productId;
devInfo[1].value = g_sn;
ret = StartNetCfg(devInfo, DEVICE_INFO_NUM, NETCFG_SOFTAP_NAN); //SoftAP and NAN模式
② netcfg.h文件 -NetCfgRegister()函数: 进入配网状态并注册网络监听事件,在主函数入口调用。
在winder工程调用如下:
③ netcfg.c RecvRawData()函数-接收数据。
在winder工程中,使用注册回调函数的形式接收数据。如下:
三、新建smart_fan工程
分析完winder demo设备侧代码,我们新建一个smart_fan工程,引入配网依赖,新建业务代码。
1、依赖库拷贝
在app目录下新建一个文件夹smart_fan,将winder工程中的BUILD.gn、libs、include、src拷贝到该目录下,只保留需要的几个文件,同新建smart_fan.c文件,工程架构如下:
├── BUILD.gn
├── include
│ ├── defines.h // 通用宏及调试宏定义
│ ├── netcfg.h // 无感配网注册相关接口
│ ├── network_config_service.h //无感配网相关头文件。
├── libs
│ ├── libhilinkadapter_3861.a // 无感配网相关库文件。
│ └── libnetcfgdevicesdk.a // 无感配网相关库文件。
└── src
├── netcfg.c // NAN相关操作和联网动作
└── smart_fan.c // 风扇主函数入口,及相关控制逻辑的实现
复制
2、业务代码
接下来我们在smart_fan.c中编写业务代码,实现配网、接收数据。
//接收数据
char app_msg[20] = {0};
static void WinderProcessAppMessage(const char *data, int data_len)
{
if (strcpy(app_msg, data) != 0)
{
WINERR("strncpy_s failed! \n");
return;
}
printf("app_msg %s\r\n",app_msg);
}
//NetEvent回调函数
static int WinderNetEventHandler(NET_EVENT_TYPE event, void *data)
{
switch (event)
{
case NET_EVENT_CONNECTTED: // 网络连接成功
printf("connect net successful"); // 显示网络已连接
break;
case NET_EVENT_RECV_DATA: // 接收到网络信息(FA发送的消息)
WinderProcessAppMessage((const char *)data, strlen(data)); // 处理对应的信息
break;
default:
break;
}
return 0;
}
static void *WinderTask(const char *arg)
{
(void)arg;
WINDBG("WinderTask Enter! \n");
NetCfgRegister(WinderNetEventHandler); // 进入配网状态并注册网络监听事件
}
3、编译烧录
修改BUILD.gn文件,正常编译烧录即可。
四、配网测试
烧录成功后,碰一碰进行配网,串口会输出北向开发APP发出的对应数据。如下:
小结
本节我们完成了smart_fan设备侧的配网开发,目前能实现配网。下一节我们编写业务代码,并演示【HarmonyOS Connect设备开发-个人】最终的成果。