微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 设备加入,过滤问题,关于ZDO_JoinIndicationCB();

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

时间:10-02 整理:3721RD 点击:

Dear TI

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

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

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。

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

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

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

不胜感激!

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

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

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

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

谢谢!

@Aries,

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

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

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

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

非常感谢Aries Lord 的指点

@Aries,

Aries您好,关于您第2点中提到的拦截信息的处理方法,个人感觉在比较多节点申请入网的情况下,用广播的方式发送拦截信息会对网络造成比较大的负担,而对assoclist的更新可以在设备成功入网后进行annce时自动进行,个人认为不需要在拦截时就处理assoclist

hi all,

若由ieee MAC來決定,則必須要有輸入來達到 並且還要有得到IEEE MAC 才行.

是否,在入網後才去做filter ,若不符合時再去做其它動作.

1.zdo_simple_desc_req,得到device id ,profile id 等, 

2.若不符合要求,再去發zdo_mgmt_leave_req.

即由,設備的服務出發.而不是硬體綁定.

Aries Lord

当ZDO_JoinIndicationCB运行结束后,会调用函数ZMacAssociateRsp,无论返回TRUE还是FALSE。

函数ZMacAssociateRsp是由谁调用的?

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top