z-stack组播如何实现?z-stack组播组地址问题
以前使用z-stack协议栈一直使用点播和广播方式。这两个方式没有问题。
现在刚接触z-stack协议栈组播。看了一下《z-stack Developer's Guids.pdf》和《z-stack API.pdf》两个文档。在文档中介绍设备属于哪个组需要使用aps_AddGroup()函数注册。
我按照第一个pdf中的样例将我的终端节点注册到组ID为0x0002的组中。然后我在协调器中使用AF_DataRequest函数发送一个字符串。发送的地址配置如下:
my_DstAddr.addrMode = (afAddrMode_t)AddrGroup; // 无线发送的源地址
my_DstAddr.endPoint = GENERICAPP_ENDPOINT; // 设置端口号
my_DstAddr.addr.shortAddr = 0x0002; // 无线发送的目的地址
按我的理解。协调器发送的方式为组播发送。发送的地址是0x0002,而我的终端几点也将自己注册到了0x0002的组中。那么节点应该能和协调器广播发送数据一样接收到数据。
问题是!
我的节点根本没有接收到数据。然后我怀疑协调器没有把字符串发送出去。然后我在协调器的代码中打了个断点调试。发现AF_DataRequest函数返回成功,也就是数据发送出去。接着我用sniffer抓了一下数据包,却发现:
在网络层payload上看这个成功发出去的帧type居然是(cmd)命令帧。可是我明明是在APS层发送的字符串。
请问:我怎么设置能实现组播发送呢?是不是配置错了?
以上的问题我解决了。
是我的疏忽。我没有将协调器注册进0x0002的组播组。也就是将上面描述的代码在协调器的APS层任务初始化中再注册一边。
这个问题是解决了。可是我还是不明白。协调器既然没有注册到组播组中,那协调器应该发送失败或者直接发出去。为什么还要同步路由器呢?
这一帧数据具体是什么意思呢?