今天开始调试如何同时开起android的softap和wifi功能。
1.softap的直接控制代码在system/netd/SoftapController.cpp
2.上一层控制代码在system/netd/CommandListener.cpp
3.framework层的代码在frameworks/base/services/java/com/android/server/NetworkManagementService.java.
4.setting中相关设置的代码在packages/apps/Settings/src/com/android/settings/wifi/WifiApEnabler.java 和packages/apps/Settings/src/com/android/settings/wifi/WifiEnabler.java中。
5.修改了softapcontroller.cpp中的代码,强制置顶了启用wlan1作为softap。 最终hostapd可以启动,但是dnsmasq没有启动。
6.将frameworks/base/core/res/res/values/config.xml中的wlan0改为wlan1之后,重新烧写了系统,dnsmasq可以启动了。 并且可以正常连接,无论是open还是wpa2都正常。
7屏蔽掉了第4步中两个.java中关闭对方的语句:setWifiApEnabled和setWifiEnabled 先开启wifi后再开启softap出现如下报错: E/WifiStateMachine( 1047): Failed to start soft AP with a running supplicant 先开启softap后再开启wifi后出现如下报错: E/WifiStateMachine( 1047): Cannot start supplicant with a running soft AP 这两句话是在 frameworks/base/wifi/java/android/net/wifi/WifiStateMachine.java中报出的。
8, 在frameworks/base/services/java/com/android/server/WifiService.java中为softap单独建立一个wifistatemachine. 就可以实现wifi和softap一起工作。里面有绑定wlan1为softap的语句。 9.在wifiservice.java的checkAndStartWifi函数中设置setWifiApEnabled即可让开机自动启动softap. 至此,整个功能调试完毕,经验就是以后还是要多看代码,稳扎稳打。
|