summaryrefslogtreecommitdiffstats
path: root/wifi
diff options
context:
space:
mode:
Diffstat (limited to 'wifi')
-rw-r--r--wifi/java/android/net/wifi/BatchedScanSettings.java10
-rw-r--r--wifi/java/android/net/wifi/IWifiManager.aidl6
-rw-r--r--wifi/java/android/net/wifi/ScanResult.java3
-rw-r--r--wifi/java/android/net/wifi/ScanSettings.aidl19
-rw-r--r--wifi/java/android/net/wifi/ScanSettings.java87
-rw-r--r--wifi/java/android/net/wifi/WifiChannel.aidl19
-rw-r--r--wifi/java/android/net/wifi/WifiChannel.java87
-rw-r--r--wifi/java/android/net/wifi/WifiInfo.java30
-rw-r--r--wifi/java/android/net/wifi/WifiManager.java58
-rw-r--r--wifi/java/android/net/wifi/hotspot/IWifiHotspotManager.aidl28
-rw-r--r--wifi/java/android/net/wifi/hotspot/WifiHotspotManager.java48
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();
+ }
+ }
+}