zigbee zcl规范及其协议栈实现2   中有介绍 对通用命令的处理,按照那个思路和信息流程添加读取服务器端属性值的功能
客户端samplesw想要知道与自己的12号端点SAMPLESW_ENDPOINT 绑定的那个节点samplelight(的13号端点)的硬件版本和厂商名字,这两个属性zcl都有规定,
属于zcl general 的ZCL_CLUSTER_ID_GEN_BASIC
A
1.首先服务器samplelight端需要配置这个属性,代码中已经写过,位于
函数zclSampleLight_Init里注册了属性表,
zcl_registerAttrList( SAMPLELIGHT_ENDPOINT, SAMPLELIGHT_MAX_ATTRIBUTES, zclSampleLight_Attrs );
属性表zclSampleLight_Attrs 配置了属性ATTRID_BASIC_ZCL_VERSION和ATTRID_BASIC_MANUFACTURER_NAME,属于ZCL_CLUSTER_ID_GEN_BASIC
  {
    ZCL_CLUSTER_ID_GEN_BASIC,
    { // Attribute record
      ATTRID_BASIC_ZCL_VERSION,
      ZCL_DATATYPE_UINT8,
      ACCESS_CONTROL_READ,
      (void *)&zclSampleLight_ZCLVersion
    }
  },
  {
    ZCL_CLUSTER_ID_GEN_BASIC,
    { // Attribute record
      ATTRID_BASIC_MANUFACTURER_NAME,
      ZCL_DATATYPE_CHAR_STR,
      ACCESS_CONTROL_READ,
      (void *)zclSampleLight_ManufacturerName
    }
  },

2. InClusters里必须添加对clusterid ZCL_CLUSTER_ID_GEN_BASIC的支持
#define ZCLSAMPLELIGHT_BINDINGLIST       2
static cId_t bindingInClusters[ZCLSAMPLELIGHT_BINDINGLIST] =
{
  ZCL_CLUSTER_ID_GEN_ON_OFF,
  ZCL_CLUSTER_ID_GEN_BASIC
};

3 .在申请绑定搞定的时候,使用bindingInClusters作为参数,代码中已经实现

ZDP_EndDeviceBindReq( &dstAddr, NLME_GetShortAddr(),
                           SAMPLELIGHT_ENDPOINT,
                           ZCL_HA_PROFILE_ID,
                           ZCLSAMPLELIGHT_BINDINGLIST, bindingInClusters,
                           0, NULL,   // No Outgoing clusters to bind
                           TRUE );

B
1.客户端samplesw使用与服务器对应的cluster列表
#define ZCLSAMPLESW_BINDINGLIST      2
static cId_t bindingOutClusters[ZCLSAMPLESW_BINDINGLIST] =
{
  ZCL_CLUSTER_ID_GEN_ON_OFF,
  ZCL_CLUSTER_ID_GEN_BASIC
};
2.在申请绑定的时候使用bindingOutClusters作为参数,代码中已经实现
    dstAddr.addrMode = afAddr16Bit;
    dstAddr.addr.shortAddr = 0;   // Coordinator makes the match
    ZDP_EndDeviceBindReq( &dstAddr, NLME_GetShortAddr(),
                           SAMPLESW_ENDPOINT,
                           ZCL_HA_PROFILE_ID,
                           0, NULL,   // No incoming clusters to bind
                           ZCLSAMPLESW_BINDINGLIST,bindingOutClusters,
                           TRUE );
3.在某个地方执行以下代码,即申请读取zclSampleSw_DstAddr的下面两个属性 (zcl_SendRead()中会自动指定ZCL_FRAME_TYPE_PROFILE_CMD)
   zclReadCmd_t readcmd;
   ZStatus_t st;
   readcmd.numAttr=2;
   readcmd.attrID[0]=ATTRID_BASIC_ZCL_VERSION;
   readcmd.attrID[1]=ATTRID_BASIC_MANUFACTURER_NAME;
   st= zcl_SendRead( SAMPLESW_ENDPOINT, &zclSampleSw_DstAddr,
                               /*ZCL_CLUSTER_ID_GEN_ON_OFF*/ZCL_CLUSTER_ID_GEN_BASIC,  &readcmd,
                               ZCL_FRAME_CLIENT_SERVER_DIR,  false, 0 );

C
服务器会收到信息,触发zclCmdTable[ZCL_CMD_READ]函数即zclProcessInReadCmd函数,此函数自动读取相关属性返回给客户端,通过函数zcl_SendReadRsp(),命令是ZCL_CMD_READ_RSP

D
客户端,samplesw收到信息后触发zclCmdTable[ZCL_CMD_READ_RSP]函数即zclSendMsg函数,此函数会将这个消息以ZCL_INCOMING_MSG事件发给上层任务去处理,前提是上层任务使用zcl_registerForMsg注册过,而在samplesw在init中已经注册过。

在客户端,samplesw任务中处理之
        case ZCL_INCOMING_MSG:
          // Incoming ZCL Foundation command/response messages
          zclSampleSw_ProcessIncomingMsg( (zclIncomingMsg_t *)MSGpkt );->zclSampleSw_ProcessInReadRspCmd
          break;

//属性返回处理
static uint8 zclSampleSw_ProcessInReadRspCmd( zclIncomingMsg_t *pInMsg )
{zclReadRspCmd_t *readRspCmd;uint8 i;readRspCmd = (zclReadRspCmd_t *)pInMsg->attrCmd;for (i = 0; i < readRspCmd->numAttr; i++){uint8 str[6];// Notify the originator of the results of the original read attributes// attempt and, for each successfull request, the value of the requested// attribute/*if(i==0){uint8  ii=*readRspCmd->attrList[i].data;_itoa(ii,str,10);HalLcdWriteString(str,2);}*/if(i==1){uint8* pp=readRspCmd->attrList[i].data;HalLcdWriteString(pp,2);}}return TRUE;
}

转载于:https://www.cnblogs.com/-song/archive/2013/03/17/3331816.html

zigbee zcl规范及其协议栈实现3 读取服务器端属性值相关推荐

  1. (转载)ZigBee zcl规范及其协议栈实现1

    zigbee zcl规范及其协议栈实现1 http://www.cnblogs.com/-song/archive/2013/03/16/3331818.html refer to ZigBee_Cl ...

  2. (转载)zigbee zcl规范及其协议栈实现2

    zigbee zcl规范及其协议栈实现2   中有介绍 对通用命令的处理,按照那个思路和信息流程添加读取服务器端属性值的功能 客户端samplesw想要知道与自己的12号端点SAMPLESW_ENDP ...

  3. zigbee zcl规范及其协议栈实现2

    对通用命令的处理: 对zcl的通用命令的响应,zcl自己已经实现,比如读取某个clusterid的某个属性值,应用只需将这个属性设置好即可, 通用命令包括,zcl.h /*** Foundation ...

  4. zigbee zcl规范及其协议栈实现1

    refer to ZigBee_Cluster_Library_Public_download_version 1.zcl 分为几个不同的功能领域, 每个领域霸占一部分clusterid 比如通用领域 ...

  5. jpg读取exif属性值

    项目在开发过程中,需要读取JPG影像中的exif的GPS,相机参数,影像大小等参数,根据exif属性的格式定义,解析所需要信息的字段,成功提取内容. Exif 编辑 Exif是一种图像文件格式,它的数 ...

  6. C++ AO读取shapefile的属性值

    C++ AO读取一个shapefile文件的所有属性值     #include "stdafx.h"     #include "iostream.h"   ...

  7. ZigBee 3.0理论教程-通用-1-09:ZCL规范与Cluster

    [源码.文档.软件.硬件.技术交流.技术支持,入口见文末] [所有相关IDE.SDK和例程源码均可从群文件免费获取,免安装,解压即用] 持续更新中,欢迎关注! 一.ZCL规范 (待补充) 二.Clus ...

  8. 【Zigbee】Zigbee ZCL report command 相关翻译

    #ZIGBEE CLUSTER LIBRARY SPECIFICATION #Chapter 2 Foundation Specification (基础规范) ##2.4 General Comma ...

  9. ZigBee无线传感器的网络协议栈

    小结: Z-Stack协议栈 = OSAL操作系统 + CC2530硬件模块 + AF无线网络应用 协议定义的是一系列的通信标准,通信双方需要共同按照这一标准进行正常的数据收发;协议栈是协议的具体实现 ...

最新文章

  1. 2021年大数据Spark(二十七):SparkSQL案例一花式查询和案例二WordCount
  2. Android开发常用属性
  3. 最萌算法学习来啦,看不懂才怪!
  4. 一周图趣(2019.01.07-2019.01.13)
  5. hihocoder1718 最长一次上升子序列
  6. 第五章 处理器拦截器详解——跟着开涛学SpringMVC
  7. 大牛书单 | 读书日,他们最近看了这些书
  8. 10tb服务器硬盘 选购,2017最靠谱大容量机械硬盘选购指南(基于Backblaze硬盘寿命可靠性报告)...
  9. Git之pull后回退版本
  10. python 指针指向的内容,python-文件的读取及指针位置
  11. centOS配置国内镜像
  12. Notepad++格式化JSON
  13. Hadoop_10_HDFS 的 DataNode工作机制
  14. hdu 4640 Island and study-sister(状态压缩dp)
  15. 关于Android中为什么主线程不会因为Looper.loop()里的死循环卡死?引发的思考,事实可能不是一个 epoll 那么 简单。...
  16. 【C++函数】strcat()
  17. aop面向切面编程(aspectJweaver)
  18. 各国国家语言缩写与中文对应表 JAVA工具类
  19. addr2line的使用
  20. python(蟒蛇)三大控制流程语句

热门文章

  1. 安装centos 6.7
  2. 兼容性好的overflow CSS清除浮动一例
  3. ASP.NET文件下载
  4. 更新:让UpdatePanel支持上传文件
  5. WebKit如何加载web页面
  6. Python报错:UnicodeDecodeError:‘ascii‘ codec can‘t decode byte 0xe8 in position
  7. mongo占用内存过大解决方案
  8. HDU 5968 异或密码(区间dp)
  9. Android开发之IPC进程间通信-AIDL介绍及实例解析
  10. linux动态链接库