关于及时刷新wifi列表

在项目中遇到一个疑惑,一台嵌入式设备的wifi模块,修改任意一个wifi站点的名字,
看wifi列表能不能及时刷新出新的wifi名,直接测的结果很正常,最多五秒就能刷新出
来。可是当telnet进去后,打开wpa_cli,每隔6秒才会收到一次
“CTRL-EVENT-SCAN-RESULTS”,且需要收到五次以上才能“scan_result”出新的wifi名,中途多次“scan”都不起作用,也就是最少30秒才能在wpa_cli下刷出新的wifi。

直接测的结果应该依赖于用wpa_cli测得的结果,可是为什么两者的结果却相反呢?
请大神们指点迷津,此外,这和wifi状态机有何关系,wifi状态机又是如何实现的呢?
能不能用通俗易懂的语言讲一下wifi状态机的原理,无论从哪方面回答,有帮助即可,
感激不尽

2个回答

更好我是搞wifi的,和你解释下原理
1. wifi 有个扫描间隔,目前设置是7s,在7s内重新设置扫描,命令是能够发送到kernel的,但是kernel有一个判断机制,7s内的重复扫描直接被return了,不会触发硬件去扫描
底层扫描wifi的原理是 scan 命令通过netlink发送时,先填充扫描信道,而扫描信道又和国家码有关系,需一一理清
2. 需要收到五次以上才能“scan__result”出新的wifi名,这个属于一个bug,在framework中收到CTRL-EVENT-SCAN-RESULTS是,就应该更新wifi列表的
3. 查看《深入理解Android:WiFi模块 NFC和GPS卷》
4. wpa_cli 的详细内容可以看开源的,可以下载查看,在wpa_cli中有命令不去依靠上层界面显示来获取wifi 连接列表

dai_zixuan
dai_zixuan 非常感谢,可我还有疑惑,(1)7s的间隔是哪里来的呢?(2)在我“scan__result”的时候,应用软件已经被我kill掉了,那么这个bug是属于底层的吗?(3)既然底层要刷新5次才能成功,为什么直接在应用层测却很快呢?而且每次都低于5秒,这和7S的扫描间隔是否又冲突了呢?
大约一年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!