From 2c385ecb1c390f7b695842fedfdebf95fd5e842c Mon Sep 17 00:00:00 2001 From: Vinit Deshapnde Date: Mon, 9 Sep 2013 16:28:31 -0700 Subject: [PATCH] Set country code on P2p interfaces as well This change will set country code on P2p interfaces as well, so the drivers are free to use channels that are permitted regionally. This is required for FCC style compliance and Miracast certification. Bug: 10513263 Change-Id: I88c645bd488066d5167e23e2772f2e0e1f40fa8a --- wifi/java/android/net/wifi/WifiNative.java | 3 ++- wifi/java/android/net/wifi/WifiStateMachine.java | 6 +++--- wifi/java/android/net/wifi/p2p/WifiP2pService.java | 14 ++++++++++++++ 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/wifi/java/android/net/wifi/WifiNative.java b/wifi/java/android/net/wifi/WifiNative.java index f86a51c9bd2fb..68a09e73305b3 100644 --- a/wifi/java/android/net/wifi/WifiNative.java +++ b/wifi/java/android/net/wifi/WifiNative.java @@ -25,6 +25,7 @@ import android.util.Log; import java.util.ArrayList; import java.util.List; +import java.util.Locale; /** * Native calls for bring up/shut down of the supplicant daemon and for @@ -457,7 +458,7 @@ public class WifiNative { } public boolean setCountryCode(String countryCode) { - return doBooleanCommand("DRIVER COUNTRY " + countryCode); + return doBooleanCommand("DRIVER COUNTRY " + countryCode.toUpperCase(Locale.ROOT)); } public void enableBackgroundScan(boolean enable) { diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java index d4e98c544aea5..d24b9aabbb532 100644 --- a/wifi/java/android/net/wifi/WifiStateMachine.java +++ b/wifi/java/android/net/wifi/WifiStateMachine.java @@ -84,7 +84,6 @@ import java.io.PrintWriter; import java.net.InetAddress; import java.util.ArrayList; import java.util.List; -import java.util.Locale; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicBoolean; import java.util.Iterator; @@ -1370,6 +1369,7 @@ public class WifiStateMachine extends StateMachine { countryCode); } sendMessage(CMD_SET_COUNTRY_CODE, countryCode); + mWifiP2pChannel.sendMessage(WifiP2pService.SET_COUNTRY_CODE, countryCode); } /** @@ -2835,7 +2835,7 @@ public class WifiStateMachine extends StateMachine { case CMD_SET_COUNTRY_CODE: String country = (String) message.obj; if (DBG) log("set country code " + country); - if (!mWifiNative.setCountryCode(country.toUpperCase(Locale.ROOT))) { + if (!mWifiNative.setCountryCode(country)) { loge("Failed to set country code " + country); } break; @@ -4139,7 +4139,7 @@ public class WifiStateMachine extends StateMachine { /** * arg2 on the source message has a unique id that needs to be retained in replies * to match the request - * + * see WifiManager for details */ private Message obtainMessageWithArg2(Message srcMsg) { diff --git a/wifi/java/android/net/wifi/p2p/WifiP2pService.java b/wifi/java/android/net/wifi/p2p/WifiP2pService.java index 05196b8a16839..625ffb8733d4d 100644 --- a/wifi/java/android/net/wifi/p2p/WifiP2pService.java +++ b/wifi/java/android/net/wifi/p2p/WifiP2pService.java @@ -174,6 +174,9 @@ public class WifiP2pService extends IWifiP2pManager.Stub { // msg.obj = StateMachine to send to when blocked public static final int BLOCK_DISCOVERY = BASE + 15; + // set country code + public static final int SET_COUNTRY_CODE = BASE + 16; + public static final int ENABLED = 1; public static final int DISABLED = 0; @@ -632,6 +635,7 @@ public class WifiP2pService extends IWifiP2pManager.Stub { case WifiP2pManager.START_LISTEN: case WifiP2pManager.STOP_LISTEN: case WifiP2pManager.SET_CHANNEL: + case SET_COUNTRY_CODE: break; case WifiStateMachine.CMD_ENABLE_P2P: // Enable is lazy and has no response @@ -1064,6 +1068,10 @@ public class WifiP2pService extends IWifiP2pManager.Stub { replyToMessage(message, WifiP2pManager.SET_CHANNEL_FAILED); } break; + case SET_COUNTRY_CODE: + String countryCode = (String) message.obj; + mWifiNative.setCountryCode(countryCode); + break; default: return NOT_HANDLED; } @@ -2537,6 +2545,12 @@ public class WifiP2pService extends IWifiP2pManager.Stub { mServiceTransactionId = 0; mServiceDiscReqId = null; + String countryCode = Settings.Global.getString(mContext.getContentResolver(), + Settings.Global.WIFI_COUNTRY_CODE); + if (countryCode != null && !countryCode.isEmpty()) { + mP2pStateMachine.sendMessage(SET_COUNTRY_CODE, countryCode); + } + updatePersistentNetworks(RELOAD); }