|
查看: 2922|回复: 2

如何在扫网集中式网络的情况下停止集中式网络扫网,并正常进行Touchlink扫网

[复制链接]

6

主题

6

回帖

108

积分

荣耀黄金

积分
108
发表于 2025-9-18 18:07:37 | 显示全部楼层 |阅读模式 来自 广东深圳
information
说明:   建议参照本版块置顶帖内容输入必要信息
芯片型号: TLSR8656
SDK及版本: V3.6.8.7
我的设备的集中式网络扫网逻辑是上电会开启一个定时器,每5秒调用一次bdb_networkSteerStart() 开始扫网。
Touchlink扫网的触发机制是按下按键1秒之后开始调用bdb_networkTouchLinkStart(BDB_COMMISSIONING_ROLE_INITIATOR);。我发现如果设备已经在集中式扫网的情况下(即在发beacon),这个瞬间按下按键1,去触发Touchlink扫网,可能会存在无法发包的情况。我想问一下如何规避?

目前我的做法是,在调用bdb_networkTouchLinkStart(BDB_COMMISSIONING_ROLE_INITIATOR); 之前先调用bdb_isIdle 判断bdb是否空闲,每10ms检测一次,超时时间是3s,若3秒后bdb还是非空闲,那么就不会开始touchlink,而3秒内如果变为空闲了,则开始Touchlink流程。

我想问的是,这种方法是否合理正确。有没有更好的方法。并且向问一下这个问题的出现原因是什么?


6

主题

6

回帖

108

积分

荣耀黄金

积分
108
 楼主| 发表于 2025-9-18 18:12:05 | 显示全部楼层 来自 广东深圳
补充一下,我在开始touchlink流程之前,还会调用zb_nwkDiscoveryStop();        tl_bdbReset(); image.png

28

主题

364

回帖

1162

积分

版主

积分
1162
发表于 2025-9-19 16:41:18 | 显示全部楼层 来自 上海
本帖最后由 TL_YB 于 2025-9-19 16:42 编辑


供参考:
当按键触发touch link时,创建一个evt_touchLink事件flag。
假设central nwk join的定时任务为evt_timer_5s,它在一轮join结束后将会触发commissioningCb事件,
在commissioningCb回调中检查touchLink flag,如果为true,则停止evt_timer_5s的任务,执行touch link。
(touch link的结果最后也将会回调到commissioningCb)

本版积分规则

关注公众号
Telink forum

相关侵权、举报、投诉及建议等,请发 E-mail:forum@telink-semi.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.|沪ICP备17008231号-1 |沪公网安备31011502403548号

在本版发帖返回顶部