diff options
author | Yuhao Zheng <yuhaozheng@google.com> | 2014-02-27 03:12:06 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2014-02-27 03:12:06 +0000 |
commit | 72e1400e2f20572ec469eb7c1257546eac1cbcf1 (patch) | |
tree | be5964a549cbcc9d73bb7734b13b5d681bc8281e /wifi | |
parent | d964a746e00c8714758385299d7a2a5c1c204ddf (diff) | |
parent | 738803fee62a98f244250996380820c4923e7f7b (diff) | |
download | frameworks_base-72e1400e2f20572ec469eb7c1257546eac1cbcf1.zip frameworks_base-72e1400e2f20572ec469eb7c1257546eac1cbcf1.tar.gz frameworks_base-72e1400e2f20572ec469eb7c1257546eac1cbcf1.tar.bz2 |
Merge "Add new API to scan a given channel set"
Diffstat (limited to 'wifi')
-rw-r--r-- | wifi/java/android/net/wifi/IWifiManager.aidl | 6 | ||||
-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/WifiManager.java | 58 |
6 files changed, 272 insertions, 4 deletions
diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl index 4a6b1ff..84e933d 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/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/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index aabe007..0862b7e 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; |