ZigBee协议栈中自带的HomeAutomation例程,虽然也是操作灯泡,但是,是通过ZCL来统一处理的,符合HA profile规范,互连互操作性较好。下面就简要分析以下ZCL的使用。

在任务数组中,多定义了zcl层。

Technorati 标签: ZigBee HA 示例程序
//OSAL_SampleSw.c
const pTaskEventHandlerFn tasksArr[] = {
macEventLoop,
nwk_event_loop,
Hal_ProcessEvent,
#if defined( MT_TASK )
MT_ProcessEvent,
#endif
APS_event_loop,
#if defined ( ZIGBEE_FRAGMENTATION )
APSF_ProcessEvent,
#endif
ZDApp_event_loop,
#if defined ( ZIGBEE_FREQ_AGILITY ) || defined ( ZIGBEE_PANID_CONFLICT )
ZDNwkMgr_event_loop,
#endif
zcl_event_loop,
zclSampleSw_event_loop
};

既然是zcl的事件循环,那就肯定有zcl的初始化函数如下:

//ZCL.c
void zcl_Init( uint8 task_id )
{
zcl_TaskID = task_id; plugins = (zclLibPlugin_t *)NULL;
attrList = (zclAttrRecsList *)NULL;
clusterOptionList = (zclClusterOptionList *)NULL;
}

ZCL层仅仅是指定一个任务号,初始化ZCL的一些全局变量。

要符合HA规范,那么,在填充本地端点描述符时,就要符合相应的要求。其中最重要的是这句话

epDesc->task_id = &zcl_TaskID;   // all messages get sent to ZCL first

这表明,符合HA profile规范的设备,在接收数据时,首先会经过ZCL层的处理。

 

对于一些常用的命令,ZCL已经绑定好命令与其响应回调函数的关系,在通用族库里面已经定义好。

每一个簇包含簇ID和对应的属性。

 

处理收到的数据包ZCL_INCOMING_MSG:

        zclSampleSw_ProcessIncomingMsg,通过commandID来进行不同的处理。

 

处理ZDO的消息函数ZDO_CB_MSG:

       给任务指定End_Device_Bind_rsp 和Match_Desc_rsp 的响应。

        ZDO_RegisterForZDOMsg( zclSampleSw_TaskID, End_Device_Bind_rsp );

             ZDO_RegisterForZDOMsg( zclSampleSw_TaskID, Match_Desc_rsp )

        zclSampleSw_ProcessZDOMsgs,该函数处理在初始化时绑定的ZDO消息请求与响应函数。

 

处理键盘的响应函数KEY_CHANGE:

    zclSampleSw_HandleKeys

           SW_1按键:按下会发送一个切换灯状态的命令

                SW_2按键: 启动终端设备绑定请求,ZDP_EndDeviceBindReq 
                 SW_4按键:协调器按下SW_4,允许绑定请求。ZDP_MatchDescReq

ZigBee HA示例程序分析的更多相关文章

  1. zigbee学习:示例程序SampleApp中通讯流程

    zigbee学习:示例程序SampleApp中通讯流程 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 参考链接: http://wjf88223.bl ...

  2. zigbee学习:示例程序SampleApp中按键工作流程

    zigbee学习:示例程序SampleApp中按键工作流程 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:WIN7 开发环境:IAR8. ...

  3. DotNetBar for Windows Forms 12.7.0.10_冰河之刃重打包版原创发布-带官方示例程序版

    关于 DotNetBar for Windows Forms 12.7.0.10_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版------------- ...

  4. DotNetBar for Windows Forms 12.5.0.2_冰河之刃重打包版原创发布-带官方示例程序版

    关于 DotNetBar for Windows Forms 12.5.0.2_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版-------------- ...

  5. DotNetBar for Windows Forms 12.2.0.7_冰河之刃重打包版原创发布-带官方示例程序版

    关于 DotNetBar for Windows Forms 12.2.0.7_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版-------------- ...

  6. BitCoinJ之Hello World示例程序

    简介 比特币(BitCoin)是一种基于区块链(BlockChain)技术的数字化货币. 本文介绍了使用基于Java语言的BitCoinJ API实现一个简单的收取和支付比特币的示例程序. 开发环境 ...

  7. OSG中的示例程序简介

    OSG中的示例程序简介 转自:http://www.cnblogs.com/indif/archive/2011/05/13/2045136.html 1.example_osganimate一)演示 ...

  8. OSG中的示例程序简介(转)

    OSG中的示例程序简介 1.example_osganimate一)演示了路径动画的使用 (AnimationPath.AnimationPathCallback),路径动画回调可以作用在Camera ...

  9. Android示例程序剖析之记事本(一)

    Android SDK提供了很多示例程序,从这些示例代码的阅读和试验中能够学习到很多知识.本系列就是要剖析Android记事本示例程序,用意就是一步步跟着实例进行动手操作,在实践中体会和学习Andro ...

随机推荐

  1. Repeater的ItemCreated和ItemDataBind的区别

    Repeater 的ItemCreated的事件在第一次调用DataBind方法的时候触发,即在(IsPostBack==false)的时候才调用,当页面回滚是将不是调用该方法(错误的源头).而Ite ...

  2. LINUX ping 指定网卡

    计算机上有多块网卡(例如笔记本电脑的无线网卡和以太网卡)连接至网络,使用ping命令想指定使用哪块网卡怎么办? ping -I eth0 10.10.10.1ping -I eth1 10.10.10 ...

  3. Toad for Oracle 授权权限

    grant create session to 用户;//授予zhangsan用户创建session的权限,即登陆权限 grant dba to 用户; //授权dba权限,导入导出数据 grant ...

  4. maven添加jetty插件

    pom.xml中增加jetty的配置 <properties> <jetty-version>8.1.13.v20130916</jetty-version> &l ...

  5. JavaScript组成

    JavaScript由ECMAScript,Dom,Bom三部分组成. ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufa ...

  6. FVDI Commander products be replaced SVDI tools,really?

    You may have heard that some FVDI Commander products are being replaced by the new SVDI tools. This ...

  7. create feature from text file

    '''---------------------------------------------------------------------------------- Tool Name: Cre ...

  8. My Linux API

    @图形界面与命令行界面切换 Linux预设提供了六个命令窗口终端机让我们来登录.默认我们登录的就是第一个窗口,也就是tty1,这个六个窗口分别为tty1,tty2 … tty6,你可以按下Ctrl + ...

  9. jQuery选择器之表单对象属性过滤选择器Demo

    测试代码: 08-表单对象属性过滤选择器.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

  10. Ajax+JSON学习笔记(二)

    来源:http://www.imooc.com/learn/250 readyState属性 0:请求未初始化,open还没有调用 1:服务器连接已建立,open已经调用了 2:请求已接受,也就是接收 ...