Merge "[RTT] Add API for number of measurements" into pi-dev
am: d1c5b6695f
Change-Id: I75b5aa6eb2bea59ad8e022a00268b585a0de146c
This commit is contained in:
@@ -22,7 +22,6 @@ import android.annotation.Nullable;
|
|||||||
import android.annotation.SystemApi;
|
import android.annotation.SystemApi;
|
||||||
import android.net.MacAddress;
|
import android.net.MacAddress;
|
||||||
import android.net.wifi.aware.PeerHandle;
|
import android.net.wifi.aware.PeerHandle;
|
||||||
import android.os.Handler;
|
|
||||||
import android.os.Parcel;
|
import android.os.Parcel;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
|
|
||||||
@@ -79,19 +78,24 @@ public final class RangingResult implements Parcelable {
|
|||||||
private final int mDistanceMm;
|
private final int mDistanceMm;
|
||||||
private final int mDistanceStdDevMm;
|
private final int mDistanceStdDevMm;
|
||||||
private final int mRssi;
|
private final int mRssi;
|
||||||
|
private final int mNumAttemptedMeasurements;
|
||||||
|
private final int mNumSuccessfulMeasurements;
|
||||||
private final byte[] mLci;
|
private final byte[] mLci;
|
||||||
private final byte[] mLcr;
|
private final byte[] mLcr;
|
||||||
private final long mTimestamp;
|
private final long mTimestamp;
|
||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
public RangingResult(@RangeResultStatus int status, @NonNull MacAddress mac, int distanceMm,
|
public RangingResult(@RangeResultStatus int status, @NonNull MacAddress mac, int distanceMm,
|
||||||
int distanceStdDevMm, int rssi, byte[] lci, byte[] lcr, long timestamp) {
|
int distanceStdDevMm, int rssi, int numAttemptedMeasurements,
|
||||||
|
int numSuccessfulMeasurements, byte[] lci, byte[] lcr, long timestamp) {
|
||||||
mStatus = status;
|
mStatus = status;
|
||||||
mMac = mac;
|
mMac = mac;
|
||||||
mPeerHandle = null;
|
mPeerHandle = null;
|
||||||
mDistanceMm = distanceMm;
|
mDistanceMm = distanceMm;
|
||||||
mDistanceStdDevMm = distanceStdDevMm;
|
mDistanceStdDevMm = distanceStdDevMm;
|
||||||
mRssi = rssi;
|
mRssi = rssi;
|
||||||
|
mNumAttemptedMeasurements = numAttemptedMeasurements;
|
||||||
|
mNumSuccessfulMeasurements = numSuccessfulMeasurements;
|
||||||
mLci = lci == null ? EMPTY_BYTE_ARRAY : lci;
|
mLci = lci == null ? EMPTY_BYTE_ARRAY : lci;
|
||||||
mLcr = lcr == null ? EMPTY_BYTE_ARRAY : lcr;
|
mLcr = lcr == null ? EMPTY_BYTE_ARRAY : lcr;
|
||||||
mTimestamp = timestamp;
|
mTimestamp = timestamp;
|
||||||
@@ -99,13 +103,16 @@ public final class RangingResult implements Parcelable {
|
|||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
public RangingResult(@RangeResultStatus int status, PeerHandle peerHandle, int distanceMm,
|
public RangingResult(@RangeResultStatus int status, PeerHandle peerHandle, int distanceMm,
|
||||||
int distanceStdDevMm, int rssi, byte[] lci, byte[] lcr, long timestamp) {
|
int distanceStdDevMm, int rssi, int numAttemptedMeasurements,
|
||||||
|
int numSuccessfulMeasurements, byte[] lci, byte[] lcr, long timestamp) {
|
||||||
mStatus = status;
|
mStatus = status;
|
||||||
mMac = null;
|
mMac = null;
|
||||||
mPeerHandle = peerHandle;
|
mPeerHandle = peerHandle;
|
||||||
mDistanceMm = distanceMm;
|
mDistanceMm = distanceMm;
|
||||||
mDistanceStdDevMm = distanceStdDevMm;
|
mDistanceStdDevMm = distanceStdDevMm;
|
||||||
mRssi = rssi;
|
mRssi = rssi;
|
||||||
|
mNumAttemptedMeasurements = numAttemptedMeasurements;
|
||||||
|
mNumSuccessfulMeasurements = numSuccessfulMeasurements;
|
||||||
mLci = lci == null ? EMPTY_BYTE_ARRAY : lci;
|
mLci = lci == null ? EMPTY_BYTE_ARRAY : lci;
|
||||||
mLcr = lcr == null ? EMPTY_BYTE_ARRAY : lcr;
|
mLcr = lcr == null ? EMPTY_BYTE_ARRAY : lcr;
|
||||||
mTimestamp = timestamp;
|
mTimestamp = timestamp;
|
||||||
@@ -190,6 +197,42 @@ public final class RangingResult implements Parcelable {
|
|||||||
return mRssi;
|
return mRssi;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return The number of attempted measurements used in the RTT exchange resulting in this set
|
||||||
|
* of results.
|
||||||
|
* <p>
|
||||||
|
* Only valid if {@link #getStatus()} returns {@link #STATUS_SUCCESS}, otherwise will throw an
|
||||||
|
* exception.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public int getNumAttemptedMeasurements() {
|
||||||
|
if (mStatus != STATUS_SUCCESS) {
|
||||||
|
throw new IllegalStateException(
|
||||||
|
"getNumAttemptedMeasurements(): invoked on an invalid result: getStatus()="
|
||||||
|
+ mStatus);
|
||||||
|
}
|
||||||
|
return mNumAttemptedMeasurements;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return The number of successful measurements used to calculate the distance and standard
|
||||||
|
* deviation. If the number of successful measurements if 1 then then standard deviation,
|
||||||
|
* returned by {@link #getDistanceStdDevMm()}, is not valid (a 0 is returned for the standard
|
||||||
|
* deviation).
|
||||||
|
* <p>
|
||||||
|
* Only valid if {@link #getStatus()} returns {@link #STATUS_SUCCESS}, otherwise will throw an
|
||||||
|
* exception.
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public int getNumSuccessfulMeasurements() {
|
||||||
|
if (mStatus != STATUS_SUCCESS) {
|
||||||
|
throw new IllegalStateException(
|
||||||
|
"getNumSuccessfulMeasurements(): invoked on an invalid result: getStatus()="
|
||||||
|
+ mStatus);
|
||||||
|
}
|
||||||
|
return mNumSuccessfulMeasurements;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return The Location Configuration Information (LCI) as self-reported by the peer. The format
|
* @return The Location Configuration Information (LCI) as self-reported by the peer. The format
|
||||||
* is specified in the IEEE 802.11-2016 specifications, section 9.4.2.22.10.
|
* is specified in the IEEE 802.11-2016 specifications, section 9.4.2.22.10.
|
||||||
@@ -269,6 +312,8 @@ public final class RangingResult implements Parcelable {
|
|||||||
dest.writeInt(mDistanceMm);
|
dest.writeInt(mDistanceMm);
|
||||||
dest.writeInt(mDistanceStdDevMm);
|
dest.writeInt(mDistanceStdDevMm);
|
||||||
dest.writeInt(mRssi);
|
dest.writeInt(mRssi);
|
||||||
|
dest.writeInt(mNumAttemptedMeasurements);
|
||||||
|
dest.writeInt(mNumSuccessfulMeasurements);
|
||||||
dest.writeByteArray(mLci);
|
dest.writeByteArray(mLci);
|
||||||
dest.writeByteArray(mLcr);
|
dest.writeByteArray(mLcr);
|
||||||
dest.writeLong(mTimestamp);
|
dest.writeLong(mTimestamp);
|
||||||
@@ -296,15 +341,17 @@ public final class RangingResult implements Parcelable {
|
|||||||
int distanceMm = in.readInt();
|
int distanceMm = in.readInt();
|
||||||
int distanceStdDevMm = in.readInt();
|
int distanceStdDevMm = in.readInt();
|
||||||
int rssi = in.readInt();
|
int rssi = in.readInt();
|
||||||
|
int numAttemptedMeasurements = in.readInt();
|
||||||
|
int numSuccessfulMeasurements = in.readInt();
|
||||||
byte[] lci = in.createByteArray();
|
byte[] lci = in.createByteArray();
|
||||||
byte[] lcr = in.createByteArray();
|
byte[] lcr = in.createByteArray();
|
||||||
long timestamp = in.readLong();
|
long timestamp = in.readLong();
|
||||||
if (peerHandlePresent) {
|
if (peerHandlePresent) {
|
||||||
return new RangingResult(status, peerHandle, distanceMm, distanceStdDevMm, rssi,
|
return new RangingResult(status, peerHandle, distanceMm, distanceStdDevMm, rssi,
|
||||||
lci, lcr, timestamp);
|
numAttemptedMeasurements, numSuccessfulMeasurements, lci, lcr, timestamp);
|
||||||
} else {
|
} else {
|
||||||
return new RangingResult(status, mac, distanceMm, distanceStdDevMm, rssi,
|
return new RangingResult(status, mac, distanceMm, distanceStdDevMm, rssi,
|
||||||
lci, lcr, timestamp);
|
numAttemptedMeasurements, numSuccessfulMeasurements, lci, lcr, timestamp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -316,7 +363,9 @@ public final class RangingResult implements Parcelable {
|
|||||||
mMac).append(", peerHandle=").append(
|
mMac).append(", peerHandle=").append(
|
||||||
mPeerHandle == null ? "<null>" : mPeerHandle.peerId).append(", distanceMm=").append(
|
mPeerHandle == null ? "<null>" : mPeerHandle.peerId).append(", distanceMm=").append(
|
||||||
mDistanceMm).append(", distanceStdDevMm=").append(mDistanceStdDevMm).append(
|
mDistanceMm).append(", distanceStdDevMm=").append(mDistanceStdDevMm).append(
|
||||||
", rssi=").append(mRssi).append(", lci=").append(mLci).append(", lcr=").append(
|
", rssi=").append(mRssi).append(", numAttemptedMeasurements=").append(
|
||||||
|
mNumAttemptedMeasurements).append(", numSuccessfulMeasurements=").append(
|
||||||
|
mNumSuccessfulMeasurements).append(", lci=").append(mLci).append(", lcr=").append(
|
||||||
mLcr).append(", timestamp=").append(mTimestamp).append("]").toString();
|
mLcr).append(", timestamp=").append(mTimestamp).append("]").toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -335,6 +384,8 @@ public final class RangingResult implements Parcelable {
|
|||||||
return mStatus == lhs.mStatus && Objects.equals(mMac, lhs.mMac) && Objects.equals(
|
return mStatus == lhs.mStatus && Objects.equals(mMac, lhs.mMac) && Objects.equals(
|
||||||
mPeerHandle, lhs.mPeerHandle) && mDistanceMm == lhs.mDistanceMm
|
mPeerHandle, lhs.mPeerHandle) && mDistanceMm == lhs.mDistanceMm
|
||||||
&& mDistanceStdDevMm == lhs.mDistanceStdDevMm && mRssi == lhs.mRssi
|
&& mDistanceStdDevMm == lhs.mDistanceStdDevMm && mRssi == lhs.mRssi
|
||||||
|
&& mNumAttemptedMeasurements == lhs.mNumAttemptedMeasurements
|
||||||
|
&& mNumSuccessfulMeasurements == lhs.mNumSuccessfulMeasurements
|
||||||
&& Arrays.equals(mLci, lhs.mLci) && Arrays.equals(mLcr, lhs.mLcr)
|
&& Arrays.equals(mLci, lhs.mLci) && Arrays.equals(mLcr, lhs.mLcr)
|
||||||
&& mTimestamp == lhs.mTimestamp;
|
&& mTimestamp == lhs.mTimestamp;
|
||||||
}
|
}
|
||||||
@@ -342,6 +393,6 @@ public final class RangingResult implements Parcelable {
|
|||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hash(mStatus, mMac, mPeerHandle, mDistanceMm, mDistanceStdDevMm, mRssi,
|
return Objects.hash(mStatus, mMac, mPeerHandle, mDistanceMm, mDistanceStdDevMm, mRssi,
|
||||||
mLci, mLcr, mTimestamp);
|
mNumAttemptedMeasurements, mNumSuccessfulMeasurements, mLci, mLcr, mTimestamp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ public class WifiRttManagerTest {
|
|||||||
List<RangingResult> results = new ArrayList<>();
|
List<RangingResult> results = new ArrayList<>();
|
||||||
results.add(
|
results.add(
|
||||||
new RangingResult(RangingResult.STATUS_SUCCESS, MacAddress.BROADCAST_ADDRESS, 15, 5,
|
new RangingResult(RangingResult.STATUS_SUCCESS, MacAddress.BROADCAST_ADDRESS, 15, 5,
|
||||||
10, null, null, 666));
|
10, 8, 5, null, null, 666));
|
||||||
RangingResultCallback callbackMock = mock(RangingResultCallback.class);
|
RangingResultCallback callbackMock = mock(RangingResultCallback.class);
|
||||||
ArgumentCaptor<IRttCallback> callbackCaptor = ArgumentCaptor.forClass(IRttCallback.class);
|
ArgumentCaptor<IRttCallback> callbackCaptor = ArgumentCaptor.forClass(IRttCallback.class);
|
||||||
|
|
||||||
@@ -232,13 +232,15 @@ public class WifiRttManagerTest {
|
|||||||
int distanceCm = 105;
|
int distanceCm = 105;
|
||||||
int distanceStdDevCm = 10;
|
int distanceStdDevCm = 10;
|
||||||
int rssi = 5;
|
int rssi = 5;
|
||||||
|
int numAttemptedMeasurements = 8;
|
||||||
|
int numSuccessfulMeasurements = 3;
|
||||||
long timestamp = System.currentTimeMillis();
|
long timestamp = System.currentTimeMillis();
|
||||||
byte[] lci = { 0x5, 0x6, 0x7 };
|
byte[] lci = { 0x5, 0x6, 0x7 };
|
||||||
byte[] lcr = { 0x1, 0x2, 0x3, 0xA, 0xB, 0xC };
|
byte[] lcr = { 0x1, 0x2, 0x3, 0xA, 0xB, 0xC };
|
||||||
|
|
||||||
// RangingResults constructed with a MAC address
|
// RangingResults constructed with a MAC address
|
||||||
RangingResult result = new RangingResult(status, mac, distanceCm, distanceStdDevCm, rssi,
|
RangingResult result = new RangingResult(status, mac, distanceCm, distanceStdDevCm, rssi,
|
||||||
lci, lcr, timestamp);
|
numAttemptedMeasurements, numSuccessfulMeasurements, lci, lcr, timestamp);
|
||||||
|
|
||||||
Parcel parcelW = Parcel.obtain();
|
Parcel parcelW = Parcel.obtain();
|
||||||
result.writeToParcel(parcelW, 0);
|
result.writeToParcel(parcelW, 0);
|
||||||
@@ -254,7 +256,7 @@ public class WifiRttManagerTest {
|
|||||||
|
|
||||||
// RangingResults constructed with a PeerHandle
|
// RangingResults constructed with a PeerHandle
|
||||||
result = new RangingResult(status, peerHandle, distanceCm, distanceStdDevCm, rssi,
|
result = new RangingResult(status, peerHandle, distanceCm, distanceStdDevCm, rssi,
|
||||||
null, null, timestamp);
|
numAttemptedMeasurements, numSuccessfulMeasurements, null, null, timestamp);
|
||||||
|
|
||||||
parcelW = Parcel.obtain();
|
parcelW = Parcel.obtain();
|
||||||
result.writeToParcel(parcelW, 0);
|
result.writeToParcel(parcelW, 0);
|
||||||
@@ -280,14 +282,16 @@ public class WifiRttManagerTest {
|
|||||||
int distanceCm = 105;
|
int distanceCm = 105;
|
||||||
int distanceStdDevCm = 10;
|
int distanceStdDevCm = 10;
|
||||||
int rssi = 5;
|
int rssi = 5;
|
||||||
|
int numAttemptedMeasurements = 10;
|
||||||
|
int numSuccessfulMeasurements = 3;
|
||||||
long timestamp = System.currentTimeMillis();
|
long timestamp = System.currentTimeMillis();
|
||||||
byte[] lci = { };
|
byte[] lci = { };
|
||||||
byte[] lcr = { };
|
byte[] lcr = { };
|
||||||
|
|
||||||
RangingResult rr1 = new RangingResult(status, mac, distanceCm, distanceStdDevCm, rssi, lci,
|
RangingResult rr1 = new RangingResult(status, mac, distanceCm, distanceStdDevCm, rssi,
|
||||||
lcr, timestamp);
|
numAttemptedMeasurements, numSuccessfulMeasurements, lci, lcr, timestamp);
|
||||||
RangingResult rr2 = new RangingResult(status, mac, distanceCm, distanceStdDevCm, rssi, null,
|
RangingResult rr2 = new RangingResult(status, mac, distanceCm, distanceStdDevCm, rssi,
|
||||||
null, timestamp);
|
numAttemptedMeasurements, numSuccessfulMeasurements, null, null, timestamp);
|
||||||
|
|
||||||
assertEquals(rr1, rr2);
|
assertEquals(rr1, rr2);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user