了解硬件和更多资料可点击:点击了解
新建一个物联网行业交流学习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