diff options
Diffstat (limited to 'wifi/java/android')
-rw-r--r-- | wifi/java/android/net/wifi/IWifiManager.aidl | 2 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/WifiManager.java | 5 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/WifiNative.java | 2 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/WifiStateTracker.java | 24 |
4 files changed, 24 insertions, 9 deletions
diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl index 3d65d3c..c31577c 100644 --- a/wifi/java/android/net/wifi/IWifiManager.aidl +++ b/wifi/java/android/net/wifi/IWifiManager.aidl @@ -58,7 +58,7 @@ interface IWifiManager int getNumAllowedChannels(); - boolean setNumAllowedChannels(int numChannels); + boolean setNumAllowedChannels(int numChannels, boolean persist); int[] getValidChannelCounts(); diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index 5b8ced6..c4dff6a 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -538,14 +538,15 @@ public class WifiManager { * 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 */ - public boolean setNumAllowedChannels(int numChannels) { + public boolean setNumAllowedChannels(int numChannels, boolean persist) { try { - return mService.setNumAllowedChannels(numChannels); + return mService.setNumAllowedChannels(numChannels, persist); } catch (RemoteException e) { return false; } diff --git a/wifi/java/android/net/wifi/WifiNative.java b/wifi/java/android/net/wifi/WifiNative.java index 3851ac0..0920567 100644 --- a/wifi/java/android/net/wifi/WifiNative.java +++ b/wifi/java/android/net/wifi/WifiNative.java @@ -79,6 +79,8 @@ public class WifiNative { public native static int getRssiCommand(); + public native static int getRssiApproxCommand(); + public native static int getLinkSpeedCommand(); public native static String getMacAddressCommand(); diff --git a/wifi/java/android/net/wifi/WifiStateTracker.java b/wifi/java/android/net/wifi/WifiStateTracker.java index 2fbc779..f84bccc 100644 --- a/wifi/java/android/net/wifi/WifiStateTracker.java +++ b/wifi/java/android/net/wifi/WifiStateTracker.java @@ -183,6 +183,10 @@ public class WifiStateTracker extends NetworkStateTracker { private boolean mUseStaticIp = false; private int mReconnectCount; + // used to store the (non-persisted) num determined during device boot + // (from mcc or other phone info) before the driver is started. + private int mNumAllowedChannels = 0; + // Variables relating to the 'available networks' notification /** @@ -571,9 +575,12 @@ public class WifiStateTracker extends NetworkStateTracker { try { return setNumAllowedChannels( Settings.Secure.getInt(mContext.getContentResolver(), - Settings.Secure.WIFI_NUM_ALLOWED_CHANNELS)); + Settings.Secure.WIFI_NUM_ALLOWED_CHANNELS)); } catch (Settings.SettingNotFoundException e) { - // if setting doesn't exist, stick with the driver default + if (mNumAllowedChannels != 0) { + WifiNative.setNumAllowedChannelsCommand(mNumAllowedChannels); + } + // otherwise, use the driver default } return true; } @@ -587,6 +594,7 @@ public class WifiStateTracker extends NetworkStateTracker { * {@code numChannels} is outside the valid range. */ public synchronized boolean setNumAllowedChannels(int numChannels) { + mNumAllowedChannels = numChannels; return WifiNative.setNumAllowedChannelsCommand(numChannels); } @@ -1021,7 +1029,7 @@ public class WifiStateTracker extends NetworkStateTracker { case EVENT_POLL_INTERVAL: if (mWifiInfo.getSupplicantState() != SupplicantState.UNINITIALIZED) { - requestPolledInfo(mWifiInfo); + requestPolledInfo(mWifiInfo, true); if (mWifiInfo.getSupplicantState() == SupplicantState.COMPLETED) { setPollTimer(); } @@ -1268,7 +1276,7 @@ public class WifiStateTracker extends NetworkStateTracker { */ public WifiInfo requestConnectionInfo() { requestConnectionStatus(mWifiInfo); - requestPolledInfo(mWifiInfo); + requestPolledInfo(mWifiInfo, false); return mWifiInfo; } @@ -1323,10 +1331,14 @@ public class WifiStateTracker extends NetworkStateTracker { * Get the dynamic information that is not reported via events. * @param info the object into which the information should be captured. */ - private synchronized void requestPolledInfo(WifiInfo info) + private synchronized void requestPolledInfo(WifiInfo info, boolean polling) { int newRssi = WifiNative.getRssiCommand(); - if (newRssi != -1 && -200 < newRssi && newRssi < 100) { // screen out invalid values + if (newRssi != -1 && -200 < newRssi && newRssi < 256) { // screen out invalid values + /* some implementations avoid negative values by adding 256 + * so we need to adjust for that here. + */ + if (newRssi > 0) newRssi -= 256; info.setRssi(newRssi); /* * Rather then sending the raw RSSI out every time it |