Merge remote-tracking branch 'goog/mirror-m-wireless-internal-release' into master_merge
Change-Id: I49aab437af220f1139cfd2d0a9c362acce31074e
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -29,4 +29,6 @@
|
||||
<string-array name="wfcOperatorErrorMessages">
|
||||
<item>Wi-Fi Calling isn\'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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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*"
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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.
|
||||
*
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -155,6 +155,10 @@ interface IWifiManager
|
||||
|
||||
void setAllowScansWithTraffic(int enabled);
|
||||
|
||||
boolean getAllowScansWhileAssociated();
|
||||
|
||||
void setAllowScansWhileAssociated(boolean enabled);
|
||||
|
||||
WifiConnectionStatistics getConnectionStatistics();
|
||||
|
||||
void disableEphemeralNetwork(String SSID);
|
||||
|
||||
18
wifi/java/android/net/wifi/RttManager.aidl
Normal file
18
wifi/java/android/net/wifi/RttManager.aidl
Normal 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;
|
||||
@@ -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;
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user