输入输出命令的邦定过程及数据发送

来源:郑州新双恒信息技术有限公司  www.zigbee-sh.cn  尊重原创

作者:幻  
日期:2009-3-23

一、EP的注册
注册endPoint时的结构(要想绑定或直接点对点传送数据必须先注册endPoint)
typedef struct
{
  byte endPoint;  //EP号
  byte *task_id;  // 指向任务编号的指针.
  SimpleDescriptionFormat_t *simpleDesc;  //设备的简单描述
  afNetworkLatencyReq_t latencyReq;      //枚举具体含义和作用未知
} endPointDesc_t;
//设备的简单描述结构
typedef struct
{
  byte    EndPoint;             //EPID
  uint16  AppProfId;            // Profile ID
  uint16  AppDeviceId;          // Device ID
  byte    AppDevVer:4;         // Device Version
  byte    Reserved:4; //AF_V1_SUPPORT uses for AppFlags:4. Reserved
  byte    AppNumInClusters;    //输入命令个数
  cId_t   *pAppInClusterList;    //输入命令列表
  byte    AppNumOutClusters;   //输出命令个数
  cId_t   *pAppOutClusterList;   //输出命令列表
} SimpleDescriptionFormat_t;
注:
    猜想,如果想要不同设备的EP有邦定关系,那么Profile ID必须相等,Device ID、Device Version可以根据不同类型设备进行赋值,发出数据的设备应对输出命令个数及列表赋值,接收命令的设备应对输入命令个数及列表赋值,并且命令号要相同.
疑问:1、如果想对输入输出命令进行邦定那么EP是否必须相同,Profile ID是否必须相同。

二、关于输入输出命令的邦定过程(以simple为例)
1、调用zb_BindDevice(TRUE, TOGGLE_LIGHT_CMD_ID, NULL) ;
2、调用ZDO_AnyClusterMatches(…)检测是输入还是输出命令
3、调用ZDP_MatchDescReq(…)来填充ZDP_TmpBuf数据区
4、调用fillAndSend(…)函数向ZDApp_epDesc(ZDO管理实体)发送clusterID=Match_Desc_req
数据为ZDP_TmpBuf的一帧数据。
5、目的设备收到该帧数据后生成ZDAppTaskID任务的AF_INCOMING_MSG_CMD事件。
6、调用ZDP_IncomingData(…)函数,在函数中调用ZDO_ProcessMatchDescReq(…)函数。
7、ZDO_ProcessMatchDescReq(…)函数产生ZDO_MATCH_DESC_RSP_SENT事件并且调用ZDP_MatchDescRsp(…)函数。
8、ZDP_MatchDescRsp函数实际上是执行ZDP_EPRsp(…)函数。
9、ZDP_EPRsp(…)函数向ZDApp_epDesc(提出邦定请求的设备)发送clusterID=Match_Desc_rsp数据为ZDP_TmpBuf的一帧数据。
10、请求设备收到该帧数据后生成ZDAppTaskID任务的AF_INCOMING_MSG_CMD事件。
11、调用ZDP_IncomingData(…)函数,在函数中调用ZDO_SendMsgCBs(…)函数。
12、ZDO_SendMsgCBs函数会生成sapi_TaskID的ZDO_CB_MSG事件,进而执行SAPI_ProcessZDOMsgs(…)函数中的Match_Desc_rsp选项。
注:邦定时发送的一帧数据中clusterID好象是栈本身定义的为Match_Desc_req。Profile ID为ZDO_PROFILE_ID(因为ZDApp_epDesc的SimpleDescriptionFormat_t为NULL)
疑问:
    1、clusterID是否可以自己定义,如何定义,如果是栈本身定义那标准从那得到。
    答:在2006协议的2.4.3.1中对特殊的clusterID有个列表有定义

三、关于输入命令邦定后数据的发送
1、 发送参数中afAddrType_t *dstAddr如下:
                                       dstAddr.addrMode = afAddrNotPresent;
                                       dstAddr.endPoint = 注册的EP号;
                                       dstAddr.addr.shortAddr = 可以忽略;
endPointDesc_t *srcEP 为注册的EP描述
uint16 cID           为注册的命令号如TOGGLE_LIGHT_CMD_ID
    其它参数正常 
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值