summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoshan Pius <rpius@google.com>2023-06-12 13:31:27 -0700
committerRoshan Pius <rpius@google.com>2023-06-12 13:49:49 -0700
commit93a8766e12b39caac607c45046bbd0e53c809469 (patch)
treed4e496bd475b57fe159651be4a145d0a38352e1b
parente6c9fe88f233c07d02c83c3238e1785a93e95dc9 (diff)
downloadUwb-93a8766e12b39caac607c45046bbd0e53c809469.tar.gz
uwb(service): Ensure endianness order of fields is preserved on T devices
Ensuring all the changes from ag/23138819, ag/23335134 & ag/23223020 retain their T behavior when thise codebase is launched on T devices. Bug: 286909921 Test: atest ServiceUwbTests Change-Id: If89ea4d6e08a0b3c17fff32eca482f11dcb19c4a
-rw-r--r--service/java/com/android/server/uwb/UwbSessionManager.java11
-rw-r--r--service/java/com/android/server/uwb/UwbSessionNotificationManager.java13
-rw-r--r--service/java/com/android/server/uwb/UwbTestUtils.java11
-rw-r--r--service/java/com/android/server/uwb/data/UwbMulticastListUpdateStatus.java12
-rw-r--r--service/java/com/android/server/uwb/params/FiraEncoder.java4
-rw-r--r--service/tests/src/com/android/server/uwb/UwbSessionManagerTest.java15
-rw-r--r--service/tests/src/com/android/server/uwb/data/UwbMulticastListUpdateStatusTest.java16
7 files changed, 70 insertions, 12 deletions
diff --git a/service/java/com/android/server/uwb/UwbSessionManager.java b/service/java/com/android/server/uwb/UwbSessionManager.java
index cc217135..119118ba 100644
--- a/service/java/com/android/server/uwb/UwbSessionManager.java
+++ b/service/java/com/android/server/uwb/UwbSessionManager.java
@@ -61,6 +61,7 @@ import android.uwb.UwbAddress;
import androidx.annotation.VisibleForTesting;
+import com.android.modules.utils.build.SdkLevel;
import com.android.server.uwb.advertisement.UwbAdvertiseManager;
import com.android.server.uwb.correction.UwbFilterEngine;
import com.android.server.uwb.correction.pose.ApplicationPoseSource;
@@ -73,6 +74,7 @@ import com.android.server.uwb.data.UwbTwoWayMeasurement;
import com.android.server.uwb.data.UwbUciConstants;
import com.android.server.uwb.jni.INativeUwbManager;
import com.android.server.uwb.jni.NativeUwbManager;
+import com.android.server.uwb.params.TlvUtil;
import com.android.server.uwb.proto.UwbStatsLog;
import com.android.server.uwb.util.ArrayUtils;
import com.android.server.uwb.util.DataTypeConversionUtil;
@@ -1450,7 +1452,7 @@ public class UwbSessionManager implements INativeUwbManager.SessionNotification,
int dstAddressListSize = addrList.length;
List<byte[]> dstAddressList = new ArrayList<>();
for (UwbAddress address : addrList) {
- dstAddressList.add(address.toBytes());
+ dstAddressList.add(getComputedMacAddress(address));
}
int[] subSessionIdList;
if (!ArrayUtils.isEmpty(
@@ -2468,4 +2470,11 @@ public class UwbSessionManager implements INativeUwbManager.SessionNotification,
pw.println("Non Privileged Fira Session Ids: " + nonPrivilegedSessionIds);
pw.println("---- Dump of UwbSessionManager ----");
}
+
+ private static byte[] getComputedMacAddress(UwbAddress address) {
+ if (!SdkLevel.isAtLeastU()) {
+ return TlvUtil.getReverseBytes(address.toBytes());
+ }
+ return address.toBytes();
+ }
}
diff --git a/service/java/com/android/server/uwb/UwbSessionNotificationManager.java b/service/java/com/android/server/uwb/UwbSessionNotificationManager.java
index 75a4f6a0..284b0aac 100644
--- a/service/java/com/android/server/uwb/UwbSessionNotificationManager.java
+++ b/service/java/com/android/server/uwb/UwbSessionNotificationManager.java
@@ -29,12 +29,14 @@ import android.uwb.RangingReport;
import android.uwb.SessionHandle;
import android.uwb.UwbAddress;
+import com.android.modules.utils.build.SdkLevel;
import com.android.server.uwb.UwbSessionManager.UwbSession;
import com.android.server.uwb.data.UwbDlTDoAMeasurement;
import com.android.server.uwb.data.UwbOwrAoaMeasurement;
import com.android.server.uwb.data.UwbRangingData;
import com.android.server.uwb.data.UwbTwoWayMeasurement;
import com.android.server.uwb.data.UwbUciConstants;
+import com.android.server.uwb.params.TlvUtil;
import com.android.server.uwb.util.UwbUtil;
import com.google.uwb.support.base.Params;
@@ -520,7 +522,7 @@ public class UwbSessionNotificationManager {
PersistableBundle rangingMeasurementMetadata = new PersistableBundle();
rangingMeasurementBuilder.setRangingMeasurementMetadata(rangingMeasurementMetadata);
- UwbAddress addr = UwbAddress.fromBytes(uwbTwoWayMeasurement[i].getMacAddress());
+ UwbAddress addr = getComputedMacAddress(uwbTwoWayMeasurement[i].getMacAddress());
UwbControlee controlee = uwbSession.getControlee(addr);
if (controlee != null) {
controlee.filterMeasurement(rangingMeasurementBuilder);
@@ -639,7 +641,7 @@ public class UwbSessionNotificationManager {
private static RangingMeasurement.Builder buildRangingMeasurement(
byte[] macAddress, int rangingStatus, long elapsedRealtimeNanos, int los) {
return new RangingMeasurement.Builder()
- .setRemoteDeviceAddress(UwbAddress.fromBytes(macAddress))
+ .setRemoteDeviceAddress(getComputedMacAddress(macAddress))
.setStatus(rangingStatus)
.setElapsedRealtimeNanos(elapsedRealtimeNanos)
.setLineOfSight(los);
@@ -653,4 +655,11 @@ public class UwbSessionNotificationManager {
.setConfidenceLevel(0)
.build();
}
+
+ private static UwbAddress getComputedMacAddress(byte[] address) {
+ if (!SdkLevel.isAtLeastU()) {
+ return UwbAddress.fromBytes(TlvUtil.getReverseBytes(address));
+ }
+ return UwbAddress.fromBytes(address);
+ }
}
diff --git a/service/java/com/android/server/uwb/UwbTestUtils.java b/service/java/com/android/server/uwb/UwbTestUtils.java
index f0ba1d41..89dac729 100644
--- a/service/java/com/android/server/uwb/UwbTestUtils.java
+++ b/service/java/com/android/server/uwb/UwbTestUtils.java
@@ -32,10 +32,12 @@ import android.uwb.RangingMeasurement;
import android.uwb.RangingReport;
import android.uwb.UwbAddress;
+import com.android.modules.utils.build.SdkLevel;
import com.android.server.uwb.data.UwbDlTDoAMeasurement;
import com.android.server.uwb.data.UwbOwrAoaMeasurement;
import com.android.server.uwb.data.UwbRangingData;
import com.android.server.uwb.data.UwbTwoWayMeasurement;
+import com.android.server.uwb.params.TlvUtil;
import com.google.uwb.support.dltdoa.DlTDoAMeasurement;
import com.google.uwb.support.fira.FiraParams;
@@ -279,6 +281,13 @@ public class UwbTestUtils {
return Pair.create(uwbRangingData, rangingReport);
}
+ private static UwbAddress getComputedMacAddress(byte[] address) {
+ if (!SdkLevel.isAtLeastU()) {
+ return UwbAddress.fromBytes(TlvUtil.getReverseBytes(address));
+ }
+ return UwbAddress.fromBytes(address);
+ }
+
private static RangingReport buildRangingReport(byte[] macAddress, int rangingMeasurementType,
AngleOfArrivalMeasurement aoaMeasurement, AngleOfArrivalMeasurement aoaDestMeasurement,
long elapsedRealtimeNanos, PersistableBundle rangingReportMetadata) {
@@ -286,7 +295,7 @@ public class UwbTestUtils {
PersistableBundle rangingMeasurementMetadata = new PersistableBundle();
RangingMeasurement.Builder rangingMeasurementBuilder = new RangingMeasurement.Builder()
- .setRemoteDeviceAddress(UwbAddress.fromBytes(macAddress))
+ .setRemoteDeviceAddress(getComputedMacAddress(macAddress))
.setStatus(TEST_STATUS)
.setElapsedRealtimeNanos(elapsedRealtimeNanos)
.setAngleOfArrivalMeasurement(aoaMeasurement)
diff --git a/service/java/com/android/server/uwb/data/UwbMulticastListUpdateStatus.java b/service/java/com/android/server/uwb/data/UwbMulticastListUpdateStatus.java
index e814c4d1..34c3e9f3 100644
--- a/service/java/com/android/server/uwb/data/UwbMulticastListUpdateStatus.java
+++ b/service/java/com/android/server/uwb/data/UwbMulticastListUpdateStatus.java
@@ -18,6 +18,9 @@ package com.android.server.uwb.data;
import android.util.Log;
import android.uwb.UwbAddress;
+import com.android.modules.utils.build.SdkLevel;
+import com.android.server.uwb.params.TlvUtil;
+
import java.nio.ByteBuffer;
import java.util.Arrays;
@@ -60,7 +63,7 @@ public class UwbMulticastListUpdateStatus {
if (buffer.remaining() >= addressLength) {
byte[] macAddress = new byte[addressLength];
buffer.get(macAddress, 0, macAddress.length);
- uwbAddresses[i] = UwbAddress.fromBytes(macAddress);
+ uwbAddresses[i] = getComputedMacAddress(macAddress);
}
}
return uwbAddresses;
@@ -106,4 +109,11 @@ public class UwbMulticastListUpdateStatus {
+ ", Status =" + Arrays.toString(mStatus)
+ '}';
}
+
+ private static UwbAddress getComputedMacAddress(byte[] address) {
+ if (!SdkLevel.isAtLeastU()) {
+ return UwbAddress.fromBytes(TlvUtil.getReverseBytes(address));
+ }
+ return UwbAddress.fromBytes(address);
+ }
}
diff --git a/service/java/com/android/server/uwb/params/FiraEncoder.java b/service/java/com/android/server/uwb/params/FiraEncoder.java
index 6f763aa5..eae72206 100644
--- a/service/java/com/android/server/uwb/params/FiraEncoder.java
+++ b/service/java/com/android/server/uwb/params/FiraEncoder.java
@@ -341,14 +341,14 @@ public class FiraEncoder extends TlvEncoder {
return rangingRoundControl;
}
- private byte[] getComputedMacAddress(UwbAddress address) {
+ private static byte[] getComputedMacAddress(UwbAddress address) {
if (!SdkLevel.isAtLeastU()) {
return TlvUtil.getReverseBytes(address.toBytes());
}
return address.toBytes();
}
- private byte[] getComputedVendorId(byte[] data) {
+ private static byte[] getComputedVendorId(byte[] data) {
if (!SdkLevel.isAtLeastU()) {
return TlvUtil.getReverseBytes(data);
}
diff --git a/service/tests/src/com/android/server/uwb/UwbSessionManagerTest.java b/service/tests/src/com/android/server/uwb/UwbSessionManagerTest.java
index 4dd76825..c245858c 100644
--- a/service/tests/src/com/android/server/uwb/UwbSessionManagerTest.java
+++ b/service/tests/src/com/android/server/uwb/UwbSessionManagerTest.java
@@ -100,6 +100,7 @@ import android.uwb.StateChangeReason;
import android.uwb.UwbAddress;
import android.uwb.UwbOemExtensionCallbackListener;
+import com.android.modules.utils.build.SdkLevel;
import com.android.server.uwb.UwbSessionManager.UwbSession;
import com.android.server.uwb.UwbSessionManager.WaitObj;
import com.android.server.uwb.advertisement.UwbAdvertiseManager;
@@ -109,6 +110,7 @@ import com.android.server.uwb.data.UwbRangingData;
import com.android.server.uwb.data.UwbUciConstants;
import com.android.server.uwb.jni.NativeUwbManager;
import com.android.server.uwb.multchip.UwbMultichipData;
+import com.android.server.uwb.params.TlvUtil;
import com.google.uwb.support.base.Params;
import com.google.uwb.support.ccc.CccOpenRangingParams;
@@ -2956,7 +2958,7 @@ public class UwbSessionManagerTest {
.isTrue();
byte[] dstAddress =
- reconfigureParams.getAddressList()[0].toBytes();
+ getComputedMacAddress(reconfigureParams.getAddressList()[0].toBytes());
verify(mNativeUwbManager).controllerMulticastListUpdate(
uwbSession.getSessionId(), reconfigureParams.getAction(), 1,
dstAddress, reconfigureParams.getSubSessionIdList(), null,
@@ -2999,7 +3001,7 @@ public class UwbSessionManagerTest {
.anyMatch(e -> e.getUwbAddress().equals(UWB_DEST_ADDRESS)))
.isFalse();
- byte[] dstAddress = reconfigureParams.getAddressList()[0].toBytes();
+ byte[] dstAddress = getComputedMacAddress(reconfigureParams.getAddressList()[0].toBytes());
verify(mNativeUwbManager).controllerMulticastListUpdate(
uwbSession.getSessionId(), reconfigureParams.getAction(), 1,
dstAddress, reconfigureParams.getSubSessionIdList(), null,
@@ -3041,7 +3043,7 @@ public class UwbSessionManagerTest {
.anyMatch(e -> e.getUwbAddress().equals(UWB_DEST_ADDRESS_2)))
.isTrue();
- byte[] dstAddress = reconfigureParams.getAddressList()[0].toBytes();
+ byte[] dstAddress = getComputedMacAddress(reconfigureParams.getAddressList()[0].toBytes());
verify(mNativeUwbManager).controllerMulticastListUpdate(
uwbSession.getSessionId(), reconfigureParams.getAction(), 1,
dstAddress, reconfigureParams.getSubSessionIdList(),
@@ -3475,4 +3477,11 @@ public class UwbSessionManagerTest {
info.payload = DATA_PAYLOAD;
return info;
}
+
+ private static byte[] getComputedMacAddress(byte[] address) {
+ if (!SdkLevel.isAtLeastU()) {
+ return TlvUtil.getReverseBytes(address);
+ }
+ return address;
+ }
}
diff --git a/service/tests/src/com/android/server/uwb/data/UwbMulticastListUpdateStatusTest.java b/service/tests/src/com/android/server/uwb/data/UwbMulticastListUpdateStatusTest.java
index 359a0203..52298a63 100644
--- a/service/tests/src/com/android/server/uwb/data/UwbMulticastListUpdateStatusTest.java
+++ b/service/tests/src/com/android/server/uwb/data/UwbMulticastListUpdateStatusTest.java
@@ -24,6 +24,9 @@ import android.uwb.UwbAddress;
import androidx.test.runner.AndroidJUnit4;
+import com.android.modules.utils.build.SdkLevel;
+import com.android.server.uwb.params.TlvUtil;
+
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -95,12 +98,21 @@ public class UwbMulticastListUpdateStatusTest {
assertThat(mUwbMulticastListUpdateStatus.getNumOfControlee())
.isEqualTo(numOfControlees);
- assertThat(mUwbMulticastListUpdateStatus.getControleeUwbAddresses()[0].toBytes()).isEqualTo(
+ assertThat(getComputedMacAddress(
+ mUwbMulticastListUpdateStatus.getControleeUwbAddresses()[0].toBytes())).isEqualTo(
new byte[]{0x02, 0x03});
- assertThat(mUwbMulticastListUpdateStatus.getControleeUwbAddresses()[1].toBytes()).isEqualTo(
+ assertThat(getComputedMacAddress(
+ mUwbMulticastListUpdateStatus.getControleeUwbAddresses()[1].toBytes())).isEqualTo(
new byte[]{0x05, 0x06});
assertThat(mUwbMulticastListUpdateStatus.getSubSessionId()).isEqualTo(TEST_SUB_SESSION_ID);
assertThat(mUwbMulticastListUpdateStatus.getStatus()).isEqualTo(TEST_STATUS);
}
+
+ private static byte[] getComputedMacAddress(byte[] address) {
+ if (!SdkLevel.isAtLeastU()) {
+ return TlvUtil.getReverseBytes(address);
+ }
+ return address;
+ }
}