ZigBee HA示例程序分析

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

时间: 2024-11-09 09:18:36

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

Android cocos2dx游戏开发——示例程序HelloCpp源码分析

本文通过分析cocos2dx提供的示例程序HelloCpp来分析cocos2dx的启动过程. 我们从HelloCpp.java开始: [java] view plaincopyprint? package org.cocos2dx.hellocpp; import org.cocos2dx.lib.Cocos2dxActivity; import android.os.Bundle; public class HelloCpp extends Cocos2dxActivity{ protecte

Hadoop示例程序wordcount分析

wordcount作为Hadoop的示例程序,其思想很简洁,但也值得去理解 尤其是作为Hadoop菜鸟的我 wordcount程序如下: package com.lcy.hadoop.examples; import java.io.IOException; import java.util.StringTokenizer; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import

(原创)cocos2d-x 3.0 示例代码分析1:AppDelegate

星月最近在用3.0做类似刀塔游戏,第一次用3.0,之前一直只是查查资料,最近发现做一些特定行为需要对3.0一些新的特性了解.所以趁这个机会,把3.0的测试代码过一遍,同时增加注释,希望能对大家有帮助~ 因为项目原因,所以不定期更新~~(小白:借口,继续找借口!) 星月倾心贡献~~~ // AppDelegate.cpp /**************************************************************************** Copyright (

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

关于 DotNetBar for Windows Forms 12.7.0.10_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版---------------------------------------------------------基于 官方原版的安装包 + http://www.cnblogs.com/tracky 提供的补丁DLL制作而成.安装之后,直接就可以用了.省心省事.不必再单独的打一次补丁包了.本安装包和补丁包一样都删除了官方自

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

关于 DotNetBar for Windows Forms 12.5.0.2_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版--------------------------------------------------------- 基于 官方原版的安装包 + http://www.cnblogs.com/tracky 提供的补丁DLL制作而成. 安装之后,直接就可以用了. 省心省事.不必再单独的打一次补丁包了. 本安装包和补丁包一样都删除了

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

Android SDK提供了很多示例程序,从这些示例代码的阅读和试验中能够学习到很多知识.本系列就是要剖析Android记事本示例程序,用意就是一步步跟着实例进行动手操作,在实践中体会和学习Android开发.该系列共有四篇文章,本文是第一篇. 前期准备 搭建开发环境,尝试编写"Hello World”,了解Android的基本概念,熟悉Android的API(官方文档中都有,不赘述). 记事本程序运行界面 先来简单了解下程序运行的效果: 程序入口点 类似于win32程序里的WinMain函数,

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

关于 DotNetBar for Windows Forms 12.2.0.7_冰河之刃重打包版 --------------------11.8.0.8_冰河之刃重打包版---------------------------------------------------------基于 官方原版的安装包 + http://www.cnblogs.com/tracky 提供的补丁DLL制作而成.安装之后,直接就可以用了.省心省事.不必再单独的打一次补丁包了.本安装包和补丁包一样都删除了官方自带

OSG中的示例程序简介

OSG中的示例程序简介 转自:http://www.cnblogs.com/indif/archive/2011/05/13/2045136.html 1.example_osganimate一)演示了路径动画的使用(AnimationPath.AnimationPathCallback),路径动画回调可以作用在Camera.CameraView.MatrixTransform.PositionAttitudeTransform等四种类型的节点上.二)演示了osgSim::OverlayNode

winpcap示例程序采用VC6编译时出错error C2054: expected '(' to follow '_W64'

e:\vehiclesecurity\wpdpack_4_1_2\include\pcap-stdinc.h(80) : error C2054: expected '(' to follow '_W64' e:\vehiclesecurity\wpdpack_4_1_2\include\pcap-stdinc.h(80) : error C2085: 'uintptr_t' : not in formal parameter list e:\vehiclesecurity\wpdpack_4_