20:12:08.774420 [20:12:03.149290] [000000002A1ADFB1] [wpa_s] wlan: [I :HDD] hdd_driver_command: Received COUNTRY CN cmd from Wi-Fi GUI***
20:12:08.774457 [20:12:03.149318] [000000002A1AE1BC] [wpa_s] wlan: [I :SME] sme_ChangeCountryCode: 5688: called
20:12:08.774490 [20:12:03.149334] [000000002A1AE2FD] [wpa_s] wlan: [I :SME] sme_ChangeCountryCode: 5728: returned
20:12:08.774520 [20:12:03.149476] [000000002A1AEDA0] [VosMC] wlan: [IH:VOS] vos_timer_stop: Timer Addr inside voss_stop : 0xbf3733d4
20:12:08.774550 [20:12:03.149494] [000000002A1AEF01] [VosMC] wlan: [I :WDA] <------ WDA_UpdateChReqCallback
20:12:08.774580 [20:12:03.149564] [000000002A1AF43B] [VosMC] wlan: [I :WDA] <------ WDA_UpdateScanParamsReqCallback, wdiStatus: 0
20:12:08.774609 [20:12:03.149574] [000000002A1AF4F8] [VosMC] wlan: [IH:VOS] Timer Addr inside voss_start : 0xbf3733d4
20:12:08.774639 [20:12:03.149598] [000000002A1AF6C1] [VosMC] wlan: [I :VOS] VosMCThread: Servicing the VOS SME MC Message queue
20:12:08.774668 [20:12:03.149616] [000000002A1AF819] [VosMC] wlan: [I :VOS] regdomain request
20:12:08.774943 [20:12:03.149624] [000000002A1AF8AB] [VosMC] wlan: [W :VOS] get country information from kernel db
20:12:08.774984 [20:12:03.443815] [000000002A71293C] [VosMC] wlan: [I :VOS] runtime country code : CN is found in kernel db
20:12:08.775014 [20:12:03.443894] [000000002A712F06] [wpa_s] wlan: [I :HDD] Exit:hdd_driver_command
20:12:08.775045 [20:12:03.443903] [000000002A712FA2] [VosMC] wlan: [IH:VOS] vos_timer_stop: Timer Addr inside voss_stop : 0xbf3733d4
20:12:08.775075 [20:12:03.443907] [000000002A712FE7] [wpa_s] wlan: [I :HDD] Exit:__hdd_ioctl
20:12:08.775106 [20:12:03.443920] [000000002A7130E9] [VosMC] wlan: [I :WDA] <------ WDA_UpdateScanParamsRespCallback
20:12:08.775136 [20:12:03.443937] [000000002A71322C] [VosMC] wlan: [IH:VOS] vos_list_remove_front: list empty
20:12:08.775165 [20:12:03.444199] [000000002A7145E2] [kwork] wlan: [I :VOS] cfg80211 reg notifier callback for country for initiator 1
20:12:08.775195 [20:12:03.444211] [000000002A7146B3] [kwork] wlan: [I :VOS] __wlan_hdd_linux_reg_notifier: Req initiator 1 CC=CN
不同国家,WIFI使用的信道是不同的,2.4G一共有14个信道,中国使用1-13信道,美国则使用1-11信道。因此,我们需要指定WIFI的国家码,来确定WIFI在扫描和连接过程中,可以在哪些信道上进行。
设置国家码有三种方法,我们逐一介绍:
1.通过设置prop设置
oem产商设置国家码在
device/qcom/msm8909w/system.prop
文件中设置一个prop就可以了。
ro.boot.wificountrycode=CN
设置好prop后,我们分析下国家码的设置过程。
在SystemServer起来后,会加载WifiServiceImpl,即WIFI服务。在WIFI服务中,将获取设置的WIFI国家码属性。并作为参数传给WifiStateMachine的构造函数中。
public WifiServiceImpl(Context context) {
mCountryCode = new WifiCountryCode(
WifiNative.getWlanNativeInterface(),
SystemProperties.get(BOOT_DEFAULT_WIFI_COUNTRY_CODE),
mFacade.getStringSetting(mContext, Settings.Global.WIFI_COUNTRY_CODE),
mContext.getResources().getBoolean(
R.bool.config_wifi_revert_country_code_on_cellular_loss));
mWifiStateMachine = new WifiStateMachine(mContext, mFacade,
wifiStateMachineThread.getLooper(), mUserManager, mWifiInjector,
new BackupManagerProxy(), mCountryCode);
}
此处首先构造了WifiCountryCode对象,我们看构造方法:
public WifiCountryCode(
WifiNative wifiNative,
String oemDefaultCountryCode,
String persistentCountryCode,
boolean revertCountryCodeOnCellularLoss) {
mWifiNative = wifiNative;
mRevertCountryCodeOnCellularLoss = revertCou