summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoshan Pius <rpius@google.com>2022-06-08 14:09:43 -0700
committerRoshan Pius <rpius@google.com>2022-07-06 16:55:19 +0000
commitb41f8d99a4fa21d854bde8fce63576d40c24cd5e (patch)
treefd8ddd71b73d495a7dba510626a3eb3b75628bce
parent7a03fbee270a3df34e01f27a077fa269e4b255fe (diff)
downloadUwb-b41f8d99a4fa21d854bde8fce63576d40c24cd5e.tar.gz
uwb(service): Implement CR 396 and 346
Supports more range data notification thresholds. Also, adds a range ntf control capabilities for the device to expose what ntf control capabilities are controlled. Bug: 235355249 Test: atest UwbSupportLibTests ServiceUwbTests Change-Id: I311ae45345be4f49c471d504a20f18c2e6f71d91
-rw-r--r--service/java/com/android/server/uwb/config/CapabilityParam.java5
-rw-r--r--service/java/com/android/server/uwb/config/ConfigParam.java5
-rw-r--r--service/java/com/android/server/uwb/data/UwbUciConstants.java2
-rw-r--r--service/java/com/android/server/uwb/params/FiraDecoder.java37
-rw-r--r--service/java/com/android/server/uwb/params/FiraEncoder.java78
-rwxr-xr-xservice/java/com/android/server/uwb/util/UwbUtil.java6
-rw-r--r--service/support_lib/src/com/google/uwb/support/fira/FiraOpenSessionParams.java176
-rw-r--r--service/support_lib/src/com/google/uwb/support/fira/FiraParams.java37
-rw-r--r--service/support_lib/src/com/google/uwb/support/fira/FiraRangingReconfigureParams.java176
-rw-r--r--service/support_lib/test/FiraTests.java58
-rw-r--r--service/tests/src/com/android/server/uwb/UwbConfigurationManagerTest.java4
-rw-r--r--service/tests/src/com/android/server/uwb/UwbServiceCoreTest.java4
-rw-r--r--service/tests/src/com/android/server/uwb/UwbServiceImplTest.java4
-rw-r--r--service/tests/src/com/android/server/uwb/params/FiraEncoderTest.java31
14 files changed, 581 insertions, 42 deletions
diff --git a/service/java/com/android/server/uwb/config/CapabilityParam.java b/service/java/com/android/server/uwb/config/CapabilityParam.java
index 28fe2943..baab7cc7 100644
--- a/service/java/com/android/server/uwb/config/CapabilityParam.java
+++ b/service/java/com/android/server/uwb/config/CapabilityParam.java
@@ -160,4 +160,9 @@ public class CapabilityParam {
public static final int RANGE_DATA_NTF_CONFIG_ENABLE = 1 << 0;
public static final int RANGE_DATA_NTF_CONFIG_DISABLE = 1 << 1;
public static final int RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG = 1 << 2;
+ public static final int RANGE_DATA_NTF_CONFIG_ENABLE_AOA_LEVEL_TRIG = 1 << 3;
+ public static final int RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG = 1 << 4;
+ public static final int RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_EDGE_TRIG = 1 << 5;
+ public static final int RANGE_DATA_NTF_CONFIG_ENABLE_AOA_EDGE_TRIG = 1 << 6;
+ public static final int RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_EDGE_TRIG = 1 << 7;
}
diff --git a/service/java/com/android/server/uwb/config/ConfigParam.java b/service/java/com/android/server/uwb/config/ConfigParam.java
index 99cbc1b5..1eeeb2ae 100644
--- a/service/java/com/android/server/uwb/config/ConfigParam.java
+++ b/service/java/com/android/server/uwb/config/ConfigParam.java
@@ -61,7 +61,8 @@ public class ConfigParam {
public static final int RANGING_TIME_STRUCT = 0x1A;
public static final int SLOTS_PER_RR = 0x1B;
public static final int TX_ADAPTIVE_PAYLOAD_POWER = 0x1C;
- //public static final int TX_ANTENNA_SELECTION = 0x1D;
+ // TODO: Ensure this value is correct in the final 2.0 specification.
+ public static final int RANGE_DATA_NTF_AOA_BOUND = 0x1D;
public static final int RESPONDER_SLOT_INDEX = 0x1E;
public static final int PRF_MODE = 0x1F;
public static final int SCHEDULED_MODE = 0x22;
@@ -84,6 +85,8 @@ public class ConfigParam {
public static final int STS_LENGTH = 0x35;
public static final int SESSION_KEY = 0x36;
public static final int SUBSESSION_KEY = 0x37;
+
+ // Android specific params.
public static final int NUM_RANGE_MEASUREMENTS = NB_OF_RANGE_MEASUREMENTS;
public static final int NUM_AOA_AZIMUTH_MEASUREMENTS = NB_OF_AZIMUTH_MEASUREMENTS;
public static final int NUM_AOA_ELEVATION_MEASUREMENTS = NB_OF_ELEVATION_MEASUREMENTS;
diff --git a/service/java/com/android/server/uwb/data/UwbUciConstants.java b/service/java/com/android/server/uwb/data/UwbUciConstants.java
index 2218bea8..000d90d1 100644
--- a/service/java/com/android/server/uwb/data/UwbUciConstants.java
+++ b/service/java/com/android/server/uwb/data/UwbUciConstants.java
@@ -111,7 +111,7 @@ public class UwbUciConstants {
FiraParams.RANGE_DATA_NTF_CONFIG_DISABLE;
public static final int RANGE_DATA_NTF_CONFIG_ENABLE = FiraParams.RANGE_DATA_NTF_CONFIG_ENABLE;
public static final int RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY =
- FiraParams.RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY;
+ FiraParams.RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG;
public static final int RANGING_DEVICE_ROLE_RESPONDER =
FiraParams.RANGING_DEVICE_ROLE_RESPONDER;
diff --git a/service/java/com/android/server/uwb/params/FiraDecoder.java b/service/java/com/android/server/uwb/params/FiraDecoder.java
index 47f33b41..da49a315 100644
--- a/service/java/com/android/server/uwb/params/FiraDecoder.java
+++ b/service/java/com/android/server/uwb/params/FiraDecoder.java
@@ -45,6 +45,11 @@ import static com.android.server.uwb.config.CapabilityParam.PROVISIONED_STS;
import static com.android.server.uwb.config.CapabilityParam.PROVISIONED_STS_RESPONDER_SPECIFIC_SUBSESSION_KEY;
import static com.android.server.uwb.config.CapabilityParam.RANGE_DATA_NTF_CONFIG_DISABLE;
import static com.android.server.uwb.config.CapabilityParam.RANGE_DATA_NTF_CONFIG_ENABLE;
+import static com.android.server.uwb.config.CapabilityParam.RANGE_DATA_NTF_CONFIG_ENABLE_AOA_EDGE_TRIG;
+import static com.android.server.uwb.config.CapabilityParam.RANGE_DATA_NTF_CONFIG_ENABLE_AOA_LEVEL_TRIG;
+import static com.android.server.uwb.config.CapabilityParam.RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_EDGE_TRIG;
+import static com.android.server.uwb.config.CapabilityParam.RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG;
+import static com.android.server.uwb.config.CapabilityParam.RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_EDGE_TRIG;
import static com.android.server.uwb.config.CapabilityParam.RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG;
import static com.android.server.uwb.config.CapabilityParam.RESPONDER;
import static com.android.server.uwb.config.CapabilityParam.RSSI_REPORTING;
@@ -338,7 +343,37 @@ public class FiraDecoder extends TlvDecoder {
RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG)) {
rangeDataNtfConfigCapabilityFlag.add(
FiraParams.RangeDataNtfConfigCapabilityFlag
- .HAS_RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY);
+ .HAS_RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG);
+ }
+ if (isBitSet(rangeDataNtfConfigUci,
+ RANGE_DATA_NTF_CONFIG_ENABLE_AOA_LEVEL_TRIG)) {
+ rangeDataNtfConfigCapabilityFlag.add(
+ FiraParams.RangeDataNtfConfigCapabilityFlag
+ .HAS_RANGE_DATA_NTF_CONFIG_ENABLE_AOA_LEVEL_TRIG);
+ }
+ if (isBitSet(rangeDataNtfConfigUci,
+ RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG)) {
+ rangeDataNtfConfigCapabilityFlag.add(
+ FiraParams.RangeDataNtfConfigCapabilityFlag
+ .HAS_RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG);
+ }
+ if (isBitSet(rangeDataNtfConfigUci,
+ RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_EDGE_TRIG)) {
+ rangeDataNtfConfigCapabilityFlag.add(
+ FiraParams.RangeDataNtfConfigCapabilityFlag
+ .HAS_RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_EDGE_TRIG);
+ }
+ if (isBitSet(rangeDataNtfConfigUci,
+ RANGE_DATA_NTF_CONFIG_ENABLE_AOA_EDGE_TRIG)) {
+ rangeDataNtfConfigCapabilityFlag.add(
+ FiraParams.RangeDataNtfConfigCapabilityFlag
+ .HAS_RANGE_DATA_NTF_CONFIG_ENABLE_AOA_EDGE_TRIG);
+ }
+ if (isBitSet(rangeDataNtfConfigUci,
+ RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_EDGE_TRIG)) {
+ rangeDataNtfConfigCapabilityFlag.add(
+ FiraParams.RangeDataNtfConfigCapabilityFlag
+ .HAS_RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_EDGE_TRIG);
}
builder.setRangeDataNtfConfigCapabilities(rangeDataNtfConfigCapabilityFlag);
} catch (IllegalArgumentException e) {
diff --git a/service/java/com/android/server/uwb/params/FiraEncoder.java b/service/java/com/android/server/uwb/params/FiraEncoder.java
index 60f4ff7c..20e0778a 100644
--- a/service/java/com/android/server/uwb/params/FiraEncoder.java
+++ b/service/java/com/android/server/uwb/params/FiraEncoder.java
@@ -16,9 +16,15 @@
package com.android.server.uwb.params;
+import static com.google.uwb.support.fira.FiraParams.RANGE_DATA_NTF_CONFIG_ENABLE_AOA_EDGE_TRIG;
+import static com.google.uwb.support.fira.FiraParams.RANGE_DATA_NTF_CONFIG_ENABLE_AOA_LEVEL_TRIG;
+import static com.google.uwb.support.fira.FiraParams.RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_EDGE_TRIG;
+import static com.google.uwb.support.fira.FiraParams.RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG;
+
import android.uwb.UwbAddress;
import com.android.server.uwb.config.ConfigParam;
+import com.android.server.uwb.util.UwbUtil;
import com.google.uwb.support.base.Params;
import com.google.uwb.support.fira.FiraOpenSessionParams;
@@ -41,6 +47,13 @@ public class FiraEncoder extends TlvEncoder {
return null;
}
+ private static boolean hasAoaBoundInRangeDataNfConfig(int rangeDataNtfConfig) {
+ return rangeDataNtfConfig == RANGE_DATA_NTF_CONFIG_ENABLE_AOA_LEVEL_TRIG
+ || rangeDataNtfConfig == RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG
+ || rangeDataNtfConfig == RANGE_DATA_NTF_CONFIG_ENABLE_AOA_EDGE_TRIG
+ || rangeDataNtfConfig == RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_EDGE_TRIG;
+ }
+
private TlvBuffer getTlvBufferFromFiraOpenSessionParams(Params baseParam) {
FiraOpenSessionParams params = (FiraOpenSessionParams) baseParam;
ByteBuffer dstAddressList = ByteBuffer.allocate(1024);
@@ -51,7 +64,7 @@ public class FiraEncoder extends TlvEncoder {
int resultReportConfig = getResultReportConfig(params);
int rangingRoundControl = getRangingRoundControl(params);
- TlvBuffer tlvBuffer = new TlvBuffer.Builder()
+ TlvBuffer.Builder tlvBufferBuilder = new TlvBuffer.Builder()
.putByte(ConfigParam.DEVICE_TYPE, (byte) params.getDeviceType())
.putByte(ConfigParam.RANGING_ROUND_USAGE, (byte) params.getRangingRoundUsage())
.putByte(ConfigParam.STS_CONFIG, (byte) params.getStsConfig())
@@ -112,9 +125,27 @@ public class FiraEncoder extends TlvEncoder {
.putByte(ConfigParam.NUM_AOA_AZIMUTH_MEASUREMENTS,
(byte) params.getNumOfMsrmtFocusOnAoaAzimuth())
.putByte(ConfigParam.NUM_AOA_ELEVATION_MEASUREMENTS,
- (byte) params.getNumOfMsrmtFocusOnAoaElevation())
- .build();
- return tlvBuffer;
+ (byte) params.getNumOfMsrmtFocusOnAoaElevation());
+ if (hasAoaBoundInRangeDataNfConfig(params.getRangeDataNtfConfig())) {
+ tlvBufferBuilder.putByteArray(ConfigParam.RANGE_DATA_NTF_AOA_BOUND, new byte[]{
+ // TODO (b/235355249): Verify this conversion. This is using AOA value
+ // in UwbTwoWayMeasurement to external RangingMeasurement conversion as
+ // reference.
+ (byte) UwbUtil.twos_compliment(UwbUtil.convertFloatToQFormat(
+ UwbUtil.radianTodegree(
+ params.getRangeDataNtfAoaAzimuthLower()), 9, 7), 8),
+ (byte) UwbUtil.twos_compliment(UwbUtil.convertFloatToQFormat(
+ UwbUtil.radianTodegree(
+ params.getRangeDataNtfAoaAzimuthUpper()), 9, 7), 8),
+ (byte) UwbUtil.twos_compliment(UwbUtil.convertFloatToQFormat(
+ UwbUtil.radianTodegree(
+ params.getRangeDataNtfAoaElevationLower()), 9, 7), 8),
+ (byte) UwbUtil.twos_compliment(UwbUtil.convertFloatToQFormat(
+ UwbUtil.radianTodegree(
+ params.getRangeDataNtfAoaElevationLower()), 9, 7), 8),
+ });
+ }
+ return tlvBufferBuilder.build();
}
private TlvBuffer getTlvBufferFromFiraRangingReconfigureParams(Params baseParam) {
@@ -124,6 +155,10 @@ public class FiraEncoder extends TlvEncoder {
Integer rangeDataNtfConfig = params.getRangeDataNtfConfig();
Integer rangeDataProximityNear = params.getRangeDataProximityNear();
Integer rangeDataProximityFar = params.getRangeDataProximityFar();
+ Double rangeDataAoaAzimuthLower = params.getRangeDataAoaAzimuthLower();
+ Double rangeDataAoaAzimuthUpper = params.getRangeDataAoaAzimuthUpper();
+ Double rangeDataAoaElevationLower = params.getRangeDataAoaElevationLower();
+ Double rangeDataAoaElevationUpper = params.getRangeDataAoaElevationUpper();
if (blockStrideLength != null) {
tlvBuilder.putByte(ConfigParam.BLOCK_STRIDE_LENGTH,
@@ -145,6 +180,41 @@ public class FiraEncoder extends TlvEncoder {
(short) rangeDataProximityFar.intValue());
}
+ if (rangeDataNtfConfig != null && hasAoaBoundInRangeDataNfConfig(rangeDataNtfConfig)) {
+ if ((rangeDataAoaAzimuthLower != null && rangeDataAoaAzimuthUpper != null)
+ || (rangeDataAoaElevationLower != null && rangeDataAoaElevationUpper != null)) {
+ rangeDataAoaAzimuthLower = rangeDataAoaAzimuthLower != null
+ ? rangeDataAoaAzimuthLower
+ : FiraParams.RANGE_DATA_NTF_AOA_AZIMUTH_LOWER_DEFAULT;
+ rangeDataAoaAzimuthUpper = rangeDataAoaAzimuthUpper != null
+ ? rangeDataAoaAzimuthUpper
+ : FiraParams.RANGE_DATA_NTF_AOA_AZIMUTH_UPPER_DEFAULT;
+ rangeDataAoaElevationLower = rangeDataAoaElevationLower != null
+ ? rangeDataAoaElevationLower
+ : FiraParams.RANGE_DATA_NTF_AOA_ELEVATION_LOWER_DEFAULT;
+ rangeDataAoaElevationUpper = rangeDataAoaElevationUpper != null
+ ? rangeDataAoaElevationUpper
+ : FiraParams.RANGE_DATA_NTF_AOA_ELEVATION_UPPER_DEFAULT;
+ tlvBuilder.putByteArray(ConfigParam.RANGE_DATA_NTF_AOA_BOUND, new byte[]{
+ // TODO (b/235355249): Verify this conversion. This is using AOA value
+ // in UwbTwoWayMeasurement to external RangingMeasurement conversion as
+ // reference.
+ (byte) UwbUtil.twos_compliment(UwbUtil.convertFloatToQFormat(
+ UwbUtil.radianTodegree(
+ rangeDataAoaAzimuthLower.floatValue()), 9, 7), 8),
+ (byte) UwbUtil.twos_compliment(UwbUtil.convertFloatToQFormat(
+ UwbUtil.radianTodegree(
+ rangeDataAoaAzimuthUpper.floatValue()), 9, 7), 8),
+ (byte) UwbUtil.twos_compliment(UwbUtil.convertFloatToQFormat(
+ UwbUtil.radianTodegree(
+ rangeDataAoaElevationLower.floatValue()), 9, 7), 8),
+ (byte) UwbUtil.twos_compliment(UwbUtil.convertFloatToQFormat(
+ UwbUtil.radianTodegree(
+ rangeDataAoaElevationUpper.floatValue()), 9, 7), 8),
+ });
+ }
+ }
+
return tlvBuilder.build();
}
diff --git a/service/java/com/android/server/uwb/util/UwbUtil.java b/service/java/com/android/server/uwb/util/UwbUtil.java
index 96a90218..d1f94cb1 100755
--- a/service/java/com/android/server/uwb/util/UwbUtil.java
+++ b/service/java/com/android/server/uwb/util/UwbUtil.java
@@ -68,6 +68,10 @@ public final class UwbUtil {
return (float) ((angleInDegrees) * Math.PI / 180.0);
}
+ public static float radianTodegree(double angleInRadians) {
+ return (float) ((angleInRadians) * 180 / Math.PI);
+ }
+
/**
* Fixed point Q format to float conversion. In Q format Fixed point integer,
* integer and fractional bits are specified together.
@@ -99,7 +103,7 @@ public final class UwbUtil {
* Get Two's complement of a number for signed conversion
*
* @param nInput Integer
- * @param nBits number of bits in number
+ * @param nBits number of bits an number
* @return two complement of given number value
*/
public static int twos_compliment(int nInput, int nBits) {
diff --git a/service/support_lib/src/com/google/uwb/support/fira/FiraOpenSessionParams.java b/service/support_lib/src/com/google/uwb/support/fira/FiraOpenSessionParams.java
index b6a830b3..d17852c8 100644
--- a/service/support_lib/src/com/google/uwb/support/fira/FiraOpenSessionParams.java
+++ b/service/support_lib/src/com/google/uwb/support/fira/FiraOpenSessionParams.java
@@ -27,6 +27,7 @@ import android.os.PersistableBundle;
import android.uwb.UwbAddress;
import android.uwb.UwbManager;
+import androidx.annotation.FloatRange;
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
@@ -109,6 +110,10 @@ public class FiraOpenSessionParams extends FiraParams {
@RangeDataNtfConfig private final int mRangeDataNtfConfig;
private final int mRangeDataNtfProximityNear;
private final int mRangeDataNtfProximityFar;
+ private double mRangeDataNtfAoaAzimuthLower;
+ private double mRangeDataNtfAoaAzimuthUpper;
+ private double mRangeDataNtfAoaElevationLower;
+ private double mRangeDataNtfAoaElevationUpper;
private final boolean mHasTimeOfFlightReport;
private final boolean mHasAngleOfArrivalAzimuthReport;
private final boolean mHasAngleOfArrivalElevationReport;
@@ -164,6 +169,14 @@ public class FiraOpenSessionParams extends FiraParams {
private static final String KEY_RANGE_DATA_NTF_CONFIG = "range_data_ntf_config";
private static final String KEY_RANGE_DATA_NTF_PROXIMITY_NEAR = "range_data_ntf_proximity_near";
private static final String KEY_RANGE_DATA_NTF_PROXIMITY_FAR = "range_data_ntf_proximity_far";
+ private static final String KEY_RANGE_DATA_NTF_AOA_AZIMUTH_LOWER =
+ "range_data_ntf_aoa_azimuth_lower";
+ private static final String KEY_RANGE_DATA_NTF_AOA_AZIMUTH_UPPER =
+ "range_data_ntf_aoa_azimuth_upper";
+ private static final String KEY_RANGE_DATA_NTF_AOA_ELEVATION_LOWER =
+ "range_data_ntf_aoa_elevation_lower";
+ private static final String KEY_RANGE_DATA_NTF_AOA_ELEVATION_UPPER =
+ "range_data_ntf_aoa_elevation_upper";
private static final String KEY_HAS_TIME_OF_FLIGHT_REPORT = "has_time_of_flight_report";
private static final String KEY_HAS_ANGLE_OF_ARRIVAL_AZIMUTH_REPORT =
"has_angle_of_arrival_azimuth_report";
@@ -226,6 +239,10 @@ public class FiraOpenSessionParams extends FiraParams {
@RangeDataNtfConfig int rangeDataNtfConfig,
int rangeDataNtfProximityNear,
int rangeDataNtfProximityFar,
+ double rangeDataNtfAoaAzimuthLower,
+ double rangeDataNtfAoaAzimuthUpper,
+ double rangeDataNtfAoaElevationLower,
+ double rangeDataNtfAoaElevationUpper,
boolean hasTimeOfFlightReport,
boolean hasAngleOfArrivalAzimuthReport,
boolean hasAngleOfArrivalElevationReport,
@@ -278,6 +295,10 @@ public class FiraOpenSessionParams extends FiraParams {
mRangeDataNtfConfig = rangeDataNtfConfig;
mRangeDataNtfProximityNear = rangeDataNtfProximityNear;
mRangeDataNtfProximityFar = rangeDataNtfProximityFar;
+ mRangeDataNtfAoaAzimuthLower = rangeDataNtfAoaAzimuthLower;
+ mRangeDataNtfAoaAzimuthUpper = rangeDataNtfAoaAzimuthUpper;
+ mRangeDataNtfAoaElevationLower = rangeDataNtfAoaElevationLower;
+ mRangeDataNtfAoaElevationUpper = rangeDataNtfAoaElevationUpper;
mHasTimeOfFlightReport = hasTimeOfFlightReport;
mHasAngleOfArrivalAzimuthReport = hasAngleOfArrivalAzimuthReport;
mHasAngleOfArrivalElevationReport = hasAngleOfArrivalElevationReport;
@@ -490,6 +511,22 @@ public class FiraOpenSessionParams extends FiraParams {
return mRangeDataNtfProximityFar;
}
+ public double getRangeDataNtfAoaAzimuthLower() {
+ return mRangeDataNtfAoaAzimuthLower;
+ }
+
+ public double getRangeDataNtfAoaAzimuthUpper() {
+ return mRangeDataNtfAoaAzimuthUpper;
+ }
+
+ public double getRangeDataNtfAoaElevationLower() {
+ return mRangeDataNtfAoaElevationLower;
+ }
+
+ public double getRangeDataNtfAoaElevationUpper() {
+ return mRangeDataNtfAoaElevationUpper;
+ }
+
public boolean hasTimeOfFlightReport() {
return mHasTimeOfFlightReport;
}
@@ -610,6 +647,10 @@ public class FiraOpenSessionParams extends FiraParams {
bundle.putInt(KEY_RANGE_DATA_NTF_CONFIG, mRangeDataNtfConfig);
bundle.putInt(KEY_RANGE_DATA_NTF_PROXIMITY_NEAR, mRangeDataNtfProximityNear);
bundle.putInt(KEY_RANGE_DATA_NTF_PROXIMITY_FAR, mRangeDataNtfProximityFar);
+ bundle.putDouble(KEY_RANGE_DATA_NTF_AOA_AZIMUTH_LOWER, mRangeDataNtfAoaAzimuthLower);
+ bundle.putDouble(KEY_RANGE_DATA_NTF_AOA_AZIMUTH_UPPER, mRangeDataNtfAoaAzimuthUpper);
+ bundle.putDouble(KEY_RANGE_DATA_NTF_AOA_ELEVATION_LOWER, mRangeDataNtfAoaElevationLower);
+ bundle.putDouble(KEY_RANGE_DATA_NTF_AOA_ELEVATION_UPPER, mRangeDataNtfAoaElevationUpper);
bundle.putBoolean(KEY_HAS_TIME_OF_FLIGHT_REPORT, mHasTimeOfFlightReport);
bundle.putBoolean(KEY_HAS_ANGLE_OF_ARRIVAL_AZIMUTH_REPORT, mHasAngleOfArrivalAzimuthReport);
bundle.putBoolean(
@@ -702,6 +743,14 @@ public class FiraOpenSessionParams extends FiraParams {
.setRangeDataNtfConfig(bundle.getInt(KEY_RANGE_DATA_NTF_CONFIG))
.setRangeDataNtfProximityNear(bundle.getInt(KEY_RANGE_DATA_NTF_PROXIMITY_NEAR))
.setRangeDataNtfProximityFar(bundle.getInt(KEY_RANGE_DATA_NTF_PROXIMITY_FAR))
+ .setRangeDataNtfAoaAzimuthLower(
+ bundle.getDouble(KEY_RANGE_DATA_NTF_AOA_AZIMUTH_LOWER))
+ .setRangeDataNtfAoaAzimuthUpper(
+ bundle.getDouble(KEY_RANGE_DATA_NTF_AOA_AZIMUTH_UPPER))
+ .setRangeDataNtfAoaElevationLower(
+ bundle.getDouble(KEY_RANGE_DATA_NTF_AOA_ELEVATION_LOWER))
+ .setRangeDataNtfAoaElevationUpper(
+ bundle.getDouble(KEY_RANGE_DATA_NTF_AOA_ELEVATION_UPPER))
.setHasTimeOfFlightReport(bundle.getBoolean(KEY_HAS_TIME_OF_FLIGHT_REPORT))
.setHasAngleOfArrivalAzimuthReport(
bundle.getBoolean(KEY_HAS_ANGLE_OF_ARRIVAL_AZIMUTH_REPORT))
@@ -847,10 +896,22 @@ public class FiraOpenSessionParams extends FiraParams {
@RangeDataNtfConfig private int mRangeDataNtfConfig = RANGE_DATA_NTF_CONFIG_ENABLE;
/** UCI spec default: 0 (No low-bound filtering) */
- private int mRangeDataNtfProximityNear = 0;
+ private int mRangeDataNtfProximityNear = RANGE_DATA_NTF_PROXIMITY_NEAR_DEFAULT;
/** UCI spec default: 20000 cm (or 200 meters) */
- private int mRangeDataNtfProximityFar = 20000;
+ private int mRangeDataNtfProximityFar = RANGE_DATA_NTF_PROXIMITY_FAR_DEFAULT;
+
+ /** UCI spec default: -180 (No low-bound filtering) */
+ private double mRangeDataNtfAoaAzimuthLower = RANGE_DATA_NTF_AOA_AZIMUTH_LOWER_DEFAULT;
+
+ /** UCI spec default: +180 (No upper-bound filtering) */
+ private double mRangeDataNtfAoaAzimuthUpper = RANGE_DATA_NTF_AOA_AZIMUTH_UPPER_DEFAULT;
+
+ /** UCI spec default: -180 (No low-bound filtering) */
+ private double mRangeDataNtfAoaElevationLower = RANGE_DATA_NTF_AOA_ELEVATION_LOWER_DEFAULT;
+
+ /** UCI spec default: +180 (No upper-bound filtering) */
+ private double mRangeDataNtfAoaElevationUpper = RANGE_DATA_NTF_AOA_ELEVATION_UPPER_DEFAULT;
/** UCI spec default: RESULT_REPORT_CONFIG bit 0 is 1 */
private boolean mHasTimeOfFlightReport = true;
@@ -919,6 +980,10 @@ public class FiraOpenSessionParams extends FiraParams {
mRangeDataNtfConfig = builder.mRangeDataNtfConfig;
mRangeDataNtfProximityNear = builder.mRangeDataNtfProximityNear;
mRangeDataNtfProximityFar = builder.mRangeDataNtfProximityFar;
+ mRangeDataNtfAoaAzimuthLower = builder.mRangeDataNtfAoaAzimuthLower;
+ mRangeDataNtfAoaAzimuthUpper = builder.mRangeDataNtfAoaAzimuthUpper;
+ mRangeDataNtfAoaElevationLower = builder.mRangeDataNtfAoaElevationLower;
+ mRangeDataNtfAoaElevationUpper = builder.mRangeDataNtfAoaElevationUpper;
mHasTimeOfFlightReport = builder.mHasTimeOfFlightReport;
mHasAngleOfArrivalAzimuthReport = builder.mHasAngleOfArrivalAzimuthReport;
mHasAngleOfArrivalElevationReport = builder.mHasAngleOfArrivalElevationReport;
@@ -971,6 +1036,10 @@ public class FiraOpenSessionParams extends FiraParams {
mRangeDataNtfConfig = params.mRangeDataNtfConfig;
mRangeDataNtfProximityNear = params.mRangeDataNtfProximityNear;
mRangeDataNtfProximityFar = params.mRangeDataNtfProximityFar;
+ mRangeDataNtfAoaAzimuthLower = params.mRangeDataNtfAoaAzimuthLower;
+ mRangeDataNtfAoaAzimuthUpper = params.mRangeDataNtfAoaAzimuthUpper;
+ mRangeDataNtfAoaElevationLower = params.mRangeDataNtfAoaElevationLower;
+ mRangeDataNtfAoaElevationUpper = params.mRangeDataNtfAoaElevationUpper;
mHasTimeOfFlightReport = params.mHasTimeOfFlightReport;
mHasAngleOfArrivalAzimuthReport = params.mHasAngleOfArrivalAzimuthReport;
mHasAngleOfArrivalElevationReport = params.mHasAngleOfArrivalElevationReport;
@@ -1202,17 +1271,53 @@ public class FiraOpenSessionParams extends FiraParams {
}
public FiraOpenSessionParams.Builder setRangeDataNtfProximityNear(
- int rangeDataNtfProximityNear) {
+ @IntRange(from = RANGE_DATA_NTF_PROXIMITY_NEAR_DEFAULT,
+ to = RANGE_DATA_NTF_PROXIMITY_FAR_DEFAULT)
+ int rangeDataNtfProximityNear) {
mRangeDataNtfProximityNear = rangeDataNtfProximityNear;
return this;
}
public FiraOpenSessionParams.Builder setRangeDataNtfProximityFar(
- int rangeDataNtfProximityFar) {
+ @IntRange(from = RANGE_DATA_NTF_PROXIMITY_NEAR_DEFAULT,
+ to = RANGE_DATA_NTF_PROXIMITY_FAR_DEFAULT)
+ int rangeDataNtfProximityFar) {
mRangeDataNtfProximityFar = rangeDataNtfProximityFar;
return this;
}
+ public FiraOpenSessionParams.Builder setRangeDataNtfAoaAzimuthLower(
+ @FloatRange(from = RANGE_DATA_NTF_AOA_AZIMUTH_LOWER_DEFAULT,
+ to = RANGE_DATA_NTF_AOA_AZIMUTH_UPPER_DEFAULT)
+ double rangeDataNtfAoaAzimuthLower) {
+ mRangeDataNtfAoaAzimuthLower = rangeDataNtfAoaAzimuthLower;
+ return this;
+ }
+
+ public FiraOpenSessionParams.Builder setRangeDataNtfAoaAzimuthUpper(
+ @FloatRange(from = RANGE_DATA_NTF_AOA_AZIMUTH_LOWER_DEFAULT,
+ to = RANGE_DATA_NTF_AOA_AZIMUTH_UPPER_DEFAULT)
+ double rangeDataNtfAoaAzimuthUpper) {
+ mRangeDataNtfAoaAzimuthUpper = rangeDataNtfAoaAzimuthUpper;
+ return this;
+ }
+
+ public FiraOpenSessionParams.Builder setRangeDataNtfAoaElevationLower(
+ @FloatRange(from = RANGE_DATA_NTF_AOA_ELEVATION_LOWER_DEFAULT,
+ to = RANGE_DATA_NTF_AOA_ELEVATION_UPPER_DEFAULT)
+ double rangeDataNtfAoaElevationLower) {
+ mRangeDataNtfAoaElevationLower = rangeDataNtfAoaElevationLower;
+ return this;
+ }
+
+ public FiraOpenSessionParams.Builder setRangeDataNtfAoaElevationUpper(
+ @FloatRange(from = RANGE_DATA_NTF_AOA_ELEVATION_LOWER_DEFAULT,
+ to = RANGE_DATA_NTF_AOA_ELEVATION_UPPER_DEFAULT)
+ double rangeDataNtfAoaElevationUpper) {
+ mRangeDataNtfAoaElevationUpper = rangeDataNtfAoaElevationUpper;
+ return this;
+ }
+
public FiraOpenSessionParams.Builder setHasTimeOfFlightReport(
boolean hasTimeOfFlightReport) {
mHasTimeOfFlightReport = hasTimeOfFlightReport;
@@ -1324,10 +1429,69 @@ public class FiraOpenSessionParams extends FiraParams {
}
}
+ private void checkRangeDataNtfConfig() {
+ if (mRangeDataNtfConfig == RANGE_DATA_NTF_CONFIG_DISABLE) {
+ checkArgument(mRangeDataNtfProximityNear
+ == RANGE_DATA_NTF_PROXIMITY_NEAR_DEFAULT);
+ checkArgument(mRangeDataNtfProximityFar
+ == RANGE_DATA_NTF_PROXIMITY_FAR_DEFAULT);
+ checkArgument(mRangeDataNtfAoaAzimuthLower
+ == RANGE_DATA_NTF_AOA_AZIMUTH_LOWER_DEFAULT);
+ checkArgument(mRangeDataNtfAoaAzimuthUpper
+ == RANGE_DATA_NTF_AOA_AZIMUTH_UPPER_DEFAULT);
+ checkArgument(mRangeDataNtfAoaElevationLower
+ == RANGE_DATA_NTF_AOA_ELEVATION_LOWER_DEFAULT);
+ checkArgument(mRangeDataNtfAoaElevationUpper
+ == RANGE_DATA_NTF_AOA_ELEVATION_UPPER_DEFAULT);
+ } else if (mRangeDataNtfConfig == RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG
+ || mRangeDataNtfConfig == RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_EDGE_TRIG) {
+ checkArgument(
+ mRangeDataNtfProximityNear != RANGE_DATA_NTF_PROXIMITY_NEAR_DEFAULT
+ || mRangeDataNtfProximityFar != RANGE_DATA_NTF_PROXIMITY_FAR_DEFAULT);
+ checkArgument(mRangeDataNtfAoaAzimuthLower
+ == RANGE_DATA_NTF_AOA_AZIMUTH_LOWER_DEFAULT);
+ checkArgument(mRangeDataNtfAoaAzimuthUpper
+ == RANGE_DATA_NTF_AOA_AZIMUTH_UPPER_DEFAULT);
+ checkArgument(mRangeDataNtfAoaElevationLower
+ == RANGE_DATA_NTF_AOA_ELEVATION_LOWER_DEFAULT);
+ checkArgument(mRangeDataNtfAoaElevationUpper
+ == RANGE_DATA_NTF_AOA_ELEVATION_UPPER_DEFAULT);
+ } else if (mRangeDataNtfConfig == RANGE_DATA_NTF_CONFIG_ENABLE_AOA_LEVEL_TRIG
+ || mRangeDataNtfConfig == RANGE_DATA_NTF_CONFIG_ENABLE_AOA_EDGE_TRIG) {
+ checkArgument(mRangeDataNtfProximityNear
+ == RANGE_DATA_NTF_PROXIMITY_NEAR_DEFAULT);
+ checkArgument(mRangeDataNtfProximityFar
+ == RANGE_DATA_NTF_PROXIMITY_FAR_DEFAULT);
+ checkArgument(mRangeDataNtfAoaAzimuthLower
+ != RANGE_DATA_NTF_AOA_AZIMUTH_LOWER_DEFAULT
+ || mRangeDataNtfAoaAzimuthUpper
+ != RANGE_DATA_NTF_AOA_AZIMUTH_UPPER_DEFAULT
+ || mRangeDataNtfAoaElevationLower
+ != RANGE_DATA_NTF_AOA_ELEVATION_LOWER_DEFAULT
+ || mRangeDataNtfAoaElevationUpper
+ != RANGE_DATA_NTF_AOA_ELEVATION_UPPER_DEFAULT);
+ } else if (mRangeDataNtfConfig == RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG
+ || mRangeDataNtfConfig
+ == RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_EDGE_TRIG) {
+ checkArgument(
+ mRangeDataNtfProximityNear != RANGE_DATA_NTF_PROXIMITY_NEAR_DEFAULT
+ || mRangeDataNtfProximityFar != RANGE_DATA_NTF_PROXIMITY_FAR_DEFAULT
+ || mRangeDataNtfAoaAzimuthLower
+ != RANGE_DATA_NTF_AOA_AZIMUTH_LOWER_DEFAULT
+ || mRangeDataNtfAoaAzimuthUpper
+ != RANGE_DATA_NTF_AOA_AZIMUTH_UPPER_DEFAULT
+ || mRangeDataNtfAoaElevationLower
+ != RANGE_DATA_NTF_AOA_ELEVATION_LOWER_DEFAULT
+ || mRangeDataNtfAoaElevationUpper
+ != RANGE_DATA_NTF_AOA_ELEVATION_UPPER_DEFAULT);
+ }
+ }
+
public FiraOpenSessionParams build() {
checkAddress();
checkStsConfig();
checkInterleavingRatio();
+ checkRangeDataNtfConfig();
return new FiraOpenSessionParams(
mProtocolVersion.get(),
mSessionId.get(),
@@ -1373,6 +1537,10 @@ public class FiraOpenSessionParams extends FiraParams {
mRangeDataNtfConfig,
mRangeDataNtfProximityNear,
mRangeDataNtfProximityFar,
+ mRangeDataNtfAoaAzimuthLower,
+ mRangeDataNtfAoaAzimuthUpper,
+ mRangeDataNtfAoaElevationLower,
+ mRangeDataNtfAoaElevationUpper,
mHasTimeOfFlightReport,
mHasAngleOfArrivalAzimuthReport,
mHasAngleOfArrivalElevationReport,
diff --git a/service/support_lib/src/com/google/uwb/support/fira/FiraParams.java b/service/support_lib/src/com/google/uwb/support/fira/FiraParams.java
index 4c22dfef..3c572c1b 100644
--- a/service/support_lib/src/com/google/uwb/support/fira/FiraParams.java
+++ b/service/support_lib/src/com/google/uwb/support/fira/FiraParams.java
@@ -381,13 +381,23 @@ public abstract class FiraParams extends Params {
value = {
RANGE_DATA_NTF_CONFIG_DISABLE,
RANGE_DATA_NTF_CONFIG_ENABLE,
- RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY,
+ RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG,
+ RANGE_DATA_NTF_CONFIG_ENABLE_AOA_LEVEL_TRIG,
+ RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG,
+ RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_EDGE_TRIG,
+ RANGE_DATA_NTF_CONFIG_ENABLE_AOA_EDGE_TRIG,
+ RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_EDGE_TRIG,
})
public @interface RangeDataNtfConfig {}
public static final int RANGE_DATA_NTF_CONFIG_DISABLE = 0;
public static final int RANGE_DATA_NTF_CONFIG_ENABLE = 1;
- public static final int RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY = 2;
+ public static final int RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG = 2;
+ public static final int RANGE_DATA_NTF_CONFIG_ENABLE_AOA_LEVEL_TRIG = 3;
+ public static final int RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG = 4;
+ public static final int RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_EDGE_TRIG = 5;
+ public static final int RANGE_DATA_NTF_CONFIG_ENABLE_AOA_EDGE_TRIG = 6;
+ public static final int RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_EDGE_TRIG = 7;
/** MAC address mode: short (2 bytes) or extended (8 bytes) */
@IntDef(
@@ -547,6 +557,13 @@ public abstract class FiraParams extends Params {
public static final int DEVICE_CLASS_2 = 2; // Controller
public static final int DEVICE_CLASS_3 = 3; // Controlee
+ public static final int RANGE_DATA_NTF_PROXIMITY_NEAR_DEFAULT = 0;
+ public static final int RANGE_DATA_NTF_PROXIMITY_FAR_DEFAULT = 20000;
+ public static final double RANGE_DATA_NTF_AOA_AZIMUTH_LOWER_DEFAULT = -Math.PI;
+ public static final double RANGE_DATA_NTF_AOA_AZIMUTH_UPPER_DEFAULT = Math.PI;
+ public static final double RANGE_DATA_NTF_AOA_ELEVATION_LOWER_DEFAULT = -Math.PI;
+ public static final double RANGE_DATA_NTF_AOA_ELEVATION_UPPER_DEFAULT = Math.PI;
+
public enum AoaCapabilityFlag implements FlagEnum {
HAS_AZIMUTH_SUPPORT(1),
HAS_ELEVATION_SUPPORT(1 << 1),
@@ -759,8 +776,20 @@ public abstract class FiraParams extends Params {
public enum RangeDataNtfConfigCapabilityFlag implements FlagEnum {
HAS_RANGE_DATA_NTF_CONFIG_DISABLE(1 << RANGE_DATA_NTF_CONFIG_DISABLE),
HAS_RANGE_DATA_NTF_CONFIG_ENABLE(1 << RANGE_DATA_NTF_CONFIG_ENABLE),
- HAS_RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY(
- 1 << RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY);
+ HAS_RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG(
+ 1 << RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG),
+ HAS_RANGE_DATA_NTF_CONFIG_ENABLE_AOA_LEVEL_TRIG(
+ 1 << RANGE_DATA_NTF_CONFIG_ENABLE_AOA_LEVEL_TRIG),
+ HAS_RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG(
+ 1 << RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG),
+ HAS_RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_EDGE_TRIG(
+ 1 << RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_EDGE_TRIG),
+ HAS_RANGE_DATA_NTF_CONFIG_ENABLE_AOA_EDGE_TRIG(
+ 1 << RANGE_DATA_NTF_CONFIG_ENABLE_AOA_EDGE_TRIG),
+ HAS_RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_EDGE_TRIG(
+ 1 << RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_EDGE_TRIG);
+
+
private final long mValue;
diff --git a/service/support_lib/src/com/google/uwb/support/fira/FiraRangingReconfigureParams.java b/service/support_lib/src/com/google/uwb/support/fira/FiraRangingReconfigureParams.java
index a203ddec..25aa83bc 100644
--- a/service/support_lib/src/com/google/uwb/support/fira/FiraRangingReconfigureParams.java
+++ b/service/support_lib/src/com/google/uwb/support/fira/FiraRangingReconfigureParams.java
@@ -24,6 +24,7 @@ import android.os.PersistableBundle;
import android.uwb.RangingSession;
import android.uwb.UwbAddress;
+import androidx.annotation.FloatRange;
import androidx.annotation.Nullable;
/**
@@ -44,6 +45,10 @@ public class FiraRangingReconfigureParams extends FiraParams {
@Nullable @RangeDataNtfConfig private final Integer mRangeDataNtfConfig;
@Nullable private final Integer mRangeDataProximityNear;
@Nullable private final Integer mRangeDataProximityFar;
+ @Nullable private final Double mRangeDataAoaAzimuthLower;
+ @Nullable private final Double mRangeDataAoaAzimuthUpper;
+ @Nullable private final Double mRangeDataAoaElevationLower;
+ @Nullable private final Double mRangeDataAoaElevationUpper;
private static final String KEY_ACTION = "action";
private static final String KEY_MAC_ADDRESS_MODE = "mac_address_mode";
@@ -55,6 +60,14 @@ public class FiraRangingReconfigureParams extends FiraParams {
"update_range_data_proximity_near";
private static final String KEY_UPDATE_RANGE_DATA_NTF_PROXIMITY_FAR =
"update_range_data_proximity_far";
+ private static final String KEY_UPDATE_RANGE_DATA_NTF_AOA_AZIMUTH_LOWER =
+ "range_data_aoa_azimuth_lower";
+ private static final String KEY_UPDATE_RANGE_DATA_NTF_AOA_AZIMUTH_UPPER =
+ "range_data_aoa_azimuth_upper";
+ private static final String KEY_UPDATE_RANGE_DATA_NTF_AOA_ELEVATION_LOWER =
+ "range_data_aoa_elevation_lower";
+ private static final String KEY_UPDATE_RANGE_DATA_NTF_AOA_ELEVATION_UPPER =
+ "range_data_aoa_elevation_upper";
private FiraRangingReconfigureParams(
@Nullable @MulticastListUpdateAction Integer action,
@@ -63,7 +76,11 @@ public class FiraRangingReconfigureParams extends FiraParams {
@Nullable Integer blockStrideLength,
@Nullable Integer rangeDataNtfConfig,
@Nullable Integer rangeDataProximityNear,
- @Nullable Integer rangeDataProximityFar) {
+ @Nullable Integer rangeDataProximityFar,
+ @Nullable Double rangeDataAoaAzimuthLower,
+ @Nullable Double rangeDataAoaAzimuthUpper,
+ @Nullable Double rangeDataAoaElevationLower,
+ @Nullable Double rangeDataAoaElevationUpper) {
mAction = action;
mAddressList = addressList;
mSubSessionIdList = subSessionIdList;
@@ -71,6 +88,10 @@ public class FiraRangingReconfigureParams extends FiraParams {
mRangeDataNtfConfig = rangeDataNtfConfig;
mRangeDataProximityNear = rangeDataProximityNear;
mRangeDataProximityFar = rangeDataProximityFar;
+ mRangeDataAoaAzimuthLower = rangeDataAoaAzimuthLower;
+ mRangeDataAoaAzimuthUpper = rangeDataAoaAzimuthUpper;
+ mRangeDataAoaElevationLower = rangeDataAoaElevationLower;
+ mRangeDataAoaElevationUpper = rangeDataAoaElevationUpper;
}
@Override
@@ -114,6 +135,26 @@ public class FiraRangingReconfigureParams extends FiraParams {
return mRangeDataProximityFar;
}
+ @Nullable
+ public Double getRangeDataAoaAzimuthLower() {
+ return mRangeDataAoaAzimuthLower;
+ }
+
+ @Nullable
+ public Double getRangeDataAoaAzimuthUpper() {
+ return mRangeDataAoaAzimuthUpper;
+ }
+
+ @Nullable
+ public Double getRangeDataAoaElevationLower() {
+ return mRangeDataAoaElevationLower;
+ }
+
+ @Nullable
+ public Double getRangeDataAoaElevationUpper() {
+ return mRangeDataAoaElevationUpper;
+ }
+
@Override
public PersistableBundle toBundle() {
PersistableBundle bundle = super.toBundle();
@@ -151,6 +192,26 @@ public class FiraRangingReconfigureParams extends FiraParams {
bundle.putInt(KEY_UPDATE_RANGE_DATA_NTF_PROXIMITY_FAR, mRangeDataProximityFar);
}
+ if (mRangeDataAoaAzimuthLower != null) {
+ bundle.putDouble(KEY_UPDATE_RANGE_DATA_NTF_AOA_AZIMUTH_LOWER,
+ mRangeDataAoaAzimuthLower);
+ }
+
+ if (mRangeDataAoaAzimuthUpper != null) {
+ bundle.putDouble(KEY_UPDATE_RANGE_DATA_NTF_AOA_AZIMUTH_UPPER,
+ mRangeDataAoaAzimuthUpper);
+ }
+
+ if (mRangeDataAoaElevationLower != null) {
+ bundle.putDouble(KEY_UPDATE_RANGE_DATA_NTF_AOA_ELEVATION_LOWER,
+ mRangeDataAoaElevationLower);
+ }
+
+ if (mRangeDataAoaElevationUpper != null) {
+ bundle.putDouble(KEY_UPDATE_RANGE_DATA_NTF_AOA_ELEVATION_UPPER,
+ mRangeDataAoaElevationUpper);
+ }
+
return bundle;
}
@@ -205,6 +266,25 @@ public class FiraRangingReconfigureParams extends FiraParams {
bundle.getInt(KEY_UPDATE_RANGE_DATA_NTF_PROXIMITY_FAR));
}
+ if (bundle.containsKey(KEY_UPDATE_RANGE_DATA_NTF_AOA_AZIMUTH_LOWER)) {
+ builder.setRangeDataAoaAzimuthLower(
+ bundle.getDouble(KEY_UPDATE_RANGE_DATA_NTF_AOA_AZIMUTH_LOWER));
+ }
+
+ if (bundle.containsKey(KEY_UPDATE_RANGE_DATA_NTF_AOA_AZIMUTH_UPPER)) {
+ builder.setRangeDataAoaAzimuthUpper(
+ bundle.getDouble(KEY_UPDATE_RANGE_DATA_NTF_AOA_AZIMUTH_UPPER));
+ }
+
+ if (bundle.containsKey(KEY_UPDATE_RANGE_DATA_NTF_AOA_ELEVATION_LOWER)) {
+ builder.setRangeDataAoaElevationLower(
+ bundle.getDouble(KEY_UPDATE_RANGE_DATA_NTF_AOA_ELEVATION_LOWER));
+ }
+
+ if (bundle.containsKey(KEY_UPDATE_RANGE_DATA_NTF_AOA_ELEVATION_UPPER)) {
+ builder.setRangeDataAoaElevationUpper(
+ bundle.getDouble(KEY_UPDATE_RANGE_DATA_NTF_AOA_ELEVATION_UPPER));
+ }
return builder.build();
}
@@ -219,6 +299,10 @@ public class FiraRangingReconfigureParams extends FiraParams {
@Nullable private Integer mRangeDataNtfConfig = null;
@Nullable private Integer mRangeDataProximityNear = null;
@Nullable private Integer mRangeDataProximityFar = null;
+ @Nullable private Double mRangeDataAoaAzimuthLower = null;
+ @Nullable private Double mRangeDataAoaAzimuthUpper = null;
+ @Nullable private Double mRangeDataAoaElevationLower = null;
+ @Nullable private Double mRangeDataAoaElevationUpper = null;
public FiraRangingReconfigureParams.Builder setAction(
@MulticastListUpdateAction int action) {
@@ -258,6 +342,38 @@ public class FiraRangingReconfigureParams extends FiraParams {
return this;
}
+ public Builder setRangeDataAoaAzimuthLower(
+ @FloatRange(from = RANGE_DATA_NTF_AOA_AZIMUTH_LOWER_DEFAULT,
+ to = RANGE_DATA_NTF_AOA_AZIMUTH_UPPER_DEFAULT)
+ double rangeDataAoaAzimuthLower) {
+ mRangeDataAoaAzimuthLower = rangeDataAoaAzimuthLower;
+ return this;
+ }
+
+ public Builder setRangeDataAoaAzimuthUpper(
+ @FloatRange(from = RANGE_DATA_NTF_AOA_AZIMUTH_LOWER_DEFAULT,
+ to = RANGE_DATA_NTF_AOA_AZIMUTH_UPPER_DEFAULT)
+ double rangeDataAoaAzimuthUpper) {
+ mRangeDataAoaAzimuthUpper = rangeDataAoaAzimuthUpper;
+ return this;
+ }
+
+ public Builder setRangeDataAoaElevationLower(
+ @FloatRange(from = RANGE_DATA_NTF_AOA_ELEVATION_LOWER_DEFAULT,
+ to = RANGE_DATA_NTF_AOA_ELEVATION_UPPER_DEFAULT)
+ double rangeDataAoaElevationLower) {
+ mRangeDataAoaElevationLower = rangeDataAoaElevationLower;
+ return this;
+ }
+
+ public Builder setRangeDataAoaElevationUpper(
+ @FloatRange(from = RANGE_DATA_NTF_AOA_ELEVATION_LOWER_DEFAULT,
+ to = RANGE_DATA_NTF_AOA_ELEVATION_UPPER_DEFAULT)
+ double rangeDataAoaElevationUpper) {
+ mRangeDataAoaElevationUpper = rangeDataAoaElevationUpper;
+ return this;
+ }
+
private void checkAddressList() {
checkArgument(mAddressList != null && mAddressList.length > 0);
for (UwbAddress uwbAddress : mAddressList) {
@@ -269,6 +385,45 @@ public class FiraRangingReconfigureParams extends FiraParams {
mSubSessionIdList == null || mSubSessionIdList.length == mAddressList.length);
}
+ private void checkRangeDataNtfConfig() {
+ if (mRangeDataNtfConfig == null) {
+ return;
+ }
+ if (mRangeDataNtfConfig == RANGE_DATA_NTF_CONFIG_DISABLE) {
+ checkArgument(mRangeDataProximityNear == null);
+ checkArgument(mRangeDataProximityFar == null);
+ checkArgument(mRangeDataAoaAzimuthLower == null);
+ checkArgument(mRangeDataAoaAzimuthUpper == null);
+ checkArgument(mRangeDataAoaElevationLower == null);
+ checkArgument(mRangeDataAoaElevationUpper == null);
+ } else if (mRangeDataNtfConfig == RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG
+ || mRangeDataNtfConfig == RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_EDGE_TRIG) {
+ checkArgument(mRangeDataProximityNear != null
+ || mRangeDataProximityFar != null);
+ checkArgument(mRangeDataAoaAzimuthLower == null);
+ checkArgument(mRangeDataAoaAzimuthUpper == null);
+ checkArgument(mRangeDataAoaElevationLower == null);
+ checkArgument(mRangeDataAoaElevationUpper == null);
+ } else if (mRangeDataNtfConfig == RANGE_DATA_NTF_CONFIG_ENABLE_AOA_LEVEL_TRIG
+ || mRangeDataNtfConfig == RANGE_DATA_NTF_CONFIG_ENABLE_AOA_EDGE_TRIG) {
+ checkArgument(mRangeDataProximityNear == null);
+ checkArgument(mRangeDataProximityFar == null);
+ checkArgument((mRangeDataAoaAzimuthLower != null
+ && mRangeDataAoaAzimuthUpper != null)
+ || (mRangeDataAoaElevationLower != null
+ && mRangeDataAoaElevationUpper != null));
+ } else if (mRangeDataNtfConfig == RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG
+ || mRangeDataNtfConfig
+ == RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_EDGE_TRIG) {
+ checkArgument(mRangeDataProximityNear != null
+ || mRangeDataProximityFar != null
+ || (mRangeDataAoaAzimuthLower != null
+ && mRangeDataAoaAzimuthUpper != null)
+ || (mRangeDataAoaElevationLower != null
+ && mRangeDataAoaElevationUpper != null));
+ }
+ }
+
public FiraRangingReconfigureParams build() {
if (mAction != null) {
checkAddressList();
@@ -277,13 +432,22 @@ public class FiraRangingReconfigureParams extends FiraParams {
mBlockStrideLength == null
&& mRangeDataNtfConfig == null
&& mRangeDataProximityNear == null
- && mRangeDataProximityFar == null);
+ && mRangeDataProximityFar == null
+ && mRangeDataAoaAzimuthLower == null
+ && mRangeDataAoaAzimuthUpper == null
+ && mRangeDataAoaElevationLower == null
+ && mRangeDataAoaElevationUpper == null);
} else {
+ checkRangeDataNtfConfig();
checkArgument(
mBlockStrideLength != null
|| mRangeDataNtfConfig != null
|| mRangeDataProximityNear != null
- || mRangeDataProximityFar != null);
+ || mRangeDataProximityFar != null
+ || mRangeDataAoaAzimuthLower == null
+ || mRangeDataAoaAzimuthUpper == null
+ || mRangeDataAoaElevationLower == null
+ || mRangeDataAoaElevationUpper == null);
}
return new FiraRangingReconfigureParams(
@@ -293,7 +457,11 @@ public class FiraRangingReconfigureParams extends FiraParams {
mBlockStrideLength,
mRangeDataNtfConfig,
mRangeDataProximityNear,
- mRangeDataProximityFar);
+ mRangeDataProximityFar,
+ mRangeDataAoaAzimuthLower,
+ mRangeDataAoaAzimuthUpper,
+ mRangeDataAoaElevationLower,
+ mRangeDataAoaElevationUpper);
}
}
}
diff --git a/service/support_lib/test/FiraTests.java b/service/support_lib/test/FiraTests.java
index cb7b13c7..07483f25 100644
--- a/service/support_lib/test/FiraTests.java
+++ b/service/support_lib/test/FiraTests.java
@@ -28,7 +28,8 @@ import static com.google.uwb.support.fira.FiraParams.MULTI_NODE_MODE_MANY_TO_MAN
import static com.google.uwb.support.fira.FiraParams.PREAMBLE_DURATION_T32_SYMBOLS;
import static com.google.uwb.support.fira.FiraParams.PRF_MODE_HPRF;
import static com.google.uwb.support.fira.FiraParams.PSDU_DATA_RATE_7M80;
-import static com.google.uwb.support.fira.FiraParams.RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY;
+import static com.google.uwb.support.fira.FiraParams.RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_EDGE_TRIG;
+import static com.google.uwb.support.fira.FiraParams.RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG;
import static com.google.uwb.support.fira.FiraParams.RANGING_DEVICE_ROLE_INITIATOR;
import static com.google.uwb.support.fira.FiraParams.RANGING_DEVICE_TYPE_CONTROLEE;
import static com.google.uwb.support.fira.FiraParams.RANGING_ROUND_USAGE_SS_TWR_DEFERRED_MODE;
@@ -120,9 +121,13 @@ public class FiraTests {
boolean isKeyRotationEnabled = true;
int keyRotationRate = 15;
int aoaResultRequest = AOA_RESULT_REQUEST_MODE_REQ_AOA_RESULTS_INTERLEAVED;
- int rangeDataNtfConfig = RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY;
+ int rangeDataNtfConfig = RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG;
int rangeDataNtfProximityNear = 50;
int rangeDataNtfProximityFar = 200;
+ double rangeDataNtfAoaAzimuthLower = -0.5;
+ double rangeDataNtfAoaAzimuthUpper = +1.5;
+ double rangeDataNtfAoaElevationLower = -1.5;
+ double rangeDataNtfAoaElevationUpper = +2.5;
boolean hasTimeOfFlightReport = true;
boolean hasAngleOfArrivalAzimuthReport = true;
boolean hasAngleOfArrivalElevationReport = true;
@@ -177,6 +182,10 @@ public class FiraTests {
.setRangeDataNtfConfig(rangeDataNtfConfig)
.setRangeDataNtfProximityNear(rangeDataNtfProximityNear)
.setRangeDataNtfProximityFar(rangeDataNtfProximityFar)
+ .setRangeDataNtfAoaAzimuthLower(rangeDataNtfAoaAzimuthLower)
+ .setRangeDataNtfAoaAzimuthUpper(rangeDataNtfAoaAzimuthUpper)
+ .setRangeDataNtfAoaElevationLower(rangeDataNtfAoaElevationLower)
+ .setRangeDataNtfAoaElevationUpper(rangeDataNtfAoaElevationUpper)
.setHasTimeOfFlightReport(hasTimeOfFlightReport)
.setHasAngleOfArrivalAzimuthReport(hasAngleOfArrivalAzimuthReport)
.setHasAngleOfArrivalElevationReport(hasAngleOfArrivalElevationReport)
@@ -236,6 +245,12 @@ public class FiraTests {
assertEquals(params.getRangeDataNtfConfig(), rangeDataNtfConfig);
assertEquals(params.getRangeDataNtfProximityNear(), rangeDataNtfProximityNear);
assertEquals(params.getRangeDataNtfProximityFar(), rangeDataNtfProximityFar);
+ assertEquals(params.getRangeDataNtfAoaAzimuthLower(), rangeDataNtfAoaAzimuthLower, 0.0d);
+ assertEquals(params.getRangeDataNtfAoaAzimuthUpper(), rangeDataNtfAoaAzimuthUpper, 0.0d);
+ assertEquals(params.getRangeDataNtfAoaElevationLower(), rangeDataNtfAoaElevationLower,
+ 0.0d);
+ assertEquals(params.getRangeDataNtfAoaElevationUpper(), rangeDataNtfAoaElevationUpper,
+ 0.0d);
assertEquals(params.hasTimeOfFlightReport(), hasTimeOfFlightReport);
assertEquals(params.hasAngleOfArrivalAzimuthReport(), hasAngleOfArrivalAzimuthReport);
assertEquals(params.hasAngleOfArrivalElevationReport(), hasAngleOfArrivalElevationReport);
@@ -291,8 +306,16 @@ public class FiraTests {
assertEquals(fromBundle.getKeyRotationRate(), keyRotationRate);
assertEquals(fromBundle.getAoaResultRequest(), aoaResultRequest);
assertEquals(fromBundle.getRangeDataNtfConfig(), rangeDataNtfConfig);
- assertEquals(fromBundle.getRangeDataNtfProximityNear(), rangeDataNtfProximityNear);
- assertEquals(fromBundle.getRangeDataNtfProximityFar(), rangeDataNtfProximityFar);
+ assertEquals(fromBundle.getRangeDataNtfProximityNear(), rangeDataNtfProximityNear, 0.0d);
+ assertEquals(fromBundle.getRangeDataNtfProximityFar(), rangeDataNtfProximityFar, 0.0d);
+ assertEquals(fromBundle.getRangeDataNtfAoaAzimuthLower(), rangeDataNtfAoaAzimuthLower,
+ 0.0d);
+ assertEquals(fromBundle.getRangeDataNtfAoaAzimuthUpper(), rangeDataNtfAoaAzimuthUpper,
+ 0.0d);
+ assertEquals(fromBundle.getRangeDataNtfAoaElevationLower(), rangeDataNtfAoaElevationLower,
+ 0.0d);
+ assertEquals(fromBundle.getRangeDataNtfAoaElevationUpper(), rangeDataNtfAoaElevationUpper,
+ 0.0d);
assertEquals(fromBundle.hasTimeOfFlightReport(), hasTimeOfFlightReport);
assertEquals(fromBundle.hasAngleOfArrivalAzimuthReport(), hasAngleOfArrivalAzimuthReport);
assertEquals(
@@ -316,9 +339,13 @@ public class FiraTests {
UwbAddress uwbAddress2 = UwbAddress.fromBytes(new byte[] {4, 5});
UwbAddress[] addressList = new UwbAddress[] {uwbAddress1, uwbAddress2};
int blockStrideLength = 5;
- int rangeDataNtfConfig = RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY;
+ int rangeDataNtfConfig = RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_EDGE_TRIG;
int rangeDataProximityNear = 100;
int rangeDataProximityFar = 500;
+ double rangeDataAoaAzimuthLower = -0.5;
+ double rangeDataAoaAzimuthUpper = +1.5;
+ double rangeDataAoaElevationLower = -1.5;
+ double rangeDataAoaElevationUpper = +2.5;
int[] subSessionIdList = new int[] {3, 4};
FiraRangingReconfigureParams params =
@@ -345,16 +372,37 @@ public class FiraTests {
.setRangeDataNtfConfig(rangeDataNtfConfig)
.setRangeDataProximityNear(rangeDataProximityNear)
.setRangeDataProximityFar(rangeDataProximityFar)
+ .setRangeDataAoaAzimuthLower(rangeDataAoaAzimuthLower)
+ .setRangeDataAoaAzimuthUpper(rangeDataAoaAzimuthUpper)
+ .setRangeDataAoaElevationLower(rangeDataAoaElevationLower)
+ .setRangeDataAoaElevationUpper(rangeDataAoaElevationUpper)
.build();
assertEquals((int) params.getBlockStrideLength(), blockStrideLength);
assertEquals((int) params.getRangeDataNtfConfig(), rangeDataNtfConfig);
assertEquals((int) params.getRangeDataProximityNear(), rangeDataProximityNear);
assertEquals((int) params.getRangeDataProximityFar(), rangeDataProximityFar);
+ assertEquals((double) params.getRangeDataAoaAzimuthLower(), rangeDataAoaAzimuthLower,
+ 0.0d);
+ assertEquals((double) params.getRangeDataAoaAzimuthUpper(), rangeDataAoaAzimuthUpper,
+ 0.0d);
+ assertEquals((double) params.getRangeDataAoaElevationLower(), rangeDataAoaElevationLower,
+ 0.0d);
+ assertEquals((double) params.getRangeDataAoaElevationUpper(), rangeDataAoaElevationUpper,
+ 0.0d);
+
fromBundle = FiraRangingReconfigureParams.fromBundle(params.toBundle());
assertEquals((int) fromBundle.getBlockStrideLength(), blockStrideLength);
assertEquals((int) fromBundle.getRangeDataNtfConfig(), rangeDataNtfConfig);
assertEquals((int) fromBundle.getRangeDataProximityNear(), rangeDataProximityNear);
assertEquals((int) fromBundle.getRangeDataProximityFar(), rangeDataProximityFar);
+ assertEquals((double) fromBundle.getRangeDataAoaAzimuthLower(), rangeDataAoaAzimuthLower,
+ 0.0d);
+ assertEquals((double) fromBundle.getRangeDataAoaAzimuthUpper(), rangeDataAoaAzimuthUpper,
+ 0.0d);
+ assertEquals((double) fromBundle.getRangeDataAoaElevationLower(),
+ rangeDataAoaElevationLower, 0.0d);
+ assertEquals((double) fromBundle.getRangeDataAoaElevationUpper(),
+ rangeDataAoaElevationUpper, 0.0d);
verifyProtocolPresent(params);
verifyBundlesEqual(params, fromBundle);
diff --git a/service/tests/src/com/android/server/uwb/UwbConfigurationManagerTest.java b/service/tests/src/com/android/server/uwb/UwbConfigurationManagerTest.java
index 03728108..d6cffe4c 100644
--- a/service/tests/src/com/android/server/uwb/UwbConfigurationManagerTest.java
+++ b/service/tests/src/com/android/server/uwb/UwbConfigurationManagerTest.java
@@ -26,7 +26,7 @@ import static com.google.uwb.support.fira.FiraParams.MULTI_NODE_MODE_MANY_TO_MAN
import static com.google.uwb.support.fira.FiraParams.PREAMBLE_DURATION_T32_SYMBOLS;
import static com.google.uwb.support.fira.FiraParams.PRF_MODE_HPRF;
import static com.google.uwb.support.fira.FiraParams.PSDU_DATA_RATE_7M80;
-import static com.google.uwb.support.fira.FiraParams.RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY;
+import static com.google.uwb.support.fira.FiraParams.RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG;
import static com.google.uwb.support.fira.FiraParams.RANGING_DEVICE_ROLE_INITIATOR;
import static com.google.uwb.support.fira.FiraParams.RANGING_DEVICE_TYPE_CONTROLEE;
import static com.google.uwb.support.fira.FiraParams.RANGING_ROUND_USAGE_SS_TWR_DEFERRED_MODE;
@@ -188,7 +188,7 @@ public class UwbConfigurationManagerTest {
boolean isKeyRotationEnabled = true;
int keyRotationRate = 15;
int aoaResultRequest = AOA_RESULT_REQUEST_MODE_REQ_AOA_RESULTS_INTERLEAVED;
- int rangeDataNtfConfig = RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY;
+ int rangeDataNtfConfig = RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG;
int rangeDataNtfProximityNear = 50;
int rangeDataNtfProximityFar = 200;
boolean hasTimeOfFlightReport = true;
diff --git a/service/tests/src/com/android/server/uwb/UwbServiceCoreTest.java b/service/tests/src/com/android/server/uwb/UwbServiceCoreTest.java
index 725c264f..4ab3b888 100644
--- a/service/tests/src/com/android/server/uwb/UwbServiceCoreTest.java
+++ b/service/tests/src/com/android/server/uwb/UwbServiceCoreTest.java
@@ -27,7 +27,7 @@ import static com.google.uwb.support.ccc.CccParams.UWB_CHANNEL_9;
import static com.google.uwb.support.fira.FiraParams.MULTICAST_LIST_UPDATE_ACTION_ADD;
import static com.google.uwb.support.fira.FiraParams.MULTICAST_LIST_UPDATE_ACTION_DELETE;
import static com.google.uwb.support.fira.FiraParams.MULTI_NODE_MODE_UNICAST;
-import static com.google.uwb.support.fira.FiraParams.RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY;
+import static com.google.uwb.support.fira.FiraParams.RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG;
import static com.google.uwb.support.fira.FiraParams.RANGING_DEVICE_ROLE_RESPONDER;
import static com.google.uwb.support.fira.FiraParams.RANGING_DEVICE_TYPE_CONTROLLER;
import static com.google.uwb.support.fira.FiraParams.RANGING_ROUND_USAGE_SS_TWR_DEFERRED_MODE;
@@ -412,7 +412,7 @@ public class UwbServiceCoreTest {
final FiraRangingReconfigureParams parameters =
new FiraRangingReconfigureParams.Builder()
.setBlockStrideLength(6)
- .setRangeDataNtfConfig(RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY)
+ .setRangeDataNtfConfig(RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG)
.setRangeDataProximityFar(6)
.setRangeDataProximityNear(4)
.build();
diff --git a/service/tests/src/com/android/server/uwb/UwbServiceImplTest.java b/service/tests/src/com/android/server/uwb/UwbServiceImplTest.java
index 7fc9df6c..27cfc428 100644
--- a/service/tests/src/com/android/server/uwb/UwbServiceImplTest.java
+++ b/service/tests/src/com/android/server/uwb/UwbServiceImplTest.java
@@ -24,7 +24,7 @@ import static com.android.server.uwb.UwbSettingsStore.SETTINGS_TOGGLE_STATE;
import static com.google.common.truth.Truth.assertThat;
import static com.google.uwb.support.fira.FiraParams.PACS_PROFILE_SERVICE_ID;
-import static com.google.uwb.support.fira.FiraParams.RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY;
+import static com.google.uwb.support.fira.FiraParams.RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThrows;
@@ -231,7 +231,7 @@ public class UwbServiceImplTest {
final FiraRangingReconfigureParams parameters =
new FiraRangingReconfigureParams.Builder()
.setBlockStrideLength(6)
- .setRangeDataNtfConfig(RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY)
+ .setRangeDataNtfConfig(RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_LEVEL_TRIG)
.setRangeDataProximityFar(6)
.setRangeDataProximityNear(4)
.build();
diff --git a/service/tests/src/com/android/server/uwb/params/FiraEncoderTest.java b/service/tests/src/com/android/server/uwb/params/FiraEncoderTest.java
index d4574b25..bbfc847d 100644
--- a/service/tests/src/com/android/server/uwb/params/FiraEncoderTest.java
+++ b/service/tests/src/com/android/server/uwb/params/FiraEncoderTest.java
@@ -19,7 +19,7 @@ package com.android.server.uwb.params;
import static com.google.common.truth.Truth.assertThat;
import static com.google.uwb.support.fira.FiraParams.MULTI_NODE_MODE_UNICAST;
-import static com.google.uwb.support.fira.FiraParams.RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY;
+import static com.google.uwb.support.fira.FiraParams.RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG;
import static com.google.uwb.support.fira.FiraParams.RANGING_DEVICE_ROLE_RESPONDER;
import static com.google.uwb.support.fira.FiraParams.RANGING_DEVICE_TYPE_CONTROLLER;
import static com.google.uwb.support.fira.FiraParams.RANGING_ROUND_USAGE_SS_TWR_DEFERRED_MODE;
@@ -53,6 +53,7 @@ public class FiraEncoderTest {
new FiraOpenSessionParams.Builder()
.setProtocolVersion(FiraParams.PROTOCOL_VERSION_1_1)
.setSessionId(1)
+ .setRangeDataNtfConfig(RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG)
.setDeviceType(RANGING_DEVICE_TYPE_CONTROLLER)
.setDeviceRole(RANGING_DEVICE_ROLE_RESPONDER)
.setDeviceAddress(UwbAddress.fromBytes(new byte[] { 0x4, 0x6}))
@@ -64,25 +65,33 @@ public class FiraEncoderTest {
0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F})
.setSubsessionKey(new byte[] {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F})
- .setStaticStsIV(new byte[]{0x1a, 0x55, 0x77, 0x47, 0x7e, 0x7d});
+ .setStaticStsIV(new byte[]{0x1a, 0x55, 0x77, 0x47, 0x7e, 0x7d})
+ .setRangeDataNtfAoaAzimuthLower(-1.5)
+ .setRangeDataNtfAoaAzimuthUpper(2.5)
+ .setRangeDataNtfAoaElevationLower(-2.5)
+ .setRangeDataNtfAoaElevationUpper(3);
private static final byte[] TEST_FIRA_OPEN_SESSION_TLV_DATA =
UwbUtil.getByteArray("000101010101020100030100040109050101060206040702060408"
- + "0260090904C80000000B01000C01030D01010E01010F0200001002204E11010012010314010"
+ + "0260090904C80000000B01000C01030D01010E01040F0200001002204E11010012010314010"
+ "A1501021601001701011B011E1C01001F01002301002401002501322601002702780528061A"
+ "5577477E7D2901012A0200002B04000000002C01002D01002E01012F01013004000000003101"
+ "003501013610000102030405060708090A0B0C0D0E0F3710000102030405060708090A0B0C0D"
- + "0E0FE30100E40100E50100");
+ + "0E0FE30100E40100E501001D04079E6161");
private static final FiraRangingReconfigureParams.Builder TEST_FIRA_RECONFIGURE_PARAMS =
new FiraRangingReconfigureParams.Builder()
.setBlockStrideLength(6)
- .setRangeDataNtfConfig(RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY)
+ .setRangeDataNtfConfig(RANGE_DATA_NTF_CONFIG_ENABLE_PROXIMITY_AOA_LEVEL_TRIG)
.setRangeDataProximityFar(6)
- .setRangeDataProximityNear(4);
+ .setRangeDataProximityNear(4)
+ .setRangeDataAoaAzimuthLower(-1.5)
+ .setRangeDataAoaAzimuthUpper(2.5)
+ .setRangeDataAoaElevationLower(-2.5)
+ .setRangeDataAoaElevationUpper(3);
private static final byte[] TEST_FIRA_RECONFIGURE_TLV_DATA =
- UwbUtil.getByteArray("2D01060E01020F02040010020600");
+ UwbUtil.getByteArray("2D01060E01040F020400100206001D04079E61F1");
private final FiraEncoder mFiraEncoder = new FiraEncoder();
@@ -91,7 +100,7 @@ public class FiraEncoderTest {
FiraOpenSessionParams params = TEST_FIRA_OPEN_SESSION_PARAMS.build();
TlvBuffer tlvs = mFiraEncoder.getTlvBuffer(params);
- assertThat(tlvs.getNoOfParams()).isEqualTo(46);
+ assertThat(tlvs.getNoOfParams()).isEqualTo(47);
assertThat(tlvs.getByteArray()).isEqualTo(TEST_FIRA_OPEN_SESSION_TLV_DATA);
}
@@ -100,7 +109,7 @@ public class FiraEncoderTest {
FiraRangingReconfigureParams params = TEST_FIRA_RECONFIGURE_PARAMS.build();
TlvBuffer tlvs = mFiraEncoder.getTlvBuffer(params);
- assertThat(tlvs.getNoOfParams()).isEqualTo(4);
+ assertThat(tlvs.getNoOfParams()).isEqualTo(5);
assertThat(tlvs.getByteArray()).isEqualTo(TEST_FIRA_RECONFIGURE_TLV_DATA);
}
@@ -109,7 +118,7 @@ public class FiraEncoderTest {
FiraOpenSessionParams params = TEST_FIRA_OPEN_SESSION_PARAMS.build();
TlvBuffer tlvs = TlvEncoder.getEncoder(FiraParams.PROTOCOL_NAME).getTlvBuffer(params);
- assertThat(tlvs.getNoOfParams()).isEqualTo(46);
+ assertThat(tlvs.getNoOfParams()).isEqualTo(47);
assertThat(tlvs.getByteArray()).isEqualTo(TEST_FIRA_OPEN_SESSION_TLV_DATA);
}
@@ -118,7 +127,7 @@ public class FiraEncoderTest {
FiraRangingReconfigureParams params = TEST_FIRA_RECONFIGURE_PARAMS.build();
TlvBuffer tlvs = TlvEncoder.getEncoder(FiraParams.PROTOCOL_NAME).getTlvBuffer(params);
- assertThat(tlvs.getNoOfParams()).isEqualTo(4);
+ assertThat(tlvs.getNoOfParams()).isEqualTo(5);
assertThat(tlvs.getByteArray()).isEqualTo(TEST_FIRA_RECONFIGURE_TLV_DATA);
}
}