From 93a8766e12b39caac607c45046bbd0e53c809469 Mon Sep 17 00:00:00 2001 From: Roshan Pius Date: Mon, 12 Jun 2023 13:31:27 -0700 Subject: 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 --- .../java/com/android/server/uwb/UwbSessionManager.java | 11 ++++++++++- .../server/uwb/UwbSessionNotificationManager.java | 13 +++++++++++-- service/java/com/android/server/uwb/UwbTestUtils.java | 11 ++++++++++- .../server/uwb/data/UwbMulticastListUpdateStatus.java | 12 +++++++++++- .../java/com/android/server/uwb/params/FiraEncoder.java | 4 ++-- .../com/android/server/uwb/UwbSessionManagerTest.java | 15 ++++++++++++--- .../uwb/data/UwbMulticastListUpdateStatusTest.java | 16 ++++++++++++++-- 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 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; + } } -- cgit v1.2.3