summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorziyiw <ziyiw@google.com>2024-04-04 21:43:48 +0000
committerziyiw <ziyiw@google.com>2024-04-04 21:54:14 +0000
commit1d20a6aa420279acc0cc8a6fd790f0293f6ab206 (patch)
treed0efe72a65c6475ec414868618c5a7db076395c3
parent9ec865f097bf15cb7e1513a6639d2d515e9b6a4b (diff)
downloadUwb-1d20a6aa420279acc0cc8a6fd790f0293f6ab206.tar.gz
[Uwb] Support Update Multicast list ntf v1 and v2.
Bug: 331836038 Test: manual Change-Id: Ib9e154bb577f375daee3ddabe26e462b1be37ca6
-rw-r--r--service/uci/jni/src/notification_manager_android.rs42
1 files changed, 32 insertions, 10 deletions
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) => {