在项目中遇到一个疑惑,一台嵌入式设备的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状态机的原理,无论从哪方面回答,有帮助即可,
感激不尽
更好我是搞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 连接列表