zigbee深入篇——优化ZStack协调器工程结构

了解硬件和更多资料可点击:点击了解

新建一个物联网行业交流学习QQ群,感兴趣可加:928840648

=========================CUT=========================

*** 本章学习目的 ***

1)优化出专门为协调器打造的工程结构。

2)实现第1章串口通信协议。

工程结构

我们将ZStack放在ZBProject目录下,优化后的工程结构如下:

APPs存放我们自己的应用代码。

Components方案商的组件。

Libraries方案商的库文件。

Projects存放工程文件目录。

我们可以在Projects中直接打开工程:

整个Projects目录结构如下:

category:存放不同设备类型的工程文件,比如协调器,智能插座,传感器等等,最终输出的烧录文件在Exe目录中。

tools存放工程工具文件,后期会讲到,涉及一些参数的配置。

settings: 存放工程设置文件。

其它的目录主要是工程文件存放的地方,非重点。

打开工程后:

其中APPs对应的源码在工程目录APPs中可以找到。

zb_msg.h 及 zb_msg.c 完成串口通信以及协议解析的功能。

zb_category.h 及 zb_category.c 是针对zb_msg的消息应用内容进行处理,同时也是上层访问zb_msg的中间通路,从而实现解耦。

zcl_coordinator是协调器应用逻辑代码,是和zigbee协议相关的部分。

应用框架详解

2.2.1 框架说明

目前应用代码的内容不多,基本就是zbmsg完成串口通信的协议处理,然后把处理后的应用数据交给分类器Category进行分发处理,这个架构的优点在于很好解耦不同的功能,比如以后我们要新增加一个温湿度传感器的应用逻辑,可以在Category进行调度,如下:

再比如我们把外部Flash用做database功能,那么访问database时必须由category进行统一调度,同时还可以抽象出设备管理等功能。

2.2.2 zbmsg

受限于计算能力和存储大小,我们不能使用C++来编写应用;因此我们使用C语言来做对象编程,从zb_msg.h入手:

结构体指针变量zbmsg_类似于c++中的单例模式,我们可以通过zbmsg_指针来访问函数: init,send;显然在结构体zb_msg_t中存放的是函数指针变量,然后我们在zb_msg.c源码中进行赋值:

zbmsg中有一个重要的函数如下, zb_msg_handler:

这个函数主要就是对接收到的串口数据进行协议分析,最终把应用数据提取出来,通过zbcategory_转走,显然zbcategory_也是一种面向对象的设计思路,有一组成员函数可以使用,比如图中调用到的on_host_msg函数。

zb_msg设计很精简,大家可以自行浏览代码哈~

2.2.3 zbcategory

很显然,在zb_category.h中我们可以看到一样的定义方式,zb_category_t结构体承载着成员函数,目前zb_category并没有实际的功能,后续补充~

=========================CUT=========================

了解硬件和更多资料可点击:点击了解

新建一个物联网行业交流学习QQ群,感兴趣可加:928840648

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值