diff options
Diffstat (limited to 'wifi')
-rw-r--r-- | wifi/java/android/net/wifi/BatchedScanSettings.java | 10 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/IWifiManager.aidl | 6 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/ScanResult.java | 3 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/ScanSettings.aidl | 19 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/ScanSettings.java | 87 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/WifiChannel.aidl | 19 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/WifiChannel.java | 87 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/WifiInfo.java | 30 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/WifiManager.java | 58 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/hotspot/IWifiHotspotManager.aidl | 28 | ||||
-rw-r--r-- | wifi/java/android/net/wifi/hotspot/WifiHotspotManager.java | 48 |
11 files changed, 380 insertions, 15 deletions
diff --git a/wifi/java/android/net/wifi/BatchedScanSettings.java b/wifi/java/android/net/wifi/BatchedScanSettings.java index f7ebc17..54801ad 100644 --- a/wifi/java/android/net/wifi/BatchedScanSettings.java +++ b/wifi/java/android/net/wifi/BatchedScanSettings.java @@ -34,17 +34,17 @@ public class BatchedScanSettings implements Parcelable { /** Used to indicate no preference for an int value */ public final static int UNSPECIFIED = Integer.MAX_VALUE; - // TODO - make MIN/mAX dynamic and gservices adjustable. + // TODO - make MIN/mAX as standard for wifi batch capability requirement. public final static int MIN_SCANS_PER_BATCH = 2; - public final static int MAX_SCANS_PER_BATCH = 255; + public final static int MAX_SCANS_PER_BATCH = 20; public final static int DEFAULT_SCANS_PER_BATCH = MAX_SCANS_PER_BATCH; public final static int MIN_AP_PER_SCAN = 2; - public final static int MAX_AP_PER_SCAN = 255; + public final static int MAX_AP_PER_SCAN = 16; public final static int DEFAULT_AP_PER_SCAN = 16; - public final static int MIN_INTERVAL_SEC = 0; - public final static int MAX_INTERVAL_SEC = 3600; + public final static int MIN_INTERVAL_SEC = 10; + public final static int MAX_INTERVAL_SEC = 500; public final static int DEFAULT_INTERVAL_SEC = 30; public final static int MIN_AP_FOR_DISTANCE = 0; diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl index 0b67c97..0535fe0 100644 --- a/wifi/java/android/net/wifi/IWifiManager.aidl +++ b/wifi/java/android/net/wifi/IWifiManager.aidl @@ -20,6 +20,8 @@ import android.net.wifi.BatchedScanResult; import android.net.wifi.BatchedScanSettings; import android.net.wifi.WifiConfiguration; import android.net.wifi.WifiInfo; +import android.net.wifi.ScanSettings; +import android.net.wifi.WifiChannel; import android.net.wifi.ScanResult; import android.net.DhcpInfo; @@ -45,7 +47,9 @@ interface IWifiManager boolean pingSupplicant(); - void startScan(in WorkSource ws); + List<WifiChannel> getChannelList(); + + void startScan(in ScanSettings requested, in WorkSource ws); List<ScanResult> getScanResults(String callingPackage); diff --git a/wifi/java/android/net/wifi/ScanResult.java b/wifi/java/android/net/wifi/ScanResult.java index 12729d2..d7ecaff 100644 --- a/wifi/java/android/net/wifi/ScanResult.java +++ b/wifi/java/android/net/wifi/ScanResult.java @@ -40,8 +40,7 @@ public class ScanResult implements Parcelable { */ public String capabilities; /** - * The detected signal level in dBm. At least those are the units used by - * the TI driver. + * The detected signal level in dBm. */ public int level; /** diff --git a/wifi/java/android/net/wifi/ScanSettings.aidl b/wifi/java/android/net/wifi/ScanSettings.aidl new file mode 100644 index 0000000..ebd2a39 --- /dev/null +++ b/wifi/java/android/net/wifi/ScanSettings.aidl @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2014, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.wifi; + +parcelable ScanSettings; diff --git a/wifi/java/android/net/wifi/ScanSettings.java b/wifi/java/android/net/wifi/ScanSettings.java new file mode 100644 index 0000000..094ce34 --- /dev/null +++ b/wifi/java/android/net/wifi/ScanSettings.java @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2014, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.wifi; + +import android.os.Parcel; +import android.os.Parcelable; + +import java.util.ArrayList; +import java.util.Collection; + +/** + * Bundle of customized scan settings + * + * @see WifiManager#startCustomizedScan + * + * @hide + */ +public class ScanSettings implements Parcelable { + + /** channel set to scan. this can be null or empty, indicating a full scan */ + public Collection<WifiChannel> channelSet; + + /** public constructor */ + public ScanSettings() { } + + /** copy constructor */ + public ScanSettings(ScanSettings source) { + if (source.channelSet != null) + channelSet = new ArrayList<WifiChannel>(source.channelSet); + } + + /** check for validity */ + public boolean isValid() { + for (WifiChannel channel : channelSet) + if (!channel.isValid()) return false; + return true; + } + + /** implement Parcelable interface */ + @Override + public int describeContents() { + return 0; + } + + /** implement Parcelable interface */ + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeInt(channelSet == null ? 0 : channelSet.size()); + if (channelSet != null) + for (WifiChannel channel : channelSet) channel.writeToParcel(out, flags); + } + + /** implement Parcelable interface */ + public static final Parcelable.Creator<ScanSettings> CREATOR = + new Parcelable.Creator<ScanSettings>() { + @Override + public ScanSettings createFromParcel(Parcel in) { + ScanSettings settings = new ScanSettings(); + int size = in.readInt(); + if (size > 0) { + settings.channelSet = new ArrayList<WifiChannel>(size); + while (size-- > 0) + settings.channelSet.add(WifiChannel.CREATOR.createFromParcel(in)); + } + return settings; + } + + @Override + public ScanSettings[] newArray(int size) { + return new ScanSettings[size]; + } + }; +} diff --git a/wifi/java/android/net/wifi/WifiChannel.aidl b/wifi/java/android/net/wifi/WifiChannel.aidl new file mode 100644 index 0000000..c3d06bd --- /dev/null +++ b/wifi/java/android/net/wifi/WifiChannel.aidl @@ -0,0 +1,19 @@ +/** + * Copyright (c) 2014, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.wifi; + +parcelable WifiChannel; diff --git a/wifi/java/android/net/wifi/WifiChannel.java b/wifi/java/android/net/wifi/WifiChannel.java new file mode 100644 index 0000000..640481e --- /dev/null +++ b/wifi/java/android/net/wifi/WifiChannel.java @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2014, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.wifi; + +import android.os.Parcel; +import android.os.Parcelable; + +/** + * Wifi Channel + * + * @see ScanSettings + * + * @hide + */ +public class WifiChannel implements Parcelable { + + private static final int MIN_FREQ_MHZ = 2412; + private static final int MAX_FREQ_MHZ = 5825; + + private static final int MIN_CHANNEL_NUM = 1; + private static final int MAX_CHANNEL_NUM = 196; + + /** frequency */ + public int freqMHz; + + /** channel number */ + public int channelNum; + + /** is it a DFS channel? */ + public boolean isDFS; + + /** public constructor */ + public WifiChannel() { } + + /** check for validity */ + public boolean isValid() { + if (freqMHz < MIN_FREQ_MHZ || freqMHz > MAX_FREQ_MHZ) return false; + if (channelNum < MIN_CHANNEL_NUM || channelNum > MAX_CHANNEL_NUM) return false; + return true; + } + + /** implement Parcelable interface */ + @Override + public int describeContents() { + return 0; + } + + /** implement Parcelable interface */ + @Override + public void writeToParcel(Parcel out, int flags) { + out.writeInt(freqMHz); + out.writeInt(channelNum); + out.writeInt(isDFS ? 1 : 0); + } + + /** implement Parcelable interface */ + public static final Parcelable.Creator<WifiChannel> CREATOR = + new Parcelable.Creator<WifiChannel>() { + @Override + public WifiChannel createFromParcel(Parcel in) { + WifiChannel channel = new WifiChannel(); + channel.freqMHz = in.readInt(); + channel.channelNum = in.readInt(); + channel.isDFS = in.readInt() != 0; + return channel; + } + + @Override + public WifiChannel[] newArray(int size) { + return new WifiChannel[size]; + } + }; +} diff --git a/wifi/java/android/net/wifi/WifiInfo.java b/wifi/java/android/net/wifi/WifiInfo.java index 6a13067..f44cb0a 100644 --- a/wifi/java/android/net/wifi/WifiInfo.java +++ b/wifi/java/android/net/wifi/WifiInfo.java @@ -69,6 +69,10 @@ public class WifiInfo implements Parcelable { public static final String LINK_SPEED_UNITS = "Mbps"; private int mLinkSpeed; + /** Frequency in MHz */ + public static final String FREQUENCY_UNITS = "MHz"; + private int mFrequency; + private InetAddress mIpAddress; private String mMacAddress; @@ -86,6 +90,7 @@ public class WifiInfo implements Parcelable { mSupplicantState = SupplicantState.UNINITIALIZED; mRssi = -9999; mLinkSpeed = -1; + mFrequency = -1; } /** @@ -100,6 +105,7 @@ public class WifiInfo implements Parcelable { mNetworkId = source.mNetworkId; mRssi = source.mRssi; mLinkSpeed = source.mLinkSpeed; + mFrequency = source.mFrequency; mIpAddress = source.mIpAddress; mMacAddress = source.mMacAddress; mMeteredHint = source.mMeteredHint; @@ -151,9 +157,8 @@ public class WifiInfo implements Parcelable { /** * Returns the received signal strength indicator of the current 802.11 - * network. - * <p><strong>This is not normalized, but should be!</strong></p> - * @return the RSSI, in the range ??? to ??? + * network, in dBm. + * @return the RSSI, in the range -110 to 10 */ public int getRssi() { return mRssi; @@ -179,6 +184,20 @@ public class WifiInfo implements Parcelable { } /** + * Returns the current frequency in {@link #FREQUENCY_UNITS}. + * @return the frequency. + * @see #FREQUENCY_UNITS + */ + public int getFrequency() { + return mFrequency; + } + + /** @hide */ + public void setFrequency(int frequency) { + this.mFrequency = frequency; + } + + /** * Record the MAC address of the WLAN interface * @param macAddress the MAC address in {@code XX:XX:XX:XX:XX:XX} form * @hide @@ -303,7 +322,8 @@ public class WifiInfo implements Parcelable { append(", Supplicant state: "). append(mSupplicantState == null ? none : mSupplicantState). append(", RSSI: ").append(mRssi). - append(", Link speed: ").append(mLinkSpeed). + append(", Link speed: ").append(mLinkSpeed).append(LINK_SPEED_UNITS). + append(", Frequency: ").append(mFrequency).append(FREQUENCY_UNITS). append(", Net ID: ").append(mNetworkId). append(", Metered hint: ").append(mMeteredHint); @@ -320,6 +340,7 @@ public class WifiInfo implements Parcelable { dest.writeInt(mNetworkId); dest.writeInt(mRssi); dest.writeInt(mLinkSpeed); + dest.writeInt(mFrequency); if (mIpAddress != null) { dest.writeByte((byte)1); dest.writeByteArray(mIpAddress.getAddress()); @@ -346,6 +367,7 @@ public class WifiInfo implements Parcelable { info.setNetworkId(in.readInt()); info.setRssi(in.readInt()); info.setLinkSpeed(in.readInt()); + info.setFrequency(in.readInt()); if (in.readByte() == 1) { try { info.setInetAddress(InetAddress.getByAddress(in.createByteArray())); diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index 42cbaae..5af1e4e 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -20,6 +20,8 @@ import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.content.Context; import android.net.DhcpInfo; +import android.net.wifi.ScanSettings; +import android.net.wifi.WifiChannel; import android.os.Binder; import android.os.IBinder; import android.os.Handler; @@ -763,6 +765,22 @@ public class WifiManager { } /** + * Get a list of available channels for customized scan. + * + * @see {@link WifiChannel} + * + * @return the channel list, or null if not available + * @hide + */ + public List<WifiChannel> getChannelList() { + try { + return mService.getChannelList(); + } catch (RemoteException e) { + return null; + } + } + + /** * Request a scan for access points. Returns immediately. The availability * of the results is made known later by means of an asynchronous event sent * on completion of the scan. @@ -770,8 +788,7 @@ public class WifiManager { */ public boolean startScan() { try { - final WorkSource workSource = null; - mService.startScan(workSource); + mService.startScan(null, null); return true; } catch (RemoteException e) { return false; @@ -781,7 +798,42 @@ public class WifiManager { /** @hide */ public boolean startScan(WorkSource workSource) { try { - mService.startScan(workSource); + mService.startScan(null, workSource); + return true; + } catch (RemoteException e) { + return false; + } + } + + /** + * Request a scan for access points in specified channel list. Each channel is specified by its + * frequency in MHz, e.g. "5500" (do NOT include "DFS" even though it is). The availability of + * the results is made known later in the same way as {@link #startScan}. + * + * Note: + * + * 1. Customized scan is for non-connection purposes, i.e. it won't trigger a wifi connection + * even though it finds some known networks. + * + * 2. Customized scan result may include access points that is not specified in the channel + * list. An app will need to do frequency filtering if it wants to get pure results for the + * channel list it specified. + * + * @hide + */ + public boolean startCustomizedScan(ScanSettings requested) { + try { + mService.startScan(requested, null); + return true; + } catch (RemoteException e) { + return false; + } + } + + /** @hide */ + public boolean startCustomizedScan(ScanSettings requested, WorkSource workSource) { + try { + mService.startScan(requested, workSource); return true; } catch (RemoteException e) { return false; diff --git a/wifi/java/android/net/wifi/hotspot/IWifiHotspotManager.aidl b/wifi/java/android/net/wifi/hotspot/IWifiHotspotManager.aidl new file mode 100644 index 0000000..2b1601b --- /dev/null +++ b/wifi/java/android/net/wifi/hotspot/IWifiHotspotManager.aidl @@ -0,0 +1,28 @@ +/** + * Copyright (c) 2014, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.wifi.hotspot; + +/** + * Interface that allows controlling and querying Hotspot connectivity. + * + * {@hide} + */ +interface IWifiHotspotManager +{ + void test(); +} + diff --git a/wifi/java/android/net/wifi/hotspot/WifiHotspotManager.java b/wifi/java/android/net/wifi/hotspot/WifiHotspotManager.java new file mode 100644 index 0000000..ac15017 --- /dev/null +++ b/wifi/java/android/net/wifi/hotspot/WifiHotspotManager.java @@ -0,0 +1,48 @@ +/* + * Copyright (C) 2014 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net.wifi.hotspot; + +import android.content.Context; +import android.os.RemoteException; +import android.util.Log; + +/** + * TODO: doc + */ +public class WifiHotspotManager { + + private static final String TAG = "WifiHotspotManager"; + + private Context mContext; + IWifiHotspotManager mService; + + public WifiHotspotManager(Context context, IWifiHotspotManager service) { + mContext = context; + mService = service; + } + + public void test() { + try{ + Log.d(TAG, "test()"); + mService.test(); + } + catch (RemoteException e) { + Log.e(TAG, "test() exception"); + e.printStackTrace(); + } + } +} |