diff options
author | Chih-Yu Huang <akahuang@google.com> | 2022-04-19 17:55:24 +0900 |
---|---|---|
committer | Chih-Yu Huang <akahuang@google.com> | 2022-04-22 13:10:26 +0900 |
commit | 3f06b8aacaf63d938be3dc0125b223999ed6a6a6 (patch) | |
tree | 61009518238d4e6086a0ce0a0f008e0e4d707790 | |
parent | 796d13875cce231dc9d130c7b7d7a15cdd6d2196 (diff) | |
download | uwb-3f06b8aacaf63d938be3dc0125b223999ed6a6a6.tar.gz |
uwb_core: polish the struct of the ranging data notification
Originally, we missed several fields of RANGE_DATA_NTF when converting
the packet to the UciNotification enum. This CL adds all of the fields
properly.
Bug: 228136039
Test: cargo test
Test: cargo clippy
Change-Id: Ia6007befca5cc2f25eb5d6005bf2d714afcce56b
-rw-r--r-- | src/rust/uwb_core/src/uci/notification.rs | 40 | ||||
-rw-r--r-- | src/rust/uwb_core/src/uci/params.rs | 6 |
2 files changed, 30 insertions, 16 deletions
diff --git a/src/rust/uwb_core/src/uci/notification.rs b/src/rust/uwb_core/src/uci/notification.rs index 20debb6..89b4bb1 100644 --- a/src/rust/uwb_core/src/uci/notification.rs +++ b/src/rust/uwb_core/src/uci/notification.rs @@ -19,8 +19,8 @@ use uwb_uci_packets::Packet; use crate::uci::error::{Error, Result as UciResult, StatusCode}; use crate::uci::params::{ - ControleeStatus, DeviceState, ExtendedAddressTwoWayRangingMeasurement, RawVendorMessage, - ReasonCode, SessionId, SessionState, ShortAddressTwoWayRangingMeasurement, + ControleeStatus, DeviceState, ExtendedAddressTwoWayRangingMeasurement, RangingMeasurementType, + RawVendorMessage, ReasonCode, SessionId, SessionState, ShortAddressTwoWayRangingMeasurement, }; #[derive(Debug, Clone)] @@ -37,11 +37,22 @@ pub(crate) enum UciNotification { remaining_multicast_list_size: usize, status_list: Vec<ControleeStatus>, }, - ShortMacTwoWayRangeData(Vec<ShortAddressTwoWayRangingMeasurement>), - ExtendedMacTwoWayRangeData(Vec<ExtendedAddressTwoWayRangingMeasurement>), + RangeData { + sequence_number: u32, + session_id: SessionId, + current_ranging_interval_ms: u32, + ranging_measurement_type: RangingMeasurementType, + ranging_measurements: RangingMeasurements, + }, RawVendor(RawVendorMessage), } +#[derive(Debug, Clone)] +pub(crate) enum RangingMeasurements { + Short(Vec<ShortAddressTwoWayRangingMeasurement>), + Extended(Vec<ExtendedAddressTwoWayRangingMeasurement>), +} + impl UciNotification { pub fn need_retry(&self) -> bool { matches!(self, Self::CoreGenericError(StatusCode::UciStatusCommandRetry)) @@ -120,19 +131,22 @@ impl TryFrom<uwb_uci_packets::RangeDataNtfPacket> for UciNotification { type Error = Error; fn try_from(evt: uwb_uci_packets::RangeDataNtfPacket) -> Result<Self, Self::Error> { use uwb_uci_packets::RangeDataNtfChild; - match evt.specialize() { + let ranging_measurements = match evt.specialize() { RangeDataNtfChild::ShortMacTwoWayRangeDataNtf(evt) => { - Ok(UciNotification::ShortMacTwoWayRangeData( - evt.get_two_way_ranging_measurements().clone(), - )) + RangingMeasurements::Short(evt.get_two_way_ranging_measurements().clone()) } RangeDataNtfChild::ExtendedMacTwoWayRangeDataNtf(evt) => { - Ok(UciNotification::ExtendedMacTwoWayRangeData( - evt.get_two_way_ranging_measurements().clone(), - )) + RangingMeasurements::Extended(evt.get_two_way_ranging_measurements().clone()) } - _ => Err(Error::Specialize(evt.to_vec())), - } + _ => return Err(Error::Specialize(evt.to_vec())), + }; + Ok(UciNotification::RangeData { + sequence_number: evt.get_sequence_number(), + session_id: evt.get_session_id(), + current_ranging_interval_ms: evt.get_current_ranging_interval(), + ranging_measurement_type: evt.get_ranging_measurement_type(), + ranging_measurements, + }) } } diff --git a/src/rust/uwb_core/src/uci/params.rs b/src/rust/uwb_core/src/uci/params.rs index 0b124fa..0bfd815 100644 --- a/src/rust/uwb_core/src/uci/params.rs +++ b/src/rust/uwb_core/src/uci/params.rs @@ -26,9 +26,9 @@ use crate::uci::error::StatusCode; pub use uwb_uci_packets::{ AppConfigStatus, AppConfigTlv, AppConfigTlvType, CapTlv, CapTlvType, Controlee, ControleeStatus, DeviceConfigId, DeviceConfigStatus, DeviceConfigTlv, DeviceState, - ExtendedAddressTwoWayRangingMeasurement, MulticastUpdateStatusCode, PowerStats, ReasonCode, - ResetConfig, SessionState, SessionType, ShortAddressTwoWayRangingMeasurement, - UpdateMulticastListAction, + ExtendedAddressTwoWayRangingMeasurement, MulticastUpdateStatusCode, PowerStats, + RangingMeasurementType, ReasonCode, ResetConfig, SessionState, SessionType, + ShortAddressTwoWayRangingMeasurement, UpdateMulticastListAction, }; pub type SessionId = u32; |