Snap for 8857176 from aa389ab5e88aaad197ce927092f4871bb2ec2b32 to mainline-go-resolv-release
Change-Id: I726e23c21876e21dd0b4ebebb4ea5f3d58401b62
diff --git a/apex/Android.bp b/apex/Android.bp
index b8ae3de..9e86c9b 100644
--- a/apex/Android.bp
+++ b/apex/Android.bp
@@ -61,8 +61,11 @@
sdk {
name: "uwb-module-sdk",
- bootclasspath_fragments: ["com.android.uwb-bootclasspath-fragment"],
- systemserverclasspath_fragments: ["com.android.uwb-systemserverclasspath-fragment"],
+ apexes: [
+ // Adds exportable dependencies of the APEX to the sdk,
+ // e.g. *classpath_fragments.
+ "com.android.uwb",
+ ],
}
// Encapsulate the contributions made by the com.android.uwb to the bootclasspath.
diff --git a/service/java/com/android/server/uwb/UwbShellCommand.java b/service/java/com/android/server/uwb/UwbShellCommand.java
index f5a7604..4167dae 100644
--- a/service/java/com/android/server/uwb/UwbShellCommand.java
+++ b/service/java/com/android/server/uwb/UwbShellCommand.java
@@ -69,6 +69,7 @@
import com.android.server.uwb.jni.NativeUwbManager;
import com.android.server.uwb.util.ArrayUtils;
+import com.google.common.io.BaseEncoding;
import com.google.uwb.support.base.Params;
import com.google.uwb.support.ccc.CccOpenRangingParams;
import com.google.uwb.support.ccc.CccParams;
@@ -163,6 +164,7 @@
private static int sSessionHandleIdNext = 0;
private final UwbServiceImpl mUwbService;
+ private final UwbServiceCore mUwbServiceCore;
private final UwbCountryCode mUwbCountryCode;
private final NativeUwbManager mNativeUwbManager;
private final Context mContext;
@@ -172,6 +174,7 @@
mContext = context;
mUwbCountryCode = uwbInjector.getUwbCountryCode();
mNativeUwbManager = uwbInjector.getNativeUwbManager();
+ mUwbServiceCore = uwbInjector.getUwbServiceCore();
}
private static String bundleToString(@Nullable PersistableBundle bundle) {
@@ -345,7 +348,8 @@
}
}
- private Pair<FiraOpenSessionParams, Boolean> buildFiraOpenSessionParams() {
+ private Pair<FiraOpenSessionParams, Boolean> buildFiraOpenSessionParams(
+ GenericSpecificationParams specificationParams) {
FiraOpenSessionParams.Builder builder =
new FiraOpenSessionParams.Builder(DEFAULT_FIRA_OPEN_SESSION_PARAMS);
boolean shouldBlockCall = false;
@@ -469,18 +473,41 @@
}
}
}
+ if (option.equals("-g")) {
+ String staticSTSIV = getNextArgRequired();
+ if (staticSTSIV.length() == 12) {
+ builder.setStaticStsIV(BaseEncoding.base16().decode(staticSTSIV.toUpperCase()));
+ } else {
+ throw new IllegalArgumentException("staticSTSIV expecting 6 bytes");
+ }
+ }
+ if (option.equals("-v")) {
+ String vendor_id = getNextArgRequired();
+ if (vendor_id.length() == 4) {
+ builder.setVendorId(BaseEncoding.base16().decode(vendor_id.toUpperCase()));
+ } else {
+ throw new IllegalArgumentException("vendorId expecting 2 bytes");
+ }
+ }
option = getNextOption();
}
if (aoaResultReqEnabled && interleavingEnabled) {
throw new IllegalArgumentException(
"Both interleaving (-z) and aoa result req (-e) cannot be specified");
}
+ // Enable rssi reporting if device supports it.
+ if (specificationParams.getFiraSpecificationParams().hasRssiReportingSupport()) {
+ builder.setIsRssiReportingEnabled(true);
+ }
// TODO: Add remaining params if needed.
return Pair.create(builder.build(), shouldBlockCall);
}
private void startFiraRangingSession(PrintWriter pw) throws Exception {
- Pair<FiraOpenSessionParams, Boolean> firaOpenSessionParams = buildFiraOpenSessionParams();
+ GenericSpecificationParams specificationParams =
+ mUwbServiceCore.getCachedSpecificationParams(null);
+ Pair<FiraOpenSessionParams, Boolean> firaOpenSessionParams =
+ buildFiraOpenSessionParams(specificationParams);
startRangingSession(
firaOpenSessionParams.first, null, firaOpenSessionParams.first.getSessionId(),
firaOpenSessionParams.second, pw);
@@ -897,7 +924,9 @@
+ " [-z <numRangeMrmts, numAoaAzimuthMrmts, numAoaElevationMrmts>"
+ "(interleaving-ratio)"
+ " [-e none|enabled|azimuth-only|elevation-only](aoa type)"
- + " [-f <tof,azimuth,elevation,aoa-fom>(result-report-config)");
+ + " [-f <tof,azimuth,elevation,aoa-fom>(result-report-config)"
+ + " [-g <staticStsIV>(staticStsIV 6-bytes)"
+ + " [-v <staticStsVendorId>(staticStsVendorId 2-bytes)");
pw.println(" Starts a FIRA ranging session with the provided params."
+ " Note: default behavior is to cache the latest ranging reports which can be"
+ " retrieved using |get-ranging-session-reports|");
diff --git a/service/tests/src/com/android/server/uwb/UwbShellCommandTest.java b/service/tests/src/com/android/server/uwb/UwbShellCommandTest.java
index 3d5504e..2942d65 100644
--- a/service/tests/src/com/android/server/uwb/UwbShellCommandTest.java
+++ b/service/tests/src/com/android/server/uwb/UwbShellCommandTest.java
@@ -22,10 +22,13 @@
import static com.android.server.uwb.UwbShellCommand.DEFAULT_FIRA_OPEN_SESSION_PARAMS;
import static com.google.common.truth.Truth.assertThat;
+import static com.google.uwb.support.fira.FiraParams.RangeDataNtfConfigCapabilityFlag.HAS_RANGE_DATA_NTF_CONFIG_DISABLE;
+import static com.google.uwb.support.fira.FiraParams.RangeDataNtfConfigCapabilityFlag.HAS_RANGE_DATA_NTF_CONFIG_ENABLE;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.validateMockitoUsage;
import static org.mockito.Mockito.verify;
@@ -51,8 +54,11 @@
import com.google.uwb.support.base.Params;
import com.google.uwb.support.ccc.CccOpenRangingParams;
+import com.google.uwb.support.ccc.CccSpecificationParams;
import com.google.uwb.support.ccc.CccStartRangingParams;
import com.google.uwb.support.fira.FiraOpenSessionParams;
+import com.google.uwb.support.fira.FiraSpecificationParams;
+import com.google.uwb.support.generic.GenericSpecificationParams;
import org.junit.After;
import org.junit.Before;
@@ -63,6 +69,8 @@
import org.mockito.MockitoAnnotations;
import java.io.FileDescriptor;
+import java.util.EnumSet;
+import java.util.List;
/**
* Unit tests for {@link com.android.server.uwb.UwbShellCommand}.
@@ -76,6 +84,7 @@
@Mock UwbServiceImpl mUwbService;
@Mock UwbCountryCode mUwbCountryCode;
@Mock Context mContext;
+ @Mock UwbServiceCore mUwbServiceCore;
UwbShellCommand mUwbShellCommand;
@@ -84,6 +93,19 @@
MockitoAnnotations.initMocks(this);
when(mUwbInjector.getUwbCountryCode()).thenReturn(mUwbCountryCode);
+ when(mUwbInjector.getUwbServiceCore()).thenReturn(mUwbServiceCore);
+ GenericSpecificationParams params = new GenericSpecificationParams.Builder()
+ .setCccSpecificationParams(mock(CccSpecificationParams.class))
+ .setFiraSpecificationParams(
+ new FiraSpecificationParams.Builder()
+ .setSupportedChannels(List.of(9))
+ .setRangeDataNtfConfigCapabilities(
+ EnumSet.of(
+ HAS_RANGE_DATA_NTF_CONFIG_DISABLE,
+ HAS_RANGE_DATA_NTF_CONFIG_ENABLE))
+ .build())
+ .build();
+ when(mUwbServiceCore.getCachedSpecificationParams(any())).thenReturn(params);
mUwbShellCommand = new UwbShellCommand(mUwbInjector, mUwbService, mContext);