summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Wang <ziyiw@google.com>2024-04-11 23:27:54 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2024-04-11 23:27:54 +0000
commit202bac0222994d9d4dec7f7883670287fb3a0b7d (patch)
treeac0d8cce9bcba2fd5cbef7170a9f1277c2cbdecb
parent30e37396e2e82c6915e94af01db2a07d011c68fa (diff)
parentb82158a3042d8c049ea9ff8f36f1ad6dc7f8b8d0 (diff)
downloaduwb-202bac0222994d9d4dec7f7883670287fb3a0b7d.tar.gz
Merge "[uci] Parse segment metrics from ranging diag. report" into main
-rw-r--r--src/rust/uwb_uci_packets/src/lib.rs24
-rw-r--r--src/rust/uwb_uci_packets/uci_packets.pdl21
2 files changed, 45 insertions, 0 deletions
diff --git a/src/rust/uwb_uci_packets/src/lib.rs b/src/rust/uwb_uci_packets/src/lib.rs
index 085707f..18c50c1 100644
--- a/src/rust/uwb_uci_packets/src/lib.rs
+++ b/src/rust/uwb_uci_packets/src/lib.rs
@@ -766,6 +766,7 @@ pub struct ParsedFrameReport {
rssi: Vec<u8>,
aoa: Vec<AoaMeasurement>,
cir: Vec<CirValue>,
+ segment_metrics: Vec<SegmentMetricsValue>,
}
pub fn parse_diagnostics_ntf(evt: AndroidRangeDiagnosticsNtf) -> Result<ParsedDiagnosticNtfPacket> {
@@ -776,6 +777,7 @@ pub fn parse_diagnostics_ntf(evt: AndroidRangeDiagnosticsNtf) -> Result<ParsedDi
let mut rssi_vec = Vec::new();
let mut aoa_vec = Vec::new();
let mut cir_vec = Vec::new();
+ let mut segment_metrics_vec = Vec::new();
for tlv in &report.frame_report_tlvs {
match FrameReportTlvPacket::parse(
&[vec![tlv.t as u8, tlv.v.len() as u8, (tlv.v.len() >> 8) as u8], tlv.v.clone()]
@@ -791,6 +793,9 @@ pub fn parse_diagnostics_ntf(evt: AndroidRangeDiagnosticsNtf) -> Result<ParsedDi
FrameReportTlvPacketChild::Cir(cir) => {
cir_vec.append(&mut cir.get_cir_value().clone())
}
+ FrameReportTlvPacketChild::SegmentMetrics(sm) => {
+ segment_metrics_vec.append(&mut sm.get_segment_metrics().clone())
+ }
_ => return Err(Error::InvalidPacketError),
},
Err(e) => {
@@ -806,6 +811,7 @@ pub fn parse_diagnostics_ntf(evt: AndroidRangeDiagnosticsNtf) -> Result<ParsedDi
rssi: rssi_vec,
aoa: aoa_vec,
cir: cir_vec,
+ segment_metrics: segment_metrics_vec,
});
}
Ok(ParsedDiagnosticNtfPacket {
@@ -1050,11 +1056,28 @@ mod tests {
sample_window: vec![0, 1, 2, 3],
}];
let cir = CirBuilder { cir_value: cir_vec.clone() }.build();
+ let segment_metrics_vec = vec![SegmentMetricsValue {
+ receiver: 1,
+ rf_noise_floor: 2,
+ segment_rsl: 3,
+ first_path_index: 4,
+ first_path_rsl: 5,
+ first_path_time_ns: 6,
+ peak_path_index: 7,
+ peak_path_rsl: 8,
+ peak_path_time_ns: 9,
+ }];
+ let segment_metrics =
+ SegmentMetricsBuilder { segment_metrics: segment_metrics_vec.clone() }.build();
let mut frame_reports = Vec::new();
let tlvs = vec![
FrameReportTlv { t: rssi.get_t(), v: rssi.get_rssi().to_vec() },
FrameReportTlv { t: aoa.get_t(), v: aoa.to_vec()[3..].to_vec() },
FrameReportTlv { t: cir.get_t(), v: cir.to_vec()[3..].to_vec() },
+ FrameReportTlv {
+ t: segment_metrics.get_t(),
+ v: segment_metrics.to_vec()[3..].to_vec(),
+ },
];
let frame_report =
FrameReport { uwb_msg_id: 1, action: 1, antenna_set: 1, frame_report_tlvs: tlvs };
@@ -1071,6 +1094,7 @@ mod tests {
assert_eq!(aoa_1, parsed_frame_report.aoa[0]);
assert_eq!(aoa_2, parsed_frame_report.aoa[1]);
assert_eq!(cir_vec, parsed_frame_report.cir);
+ assert_eq!(segment_metrics_vec, parsed_frame_report.segment_metrics);
}
#[test]
diff --git a/src/rust/uwb_uci_packets/uci_packets.pdl b/src/rust/uwb_uci_packets/uci_packets.pdl
index 0fa887d..0268145 100644
--- a/src/rust/uwb_uci_packets/uci_packets.pdl
+++ b/src/rust/uwb_uci_packets/uci_packets.pdl
@@ -306,6 +306,7 @@ enum FrameReportTlvType : 8 {
RSSI = 0x0,
AOA = 0x1,
CIR = 0x2,
+ SEGMENT_METRICS = 0x6,
}
enum CapTlvType : 8 {
@@ -1432,6 +1433,26 @@ test Cir {
"\x02\x15\x00\x01\x01\x02\x01\x02\x01\x02\x01\x02\x01\x02\x01\x02\x00\x02\x04\x00\x01\x02\x03\x04",
}
+packet SegmentMetrics : FrameReportTlvPacket (t = SEGMENT_METRICS) {
+ segment_metrics: SegmentMetricsValue[],
+}
+
+struct SegmentMetricsValue {
+ receiver: 8,
+ rf_noise_floor: 16,
+ segment_rsl: 16,
+ first_path_index: 16,
+ first_path_rsl: 16,
+ first_path_time_ns: 16,
+ peak_path_index: 16,
+ peak_path_rsl: 16,
+ peak_path_time_ns: 16,
+}
+
+test SegmentMetrics {
+ "\x08\xB0\xFF\x04\x3C\xE1\x02\xA1\xFF\x52\xB8\xE3\x02\xC4\xFF\xC0\xB8",
+}
+
struct FrameReport {
uwb_msg_id: 8,
action: 8,