diff options
author | Shreshta Manu <shreshtabm@google.com> | 2023-02-07 17:22:50 +0000 |
---|---|---|
committer | Shreshta Manu <shreshtabm@google.com> | 2023-02-07 17:23:49 +0000 |
commit | 70dd5bb84e968263616708716188e1858a4ce04a (patch) | |
tree | 2e2155998ff2f85e12cc829a772680bc1ca9e7cd /src/rust/uwb_uci_packets | |
parent | 6b01f37badf7bad91f5c1bb86a2cfa73c54ac36a (diff) | |
download | uwb-70dd5bb84e968263616708716188e1858a4ce04a.tar.gz |
[uwb-uci] change _payload_ in pdl to of type 8[]
_payload_ in pdl would pick the whole packet instead of the
remaning items. change them to 8[] so that it picks only the
remaining bytes after initial parsing.
With this, raw_ntf should consist of all the bytes in ntf packet
Bug: 266016401
Test: atest libuwb_uci_packet_tests
Test: Manual testing
Change-Id: I9f50366e2b14173e818901484b547e395729e6b3
Diffstat (limited to 'src/rust/uwb_uci_packets')
-rw-r--r-- | src/rust/uwb_uci_packets/src/lib.rs | 16 | ||||
-rw-r--r-- | src/rust/uwb_uci_packets/uci_packets.pdl | 12 |
2 files changed, 20 insertions, 8 deletions
diff --git a/src/rust/uwb_uci_packets/src/lib.rs b/src/rust/uwb_uci_packets/src/lib.rs index 7511c44..d88de5e 100644 --- a/src/rust/uwb_uci_packets/src/lib.rs +++ b/src/rust/uwb_uci_packets/src/lib.rs @@ -152,10 +152,11 @@ pub struct ShortAddressDlTdoaRangingMeasurement { impl ShortAddressDlTdoaRangingMeasurement { /// Parse the `payload` byte buffer from PDL to the vector of measurement. - pub fn parse(bytes: &[u8]) -> Option<Vec<Self>> { + pub fn parse(bytes: &[u8], no_of_ranging_measurement: u8) -> Option<Vec<Self>> { let mut ptr = 0; let mut measurements = vec![]; - while (ptr < bytes.len()) { + let mut count = 0; + while (count < no_of_ranging_measurement) { let mac_address = extract_u16(bytes, &mut ptr, 2)?; let rem = &bytes[ptr..]; let measurement = DlTdoaRangingMeasurement::parse_one(rem); @@ -164,6 +165,7 @@ impl ShortAddressDlTdoaRangingMeasurement { ptr += measurement.get_total_size(); measurements .push(ShortAddressDlTdoaRangingMeasurement { mac_address, measurement }); + count = count + 1; } None => return None, } @@ -180,10 +182,11 @@ pub struct ExtendedAddressDlTdoaRangingMeasurement { impl ExtendedAddressDlTdoaRangingMeasurement { /// Parse the `payload` byte buffer from PDL to the vector of measurement. - pub fn parse(bytes: &[u8]) -> Option<Vec<Self>> { + pub fn parse(bytes: &[u8], no_of_ranging_measurement: u8) -> Option<Vec<Self>> { let mut ptr = 0; let mut measurements = vec![]; - while (ptr < bytes.len()) { + let mut count = 0; + while (count < no_of_ranging_measurement) { let mac_address = extract_u64(bytes, &mut ptr, 8)?; let rem = &bytes[ptr..]; let measurement = DlTdoaRangingMeasurement::parse_one(rem); @@ -192,6 +195,7 @@ impl ExtendedAddressDlTdoaRangingMeasurement { ptr += measurement.get_total_size(); measurements .push(ExtendedAddressDlTdoaRangingMeasurement { mac_address, measurement }); + count = count + 1; } None => return None, } @@ -925,7 +929,7 @@ mod tests { 0x05, 0x07, 0x09, 0x05, // 4(Active Ranging Rounds) ]; - let measurements = ShortAddressDlTdoaRangingMeasurement::parse(&bytes).unwrap(); + let measurements = ShortAddressDlTdoaRangingMeasurement::parse(&bytes, 2).unwrap(); assert_eq!(measurements.len(), 2); let measurement_1 = &measurements[0].measurement; let mac_address_1 = &measurements[0].mac_address; @@ -1009,7 +1013,7 @@ mod tests { 0x02, 0x05, 0x02, 0x05, // 2(Initiator-Responder ToF), 2(Active Ranging Rounds) ]; - let measurements = ExtendedAddressDlTdoaRangingMeasurement::parse(&bytes).unwrap(); + let measurements = ExtendedAddressDlTdoaRangingMeasurement::parse(&bytes, 1).unwrap(); assert_eq!(measurements.len(), 1); let measurement = &measurements[0].measurement; let mac_address = &measurements[0].mac_address; diff --git a/src/rust/uwb_uci_packets/uci_packets.pdl b/src/rust/uwb_uci_packets/uci_packets.pdl index c47bd34..bb1b529 100644 --- a/src/rust/uwb_uci_packets/uci_packets.pdl +++ b/src/rust/uwb_uci_packets/uci_packets.pdl @@ -998,12 +998,20 @@ test ExtendedMacTwoWaySessionInfoNtf { packet ShortMacDlTDoASessionInfoNtf : SessionInfoNtf (ranging_measurement_type = DL_TDOA, mac_address_indicator = SHORT_ADDRESS) { no_of_ranging_measurements : 8, - _payload_, + dl_tdoa_measurements : 8[], +} + +test ShortMacDlTDoASessionInfoNtf { + "\x62\x00\x00\x19\x00\x00\x00\x00\x02\x03\x04\x05\x06\x07\x08\x00\x0a\x02\x01\x01\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", } packet ExtendedMacDlTDoASessionInfoNtf : SessionInfoNtf (ranging_measurement_type = DL_TDOA, mac_address_indicator = EXTENDED_ADDRESS) { no_of_ranging_measurements : 8, - _payload_, + dl_tdoa_measurements : 8[], +} + +test ExtendedMacDlTDoASessionInfoNtf { + "\x62\x00\x00\x19\x00\x00\x00\x00\x02\x03\x04\x05\x06\x07\x08\x00\x0a\x01\x01\x01\x02\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00", } packet ShortMacOwrAoaSessionInfoNtf : SessionInfoNtf (ranging_measurement_type = OWR_AOA, mac_address_indicator = SHORT_ADDRESS) { |