首页 理论教育 自动匹配分析及其实现方法

自动匹配分析及其实现方法

时间:2023-06-29 理论教育 版权反馈
【摘要】:首先说明,匹配描述请求是在ZDO层完成的,使用的设备端点即为ZDO设备端点。所谓自动匹配,就和网络中所有的节点,进行簇ID配对,因此地址域应该填写一个广播地址,也就是该数据包能够发送给网络中所有的节点。

自动匹配分析及其实现方法

首先说明,匹配描述请求是在ZDO层完成的,使用的设备端点即为ZDO设备端点。

1.发送匹配描述符请求

(1)dstAddr:目标地址,该地址并不是afAddrType_t 类型,最后在调用无线发送函数时,必须将地址类型进行转换,在发送匹配描述符请求时该地址是一个广播地址,包括:地址模式为AddrBroadcast类型,地址为0xFFFF、0xFFFD、0xFFFC中的一个。

(2)nwkAddr:感兴趣的网络地址,作为数据包的内容进行发送,该地址不会影响数据的接收方。

(3)ProfileID:协议ID。

(4)NumInClusters:输入簇个数。

(5)InClusterList:输入簇列表。

(5)NumOutClusters:输出簇个数。

(7)OutClusterList:输出簇列表。

(8)SecurityEnable:安全使能,没有使用,为无效参数。

所谓自动匹配,就和网络中所有的节点,进行簇ID配对,因此地址域应该填写一个广播地址,也就是该数据包能够发送给网络中所有的节点。

实际上,如果需要正确地匹配到描述符,需要将期望匹配的输出簇填到输入簇列表域(InClusterList)中,期望匹配的输入簇填写到输出簇列表域(OutClusterList)当中,因为匹配是发生在一对互补的簇中,也就是输出簇应该与输入簇配对。(www.xing528.com)

该函数最后调用了fillAndSend函数,而fillAndSend函数调用了AF_DataRequest函数,从函数参数来看,该函数中并没有传递设备描述符相关参数,但是在AF_DataRequest函数中却需要一个端点描述符的参数,该参数是从何得来的呢?查看fillAndSend函数代码:

该函数就是将打包好的数据通过无线的形式发送出去。调用AF_DataRequest函数时,在端点描述符域填写的实参为ZDApp_epDesc,该参数就是在ZDO层注册的端点描述符,也就是ZDO设备对象对应端点描述符。由此可见ZDP_MatchDescReq函数是将无线消息发送到了ZDO层。

2.处理匹配描述符请求

(1)ZDO层接收到无线数据包后, 会产生一个AF_INCOMING_MSG_CMD消息。该消息的处理函数原型如下:

该函数的主要功能包括将消息按指定格式提取出来,并将消息路由到不同函数进行处理:将在ZDO注册过的回调消息转交到回调消息响应部分处理;将指定的簇交由对应函数处理。

(2)处理匹配请求(Match_Desc_req),对应的处理函数相关代码如下:

该函数功能是遍历本设备中注册过的端点描述符,使每个端点描述符的簇列表与无线收到的簇列表进行匹配。即执行以下代码:

依次找到匹配成功的所有端点,之后向发送匹配请求的端点发送反馈消息。其中反馈消息包含了该节点的匹配成功的端点个数和响应端点号,这是发起匹配的节点与该节点通信的重要依据(作为地址信息)。从匹配过程来看,匹配并不是匹配无线收到的所有的簇,而只是配对的簇才返。如果发送匹配的簇有多个,会不知道匹配成功的是哪个簇,因此最好的处理方法是在发送匹配请求时,簇列表中只放一个簇。

3.处理匹配描述符响应消息

应用层注册有匹配描述符响应消息,当无线接收到响应数据包,在应用层会产生一个ZDO_CB_MSG消息。并调用GenericApp_ProcessZDOMsgs函数进行处理,其函数原型如下:

对于匹配描述符响应,调用ZDO_ParseEPListRsp函数对接收到的信息包进行解析,并将解析得到地址信息保存起来,作为通信的依据。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈