summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--service/java/com/android/server/uwb/UwbServiceCore.java2
-rw-r--r--service/support_lib/src/com/google/uwb/support/fira/FiraSpecificationParams.java25
-rw-r--r--service/uci/jni/src/notification_manager_android.rs42
3 files changed, 57 insertions, 12 deletions
diff --git a/service/java/com/android/server/uwb/UwbServiceCore.java b/service/java/com/android/server/uwb/UwbServiceCore.java
index 2f6fa739..cc921264 100644
--- a/service/java/com/android/server/uwb/UwbServiceCore.java
+++ b/service/java/com/android/server/uwb/UwbServiceCore.java
@@ -609,6 +609,8 @@ public class UwbServiceCore implements INativeUwbManager.DeviceNotification,
specificationParams.second.getFiraSpecificationParams())
.setBackgroundRangingSupport(mUwbInjector.getDeviceConfigFacade()
.isBackgroundRangingEnabled())
+ .setUciVersionSupported(getCachedDeviceInfoResponse(
+ mUwbInjector.getMultichipData().getDefaultChipId()).mUciVersion)
.build();
specificationParams.second.setFiraSpecificationParams(firaSpecificationParams);
}
diff --git a/service/support_lib/src/com/google/uwb/support/fira/FiraSpecificationParams.java b/service/support_lib/src/com/google/uwb/support/fira/FiraSpecificationParams.java
index d4754b4d..8b6d9c6d 100644
--- a/service/support_lib/src/com/google/uwb/support/fira/FiraSpecificationParams.java
+++ b/service/support_lib/src/com/google/uwb/support/fira/FiraSpecificationParams.java
@@ -113,6 +113,8 @@ public class FiraSpecificationParams extends FiraParams {
private final boolean mHasPsduLengthSupport;
+ private final int mUciVersion;
+
private static final String KEY_MIN_PHY_VERSION = "min_phy_version";
private static final String KEY_MAX_PHY_VERSION = "max_phy_version";
private static final String KEY_MIN_MAC_VERSION = "min_mac_version";
@@ -165,6 +167,8 @@ public class FiraSpecificationParams extends FiraParams {
public static final String KEY_PSDU_LENGTH_SUPPORT = "psdu_length_support";
+ public static final String KEY_UCI_VERSION = "uci_version";
+
public static final int DEFAULT_MAX_RANGING_SESSIONS_NUMBER = 5;
private FiraSpecificationParams(
@@ -201,7 +205,8 @@ public class FiraSpecificationParams extends FiraParams {
EnumSet<RangeDataNtfConfigCapabilityFlag> rangeDataNtfConfigCapabilities,
int deviceType, boolean suspendRangingSupport, int sessionKeyLength,
int dtTagMaxActiveRr, boolean hasBackgroundRangingSupport,
- boolean hasDtTagBlockSkippingSupport, boolean hasPsduLengthSupport) {
+ boolean hasDtTagBlockSkippingSupport, boolean hasPsduLengthSupport,
+ int uciVersion) {
mMinPhyVersionSupported = minPhyVersionSupported;
mMaxPhyVersionSupported = maxPhyVersionSupported;
mMinMacVersionSupported = minMacVersionSupported;
@@ -240,6 +245,7 @@ public class FiraSpecificationParams extends FiraParams {
mHasBackgroundRangingSupport = hasBackgroundRangingSupport;
mHasDtTagBlockSkippingSupport = hasDtTagBlockSkippingSupport;
mHasPsduLengthSupport = hasPsduLengthSupport;
+ mUciVersion = uciVersion;
}
@Override
@@ -401,6 +407,10 @@ public class FiraSpecificationParams extends FiraParams {
return mHasPsduLengthSupport;
}
+ public int getUciVersionSupported() {
+ return mUciVersion;
+ }
+
private static int[] toIntArray(List<Integer> data) {
int[] res = new int[data.size()];
for (int i = 0; i < data.size(); i++) {
@@ -456,6 +466,7 @@ public class FiraSpecificationParams extends FiraParams {
bundle.putBoolean(KEY_BACKGROUND_RANGING_SUPPORT, mHasBackgroundRangingSupport);
bundle.putBoolean(KEY_DT_TAG_BLOCK_SKIPPING_SUPPORT, mHasDtTagBlockSkippingSupport);
bundle.putBoolean(KEY_PSDU_LENGTH_SUPPORT, mHasPsduLengthSupport);
+ bundle.putInt(KEY_UCI_VERSION, mUciVersion);
return bundle;
}
@@ -491,6 +502,7 @@ public class FiraSpecificationParams extends FiraParams {
builder.setBackgroundRangingSupport(bundle.getBoolean(KEY_BACKGROUND_RANGING_SUPPORT));
builder.setDtTagBlockSkippingSupport(bundle.getBoolean(KEY_DT_TAG_BLOCK_SKIPPING_SUPPORT));
builder.setPsduLengthSupport(bundle.getBoolean(KEY_PSDU_LENGTH_SUPPORT));
+ builder.setUciVersionSupported(bundle.getInt(KEY_UCI_VERSION, 1));
return builder;
}
@@ -628,6 +640,8 @@ public class FiraSpecificationParams extends FiraParams {
private int mMaxRangingSessionNumber = DEFAULT_MAX_RANGING_SESSIONS_NUMBER;
+ private int mUciVersion = 1;
+
// Unicast support is mandatory
private EnumSet<MultiNodeCapabilityFlag> mMultiNodeCapabilities =
EnumSet.of(MultiNodeCapabilityFlag.HAS_UNICAST_SUPPORT);
@@ -925,6 +939,12 @@ public class FiraSpecificationParams extends FiraParams {
return this;
}
+ public FiraSpecificationParams.Builder setUciVersionSupported(
+ int uciVersion) {
+ mUciVersion = uciVersion;
+ return this;
+ }
+
public Builder() {}
public Builder(@NonNull FiraSpecificationParams params) {
@@ -1007,7 +1027,8 @@ public class FiraSpecificationParams extends FiraParams {
mDtTagMaxActiveRr,
mHasBackgroundRangingSupport,
mHasDtTagBlockSkippingSupport,
- mHasPsduLengthSupport);
+ mHasPsduLengthSupport,
+ mUciVersion);
}
}
}
diff --git a/service/uci/jni/src/notification_manager_android.rs b/service/uci/jni/src/notification_manager_android.rs
index 3500be41..6961544d 100644
--- a/service/uci/jni/src/notification_manager_android.rs
+++ b/service/uci/jni/src/notification_manager_android.rs
@@ -30,14 +30,14 @@ use jni::sys::jvalue;
use jni::{AttachGuard, JavaVM};
use log::{debug, error};
use uwb_core::error::{Error as UwbError, Result as UwbResult};
-use uwb_core::params::UwbAddress;
+use uwb_core::params::{ControleeStatusList, UwbAddress};
use uwb_core::uci::uci_manager_sync::{NotificationManager, NotificationManagerBuilder};
use uwb_core::uci::{
CoreNotification, DataRcvNotification, RadarDataRcvNotification, RangingMeasurements,
SessionNotification, SessionRangeData,
};
use uwb_uci_packets::{
- radar_bytes_per_sample_value, ControleeStatus, ExtendedAddressDlTdoaRangingMeasurement,
+ radar_bytes_per_sample_value, ExtendedAddressDlTdoaRangingMeasurement,
ExtendedAddressOwrAoaRangingMeasurement, ExtendedAddressTwoWayRangingMeasurement,
MacAddressIndicator, RangingMeasurementType, SessionState,
ShortAddressDlTdoaRangingMeasurement, ShortAddressOwrAoaRangingMeasurement,
@@ -383,18 +383,32 @@ impl NotificationManagerAndroid {
&mut self,
session_id: u32,
remaining_multicast_list_size: usize,
- status_list: Vec<ControleeStatus>,
+ status_list: ControleeStatusList,
) -> Result<JObject, JNIError> {
let remaining_multicast_list_size: i32 =
remaining_multicast_list_size.try_into().map_err(|_| JNIError::InvalidCtorReturn)?;
- let count: i32 = status_list.len().try_into().map_err(|_| JNIError::InvalidCtorReturn)?;
+ let mac_address_vec: Vec<[u8; 2]>;
+ let subsession_id_vec: Vec<_>;
+ let status_vec: Vec<_>;
+ let count: i32;
+ match status_list {
+ ControleeStatusList::V1(status_list) => {
+ count = status_list.len().try_into().map_err(|_| JNIError::InvalidCtorReturn)?;
+ (mac_address_vec, (subsession_id_vec, status_vec)) = status_list
+ .into_iter()
+ .map(|cs| (cs.mac_address, (cs.subsession_id as i64, i32::from(cs.status))))
+ .unzip();
+ }
+ ControleeStatusList::V2(status_list) => {
+ count = status_list.len().try_into().map_err(|_| JNIError::InvalidCtorReturn)?;
+ (mac_address_vec, (subsession_id_vec, status_vec)) = status_list
+ .into_iter()
+ .map(|cs| (cs.mac_address, (0_i64, i32::from(cs.status))))
+ .unzip();
+ }
+ }
let subsession_id_jlongarray = self.env.new_long_array(count)?;
let status_jintarray = self.env.new_int_array(count)?;
- let (mac_address_vec, (subsession_id_vec, status_vec)): (Vec<[u8; 2]>, (Vec<_>, Vec<_>)) =
- status_list
- .into_iter()
- .map(|cs| (cs.mac_address, (cs.subsession_id as i64, i32::from(cs.status))))
- .unzip();
let mac_address_vec_i8 =
mac_address_vec.iter().flat_map(|&[a, b]| vec![a as i8, b as i8]).collect::<Vec<i8>>();
@@ -1048,14 +1062,22 @@ impl NotificationManager for NotificationManagerAndroid {
session_state,
reason_code,
),
- SessionNotification::UpdateControllerMulticastList {
+ SessionNotification::UpdateControllerMulticastListV1 {
session_token,
remaining_multicast_list_size,
status_list,
} => self.on_session_update_multicast_notification(
session_token,
remaining_multicast_list_size,
+ ControleeStatusList::V1(status_list),
+ ),
+ SessionNotification::UpdateControllerMulticastListV2 {
+ session_token,
status_list,
+ } => self.on_session_update_multicast_notification(
+ session_token,
+ 0_usize,
+ ControleeStatusList::V2(status_list),
),
// TODO(b/246678053): Match here on range_data.ranging_measurement_type instead.
SessionNotification::SessionInfo(range_data) => {