查看: 11239|回复: 9

浅谈Zigbee端点注册afRegister()及相关标准

[复制链接]
mayulin2008 发表于 2012-10-31 16:38:56 | 显示全部楼层 |阅读模式
        话说在这个论坛已经逛了很久了,基本没有发过什么帖子(除了问了些菜鸟问题外),今日手痒发篇帖子。和大师们的各种“浅谈”不同的是,人家那是谦虚,我这篇的确是因为浅薄。个人认为这个论坛是国内气氛最好的,我大多数的ZigBee知识都是从此论坛得来的,而凹凸曼大哥也可以说是国内对ZigBee专研的最深的专家……………………………………………………之一(马屁可不能拍的太过了{:soso_e143:} )。

        凹凸曼大哥在早些时候发表的《奥特曼Zigbee读书日记(四)-- 设备“对话”专题(2)》http://www.feibit.com/forum.php?mod=viewthread&tid=86 中比较详细的介绍了终端注册过程和相关参数设置,但其中关于终端描述的三项参数并未作出解释,打算以后再做补充,因为没见到有相关文章再次进行补充,那我就越俎代庖稍稍补充一下,权当是抛砖引玉了。

        首先,如果我们要使用ZigBee2007/2007PRO等标准协议,且自己写APP时一般都需要使用afRegister()来注册终端应用。其中主要要求你设置Profile ID、EndPoint、DeviceId和DevVer等等,那么这些参数应该怎么设置呢?(对Profile ID、EndPoint没有任何概念的朋友请先去别处恶补一下再来)。
        首先看afRegister()的参数结构:
        typedef struct
        {
           byte endPoint;
           byte *task_id; // Pointer to location of the Application task ID.
           SimpleDescriptionFormat_t *simpleDesc;
           afNetworkLatencyReq_t latencyReq;
        } endPointDesc_t;
   
       第1、2、4项不解释了,尤其第四项latencyReq – This field must be filled with noLatencyReqs。
      再看
       typedef struct
       {
          byte EndPoint;
          uint16 AppProfId;
          uint16 AppDeviceId;
          byte AppDevVer:4;   //注意这是占四个位的意思
          byte Reserved:4;    // AF_V1_SUPPORT uses for AppFlags:4.
          byte AppNumInClusters;
          cId_t *pAppInClusterList;
          byte AppNumOutClusters;
          cId_t *pAppOutClusterList;
        } SimpleDescriptionFormat_t;

        第一项EndPoint:从1-240任你设置,但一般协议栈里面其他一些应用会占用一两个,所以你首先要清楚你的工程里面有几个EndPoint以及ID各是多少,可不能重复了,我想这点算是基本要求。
        第二项AppProfId:好了,说到这就是一个标准的问题了,ZigBee联盟为了达到征服全世界的野心定了n多标准,其中有分为公共标准(public)和特殊制造商标准(manufacturer-specific),其中公共标准现在有:Building Automation、Remote Control 、Smart Energy(SE)、Home Automation等等,而这些标准都有特定的Profile ID,由zigbee联盟制定,至于人家怎么定的不在此文论述范围。例举如下:

// Zigbee SE Profile Identification
#define ZCL_SE_PROFILE_ID                                       0x0109
// Zigbee Home Automation Profile Identification
#define ZCL_HA_PROFILE_ID                                       0x0104

这样你使用特定的Profile ID后别的设备就知道你是什么标准下的应用了。好吧,其实这些别人也都说过了。

        假如你的产品非常之奇特罕见,或者你像乔布斯一样不愿意和别人的产品通用,或者只接受少部分公司的配件,那么你就得花点money向zigbee联盟买个Profile ID。好吧一个惊天的秘密就这样被我随口说出来了,Profile ID才2个字节16个位65536个数字,除去公共的和一些特殊标准,有几个公司有这个钱去买你这个号呀,这不是坑爹嘛。

        第三项~第五项:对了,这就是凹凸曼大哥没有做出解释的三个关键参数,让我来给各位用力捅破,不对,是轻轻点破。如果各位有学过linux设备驱动,该知道什么是设备类型、主设备号以及次设备号吧,这就是这些参数的意义。什么?你没学过,其实我也只是装一下而已。先看看下面这些定义:
     
// SE Device IDs
#define ZCL_SE_DEVICEID_ESP                                       0x0500
#define ZCL_SE_DEVICEID_METER                                  0x0501
#define ZCL_SE_DEVICEID_IN_PREMISE_DISPLAY          0x0502
#define ZCL_SE_DEVICEID_PCT                                      0x0503
#define ZCL_SE_DEVICEID_LOAD_CTRL_EXTENSION     0x0504
#define ZCL_SE_DEVICEID_SMART_APPLIANCE              0x0505
#define ZCL_SE_DEVICEID_PREPAY_TERMINAL              0x0506
#define ZCL_SE_DEVICEID_PHYSICAL                             0x0507

看不明白?那在看:
// Generic Device IDs
#define ZCL_HA_DEVICEID_ON_OFF_SWITCH                           0x0000
#define ZCL_HA_DEVICEID_LEVEL_CONTROL_SWITCH                    0x0001
……
// temp: nnl
#define ZCL_HA_DEVICEID_TEST_DEVICE                             0x00FF

// Lighting Device IDs
#define ZCL_HA_DEVICEID_ON_OFF_LIGHT                            0x0100
#define ZCL_HA_DEVICEID_DIMMABLE_LIGHT                          0x0101
……

// Closures Device IDs
#define ZCL_HA_DEVICEID_SHADE                                   0x0200
#define ZCL_HA_DEVICEID_SHADE_CONTROLLER                        0x0201

// HVAC Device IDs 采暖通风与空气控制 其实就是空调电扇换气扇
#define ZCL_HA_DEVICEID_HEATING_COOLING_UNIT                    0x0300
#define ZCL_HA_DEVICEID_THERMOSTAT                              0x0301
……

// Intruder Alarm Systems (IAS) Device IDs
#define ZCL_HA_DEVICEID_IAS_CONTROL_INDICATING_EQUIPMENT        0x0400
#define ZCL_HA_DEVICEID_IAS_ANCILLARY_CONTROL_EQUIPMENT         0x0401
……
   
        这下看总明白了吧,打个比方:你的产品是一个符合Home Automation的USB 3.0设备,……比方打完了,其实不用我细说大家也知道怎么填了对吧。所以呢这个设备号与版本号依旧是要那个坑爹联盟来定的,至于第五项是保留项,目前不用去理他就是了。
        最后几项非本文重点,请转凹凸曼大哥教程。

        那么是不是一样产品就得符合一个Profile 标准呀?当然不是啦。比如你们公司生产了一台雪花点牌电视机,你想兼容苹果公司造的iSB2微波炉,想让这个微波炉来控制电视机的音量(你说我扯淡了,我做饭时想让把音量调大点不行啊,我还没说用抽油烟机呢,物联网让一切扯淡皆有可能……)。于是你只需在你的电视端建个调音量的EP,且描述成相应标准,这样你就可以规定哪些功能可以兼容公共标准,哪些是你独家使用的了。

        看到这里,我猜很多人不禁想问:尼玛还是没说我们到底改填什么参数,按照什么填啊!?于是俺的回答是:您是爱怎么填怎么填,不填都行。(谁扔的老皮鞋!)
      static endPointDesc_t sampleLight_TestEp =
      {
        20,                                 // Test endpoint
        &zclSampleLight_TaskID,
        (SimpleDescriptionFormat_t *)NULL,  // No Simple description for this test endpoint
        (afNetworkLatencyReq_t)0               // No Network Latency req
      };

      endPointDesc_t ZDApp_epDesc =
      {
        ZDO_EP,
        &ZDAppTaskID,
        (SimpleDescriptionFormat_t *)NULL,  // No Simple description for ZDO
        (afNetworkLatencyReq_t)0               // No Network Latency req
      };
     看吧,人家就是可以不填的嘛。

       总结:终于写到该总结的地方了,有点小激动,因为我终于可以说出憋了很久的话了,那就是:这篇文章目前对你没有任何意义。大侠饶命!听我说完!因为对目前还处在学习阶段的你来说标准啊什么的东西实在太遥远了,国内是不是有正真符合标准化的产品都是问题,反正我是没用过。如果你要搞标准化产品,你首先要去联盟认证,申请入网之类,反正就是要符合一大堆烦人的规定就是了。走到这一步的玩家估计也早过了逛论坛看教程的阶段了。ZigBee的巨大优势就是他的组网标准,企业进入标准化应用是大势所趋,以后不会再像蓝牙设备那样用起来不方便,生产电器的厂家都可以不用费心去生产遥控器了,所有的硬件设施用起来就跟手机上装个应用一般简单!将来zigbee应用会成爆发式增长,zigbee人才的需求会成爆发式增长,zigbee专业技术人员的工资也会成爆发性增长,我的女友也……啊哈哈哈哈哈哈。

       PS:都说是抛砖引玉了,哪位大师发篇认证方面的教程呗,谈谈经验也成啊,或者把设备类型啊版本号那些个参数相关文档发出来也成啊,不胜感激。
outman 发表于 2012-11-6 22:27:10 | 显示全部楼层
实在是该打板子,楼主这么好的贴居然沉在一堆广告里没被审核通过,今天才发现,还好,还好...

楼主真乃人才也,雪花点牌电视{:soso_e120:}
xiemengguilin 发表于 2012-11-13 20:10:47 | 显示全部楼层
哪些网站能下到这些标准?
 楼主| mayulin2008 发表于 2012-11-16 12:52:42 | 显示全部楼层
xiemengguilin 发表于 2012-11-13 20:10
哪些网站能下到这些标准?

zigbee联盟官方网站http://www.zigbee.org/,如果要申请入网肯定能从他们那里得到标准,而且网站上已经挂出了好多的标准产品。具体哪里下还真没找到,估计要直接和工作人员联系的吧。
一月的萧邦 发表于 2012-12-11 09:07:25 | 显示全部楼层
仔细看完了,语言风趣,通俗易通,楼主多发点这样的帖子,让我们多学习学习。
一月的萧邦 发表于 2012-12-11 09:08:28 | 显示全部楼层
还有,楼主,就凭你用“路飞”的头像,我就得狠狠地顶你,我也是海贼迷
racwin0 发表于 2013-6-27 11:09:24 | 显示全部楼层
好文、居然没几个人顶 。。
我的女友也……啊哈哈哈哈哈哈{:soso_e144:}
M2Msxjun 发表于 2013-7-12 12:02:28 | 显示全部楼层
看帖顶帖…………
老人 发表于 2014-6-30 16:40:33 | 显示全部楼层
解析信息的时候在什么地方用到端口号?还没有找到。
laoxiaomage 发表于 2014-7-7 14:02:51 | 显示全部楼层
本帖最后由 laoxiaomage 于 2014-7-7 14:05 编辑

顶一个,好贴,
逛过半年论坛后,我也打造一个类雪花点牌电视机ID,叫烤面包机电冰箱ID,到时候也写篇帖子!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表