TI中文支持网
TI专业的中文技术问题搜集分享网站

设备加入,过滤问题,关于ZDO_JoinIndicationCB();

Dear TI

在设备加入路由的时候,会产生ZDO_JoinIndicationCB()我能否在里面加一个函数,请求并等待协调器的指示,然后再返回状态呢(也就是ZDO_JoinIndicationCB()返回succee或者failure)。这样的做法合不合理呢??

VV:

不合理,因为这个时候和协调器或者父设备的链路还没有建立,协调器发的数据,无法收到。

Aries Lord:

回复 VV:

VV答非所问,楼主是希望在路由器执行JoinIndicationCB时,往协调器发一个验证请求,等收到验证RSP后,再决定是返回TRUE还是FALSE。

这当然是不可以的,因为z-stack的OSAL并非任务阻塞式设计。zmac_cb在收到消息MAC_MLME_ASSOCIATE_IND后,通过osal_msg_send( NWK_TaskID, (uint8 *)msgPtr )发送给nwk_event_loop,然后nwk_event_loop执行ZDO_JoinIndicationCB,当ZDO_JoinIndicationCB运行结束后,会调用函数ZMacAssociateRsp,无论返回TRUE还是FALSE。

user4164881:

回复 Aries Lord:

谢谢Aries Lord的回答,我看了你的帖子,关于你给的文件中有几个疑问:

1,zdoCBFunc[ZDO_JOIN_DENIED_CBID]在哪里注册的,在里面没有看到

2,为何要把拒绝加入的节点广播,而不是只发给验证的节点(协调器)?还是说其他路由也是验证。

不胜感激!

Aries Lord:

回复 user4164881:

1,ZDO_JOIN_DENIED_CBID加在zdoCBFunc的enum事件里面。

2,广播比发给协调器有更好的灵活性:如果一个节点曾经加入过网络,因为NV_RESTORE复位,再次验证时,可以做以下选择操作:如果你把擦除NV Restore算作退出网络,路由器可以在收到另一个路由发过来的入网申请时,删除AssocList里面的记录,让另一个路由器来加这个新设备,或者永远不加它。如果擦除NV不算退网,则可以在AssocList中查询,再发给另一个路由。

user4164881:

回复 Aries Lord:

非常感谢Aries Lord的回答, 我还有个疑问,恳请解答就是:

非法的网关你是怎么定义的(即为什他就是非法 网关),作用在哪里?

谢谢!

VV:

回复 Aries Lord:

@Aries,

父设备在调用ZDO_JoinIndicationCB的时候,子设备连短地址都没有拿到,这时候怎么通信呢?

Aries Lord:

回复 VV:

这个时候只能回复ZFailure或者ZSuccess,楼主的意思是把这个识别交给上位机,不过不建议用UART来请求,因为UART DMA必须要结束当前函数才能发送数据。

Aries Lord:

回复 user4164881:

由你的程序来定义哪些IEEE地址合法,哪些非法

xingjie du:

回复 user4164881:

哥们!你弄好了么? 我一点都没看懂 ! 能解释一下么?

user4164881:

回复 Aries Lord:

非常感谢Aries Lord 的指点

赞(0)
未经允许不得转载:TI中文支持网 » 设备加入,过滤问题,关于ZDO_JoinIndicationCB();
分享到: 更多 (0)