ZigBee协议栈(3)-- Z-Stack寻址(Addressing in z-stack)

时间:2022-07-28 16:08:58

为了像一个在ZigBee网络中的设备发送数据,应用程序通常使用AF_DataRequest()函数。数据将要发送给一个afAddrType_t(在ZComDef.h中定义)类型的目标设备。

注意,除了网络地址之外,还要制定地址模式参数。目的地址模式可以设置为以下几个值:
typedef enum
{
afAddrNotPresent = AddrNotPresent,
afAddr16Bit = Addr16Bit,
afAddrGroup = AddrGroup,
afAddrBroadcast = AddrBroadcast
} afAddrMode_t;

因为在ZigBee中,数据包可以单点传送(unicast),多点传送(multicast)或者广播传送,所以必须有地址模式参数

1. 单点传送(Unicast)
是标准寻址模式,它将数据包发送给一个已经知道网络地址的网络设备。将afAddrMode设置为Addr16Bit并且在数据包中携带目标设备地址。

2. 间接传送(Indirect)
当应用程序不知道数据包的目标设备在那里的时候使用的模式。将模式设置为AddrNotPresent并且目标地址没有指定。取代他的是从发送设备的栈的绑定表中查找目标设备。这种特点称之为源绑定。
当数据向下发送到达栈中,从绑定表中查找并且使用该目标地址。这样,数据包将被处理成为一个标准的单点传送数据包。如果在绑定表中找到多个设备,则向每个设备都发送一个数据包的拷贝。

3. 广播传送(broadcast)
需要将数据包发送给网络的每一个设备时,使用这种模式。地址模式设置为AddrBroadcast。目标地址可以设置为下面广播地址的一种:
NWK_BROADCAST_SHORTADDR_DEVALL(0xFFFF)--数据包将被传送到网络上的所有设备,包括睡眠中的设备。对于睡眠中的设备,数据包将被保留在其父节点知道查询到它,或者消息超市(NWK_INDIRECT_MSG_TIMEOUT 在 f8wConfig.cfg中)。
NWK_BROADCAST_SHORTADDR_DEVRXON(0xFFFD)--数据包将被传送到网络上所有在空闲时打开接受的设备(RXONWHENIDLE),也就是说,除了睡眠中的所有设备。
NWK_BROADCAST_SHORTADDR_DEVZCZR(0xFFFC)--数据包发送给所有的路由器,包括协调器。

4. 组寻址(Group Addressing)
当需要将数据包发送给网络上的一组设备时,使用该模式地址模式设置为 afAddrGroup 并且 addr.shortAddr 设置为组ID。
在使用这个功能之前,必须在网络中定义组。

注意:组可以用来关联间接寻址。在绑定表中找到的目标地址肯能是单点传送或者是一个组地址,另外广播发送可以看作是一个组寻址的特例。

5. 重要设备地址(Important Device Addresses)
应用程序可能需要知道他的设备地址和父地址。使用下面的函数获取设备地址(在ZStack API中定义):


       
  • NLME_GetShortAddr() - 返回被设备的16位网络地址

  •    
  • NLME_GetExtAddr() - 返回本设备的64位扩展地址


使用下面的函数获取该设备的父亲设备的地址:

       
  • NLME_GetCoordShortAddr() - 返回本设备的父亲设备的16位网络地址

  •    
  • NLME_GetCoordExtAddr() - 返回本设备的父亲设备的64位扩展地址