设置RFD_RCVC_ALWAYS_ON=TURE导致终端无法接收单播数据经验总结和疑惑

我把 f8wConfig.cfg文件中

-DRFD_RCVC_ALWAYS_ON 设置为 TURE

这样当有群组或广播消息时,由于接收机是一直打开着的,终端就可以马上接收到该消息,
而不需要发送data.request到父节点查询是否有发送给自己的数据.这个方法虽然增加了
终端的功耗,但是能达到网络中多有设备接收到组播消息时能同时动作的效果....

但是我发现当我这样设置的后,使发送方与接收方中间放置一个路由器,并确保发送方信号
无法直接到达到发送端,问题就来了.(所有节点使用的配置文件都是同一个f8wConfig.cfg文件)

我发送组播消息,接收方能接收得到,但是发送单播 消息时,接收方却无法接收到了!

组播消息路由器不会保存,而是直接转发,所以终端就能接收的到数据.这很好理解.单播无法接收我猜想是由于上级路由虽然接收到了发送给子节点的消息但是他不是立即发送给终端的,而是由终端发送data.request命令给给该路由,路由器再转发该数据包给终端,
设置后用协议分析仪看了终端发送出来的数据包,发现终端确实没有发送data_request,所以导致了终端无法接收到单播数据.   



看过了代码,
在文件ZDConfig.c中
图片1.png 

可以看到在终端类型的节点功能描述域使能了
CAPINFO_RCVR_ON_IDLE


继续跟踪CAPINFO_RCVR_ON_IDLE



在函数
图片2.png 


  函数中有事件类型为
图片3.png 

的分支.该分支中对节点功能域进行了判断和处理


图片4.png
2012-4-13 11:03:42 上传
下载附件 (4.96 KB)





可以发现,由于CAPINFO_RCVR_ON_IDLE域的使能,终端设备的轮询功能都被关闭,   

这就是导致终端没有发送 data_request的原因.
把该处的三个函数参数改为 f8wConfig.cfg 中规定的值即可.

这样发送给终端的单播数据就可以正常接收到了,到了这里貌似问题就解决了!

但是这还不是我的目的,在这里终端还是必须向父节点轮询才能接收到数据,但是我想能不能在路由器那里动动手脚,使得路由接收到了属于子节点的数据时不要缓存下来等子节点轮询后才发送数据给它,而是接收到子节点数据后马上能转发(因为终端设备的接收机是一直打开的,所以不会有终端接收不到的情况),这样,终端设备就无需轮询,而能马上接收到数据了!
只是现在路由器那边我还没有思路,不知道该怎么改,只好发帖请教各位大侠了!

 

 

ps:

刚试了5个节点,点对点可以收到数据的.

DRFD_RCVC_ALWAYS_ON 设置为 TURE   
无polling



楼主是不是编译了"POWER_SAVING",如果编译了,就需要polling 才能收到命令了.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值