二、关于输入输出命令的邦定过程(以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条评论)
登录后参与讨论