z-stack中的寻址
为了在网络中发送数据到一个设备,应用层一般用AF_DataRequest()函数。而被发送的目的设备的地址
类型afAddrType_t被定义在“ZComDef.h”中:
typedef struct
{
union
{
uint16 shortAddr;
ZLongAddr_t extAddr;
} addr;
byte addrMode;
} zAddrType_t;
地址模式参数
注意:除这个网络地址之外,地址模式参数也需要被指定。目的地址模式可能是如下值之一(AF地址模式被定义在“AF.h”中):
typedef enum
{
afAddrNotPresent = AddrNotPresent,
afAddr16Bit = Addr16Bit,
afAddrGroup = AddrGroup,
afAddrBroadcast = AddrBroadcast
} afAddrMode_t;
地址模式参数是需要的,因为在ZB中,数据包能被点传输、多点传输或者广播传输。点传输被发送到单个设备,多点传输一定发送到一组设备,广播传输一般被发送到网络中的所有设备。如下是更详细的说明。
点到传输 (Unicast)
这是标准地址模式,被用于发送一个数据包到网络中单个已知地址的设备。这个addrMode参数被设置为Addr16Bit,目的网络地址在数据包中一同被发送。
间接寻址
数据包中的最终目的地址不识别的时候使用。该模式被AddrNotPresent设置,而且目的地址没有被指定。代替目的地址的是:一个存储在发送设备协议栈的“绑定表格”,该表格中有被绑定设备的地址。这个特性被调用是源于绑定。(看后面关于绑定部分)
当被发送的信息包下载到协议栈时,从这个绑定表格中寻找使用的目的地址。然后该信息包被有规则的处理为点对点数据包。如果有多个(大于1)目的地址在绑定表格中被发现,那么该数据包将被拷贝成对应的份数分别发送给他们。
在(ZigBee04)版本之前,在协调器中有一个存储绑定表格的选项。因此,发送设备发送数据包到这个协调器,然后协调器在它的绑定表格中查找最终的目的地址,对数据包进行在一次发送。该选项特性在协调器绑定被调用
广播传输
该模式在应用层想发送一个数据包到所有网络中的所有设备时被使用。该地址模式被AddrBroadcast被设置,目的地址被设置为下列值之一:
NWK_BROADCAST_SHORTADDR_DEVALL (0xFFFF)-信息将被发送到网络中的所有设备(包括休眠的设备)。对于休眠的设备,这个信息将被保持在它的父节点,直到该休眠设备获得该信息或者该信息时间溢出(在f8wConfig.cfg 中的NWK_INDIRECT_MSG_TIMEOUT选项)。
NWK_BROADCAST_SHORTADDR_DEVRXON (0xFFFD) –该信息将被发送到网络中有接收器并处于IDLE(RXONWHENIDLE)状态下的所有设备。也就是说,除了休眠模式设备的所有设备。
NWK_BROADCAST_SHORTADDR_DEVZCZR (0xFFFC) –该信息被发送到所有路由器(包括协调器)。
组地址
该模式用于应用层想发送一个数据包到一个设备组的时候。该地址模式被afAddrGroup设置这个组标志符。 用该特性之前,在网络中,组不得不被定义[看ZStack API文档中的] aps_AddGroup()
注意:组能与间接寻址一起结合使用。该目的地址在绑定表格中发现,可以作为点对点或一个组地址。也要注意广播地址可以当作是组被提前设置,一个简单的组寻址的特例,。
例子代码对于一个设备添加它自己到一个组标志符1:
aps_Group_t group;
// Assign yourself to group 1
group.ID = 0x0001;
group.name[0] = 0; // This could be a human readable string
aps_AddGroup( SAMPLEAPP_ENDPOINT, &group );
重要设备地址
一个应用可以能想知道它自身和父节点的地址,用下面的函数可以得到设备的地址(被定义在ZStack API文档中):
NLME_GetShortAddr() – 返回该设备的 16 位网络地址
NLME_GetExtAddr() –返回该设备的64 位扩展地址.
用下面的函数可以得到该设备的父节点的地址(被定义在ZStack API文档中)。注意该函数在协调器中不被涉及到,但是被设备父节点代替(MAC协调器):
NLME_GetCoordShortAddr() – returns this device’s parent’s 16 bit short address.
NLME_GetCoordExtAddr() – returns this device’s parent’s 64 bit extended address.
先介绍这两个概念:节点和地址。其余的就改天继续!