diff options
author | Irfan Sheriff <isheriff@google.com> | 2010-10-29 15:32:10 -0700 |
---|---|---|
committer | Irfan Sheriff <isheriff@google.com> | 2010-11-02 16:35:56 -0700 |
commit | ed4f28b492da3ff140bbaabbbda798a08c40ea5b (patch) | |
tree | 5676b10fe89f58e9c460e766532a24d2104fc62c | |
parent | 98444a944c9126898bc4c370f831a79bb3b30bd8 (diff) | |
download | frameworks_base-ed4f28b492da3ff140bbaabbbda798a08c40ea5b.zip frameworks_base-ed4f28b492da3ff140bbaabbbda798a08c40ea5b.tar.gz frameworks_base-ed4f28b492da3ff140bbaabbbda798a08c40ea5b.tar.bz2 |
Set country code in the driver and remove channel set
With dual band support, using country code
settings is the way to go
Bug: 2936741
Change-Id: I760dce4c43b1af19ee205c28f0d287420c8d9e85
-rw-r--r-- | core/java/android/provider/Settings.java | 14 | ||||
-rw-r--r-- | core/jni/android_net_wifi_Wifi.cpp | 46 | ||||
-rwxr-xr-x | core/res/res/values/strings.xml | 5 | ||||
-rw-r--r-- | services/java/com/android/server/WifiService.java | 89 | ||||
-rw-r--r-- | telephony/java/com/android/internal/telephony/MccTable.java | 77 | ||||
-rw-r--r-- | telephony/java/com/android/internal/telephony/PhoneBase.java | 11 | ||||
-rw-r--r-- | telephony/tests/telephonytests/src/com/android/internal/telephony/MccTableTest.java | 12 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/IWifiManager.aidl | 6 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/WifiManager.java | 52 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/WifiNative.java | 6 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/WifiStateMachine.java | 88 |
11 files changed, 112 insertions, 294 deletions
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index ee53828..2229964 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -1199,12 +1199,6 @@ public final class Settings { */ public static final String WIFI_STATIC_DNS2 = "wifi_static_dns2"; - /** - * The number of radio channels that are allowed in the local - * 802.11 regulatory domain. - * @hide - */ - public static final String WIFI_NUM_ALLOWED_CHANNELS = "wifi_num_allowed_channels"; /** * Determines whether remote devices may discover and/or connect to @@ -2701,11 +2695,11 @@ public final class Settings { "wifi_networks_available_repeat_delay"; /** - * The number of radio channels that are allowed in the local - * 802.11 regulatory domain. + * 802.11 country code in ISO 3166 format * @hide */ - public static final String WIFI_NUM_ALLOWED_CHANNELS = "wifi_num_allowed_channels"; + public static final String WIFI_COUNTRY_CODE = "wifi_country_code"; + /** * When the number of open networks exceeds this number, the @@ -3638,7 +3632,7 @@ public final class Settings { TTS_ENABLED_PLUGINS, WIFI_NETWORKS_AVAILABLE_NOTIFICATION_ON, WIFI_NETWORKS_AVAILABLE_REPEAT_DELAY, - WIFI_NUM_ALLOWED_CHANNELS, + WIFI_COUNTRY_CODE, WIFI_NUM_OPEN_NETWORKS_KEPT, MOUNT_PLAY_NOTIFICATION_SND, MOUNT_UMS_AUTOSTART, diff --git a/core/jni/android_net_wifi_Wifi.cpp b/core/jni/android_net_wifi_Wifi.cpp index a024420..0663e98 100644 --- a/core/jni/android_net_wifi_Wifi.cpp +++ b/core/jni/android_net_wifi_Wifi.cpp @@ -198,11 +198,25 @@ static jint android_net_wifi_wpsPinFromDeviceCommand(JNIEnv* env, jobject clazz, env->ReleaseStringUTFChars(bssid, bssidStr); if ((numWritten == -1) || (numWritten >= (int)sizeof(cmdstr))) { - return false; + return -1; } return doIntCommand(cmdstr); } +static jboolean android_net_wifi_setCountryCodeCommand(JNIEnv* env, jobject clazz, jstring country) +{ + char cmdstr[BUF_SIZE]; + jboolean isCopy; + + const char *countryStr = env->GetStringUTFChars(country, &isCopy); + int numWritten = snprintf(cmdstr, sizeof(cmdstr), "DRIVER COUNTRY %s", countryStr); + env->ReleaseStringUTFChars(country, countryStr); + + if ((numWritten == -1) || (numWritten >= (int)sizeof(cmdstr))) { + return false; + } + return doBooleanCommand(cmdstr, "OK"); +} static jboolean android_net_wifi_setNetworkVariableCommand(JNIEnv* env, jobject clazz, @@ -484,32 +498,6 @@ static jint android_net_wifi_getBandCommand(JNIEnv* env, jobject clazz) return (jint)band; } -static jboolean android_net_wifi_setNumAllowedChannelsCommand(JNIEnv* env, jobject clazz, jint numChannels) -{ - char cmdstr[BUF_SIZE]; - - int numWritten = snprintf(cmdstr, sizeof(cmdstr), "DRIVER SCAN-CHANNELS %u", numChannels); - int cmdTooLong = numWritten >= (int)sizeof(cmdstr); - - return (jboolean)!cmdTooLong && doBooleanCommand(cmdstr, "OK"); -} - -static jint android_net_wifi_getNumAllowedChannelsCommand(JNIEnv* env, jobject clazz) -{ - char reply[BUF_SIZE]; - int numChannels; - - if (doCommand("DRIVER SCAN-CHANNELS", reply, sizeof(reply)) != 0) { - return -1; - } - // reply comes back in the form "Scan-Channels = X" where X is the - // number of channels - if (sscanf(reply, "%*s = %u", &numChannels) == 1) - return numChannels; - else - return -1; -} - static jboolean android_net_wifi_setBluetoothCoexistenceModeCommand(JNIEnv* env, jobject clazz, jint mode) { char cmdstr[BUF_SIZE]; @@ -645,8 +633,6 @@ static JNINativeMethod gWifiMethods[] = { { "getPowerModeCommand", "()I", (void*) android_net_wifi_getPowerModeCommand }, { "setBandCommand", "(I)Z", (void*) android_net_wifi_setBandCommand}, { "getBandCommand", "()I", (void*) android_net_wifi_getBandCommand}, - { "setNumAllowedChannelsCommand", "(I)Z", (void*) android_net_wifi_setNumAllowedChannelsCommand }, - { "getNumAllowedChannelsCommand", "()I", (void*) android_net_wifi_getNumAllowedChannelsCommand }, { "setBluetoothCoexistenceModeCommand", "(I)Z", (void*) android_net_wifi_setBluetoothCoexistenceModeCommand }, { "setBluetoothCoexistenceScanModeCommand", "(Z)Z", @@ -668,6 +654,8 @@ static JNINativeMethod gWifiMethods[] = { (void*) android_net_wifi_wpsPinFromDeviceCommand }, { "setSuspendOptimizationsCommand", "(Z)Z", (void*) android_net_wifi_setSuspendOptimizationsCommand}, + { "setCountryCodeCommand", "(Ljava/lang/String;)Z", + (void*) android_net_wifi_setCountryCodeCommand}, { "doDhcpRequest", "(Landroid/net/DhcpInfo;)Z", (void*) android_net_wifi_doDhcpRequest }, { "getDhcpError", "()Ljava/lang/String;", (void*) android_net_wifi_getDhcpError }, }; diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 541835f..c89789e 100755 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -2345,10 +2345,9 @@ <!-- This string appears (on two lines) when you type a number into contacts search, to let you create a contact whose phone number is the number you typed. The first line will be in bigger type than the second. --> <string name="create_contact_using">Create contact\nusing <xliff:g id="number" example="555">%s</xliff:g></string> - <!-- This string array should be overridden by the manufacture to present a list of carrier-id,locale,wifi-channel sets. This is used at startup to set system defaults by checking the system property ro.carrier for the carrier-id and searching through this array --> + <!-- This string array should be overridden by the manufacture to present a list of carrier-id,locale. The wifi regulatory domain is extracted from the locale information. This is used at startup to set system defaults by checking the system property ro.carrier for the carrier-id and searching through this array --> <!-- An Array of [[Carrier-ID] --> - <!-- [default-locale] --> - <!-- [default-wifi-allowed-channels]] --> + <!-- [default-locale]] --> <string-array translatable="false" name="carrier_properties"> </string-array> diff --git a/services/java/com/android/server/WifiService.java b/services/java/com/android/server/WifiService.java index 55d69f0..9687aa7 100644 --- a/services/java/com/android/server/WifiService.java +++ b/services/java/com/android/server/WifiService.java @@ -134,12 +134,6 @@ public class WifiService extends IWifiManager.Stub { */ private static final long DEFAULT_SCAN_INTERVAL_MS = 60 * 1000; /* 1 minute */ - /** - * Number of allowed radio frequency channels in various regulatory domains. - * This list is sufficient for 802.11b/g networks (2.4GHz range). - */ - private static int[] sValidRegulatoryChannelCounts = new int[] {11, 13, 14}; - private static final String ACTION_DEVICE_IDLE = "com.android.server.WifiManager.action.DEVICE_IDLE"; @@ -737,82 +731,19 @@ public class WifiService extends IWifiManager.Stub { } /** - * Set the number of radio frequency channels that are allowed to be used - * in the current regulatory domain. This method should be used only - * if the correct number of channels cannot be determined automatically - * for some reason. If the operation is successful, the new value may be - * persisted as a Secure setting. - * @param numChannels the number of allowed channels. Must be greater than 0 - * and less than or equal to 16. + * Set the country code + * @param countryCode ISO 3166 country code. * @param persist {@code true} if the setting should be remembered. - * @return {@code true} if the operation succeeds, {@code false} otherwise, e.g., - * {@code numChannels} is outside the valid range. + * + * The persist behavior exists so that wifi can fall back to the last + * persisted country code on a restart, when the locale information is + * not available from telephony. */ - public synchronized boolean setNumAllowedChannels(int numChannels, boolean persist) { - Slog.i(TAG, "WifiService trying to setNumAllowed to "+numChannels+ - " with persist set to "+persist); + public void setCountryCode(String countryCode, boolean persist) { + Slog.i(TAG, "WifiService trying to set country code to " + countryCode + + " with persist set to " + persist); enforceChangePermission(); - - /* - * Validate the argument. We'd like to let the Wi-Fi driver do this, - * but if Wi-Fi isn't currently enabled, that's not possible, and - * we want to persist the setting anyway,so that it will take - * effect when Wi-Fi does become enabled. - */ - boolean found = false; - for (int validChan : sValidRegulatoryChannelCounts) { - if (validChan == numChannels) { - found = true; - break; - } - } - if (!found) { - return false; - } - - if (persist) { - Settings.Secure.putInt(mContext.getContentResolver(), - Settings.Secure.WIFI_NUM_ALLOWED_CHANNELS, - numChannels); - } - - mWifiStateMachine.setNumAllowedChannels(numChannels); - - return true; - } - - /** - * Return the number of frequency channels that are allowed - * to be used in the current regulatory domain. - * @return the number of allowed channels, or {@code -1} if an error occurs - */ - public int getNumAllowedChannels() { - int numChannels; - - enforceAccessPermission(); - - /* - * If we can't get the value from the driver (e.g., because - * Wi-Fi is not currently enabled), get the value from - * Settings. - */ - numChannels = mWifiStateMachine.getNumAllowedChannels(); - if (numChannels < 0) { - numChannels = Settings.Secure.getInt(mContext.getContentResolver(), - Settings.Secure.WIFI_NUM_ALLOWED_CHANNELS, - -1); - } - return numChannels; - } - - /** - * Return the list of valid values for the number of allowed radio channels - * for various regulatory domains. - * @return the list of channel counts - */ - public int[] getValidChannelCounts() { - enforceAccessPermission(); - return sValidRegulatoryChannelCounts; + mWifiStateMachine.setCountryCode(countryCode, persist); } /** diff --git a/telephony/java/com/android/internal/telephony/MccTable.java b/telephony/java/com/android/internal/telephony/MccTable.java index 9b0aa3c..c0bf7ec 100644 --- a/telephony/java/com/android/internal/telephony/MccTable.java +++ b/telephony/java/com/android/internal/telephony/MccTable.java @@ -48,22 +48,16 @@ public final class MccTable String iso; int smallestDigitsMnc; String language; - int wifiChannels; MccEntry(int mnc, String iso, int smallestDigitsMCC) { this(mnc, iso, smallestDigitsMCC, null); } MccEntry(int mnc, String iso, int smallestDigitsMCC, String language) { - this(mnc, iso, smallestDigitsMCC, language, 0); - } - - MccEntry(int mnc, String iso, int smallestDigitsMCC, String language, int wifiChannels) { this.mcc = mnc; this.iso = iso; this.smallestDigitsMnc = smallestDigitsMCC; this.language = language; - this.wifiChannels = wifiChannels; } @@ -171,23 +165,6 @@ public final class MccTable } /** - * Given a GSM Mobile Country Code, returns the number of wifi - * channels allowed in that country. Returns 0 if unavailable. - */ - public static int - wifiChannelsForMcc(int mcc) { - MccEntry entry; - - entry = entryForMcc(mcc); - - if (entry == null) { - return 0; - } else { - return entry.wifiChannels; - } - } - - /** * Updates MCC and MNC device configuration information for application retrieving * correct version of resources. If either MCC or MNC is 0, they will be ignored (not set). * @param phone PhoneBae to act on. @@ -210,7 +187,7 @@ public final class MccTable if (mcc != 0) { setTimezoneFromMccIfNeeded(phone, mcc); setLocaleFromMccIfNeeded(phone, mcc); - setWifiChannelsFromMcc(phone, mcc); + setWifiCountryCodeFromMcc(phone, mcc); } try { Configuration config = ActivityManagerNative.getDefault().getConfiguration(); @@ -266,14 +243,14 @@ public final class MccTable * @param phone PhoneBase to act on (get context from). * @param mcc Mobile Country Code of the SIM or SIM-like entity (build prop on CDMA) */ - private static void setWifiChannelsFromMcc(PhoneBase phone, int mcc) { - int wifiChannels = MccTable.wifiChannelsForMcc(mcc); - if (wifiChannels != 0) { + private static void setWifiCountryCodeFromMcc(PhoneBase phone, int mcc) { + String country = MccTable.countryCodeForMcc(mcc); + if (!country.isEmpty()) { Context context = phone.getContext(); - Log.d(LOG_TAG, "WIFI_NUM_ALLOWED_CHANNELS set to " + wifiChannels); + Log.d(LOG_TAG, "WIFI_COUNTRY_CODE set to " + country); WifiManager wM = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); //persist - wM.setNumAllowedChannels(wifiChannels, true); + wM.setCountryCode(country, true); } } @@ -297,7 +274,7 @@ public final class MccTable */ table.add(new MccEntry(202,"gr",2)); //Greece - table.add(new MccEntry(204,"nl",2,"nl",13)); //Netherlands (Kingdom of the) + table.add(new MccEntry(204,"nl",2,"nl")); //Netherlands (Kingdom of the) table.add(new MccEntry(206,"be",2)); //Belgium table.add(new MccEntry(208,"fr",2,"fr")); //France table.add(new MccEntry(212,"mc",2)); //Monaco (Principality of) @@ -311,11 +288,11 @@ public final class MccTable table.add(new MccEntry(225,"va",2,"it")); //Vatican City State table.add(new MccEntry(226,"ro",2)); //Romania table.add(new MccEntry(228,"ch",2,"de")); //Switzerland (Confederation of) - table.add(new MccEntry(230,"cz",2,"cs",13)); //Czech Republic + table.add(new MccEntry(230,"cz",2,"cs")); //Czech Republic table.add(new MccEntry(231,"sk",2)); //Slovak Republic - table.add(new MccEntry(232,"at",2,"de",13)); //Austria - table.add(new MccEntry(234,"gb",2,"en",13)); //United Kingdom of Great Britain and Northern Ireland - table.add(new MccEntry(235,"gb",2,"en",13)); //United Kingdom of Great Britain and Northern Ireland + table.add(new MccEntry(232,"at",2,"de")); //Austria + table.add(new MccEntry(234,"gb",2,"en")); //United Kingdom of Great Britain and Northern Ireland + table.add(new MccEntry(235,"gb",2,"en")); //United Kingdom of Great Britain and Northern Ireland table.add(new MccEntry(238,"dk",2)); //Denmark table.add(new MccEntry(240,"se",2)); //Sweden table.add(new MccEntry(242,"no",2)); //Norway @@ -328,7 +305,7 @@ public final class MccTable table.add(new MccEntry(257,"by",2)); //Belarus (Republic of) table.add(new MccEntry(259,"md",2)); //Moldova (Republic of) table.add(new MccEntry(260,"pl",2)); //Poland (Republic of) - table.add(new MccEntry(262,"de",2,"de",13)); //Germany (Federal Republic of) + table.add(new MccEntry(262,"de",2,"de")); //Germany (Federal Republic of) table.add(new MccEntry(266,"gi",2)); //Gibraltar table.add(new MccEntry(268,"pt",2)); //Portugal table.add(new MccEntry(270,"lu",2)); //Luxembourg @@ -349,15 +326,15 @@ public final class MccTable table.add(new MccEntry(294,"mk",2)); //The Former Yugoslav Republic of Macedonia table.add(new MccEntry(295,"li",2)); //Liechtenstein (Principality of) table.add(new MccEntry(297,"me",2)); //Montenegro (Republic of) - table.add(new MccEntry(302,"ca",3,"",11)); //Canada + table.add(new MccEntry(302,"ca",3,"")); //Canada table.add(new MccEntry(308,"pm",2)); //Saint Pierre and Miquelon (Collectivit territoriale de la Rpublique franaise) - table.add(new MccEntry(310,"us",3,"en",11)); //United States of America - table.add(new MccEntry(311,"us",3,"en",11)); //United States of America - table.add(new MccEntry(312,"us",3,"en",11)); //United States of America - table.add(new MccEntry(313,"us",3,"en",11)); //United States of America - table.add(new MccEntry(314,"us",3,"en",11)); //United States of America - table.add(new MccEntry(315,"us",3,"en",11)); //United States of America - table.add(new MccEntry(316,"us",3,"en",11)); //United States of America + table.add(new MccEntry(310,"us",3,"en")); //United States of America + table.add(new MccEntry(311,"us",3,"en")); //United States of America + table.add(new MccEntry(312,"us",3,"en")); //United States of America + table.add(new MccEntry(313,"us",3,"en")); //United States of America + table.add(new MccEntry(314,"us",3,"en")); //United States of America + table.add(new MccEntry(315,"us",3,"en")); //United States of America + table.add(new MccEntry(316,"us",3,"en")); //United States of America table.add(new MccEntry(330,"pr",2)); //Puerto Rico table.add(new MccEntry(332,"vi",2)); //United States Virgin Islands table.add(new MccEntry(334,"mx",3)); //Mexico @@ -414,27 +391,27 @@ public final class MccTable table.add(new MccEntry(436,"tj",2)); //Tajikistan (Republic of) table.add(new MccEntry(437,"kg",2)); //Kyrgyz Republic table.add(new MccEntry(438,"tm",2)); //Turkmenistan - table.add(new MccEntry(440,"jp",2,"ja",14)); //Japan - table.add(new MccEntry(441,"jp",2,"ja",14)); //Japan - table.add(new MccEntry(450,"kr",2,"ko",13)); //Korea (Republic of) + table.add(new MccEntry(440,"jp",2,"ja")); //Japan + table.add(new MccEntry(441,"jp",2,"ja")); //Japan + table.add(new MccEntry(450,"kr",2,"ko")); //Korea (Republic of) table.add(new MccEntry(452,"vn",2)); //Viet Nam (Socialist Republic of) table.add(new MccEntry(454,"hk",2)); //"Hong Kong, China" table.add(new MccEntry(455,"mo",2)); //"Macao, China" table.add(new MccEntry(456,"kh",2)); //Cambodia (Kingdom of) table.add(new MccEntry(457,"la",2)); //Lao People's Democratic Republic - table.add(new MccEntry(460,"cn",2,"zh",13)); //China (People's Republic of) - table.add(new MccEntry(461,"cn",2,"zh",13)); //China (People's Republic of) + table.add(new MccEntry(460,"cn",2,"zh")); //China (People's Republic of) + table.add(new MccEntry(461,"cn",2,"zh")); //China (People's Republic of) table.add(new MccEntry(466,"tw",2)); //"Taiwan, China" table.add(new MccEntry(467,"kp",2)); //Democratic People's Republic of Korea table.add(new MccEntry(470,"bd",2)); //Bangladesh (People's Republic of) table.add(new MccEntry(472,"mv",2)); //Maldives (Republic of) table.add(new MccEntry(502,"my",2)); //Malaysia - table.add(new MccEntry(505,"au",2,"en",11)); //Australia + table.add(new MccEntry(505,"au",2,"en")); //Australia table.add(new MccEntry(510,"id",2)); //Indonesia (Republic of) table.add(new MccEntry(514,"tl",2)); //Democratic Republic of Timor-Leste table.add(new MccEntry(515,"ph",2)); //Philippines (Republic of the) table.add(new MccEntry(520,"th",2)); //Thailand - table.add(new MccEntry(525,"sg",2,"en",11)); //Singapore (Republic of) + table.add(new MccEntry(525,"sg",2,"en")); //Singapore (Republic of) table.add(new MccEntry(528,"bn",2)); //Brunei Darussalam table.add(new MccEntry(530,"nz",2, "en")); //New Zealand table.add(new MccEntry(534,"mp",2)); //Northern Mariana Islands (Commonwealth of the) diff --git a/telephony/java/com/android/internal/telephony/PhoneBase.java b/telephony/java/com/android/internal/telephony/PhoneBase.java index 554a7ba..dddb493 100644 --- a/telephony/java/com/android/internal/telephony/PhoneBase.java +++ b/telephony/java/com/android/internal/telephony/PhoneBase.java @@ -558,11 +558,6 @@ public abstract class PhoneBase extends Handler implements Phone { String c = carrierLocales[i].toString(); if (carrier.equals(c)) { String l = carrierLocales[i+1].toString(); - int wifiChannels = 0; - try { - wifiChannels = Integer.parseInt( - carrierLocales[i+2].toString()); - } catch (NumberFormatException e) { } String language = l.substring(0, 2); String country = ""; @@ -571,15 +566,15 @@ public abstract class PhoneBase extends Handler implements Phone { } setSystemLocale(language, country); - if (wifiChannels != 0) { + if (!country.isEmpty()) { try { Settings.Secure.getInt(mContext.getContentResolver(), - Settings.Secure.WIFI_NUM_ALLOWED_CHANNELS); + Settings.Secure.WIFI_COUNTRY_CODE); } catch (Settings.SettingNotFoundException e) { // note this is not persisting WifiManager wM = (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE); - wM.setNumAllowedChannels(wifiChannels, false); + wM.setCountryCode(country, false); } } return; diff --git a/telephony/tests/telephonytests/src/com/android/internal/telephony/MccTableTest.java b/telephony/tests/telephonytests/src/com/android/internal/telephony/MccTableTest.java index 7eb3df8..868c76d 100644 --- a/telephony/tests/telephonytests/src/com/android/internal/telephony/MccTableTest.java +++ b/telephony/tests/telephonytests/src/com/android/internal/telephony/MccTableTest.java @@ -72,16 +72,4 @@ public class MccTableTest extends AndroidTestCase { assertEquals(MccTable.smallestDigitsMccForMnc(0), 2); // mcc not defined, hence default assertEquals(MccTable.smallestDigitsMccForMnc(2000), 2); // mcc not defined, hence default } - - @SmallTest - public void testWifi() throws Exception { - assertEquals(MccTable.wifiChannelsForMcc(262), 13); - assertEquals(MccTable.wifiChannelsForMcc(234), 13); - assertEquals(MccTable.wifiChannelsForMcc(505), 11); - assertEquals(MccTable.wifiChannelsForMcc(313), 11); - assertEquals(MccTable.wifiChannelsForMcc(330), 0); // wifi not defined, hence default - assertEquals(MccTable.wifiChannelsForMcc(0), 0); // mcc not defined, hence default - assertEquals(MccTable.wifiChannelsForMcc(2000), 0); // mcc not defined, hence default - - } } diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl index 720f6ac..4bd5286 100644 --- a/wifi/java/android/net/wifi/IWifiManager.aidl +++ b/wifi/java/android/net/wifi/IWifiManager.aidl @@ -58,11 +58,7 @@ interface IWifiManager int getWifiEnabledState(); - int getNumAllowedChannels(); - - boolean setNumAllowedChannels(int numChannels, boolean persist); - - int[] getValidChannelCounts(); + void setCountryCode(String country, boolean persist); boolean saveConfiguration(); diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index 356a0bd..c85a988 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -672,57 +672,19 @@ public class WifiManager { } /** - * Return the number of frequency channels that are allowed - * to be used in the current regulatory domain. - * @return the number of allowed channels, or {@code -1} if an error occurs + * Set the country code. + * @param countryCode country code in ISO 3166 format. + * @param persist {@code true} if this needs to be remembered * - * @hide pending API council - */ - public int getNumAllowedChannels() { - try { - return mService.getNumAllowedChannels(); - } catch (RemoteException e) { - return -1; - } - } - - /** - * Set the number of frequency channels that are allowed to be used - * in the current regulatory domain. This method should be used only - * if the correct number of channels cannot be determined automatically - * for some reason. - * @param numChannels the number of allowed channels. Must be greater than 0 - * and less than or equal to 16. - * @param persist {@code true} if you want this remembered - * @return {@code true} if the operation succeeds, {@code false} otherwise, e.g., - * {@code numChannels} is out of range. - * - * @hide pending API council + * @hide */ - public boolean setNumAllowedChannels(int numChannels, boolean persist) { + public void setCountryCode(String country, boolean persist) { try { - return mService.setNumAllowedChannels(numChannels, persist); - } catch (RemoteException e) { - return false; - } + mService.setCountryCode(country, persist); + } catch (RemoteException e) { } } /** - * Return the list of valid values for the number of allowed radio channels - * for various regulatory domains. - * @return the list of channel counts, or {@code null} if the operation fails - * - * @hide pending API council review - */ - public int[] getValidChannelCounts() { - try { - return mService.getValidChannelCounts(); - } catch (RemoteException e) { - return null; - } - } - - /** * Return the DHCP-assigned addresses from the last successful DHCP request, * if any. * @return the DHCP information diff --git a/wifi/java/android/net/wifi/WifiNative.java b/wifi/java/android/net/wifi/WifiNative.java index 3d8157c..06f945b 100644 --- a/wifi/java/android/net/wifi/WifiNative.java +++ b/wifi/java/android/net/wifi/WifiNative.java @@ -117,10 +117,6 @@ public class WifiNative { public native static int getPowerModeCommand(); - public native static boolean setNumAllowedChannelsCommand(int numChannels); - - public native static int getNumAllowedChannelsCommand(); - /** * Sets the bluetooth coexistence mode. * @@ -163,6 +159,8 @@ public class WifiNative { public native static boolean setSuspendOptimizationsCommand(boolean enabled); + public native static boolean setCountryCodeCommand(String countryCode); + /** * Wait for the supplicant to send an event, returning the event string. * @return the event string sent by the supplicant. diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java index 3531749..fdb50e2 100644 --- a/wifi/java/android/net/wifi/WifiStateMachine.java +++ b/wifi/java/android/net/wifi/WifiStateMachine.java @@ -111,7 +111,6 @@ public class WifiStateMachine extends HierarchicalStateMachine { private String mInterfaceName; - private int mNumAllowedChannels = 0; private int mLastSignalLevel = -1; private String mLastBssid; private int mLastNetworkId; @@ -271,8 +270,8 @@ public class WifiStateMachine extends HierarchicalStateMachine { * false(0) */ private static final int CMD_SET_BLUETOOTH_SCAN_MODE = 79; - /* Set number of allowed channels */ - private static final int CMD_SET_NUM_ALLOWED_CHANNELS = 80; + /* Set the country code */ + private static final int CMD_SET_COUNTRY_CODE = 80; /* Request connectivity manager wake lock before driver stop */ private static final int CMD_REQUEST_CM_WAKELOCK = 81; /* Enables RSSI poll */ @@ -308,6 +307,7 @@ public class WifiStateMachine extends HierarchicalStateMachine { private static final int CMD_START_WPS_PIN_FROM_AP = 90; /* Start Wi-Fi protected setup pin method configuration with pin obtained from device */ private static final int CMD_START_WPS_PIN_FROM_DEVICE = 91; + /** * Interval in milliseconds between polling for connection * status items that are not sent via asynchronous events. @@ -831,42 +831,17 @@ public class WifiStateMachine extends HierarchicalStateMachine { } /** - * Set the number of allowed radio frequency channels from the system - * setting value, if any. + * Set the country code + * @param countryCode following ISO 3166 format + * @param persist {@code true} if the setting should be remembered. */ - public void setNumAllowedChannels() { - try { - setNumAllowedChannels( - Settings.Secure.getInt(mContext.getContentResolver(), - Settings.Secure.WIFI_NUM_ALLOWED_CHANNELS)); - } catch (Settings.SettingNotFoundException e) { - if (mNumAllowedChannels != 0) { - setNumAllowedChannels(mNumAllowedChannels); - } - // otherwise, use the driver default + public void setCountryCode(String countryCode, boolean persist) { + if (persist) { + Settings.Secure.putString(mContext.getContentResolver(), + Settings.Secure.WIFI_COUNTRY_CODE, + countryCode); } - } - - /** - * Set the number of radio frequency channels that are allowed to be used - * in the current regulatory domain. - * @param numChannels the number of allowed channels. Must be greater than 0 - * and less than or equal to 16. - */ - public void setNumAllowedChannels(int numChannels) { - sendMessage(obtainMessage(CMD_SET_NUM_ALLOWED_CHANNELS, numChannels, 0)); - } - - /** - * Get number of allowed channels - * - * @return channel count, -1 on failure - * - * TODO: this is not a public API and needs to be removed in favor - * of asynchronous reporting. unused for now. - */ - public int getNumAllowedChannels() { - return -1; + sendMessage(obtainMessage(CMD_SET_COUNTRY_CODE, countryCode)); } /** @@ -957,7 +932,6 @@ public class WifiStateMachine extends HierarchicalStateMachine { sb.append("mWifiInfo ").append(mWifiInfo).append(LS); sb.append("mDhcpInfo ").append(mDhcpInfo).append(LS); sb.append("mNetworkInfo ").append(mNetworkInfo).append(LS); - sb.append("mNumAllowedChannels ").append(mNumAllowedChannels).append(LS); sb.append("mLastSignalLevel ").append(mLastSignalLevel).append(LS); sb.append("mLastBssid ").append(mLastBssid).append(LS); sb.append("mLastNetworkId ").append(mLastNetworkId).append(LS); @@ -977,6 +951,19 @@ public class WifiStateMachine extends HierarchicalStateMachine { * Internal private functions ********************************************************/ + /** + * Set the country code from the system setting value, if any. + */ + private void setCountryCode() { + String countryCode = Settings.Secure.getString(mContext.getContentResolver(), + Settings.Secure.WIFI_COUNTRY_CODE); + if (countryCode != null && !countryCode.isEmpty()) { + setCountryCode(countryCode, false); + } else { + //use driver default + } + } + private void setWifiState(int wifiState) { final int previousWifiState = mWifiState.get(); @@ -1563,7 +1550,7 @@ public class WifiStateMachine extends HierarchicalStateMachine { case CMD_SET_HIGH_PERF_MODE: case CMD_SET_BLUETOOTH_COEXISTENCE: case CMD_SET_BLUETOOTH_SCAN_MODE: - case CMD_SET_NUM_ALLOWED_CHANNELS: + case CMD_SET_COUNTRY_CODE: case CMD_REQUEST_CM_WAKELOCK: case CMD_CONNECT_NETWORK: case CMD_SAVE_NETWORK: @@ -1665,7 +1652,7 @@ public class WifiStateMachine extends HierarchicalStateMachine { case CMD_SET_HIGH_PERF_MODE: case CMD_SET_BLUETOOTH_COEXISTENCE: case CMD_SET_BLUETOOTH_SCAN_MODE: - case CMD_SET_NUM_ALLOWED_CHANNELS: + case CMD_SET_COUNTRY_CODE: case CMD_START_PACKET_FILTERING: case CMD_STOP_PACKET_FILTERING: deferMessage(message); @@ -1793,7 +1780,7 @@ public class WifiStateMachine extends HierarchicalStateMachine { case CMD_SET_HIGH_PERF_MODE: case CMD_SET_BLUETOOTH_COEXISTENCE: case CMD_SET_BLUETOOTH_SCAN_MODE: - case CMD_SET_NUM_ALLOWED_CHANNELS: + case CMD_SET_COUNTRY_CODE: case CMD_START_PACKET_FILTERING: case CMD_STOP_PACKET_FILTERING: deferMessage(message); @@ -1890,7 +1877,7 @@ public class WifiStateMachine extends HierarchicalStateMachine { case CMD_SET_HIGH_PERF_MODE: case CMD_SET_BLUETOOTH_COEXISTENCE: case CMD_SET_BLUETOOTH_SCAN_MODE: - case CMD_SET_NUM_ALLOWED_CHANNELS: + case CMD_SET_COUNTRY_CODE: case CMD_START_PACKET_FILTERING: case CMD_STOP_PACKET_FILTERING: deferMessage(message); @@ -2034,7 +2021,7 @@ public class WifiStateMachine extends HierarchicalStateMachine { case CMD_SET_HIGH_PERF_MODE: case CMD_SET_BLUETOOTH_COEXISTENCE: case CMD_SET_BLUETOOTH_SCAN_MODE: - case CMD_SET_NUM_ALLOWED_CHANNELS: + case CMD_SET_COUNTRY_CODE: case CMD_START_PACKET_FILTERING: case CMD_STOP_PACKET_FILTERING: case CMD_START_SCAN: @@ -2060,8 +2047,8 @@ public class WifiStateMachine extends HierarchicalStateMachine { mIsRunning = true; updateBatteryWorkSource(null); - /* Initialize channel count */ - setNumAllowedChannels(); + /* set country code */ + setCountryCode(); if (mIsScanMode) { WifiNative.setScanResultHandlingCommand(SCAN_ONLY_MODE); @@ -2093,9 +2080,12 @@ public class WifiStateMachine extends HierarchicalStateMachine { case CMD_SET_BLUETOOTH_SCAN_MODE: WifiNative.setBluetoothCoexistenceScanModeCommand(message.arg1 == 1); break; - case CMD_SET_NUM_ALLOWED_CHANNELS: - mNumAllowedChannels = message.arg1; - WifiNative.setNumAllowedChannelsCommand(message.arg1); + case CMD_SET_COUNTRY_CODE: + String country = (String) message.obj; + Log.d(TAG, "set country code " + country); + if (!WifiNative.setCountryCodeCommand(country.toUpperCase())) { + Log.e(TAG, "Failed to set country code " + country); + } break; case CMD_STOP_DRIVER: mWakeLock.acquire(); @@ -2151,7 +2141,7 @@ public class WifiStateMachine extends HierarchicalStateMachine { case CMD_SET_HIGH_PERF_MODE: case CMD_SET_BLUETOOTH_COEXISTENCE: case CMD_SET_BLUETOOTH_SCAN_MODE: - case CMD_SET_NUM_ALLOWED_CHANNELS: + case CMD_SET_COUNTRY_CODE: case CMD_START_PACKET_FILTERING: case CMD_STOP_PACKET_FILTERING: case CMD_START_SCAN: |