Merge remote-tracking branch 'goog/mirror-m-wireless-internal-release' into master_merge

Change-Id: I49aab437af220f1139cfd2d0a9c362acce31074e
This commit is contained in:
Prerepa Viswanadham
2015-03-24 13:46:08 -07:00
23 changed files with 760 additions and 97 deletions

View File

@@ -6950,6 +6950,7 @@ package android.bluetooth.le {
field public static final int SCAN_MODE_BALANCED = 1; // 0x1
field public static final int SCAN_MODE_LOW_LATENCY = 2; // 0x2
field public static final int SCAN_MODE_LOW_POWER = 0; // 0x0
field public static final int SCAN_MODE_OPPORTUNISTIC = -1; // 0xffffffff
}
public static final class ScanSettings.Builder {
@@ -18576,7 +18577,10 @@ package android.net.wifi {
field public int frequency;
field public boolean is80211McRTTResponder;
field public int level;
field public java.lang.String operatorFriendlyName;
field public boolean passpointNetwork;
field public long timestamp;
field public java.lang.String venueName;
}
public final class SupplicantState extends java.lang.Enum implements android.os.Parcelable {
@@ -18603,6 +18607,7 @@ package android.net.wifi {
public class WifiConfiguration implements android.os.Parcelable {
ctor public WifiConfiguration();
method public int describeContents();
method public boolean isPasspoint();
method public void writeToParcel(android.os.Parcel, int);
field public java.lang.String BSSID;
field public java.lang.String FQDN;

View File

@@ -7145,6 +7145,7 @@ package android.bluetooth.le {
field public static final int SCAN_MODE_BALANCED = 1; // 0x1
field public static final int SCAN_MODE_LOW_LATENCY = 2; // 0x2
field public static final int SCAN_MODE_LOW_POWER = 0; // 0x0
field public static final int SCAN_MODE_OPPORTUNISTIC = -1; // 0xffffffff
field public static final int SCAN_RESULT_TYPE_ABBREVIATED = 1; // 0x1
field public static final int SCAN_RESULT_TYPE_FULL = 0; // 0x0
}
@@ -20068,7 +20069,8 @@ package android.net.wifi {
}
public class RttManager {
method public android.net.wifi.RttManager.Capabilities getCapabilities();
method public deprecated android.net.wifi.RttManager.Capabilities getCapabilities();
method public android.net.wifi.RttManager.RttCapabilities getRttCapabilities();
method public void startRanging(android.net.wifi.RttManager.RttParams[], android.net.wifi.RttManager.RttListener);
method public void stopRanging(android.net.wifi.RttManager.RttListener);
field public static final int BASE = 160256; // 0x27200
@@ -20078,10 +20080,19 @@ package android.net.wifi {
field public static final int CMD_OP_STOP_RANGING = 160257; // 0x27201
field public static final int CMD_OP_SUCCEEDED = 160259; // 0x27203
field public static final java.lang.String DESCRIPTION_KEY = "android.net.wifi.RttManager.Description";
field public static final int PREAMBLE_HT = 2; // 0x2
field public static final int PREAMBLE_LEGACY = 1; // 0x1
field public static final int PREAMBLE_VHT = 4; // 0x4
field public static final int REASON_INVALID_LISTENER = -3; // 0xfffffffd
field public static final int REASON_INVALID_REQUEST = -4; // 0xfffffffc
field public static final int REASON_NOT_AVAILABLE = -2; // 0xfffffffe
field public static final int REASON_UNSPECIFIED = -1; // 0xffffffff
field public static final int RTT_BW_10_SUPPORT = 2; // 0x2
field public static final int RTT_BW_160_SUPPORT = 32; // 0x20
field public static final int RTT_BW_20_SUPPORT = 4; // 0x4
field public static final int RTT_BW_40_SUPPORT = 8; // 0x8
field public static final int RTT_BW_5_SUPPORT = 1; // 0x1
field public static final int RTT_BW_80_SUPPORT = 16; // 0x10
field public static final int RTT_CHANNEL_WIDTH_10 = 6; // 0x6
field public static final int RTT_CHANNEL_WIDTH_160 = 3; // 0x3
field public static final int RTT_CHANNEL_WIDTH_20 = 0; // 0x0
@@ -20089,26 +20100,31 @@ package android.net.wifi {
field public static final int RTT_CHANNEL_WIDTH_5 = 5; // 0x5
field public static final int RTT_CHANNEL_WIDTH_80 = 2; // 0x2
field public static final int RTT_CHANNEL_WIDTH_80P80 = 4; // 0x4
field public static final int RTT_CHANNEL_WIDTH_UNSPECIFIED = -1; // 0xffffffff
field public static final deprecated int RTT_CHANNEL_WIDTH_UNSPECIFIED = -1; // 0xffffffff
field public static final int RTT_PEER_TYPE_AP = 1; // 0x1
field public static final int RTT_PEER_TYPE_STA = 2; // 0x2
field public static final int RTT_PEER_TYPE_UNSPECIFIED = 0; // 0x0
field public static final int RTT_STATUS_ABORTED = 8; // 0x8
field public static final int RTT_STATUS_FAILURE = 1; // 0x1
field public static final int RTT_STATUS_FAIL_AP_ON_DIFF_CHANNEL = 6; // 0x6
field public static final int RTT_STATUS_FAIL_BUSY_TRY_LATER = 12; // 0xc
field public static final int RTT_STATUS_FAIL_INVALID_TS = 9; // 0x9
field public static final int RTT_STATUS_FAIL_NOT_SCHEDULED_YET = 4; // 0x4
field public static final int RTT_STATUS_FAIL_NO_CAPABILITY = 7; // 0x7
field public static final int RTT_STATUS_FAIL_NO_RSP = 2; // 0x2
field public static final int RTT_STATUS_FAIL_PROTOCOL = 10; // 0xa
field public static final int RTT_STATUS_FAIL_REJECTED = 3; // 0x3
field public static final int RTT_STATUS_FAIL_SCHEDULE = 11; // 0xb
field public static final int RTT_STATUS_FAIL_TM_TIMEOUT = 5; // 0x5
field public static final int RTT_STATUS_SUCCESS = 0; // 0x0
field public static final int RTT_TYPE_11_MC = 4; // 0x4
field public static final int RTT_TYPE_11_V = 2; // 0x2
field public static final deprecated int RTT_TYPE_11_MC = 4; // 0x4
field public static final deprecated int RTT_TYPE_11_V = 2; // 0x2
field public static final int RTT_TYPE_ONE_SIDED = 1; // 0x1
field public static final int RTT_TYPE_UNSPECIFIED = 0; // 0x0
field public static final int RTT_TYPE_TWO_SIDED = 4; // 0x4
field public static final deprecated int RTT_TYPE_UNSPECIFIED = 0; // 0x0
}
public class RttManager.Capabilities {
public deprecated class RttManager.Capabilities {
ctor public RttManager.Capabilities();
field public int supportedPeerType;
field public int supportedType;
@@ -20127,6 +20143,20 @@ package android.net.wifi {
field public android.net.wifi.RttManager.RttResult[] mResults;
}
public static class RttManager.RttCapabilities implements android.os.Parcelable {
ctor public RttManager.RttCapabilities();
method public int describeContents();
method public void writeToParcel(android.os.Parcel, int);
field public int bwSupported;
field public boolean lciSupported;
field public boolean lcrSupported;
field public boolean oneSidedRttSupported;
field public int preambleSupported;
field public deprecated boolean supportedPeerType;
field public deprecated boolean supportedType;
field public boolean twoSided11McRttSupported;
}
public static abstract interface RttManager.RttListener {
method public abstract void onAborted();
method public abstract void onFailure(int, java.lang.String);
@@ -20135,30 +20165,64 @@ package android.net.wifi {
public static class RttManager.RttParams {
ctor public RttManager.RttParams();
field public boolean LCIRequest;
field public boolean LCRRequest;
field public int bandwidth;
field public java.lang.String bssid;
field public int burstTimeout;
field public int centerFreq0;
field public int centerFreq1;
field public int channelWidth;
field public int deviceType;
field public int frequency;
field public int num_retries;
field public int num_samples;
field public int interval;
field public int numRetriesPerFTMR;
field public int numRetriesPerMeasurementFrame;
field public int numSamplesPerBurst;
field public deprecated int num_retries;
field public deprecated int num_samples;
field public int numberBurst;
field public int preamble;
field public int requestType;
}
public static class RttManager.RttResult {
ctor public RttManager.RttResult();
field public java.lang.String bssid;
field public int distance_cm;
field public int distance_sd_cm;
field public int distance_spread_cm;
field public int requestType;
field public int burstDuration;
field public int burstNumber;
field public int distance;
field public int distanceSpread;
field public int distanceStandardDeviation;
field public deprecated int distance_cm;
field public deprecated int distance_sd_cm;
field public deprecated int distance_spread_cm;
field public int frameNumberPerBurstPeer;
field public int measurementFrameNumber;
field public int measurementType;
field public deprecated int requestType;
field public int retryAfterDuration;
field public int rssi;
field public int rssi_spread;
field public long rtt_ns;
field public long rtt_sd_ns;
field public long rtt_spread_ns;
field public int rssiSpread;
field public deprecated int rssi_spread;
field public long rtt;
field public long rttSpread;
field public long rttStandardDeviation;
field public deprecated long rtt_ns;
field public deprecated long rtt_sd_ns;
field public deprecated long rtt_spread_ns;
field public int rxRate;
field public int status;
field public int successMeasurementFrameNumber;
field public long ts;
field public int tx_rate;
field public int txRate;
field public deprecated int tx_rate;
}
public class RttManager.wifiInformationElement {
ctor public RttManager.wifiInformationElement();
field public java.lang.String data;
field public int id;
}
public class ScanResult implements android.os.Parcelable {
@@ -20178,7 +20242,10 @@ package android.net.wifi {
field public int frequency;
field public boolean is80211McRTTResponder;
field public int level;
field public java.lang.String operatorFriendlyName;
field public boolean passpointNetwork;
field public long timestamp;
field public java.lang.String venueName;
}
public final class SupplicantState extends java.lang.Enum implements android.os.Parcelable {
@@ -20205,6 +20272,7 @@ package android.net.wifi {
public class WifiConfiguration implements android.os.Parcelable {
ctor public WifiConfiguration();
method public int describeContents();
method public boolean isPasspoint();
method public void writeToParcel(android.os.Parcel, int);
field public java.lang.String BSSID;
field public java.lang.String FQDN;

View File

@@ -25,6 +25,13 @@ import android.os.Parcelable;
* parameters for the scan.
*/
public final class ScanSettings implements Parcelable {
/**
* A special Bluetooth LE scan mode. Applications using this scan mode will passively listen for
* other scan results without starting BLE scans themselves.
*/
public static final int SCAN_MODE_OPPORTUNISTIC = -1;
/**
* Perform Bluetooth LE scan in low power mode. This is the default scan mode as it consumes the
* least power.
@@ -177,7 +184,7 @@ public final class ScanSettings implements Parcelable {
* @throws IllegalArgumentException If the {@code scanMode} is invalid.
*/
public Builder setScanMode(int scanMode) {
if (scanMode < SCAN_MODE_LOW_POWER || scanMode > SCAN_MODE_LOW_LATENCY) {
if (scanMode < SCAN_MODE_OPPORTUNISTIC || scanMode > SCAN_MODE_LOW_LATENCY) {
throw new IllegalArgumentException("invalid scan mode " + scanMode);
}
mScanMode = scanMode;

View File

@@ -2337,7 +2337,7 @@ public class ConnectivityManager {
* successfully finding a network for the applications request. Retrieve it with
* {@link android.content.Intent#getParcelableExtra(String)}.
* <p>
* Note that if you intend to invoke (@link #setProcessDefaultNetwork(Network)) or
* Note that if you intend to invoke {@link #setProcessDefaultNetwork} or
* {@link Network#openConnection(java.net.URL)} then you must get a
* ConnectivityManager instance before doing so.
*/

View File

@@ -148,9 +148,9 @@ public final class NetworkCapabilities implements Parcelable {
*/
public static final int NET_CAPABILITY_TRUSTED = 14;
/*
/**
* Indicates that this network is not a VPN. This capability is set by default and should be
* explicitly cleared when creating VPN networks.
* explicitly cleared for VPN networks.
*/
public static final int NET_CAPABILITY_NOT_VPN = 15;

View File

@@ -723,6 +723,12 @@ public class TextureView extends View {
mSurface.release();
}
mSurface = surfaceTexture;
// If the view is visible, update the listener in the new surface to use
// the existing listener in the view.
if (((mViewFlags & VISIBILITY_MASK) == VISIBLE)) {
mSurface.setOnFrameAvailableListener(mUpdateListener, mAttachInfo.mHandler);
}
mUpdateSurface = true;
invalidateParentIfNeeded();
}

View File

@@ -52,6 +52,7 @@ public class Protocol {
public static final int BASE_WIFI_RTT_SERVICE = 0x00027300;
public static final int BASE_WIFI_PASSPOINT_MANAGER = 0x00028000;
public static final int BASE_WIFI_PASSPOINT_SERVICE = 0x00028100;
public static final int BASE_WIFI_LOGGER = 0x00028300;
public static final int BASE_DHCP = 0x00030000;
public static final int BASE_DATA_CONNECTION = 0x00040000;
public static final int BASE_DATA_CONNECTION_AC = 0x00041000;

View File

@@ -29,4 +29,6 @@
<string-array name="wfcOperatorErrorMessages">
<item>Wi-Fi Calling isn\&apos;t available. Contact your carrier to enable Wi-Fi Calling.</item>
</string-array>
<!-- Template for showing cellular network operator name while WFC is active -->
<string name="wfcSpnFormat">%s Wi-Fi Calling</string>
</resources>

View File

@@ -1112,6 +1112,18 @@
device does not support multiple advertisement-->
<integer translatable="false" name="config_bluetooth_max_advertisers">0</integer>
<!-- Idle current for bluetooth controller. 0 by default-->
<integer translatable="false" name="config_bluetooth_idle_cur_ma">1</integer>
<!-- Rx current for bluetooth controller. 0 by default-->
<integer translatable="false" name="config_bluetooth_rx_cur_ma">2</integer>
<!-- Tx current for bluetooth controller. 0 by default-->
<integer translatable="false" name="config_bluetooth_tx_cur_ma">3</integer>
<!-- Operating volatage for bluetooth controller. 0 by default-->
<integer translatable="false" name="config_bluetooth_operating_voltage_mv">4</integer>
<!-- The default data-use polling period. -->
<integer name="config_datause_polling_period_sec">600</integer>

View File

@@ -251,6 +251,8 @@
<string-array name="wfcOperatorErrorCodes" translatable="false" />
<!-- WFC Operator Error Messages -->
<string-array name="wfcOperatorErrorMessages" />
<!-- Template for showing cellular network operator name while WFC is active -->
<string name="wfcSpnFormat">%s</string>
<!--
{0} is one of "bearerServiceCode*"

View File

@@ -349,6 +349,10 @@
<java-symbol type="integer" name="config_burnInProtectionMinVerticalOffset" />
<java-symbol type="integer" name="config_burnInProtectionMaxVerticalOffset" />
<java-symbol type="integer" name="config_burnInProtectionMaxRadius" />
<java-symbol type="integer" name="config_bluetooth_idle_cur_ma" />
<java-symbol type="integer" name="config_bluetooth_rx_cur_ma" />
<java-symbol type="integer" name="config_bluetooth_tx_cur_ma" />
<java-symbol type="integer" name="config_bluetooth_operating_voltage_mv" />
<java-symbol type="integer" name="config_cursorWindowSize" />
<java-symbol type="integer" name="config_drawLockTimeoutMillis" />
<java-symbol type="integer" name="config_doublePressOnPowerBehavior" />
@@ -756,6 +760,7 @@
<java-symbol type="string" name="wfcRegErrorTitle" />
<java-symbol type="array" name="wfcOperatorErrorCodes" />
<java-symbol type="array" name="wfcOperatorErrorMessages" />
<java-symbol type="string" name="wfcSpnFormat" />
<java-symbol type="string" name="policydesc_disableCamera" />
<java-symbol type="string" name="policydesc_encryptedStorage" />
<java-symbol type="string" name="policydesc_expirePassword" />

View File

@@ -223,7 +223,7 @@ public final class Call {
//**********************************************************************************************
// Next CAPABILITY value: 0x00080000
//**********************************************************************************************
//******************************************************************************************
private final Uri mHandle;
private final int mHandlePresentation;
@@ -323,7 +323,7 @@ public final class Call {
builder.append(" CAPABILITY_SHOW_CALLBACK_NUMBER");
}
if (can(capabilities, CAPABILITY_SPEED_UP_MT_AUDIO)) {
builder.append(" CAPABILITY_SPEED_UP_IMS_MT_AUDIO");
builder.append(" CAPABILITY_SPEED_UP_MT_AUDIO");
}
builder.append("]");
return builder.toString();

View File

@@ -171,7 +171,7 @@ public abstract class Connection implements IConferenceable {
* Connection is using WIFI.
* @hide
*/
public static final int CAPABILITY_WIFI = 0x000010000;
public static final int CAPABILITY_WIFI = 0x00010000;
/**
* Indicates that the current device callback number should be shown.
@@ -292,7 +292,7 @@ public abstract class Connection implements IConferenceable {
builder.append(" CAPABILITY_SHOW_CALLBACK_NUMBER");
}
if (can(capabilities, CAPABILITY_SPEED_UP_MT_AUDIO)) {
builder.append(" CAPABILITY_SPEED_UP_IMS_MT_AUDIO");
builder.append(" CAPABILITY_SPEED_UP_MT_AUDIO");
}
builder.append("]");
return builder.toString();

View File

@@ -4056,6 +4056,34 @@ public class TelephonyManager {
}
}
/**
* Returns the Status of Volte
*@hide
*/
public boolean isVolteEnabled() {
try {
return getITelephony().isVolteEnabled();
} catch (RemoteException ex) {
return false;
} catch (NullPointerException ex) {
return false;
}
}
/**
* Returns the Status of Wi-Fi Calling
*@hide
*/
public boolean isWifiCallingEnabled() {
try {
return getITelephony().isWifiCallingEnabled();
} catch (RemoteException ex) {
return false;
} catch (NullPointerException ex) {
return false;
}
}
/**
* Set TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC for the default phone.
*

View File

@@ -900,6 +900,18 @@ interface ITelephony {
*/
boolean isImsRegistered();
/**
* Returns the Status of Wi-Fi Calling
*@hide
*/
boolean isWifiCallingEnabled();
/**
* Returns the Status of Volte
*@hide
*/
boolean isVolteEnabled();
/**
* Returns the unique device ID of phone, for example, the IMEI for
* GSM and the MEID for CDMA phones. Return null if device ID is not available.

View File

@@ -15,8 +15,8 @@
*/
package android.net.wifi;
import android.os.Messenger;
import android.net.wifi.RttManager;
/**
* {@hide}
@@ -24,4 +24,5 @@ import android.os.Messenger;
interface IRttManager
{
Messenger getMessenger();
RttManager.RttCapabilities getRttCapabilities();
}

View File

@@ -155,6 +155,10 @@ interface IWifiManager
void setAllowScansWithTraffic(int enabled);
boolean getAllowScansWhileAssociated();
void setAllowScansWhileAssociated(boolean enabled);
WifiConnectionStatistics getConnectionStatistics();
void disableEphemeralNetwork(String SSID);

View File

@@ -0,0 +1,18 @@
/**
* Copyright (c) 2015, 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 RttManager.RttCapabilities;

View File

@@ -26,10 +26,19 @@ public class RttManager {
private static final boolean DBG = true;
private static final String TAG = "RttManager";
public static final int RTT_TYPE_UNSPECIFIED = 0;
public static final int RTT_TYPE_ONE_SIDED = 1;
public static final int RTT_TYPE_11_V = 2;
public static final int RTT_TYPE_11_MC = 4;
/** @deprecated Type must be specified*/
@Deprecated
public static final int RTT_TYPE_UNSPECIFIED = 0;
public static final int RTT_TYPE_ONE_SIDED = 1;
/** @deprecated It is not supported*/
@Deprecated
public static final int RTT_TYPE_11_V = 2;
public static final int RTT_TYPE_TWO_SIDED = 4;
/** @deprecated It is not supported*/
@Deprecated
public static final int RTT_TYPE_11_MC = 4;
public static final int RTT_PEER_TYPE_UNSPECIFIED = 0;
public static final int RTT_PEER_TYPE_AP = 1;
@@ -42,6 +51,9 @@ public class RttManager {
public static final int RTT_CHANNEL_WIDTH_80P80 = 4;
public static final int RTT_CHANNEL_WIDTH_5 = 5;
public static final int RTT_CHANNEL_WIDTH_10 = 6;
/** @deprecated channel info must be specified*/
@Deprecated
public static final int RTT_CHANNEL_WIDTH_UNSPECIFIED = -1;
public static final int RTT_STATUS_SUCCESS = 0;
@@ -53,6 +65,12 @@ public class RttManager {
public static final int RTT_STATUS_FAIL_AP_ON_DIFF_CHANNEL = 6;
public static final int RTT_STATUS_FAIL_NO_CAPABILITY = 7;
public static final int RTT_STATUS_ABORTED = 8;
//if the T1-T4 or TOD/TOA Timestamp is illegal
public static final int RTT_STATUS_FAIL_INVALID_TS = 9;
//11mc protocol failed, eg, unrecognized FTMR/FTM
public static final int RTT_STATUS_FAIL_PROTOCOL = 10;
public static final int RTT_STATUS_FAIL_SCHEDULE = 11;
public static final int RTT_STATUS_FAIL_BUSY_TRY_LATER = 12;
public static final int REASON_UNSPECIFIED = -1;
public static final int REASON_NOT_AVAILABLE = -2;
@@ -61,41 +79,269 @@ public class RttManager {
public static final String DESCRIPTION_KEY = "android.net.wifi.RttManager.Description";
/**
* RTT BW supported bit mask
*/
public static final int RTT_BW_5_SUPPORT = 0x1;
public static final int RTT_BW_10_SUPPORT = 0x2;
public static final int RTT_BW_20_SUPPORT = 0x4;
public static final int RTT_BW_40_SUPPORT = 0x8;
public static final int RTT_BW_80_SUPPORT = 0x10;
public static final int RTT_BW_160_SUPPORT = 0x20;
/**
* RTT Preamble Support bit mask
*/
public static final int PREAMBLE_LEGACY = 0x1;
public static final int PREAMBLE_HT = 0x2;
public static final int PREAMBLE_VHT = 0x4;
/** @deprecated It has been replaced by RttCapabilities*/
@Deprecated
public class Capabilities {
public int supportedType;
public int supportedPeerType;
}
/** @deprecated It has been replaced by getRttCapabilities*/
@Deprecated
public Capabilities getCapabilities() {
return new Capabilities();
}
/**
* This class describe the RTT capability of the Hardware
*/
public static class RttCapabilities implements Parcelable {
/** @deprecated It is not supported*/
@Deprecated
public boolean supportedType;
/** @deprecated It is not supported*/
@Deprecated
public boolean supportedPeerType;
//1-sided rtt measurement is supported
public boolean oneSidedRttSupported;
//11mc 2-sided rtt measurement is supported
public boolean twoSided11McRttSupported;
//location configuration information supported
public boolean lciSupported;
//location civic records supported
public boolean lcrSupported;
//preamble supported, see bit mask definition above
public int preambleSupported;
//RTT bandwidth supported
public int bwSupported;
@Override
public String toString() {
StringBuffer sb = new StringBuffer();
sb.append("oneSidedRtt ").
append(oneSidedRttSupported ? "is Supported. " : "is not supported. ").
append("twoSided11McRtt ").
append(twoSided11McRttSupported ? "is Supported. " : "is not supported. ").
append("lci ").
append(lciSupported ? "is Supported. " : "is not supported. ").
append("lcr ").
append(lcrSupported ? "is Supported. " : "is not supported. ");
if ((preambleSupported & PREAMBLE_LEGACY) != 0) {
sb.append("Legacy ");
}
if ((preambleSupported & PREAMBLE_HT) != 0) {
sb.append("HT ");
}
if ((preambleSupported & PREAMBLE_VHT) != 0) {
sb.append("VHT ");
}
sb.append("is supported. \n");
if ((bwSupported & RTT_BW_5_SUPPORT) != 0) {
sb.append("5 MHz ");
}
if ((bwSupported & RTT_BW_10_SUPPORT) != 0) {
sb.append("10 MHz ");
}
if ((bwSupported & RTT_BW_20_SUPPORT) != 0) {
sb.append("20 MHz ");
}
if ((bwSupported & RTT_BW_40_SUPPORT) != 0) {
sb.append("40 MHz ");
}
if ((bwSupported & RTT_BW_80_SUPPORT) != 0) {
sb.append("80 MHz ");
}
if ((bwSupported & RTT_BW_160_SUPPORT) != 0) {
sb.append("160 MHz ");
}
sb.append("is supported.");
return sb.toString();
}
/** Implement the Parcelable interface {@hide} */
@Override
public int describeContents() {
return 0;
}
/** Implement the Parcelable interface {@hide} */
@Override
public void writeToParcel(Parcel dest, int flags) {
dest.writeInt(oneSidedRttSupported ? 1 : 0);
dest.writeInt(twoSided11McRttSupported ? 1 : 0);
dest.writeInt(lciSupported ? 1 : 0);
dest.writeInt(lcrSupported ? 1 : 0);
dest.writeInt(preambleSupported);
dest.writeInt(bwSupported);
}
/** Implement the Parcelable interface {@hide} */
public static final Creator<RttCapabilities> CREATOR =
new Creator<RttCapabilities>() {
public RttCapabilities createFromParcel(Parcel in) {
RttCapabilities capabilities = new RttCapabilities();
capabilities.oneSidedRttSupported = in.readInt() == 1 ? true : false;
capabilities.twoSided11McRttSupported = in.readInt() == 1 ? true : false;
capabilities.lciSupported = in.readInt() == 1 ? true : false;
capabilities.lcrSupported = in.readInt() == 1 ? true : false;
capabilities.preambleSupported = in.readInt();
capabilities.bwSupported = in.readInt();
return capabilities;
}
/** Implement the Parcelable interface {@hide} */
@Override
public RttCapabilities[] newArray(int size) {
return new RttCapabilities[size];
}
};
}
public RttCapabilities getRttCapabilities() {
synchronized (sCapabilitiesLock) {
if (mRttCapabilities == null) {
try {
mRttCapabilities = mService.getRttCapabilities();
} catch (RemoteException e) {
Log.e(TAG, "Can not get RTT Capabilities");
}
}
return mRttCapabilities;
}
}
/** specifies parameters for RTT request */
public static class RttParams {
/** type of device being ranged; one of RTT_PEER_TYPE_AP or RTT_PEER_TYPE_STA */
/**
* type of destination device being ranged; one of RTT_PEER_TYPE_AP or RTT_PEER_TYPE_STA
*/
public int deviceType;
/** type of RTT being sought; one of RTT_TYPE_ONE_SIDED
* RTT_TYPE_11_V or RTT_TYPE_11_MC or RTT_TYPE_UNSPECIFIED */
/**
* type of RTT measurement method; one of RTT_TYPE_ONE_SIDED or RTT_TYPE_TWO_SIDED.
*/
public int requestType;
/** mac address of the device being ranged */
public String bssid;
/** channel frequency that the device is on; optional */
/**
* The primary 20 MHz frequency (in MHz) of the channel over which the client is
* communicating with the access point.Similar as ScanResult.frequency
*/
public int frequency;
/** optional channel width. wider channels result in better accuracy,
* but they take longer time, and even get aborted may times; use
* RTT_CHANNEL_WIDTH_UNSPECIFIED if not specifying */
/**
* channel width used for RTT measurement. User need verify the highest BW the destination
* support (from scan result etc) before set this value. Wider channels result usually give
* better accuracy. However, the frame loss can increase. Similar as ScanResult.channelWidth
*/
public int channelWidth;
/** number of samples to be taken */
/**
* Not used if the AP bandwidth is 20 MHz
* If the AP use 40, 80 or 160 MHz, this is the center frequency
* if the AP use 80 + 80 MHz, this is the center frequency of the first segment
* similar as ScanResult.centerFreq0
*/
public int centerFreq0;
/**
* Only used if the AP bandwidth is 80 + 80 MHz
* if the AP use 80 + 80 MHz, this is the center frequency of the second segment
* similar as ScanResult.centerFreq1
*/
public int centerFreq1;
/**
* number of samples to be taken
* @deprecated It has been replaced by numSamplesPerBurst
*/
@Deprecated
public int num_samples;
/** number of retries if a sample fails */
/**
* number of retries if a sample fails
* @deprecated It has been replaced by numRetriesPerMeasurementFrame
*/
@Deprecated
public int num_retries;
/** Number of burst. fixed to 1 for single side RTT*/
public int numberBurst;
/** valid only if numberBurst > 1, interval between burst(ms). Not used by singe side RTT */
public int interval;
/** number of samples to be taken in one burst*/
public int numSamplesPerBurst;
/** number of retries for each measurement frame if a sample fails
* Only used by single side RTT
*/
public int numRetriesPerMeasurementFrame;
/** number of retries for FTMR frame if fails Only used by 80211MC double side RTT */
public int numRetriesPerFTMR;
/** Request LCI information */
public boolean LCIRequest;
/** Request LCR information */
public boolean LCRRequest;
/** Timeout for each burst, unit of 250 us*/
public int burstTimeout;
/** preamble used for RTT measurement
* should be one of PREAMBLE_LEGACY, PREAMBLE_HT, PREAMBLE_VHT
*/
public int preamble;
/** bandWidth used for RTT measurement.User need verify the highest BW the destination
* support (from scan result etc) before set this value. Wider channels result usually give
* better accuracy. However, the frame loss can increase too.
* should be one of RTT_CHANNEL_WIDTH_20 to RTT_CHANNEL_WIDTH_80
*/
public int bandwidth;
public RttParams() {
//provide initial value for RttParams
deviceType = RTT_PEER_TYPE_AP;
numberBurst = 1;
numSamplesPerBurst = 8;
numRetriesPerMeasurementFrame = 0;
burstTimeout = 40 + numSamplesPerBurst *4;
preamble = PREAMBLE_LEGACY;
bandwidth = RTT_CHANNEL_WIDTH_20;
}
}
/** pseudo-private class used to parcel arguments */
@@ -121,10 +367,20 @@ public class RttManager {
dest.writeInt(params.deviceType);
dest.writeInt(params.requestType);
dest.writeString(params.bssid);
dest.writeInt(params.frequency);
dest.writeInt(params.channelWidth);
dest.writeInt(params.num_samples);
dest.writeInt(params.num_retries);
dest.writeInt(params.frequency);
dest.writeInt(params.centerFreq0);
dest.writeInt(params.centerFreq1);
dest.writeInt(params.numberBurst);
dest.writeInt(params.interval);
dest.writeInt(params.numSamplesPerBurst);
dest.writeInt(params.numRetriesPerMeasurementFrame);
dest.writeInt(params.numRetriesPerFTMR);
dest.writeInt(params.LCIRequest ? 1 : 0);
dest.writeInt(params.LCRRequest ? 1 : 0);
dest.writeInt(params.burstTimeout);
dest.writeInt(params.preamble);
dest.writeInt(params.bandwidth);
}
} else {
dest.writeInt(0);
@@ -148,11 +404,20 @@ public class RttManager {
params[i].deviceType = in.readInt();
params[i].requestType = in.readInt();
params[i].bssid = in.readString();
params[i].frequency = in.readInt();
params[i].channelWidth = in.readInt();
params[i].num_samples = in.readInt();
params[i].num_retries = in.readInt();
params[i].frequency = in.readInt();
params[i].centerFreq0 = in.readInt();
params[i].centerFreq1 = in.readInt();
params[i].numberBurst = in.readInt();
params[i].interval = in.readInt();
params[i].numSamplesPerBurst = in.readInt();
params[i].numRetriesPerMeasurementFrame = in.readInt();
params[i].numRetriesPerFTMR = in.readInt();
params[i].LCIRequest = in.readInt() == 1 ? true : false;
params[i].LCRRequest = in.readInt() == 1 ? true : false;
params[i].burstTimeout = in.readInt();
params[i].preamble = in.readInt();
params[i].bandwidth = in.readInt();
}
ParcelableRttParams parcelableParams = new ParcelableRttParams(params);
@@ -165,46 +430,143 @@ public class RttManager {
};
}
public class wifiInformationElement {
/** Information Element ID*/
public int id;
public String data;
}
/** specifies RTT results */
public static class RttResult {
/** mac address of the device being ranged */
public String bssid;
/** # of burst for this measurement*/
public int burstNumber;
/** total number of measurement frames in this measurement*/
public int measurementFrameNumber;
/** total successful number of measurement frames in this measurement*/
public int successMeasurementFrameNumber;
/** Maximum number of frames per burst supported by peer */
public int frameNumberPerBurstPeer;
/** status of the request */
public int status;
/** type of the request used */
/**
* type of the request used
* @deprecated It has been replaced by measurementType
*/
@Deprecated
public int requestType;
/** RTT measurement method type used, shoudl be one of RTT_TYPE_ONE_SIDED or
* RTT_TYPE_TWO_SIDED.
*/
public int measurementType;
/** please retry RTT measurement after this S since peer indicate busy at ths moment*/
public int retryAfterDuration;
/** timestamp of completion, in microsecond since boot */
public long ts;
/** average RSSI observed */
/** average RSSI observed, unit of 0.5 dB */
public int rssi;
/** RSSI spread (i.e. max - min) */
/**
* RSSI spread (i.e. max - min)
* @deprecated It has been replaced by rssi_spread
*/
@Deprecated
public int rssi_spread;
/** average transmit rate */
/**RSSI spread (i.e. max - min), unit of 0.5 dB */
public int rssiSpread;
/**
* average transmit rate
* @deprecated It has been replaced by txRate
*/
@Deprecated
public int tx_rate;
/** average round trip time in nano second */
/** average transmit rate */
public int txRate;
/** average receiving rate */
public int rxRate;
/**
* average round trip time in nano second
* @deprecated It has been replaced by rtt
*/
@Deprecated
public long rtt_ns;
/** standard deviation observed in round trip time */
/** average round trip time in 0.1 nano second */
public long rtt;
/**
* standard deviation observed in round trip time
* @deprecated It has been replaced by rttStandardDeviation
*/
@Deprecated
public long rtt_sd_ns;
/** spread (i.e. max - min) round trip time */
/** standard deviation of RTT in 0.1 ns */
public long rttStandardDeviation;
/**
* spread (i.e. max - min) round trip time
* @deprecated It has been replaced by rttSpread
*/
@Deprecated
public long rtt_spread_ns;
/** average distance in centimeter, computed based on rtt_ns */
/** spread (i.e. max - min) RTT in 0.1 ns */
public long rttSpread;
/**
* average distance in centimeter, computed based on rtt_ns
* @deprecated It has been replaced by distance
*/
@Deprecated
public int distance_cm;
/** standard deviation observed in distance */
/** average distance in cm, computed based on rtt */
public int distance;
/**
* standard deviation observed in distance
* @deprecated It has been replaced with distanceStandardDeviation
*/
@Deprecated
public int distance_sd_cm;
/** spread (i.e. max - min) distance */
/** standard deviation observed in distance in cm*/
public int distanceStandardDeviation;
/**
* spread (i.e. max - min) distance
* @deprecated It has been replaced by distanceSpread
*/
@Deprecated
public int distance_spread_cm;
/** spread (i.e. max - min) distance in cm */
public int distanceSpread;
/** the duration of this measurement burst*/
public int burstDuration;
/** LCI information Element*/
wifiInformationElement LCI;
/** LCR information Element*/
wifiInformationElement LCR;
}
@@ -228,18 +590,28 @@ public class RttManager {
dest.writeInt(mResults.length);
for (RttResult result : mResults) {
dest.writeString(result.bssid);
dest.writeInt(result.burstNumber);
dest.writeInt(result.measurementFrameNumber);
dest.writeInt(result.successMeasurementFrameNumber);
dest.writeInt(result.frameNumberPerBurstPeer);
dest.writeInt(result.status);
dest.writeInt(result.requestType);
dest.writeInt(result.measurementType);
dest.writeInt(result.retryAfterDuration);
dest.writeLong(result.ts);
dest.writeInt(result.rssi);
dest.writeInt(result.rssi_spread);
dest.writeInt(result.tx_rate);
dest.writeLong(result.rtt_ns);
dest.writeLong(result.rtt_sd_ns);
dest.writeLong(result.rtt_spread_ns);
dest.writeInt(result.distance_cm);
dest.writeInt(result.distance_sd_cm);
dest.writeInt(result.distance_spread_cm);
dest.writeInt(result.rssiSpread);
dest.writeInt(result.txRate);
dest.writeLong(result.rtt);
dest.writeLong(result.rttStandardDeviation);
dest.writeLong(result.rttSpread);
dest.writeInt(result.distance);
dest.writeInt(result.distanceStandardDeviation);
dest.writeInt(result.distanceSpread);
dest.writeInt(result.burstDuration);
//dest.writeInt(result.LCI.id);
//dest.writeString(result.LCI.data);
//dest.writeInt(result.LCR.id);
//dest.writeString(result.LCR.data);
}
} else {
dest.writeInt(0);
@@ -261,18 +633,28 @@ public class RttManager {
for (int i = 0; i < num; i++) {
results[i] = new RttResult();
results[i].bssid = in.readString();
results[i].burstNumber = in.readInt();
results[i].measurementFrameNumber = in.readInt();
results[i].successMeasurementFrameNumber = in.readInt();
results[i].frameNumberPerBurstPeer = in.readInt();
results[i].status = in.readInt();
results[i].requestType = in.readInt();
results[i].measurementType = in.readInt();
results[i].retryAfterDuration = in.readInt();
results[i].ts = in.readLong();
results[i].rssi = in.readInt();
results[i].rssi_spread = in.readInt();
results[i].tx_rate = in.readInt();
results[i].rtt_ns = in.readLong();
results[i].rtt_sd_ns = in.readLong();
results[i].rtt_spread_ns = in.readLong();
results[i].distance_cm = in.readInt();
results[i].distance_sd_cm = in.readInt();
results[i].distance_spread_cm = in.readInt();
results[i].rssiSpread = in.readInt();
results[i].txRate = in.readInt();
results[i].rtt = in.readLong();
results[i].rttStandardDeviation = in.readLong();
results[i].rttSpread = in.readLong();
results[i].distance = in.readInt();
results[i].distanceStandardDeviation = in.readInt();
results[i].distanceSpread = in.readInt();
results[i].burstDuration = in.readInt();
//results[i].LCI.id = in.readInt();
//results[i].LCI.data = in.readString();
//results[i].LCR.id = in.readInt();
//results[i].LCR.data = in.readString();
}
ParcelableRttResults parcelableResults = new ParcelableRttResults(results);
@@ -292,7 +674,70 @@ public class RttManager {
public void onAborted();
}
private boolean rttParamSanity(RttParams params, int index) {
if (mRttCapabilities == null) {
if(getRttCapabilities() == null) {
Log.e(TAG, "Can not get RTT capabilities");
//throw new IllegalStateException("RTT chip is not working");
}
}
if (params.deviceType != RTT_PEER_TYPE_AP) {
return false;
} else if (params.requestType != RTT_TYPE_ONE_SIDED && params.requestType !=
RTT_TYPE_TWO_SIDED) {
Log.e(TAG, "Request " + index + ": Illegal Request Type: " + params.requestType);
return false;
} else if (params.requestType == RTT_TYPE_ONE_SIDED &&
!mRttCapabilities.oneSidedRttSupported) {
Log.e(TAG, "Request " + index + ": One side RTT is not supported");
return false;
} else if (params.requestType == RTT_TYPE_TWO_SIDED &&
!mRttCapabilities.twoSided11McRttSupported) {
Log.e(TAG, "Request " + index + ": two side RTT is not supported");
return false;
} else if ( params.numberBurst <= 0 ) {
Log.e(TAG, "Request " + index + ": Illegal number of burst: " + params.numberBurst);
return false;
} else if (params.numberBurst > 1 && params.interval <= 0) {
Log.e(TAG, "Request " + index + ": Illegal interval value: " + params.interval);
return false;
} else if (params.numSamplesPerBurst <= 0) {
Log.e(TAG, "Request " + index + ": Illegal sample number per burst: " +
params.numSamplesPerBurst);
return false;
} else if (params.numRetriesPerMeasurementFrame < 0 || params.numRetriesPerFTMR < 0) {
Log.e(TAG, "Request " + index + ": Illegal retry number");
return false;
} else if (params.LCIRequest && !mRttCapabilities.lciSupported) {
Log.e(TAG, "Request " + index + ": LCI is not supported");
return false;
} else if (params.LCRRequest && !mRttCapabilities.lcrSupported) {
Log.e(TAG, "Request " + index + ": LCR is not supported");
return false;
} else if (params.burstTimeout <= 0){
Log.e(TAG, "Request " + index + ": Illegal burst timeout: " + params.burstTimeout);
return false;
} else if ((params.preamble & mRttCapabilities.preambleSupported) == 0) {
Log.e(TAG, "Request " + index + ": Do not support this preamble: " + params.preamble);
return false;
} else if ((params.bandwidth & mRttCapabilities.bwSupported) == 0) {
Log.e(TAG, "Request " + index + ": Do not support this bandwidth: " + params.bandwidth);
return false;
}
return true;
}
public void startRanging(RttParams[] params, RttListener listener) {
int index = 0;
for(RttParams rttParam : params) {
if (!rttParamSanity(rttParam, index)) {
throw new IllegalArgumentException("RTT Request Parameter Illegal");
}
index++;
}
validateChannel();
ParcelableRttParams parcelableParams = new ParcelableRttParams(params);
sAsyncChannel.sendMessage(CMD_OP_START_RANGING,
@@ -315,12 +760,14 @@ public class RttManager {
private Context mContext;
private IRttManager mService;
private RttCapabilities mRttCapabilities;
private static final int INVALID_KEY = 0;
private static int sListenerKey = 1;
private static final SparseArray sListenerMap = new SparseArray();
private static final Object sListenerMapLock = new Object();
private static final Object sCapabilitiesLock = new Object();
private static AsyncChannel sAsyncChannel;
private static CountDownLatch sConnected;

View File

@@ -16,8 +16,6 @@
package android.net.wifi;
import android.net.wifi.passpoint.WifiPasspointInfo;
import android.net.wifi.passpoint.WifiPasspointManager;
import android.os.Parcel;
import android.os.Parcelable;
@@ -215,11 +213,19 @@ public class ScanResult implements Parcelable {
public int distanceSdCm;
/**
* Passpoint ANQP information. This is not fetched automatically.
* Use {@link WifiPasspointManager#requestAnqpInfo} to request ANQP info.
* {@hide}
* Indicates if the scan result represents a passpoint AP
*/
public WifiPasspointInfo passpoint;
public boolean passpointNetwork;
/**
* Indicates if venue name
*/
public String venueName;
/**
* Indicates operator name
*/
public String operatorFriendlyName;
/**
* {@hide}
@@ -292,6 +298,7 @@ public class ScanResult implements Parcelable {
this.centerFreq0 = UNSPECIFIED;
this.centerFreq1 = UNSPECIFIED;
this.is80211McRTTResponder = false;
this.passpointNetwork = false;
}
/** {@hide} */
@@ -310,6 +317,7 @@ public class ScanResult implements Parcelable {
this.centerFreq0 = UNSPECIFIED;
this.centerFreq1 = UNSPECIFIED;
this.is80211McRTTResponder = false;
this.passpointNetwork = false;
}
/** {@hide} */
@@ -329,6 +337,7 @@ public class ScanResult implements Parcelable {
this.centerFreq0 = centerFreq0;
this.centerFreq1 = centerFreq1;
this.is80211McRTTResponder = is80211McRTTResponder;
this.passpointNetwork = false;
}
/** copy constructor {@hide} */
@@ -348,13 +357,15 @@ public class ScanResult implements Parcelable {
distanceCm = source.distanceCm;
distanceSdCm = source.distanceSdCm;
seen = source.seen;
passpoint = source.passpoint;
autoJoinStatus = source.autoJoinStatus;
untrusted = source.untrusted;
numConnection = source.numConnection;
numUsage = source.numUsage;
numIpConfigFailures = source.numIpConfigFailures;
isAutoJoinCandidate = source.isAutoJoinCandidate;
passpointNetwork = source.passpointNetwork;
venueName = source.venueName;
operatorFriendlyName = source.operatorFriendlyName;
}
}
@@ -388,7 +399,7 @@ public class ScanResult implements Parcelable {
sb.append(", distanceSd: ").append((distanceSdCm != UNSPECIFIED ? distanceSdCm : "?")).
append("(cm)");
sb.append(", passpoint: ").append(passpoint != null ? "yes" : "no");
sb.append(", passpoint: ").append(passpointNetwork ? "yes" : "no");
if (autoJoinStatus != 0) {
sb.append(", status: ").append(autoJoinStatus);
}
@@ -431,12 +442,10 @@ public class ScanResult implements Parcelable {
dest.writeInt(numUsage);
dest.writeInt(numIpConfigFailures);
dest.writeInt(isAutoJoinCandidate);
if (passpoint != null) {
dest.writeInt(1);
passpoint.writeToParcel(dest, flags);
} else {
dest.writeInt(0);
}
dest.writeInt(passpointNetwork ? 1 : 0);
dest.writeString(venueName);
dest.writeString(operatorFriendlyName);
if (informationElements != null) {
dest.writeInt(informationElements.length);
for (int i = 0; i < informationElements.length; i++) {
@@ -478,9 +487,9 @@ public class ScanResult implements Parcelable {
sr.numUsage = in.readInt();
sr.numIpConfigFailures = in.readInt();
sr.isAutoJoinCandidate = in.readInt();
if (in.readInt() == 1) {
sr.passpoint = WifiPasspointInfo.CREATOR.createFromParcel(in);
}
sr.passpointNetwork = in.readInt() == 1;
sr.venueName = in.readString();
sr.operatorFriendlyName = in.readString();
int n = in.readInt();
if (n != 0) {
sr.informationElements = new InformationElement[n];

View File

@@ -973,13 +973,18 @@ public class WifiConfiguration implements Parcelable {
}
}
if (FQDN != null) {
/* must have a providerFriendlyName */
if (providerFriendlyName == null) {
if (TextUtils.isEmpty(FQDN) == false) {
/* this is passpoint configuration; it must not have an SSID */
if (TextUtils.isEmpty(SSID) == false) {
return false;
}
/* this is passpoint configuration; it must have a providerFriendlyName */
if (TextUtils.isEmpty(providerFriendlyName)) {
return false;
}
/* this is passpoint configuration; it must have enterprise config */
if (enterpriseConfig == null) {
if (enterpriseConfig == null
|| enterpriseConfig.getEapMethod() == WifiEnterpriseConfig.Eap.NONE ) {
return false;
}
}
@@ -988,6 +993,16 @@ public class WifiConfiguration implements Parcelable {
return true;
}
/**
* Identify if this configuration represents a passpoint network
*/
public boolean isPasspoint() {
return !TextUtils.isEmpty(FQDN)
&& !TextUtils.isEmpty(providerFriendlyName)
&& enterpriseConfig != null
&& enterpriseConfig.getEapMethod() != WifiEnterpriseConfig.Eap.NONE;
}
/**
* Helper function, identify if a configuration is linked
* @hide

View File

@@ -2598,6 +2598,27 @@ public class WifiManager {
}
}
/**
* Set setting for allowing Scans when infrastructure is associated
* @hide
*/
public void setAllowScansWhileAssociated(boolean enabled) {
try {
mService.setAllowScansWhileAssociated(enabled);
} catch (RemoteException e) {
}
}
/**
* Get setting for allowing Scans when infrastructure is associated
* @hide
*/
public boolean getAllowScansWhileAssociated() {
try {
return mService.getAllowScansWhileAssociated();
} catch (RemoteException e) {
}
return false;
}
}

View File

@@ -262,7 +262,7 @@ public class WifiPasspointManager {
for (ScanResult sr : mAnqpRequest)
if (sr.BSSID.equals(result.bssid)) {
Log.d(TAG, "find hit " + result.bssid);
sr.passpoint = result;
/* sr.passpoint = result; */
mAnqpRequest.remove(sr);
Log.d(TAG, "mAnqpRequest.len=" + mAnqpRequest.size());
break;