summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Barman <ludovicb@google.com>2023-06-20 12:52:31 +0000
committerLudovic Barman <ludovicb@google.com>2023-06-28 08:04:42 +0000
commit73a2d884c26f985074eebb939aab68ef33142f12 (patch)
treeec351f4d523d9f911734fd58d23e7b709b42e72a
parent5dd0d35218440a1ab391f566cc95cbc233ccbe8e (diff)
downloaduwb-73a2d884c26f985074eebb939aab68ef33142f12.tar.gz
Update external/uwb to protobuf3.
Test: manual atest Bug: 286984317 Change-Id: Ic50dbc2aad7dccbaaa70f20f1dfddbac8bf2fae6
-rwxr-xr-xsrc/Android.bp6
-rw-r--r--src/rust/uwb_core/src/proto/mappings.rs498
-rw-r--r--src/rust/uwb_core/src/proto/utils.rs4
-rw-r--r--src/rust/uwb_core/src/service/proto_uwb_service.rs103
4 files changed, 364 insertions, 247 deletions
diff --git a/src/Android.bp b/src/Android.bp
index 4c59eab..193ac98 100755
--- a/src/Android.bp
+++ b/src/Android.bp
@@ -198,7 +198,7 @@ rust_library {
":include_uwb_core_proto",
],
rustlibs: [
- "libprotobuf_deprecated",
+ "libprotobuf",
],
features: ["proto"],
host_supported: true,
@@ -206,11 +206,11 @@ rust_library {
genrule {
name: "gen_uwb_core_proto",
- tools: ["aprotoc", "protoc-gen-rust-deprecated"],
+ tools: ["aprotoc", "protoc-gen-rust"],
cmd: "$(location aprotoc)" +
" --proto_path=`dirname $(in)`" +
" --dependency_out=$(depfile)" +
- " --plugin=protoc-gen-rust=$(location protoc-gen-rust-deprecated)" +
+ " --plugin=protoc-gen-rust=$(location protoc-gen-rust)" +
" --rust_out=$(genDir) $(in)",
srcs: [
"rust/uwb_core/protos/uwb_service.proto",
diff --git a/src/rust/uwb_core/src/proto/mappings.rs b/src/rust/uwb_core/src/proto/mappings.rs
index 48fb87a..a08046d 100644
--- a/src/rust/uwb_core/src/proto/mappings.rs
+++ b/src/rust/uwb_core/src/proto/mappings.rs
@@ -16,7 +16,6 @@
use std::convert::{TryFrom, TryInto};
-use protobuf::RepeatedField;
use zeroize::Zeroize;
use crate::error::{Error, Result};
@@ -58,6 +57,7 @@ use crate::proto::bindings::{
};
use crate::uci::notification::{RangingMeasurements, SessionRangeData};
use crate::uci::uci_logger::UciLoggerMode;
+use protobuf::{EnumOrUnknown, MessageField};
/// Generate the conversion functions between 2 enum types, which field is 1-to-1 mapping.
///
@@ -711,20 +711,20 @@ impl<T> From<Result<T>> for ProtoStatus {
impl From<ShortAddressTwoWayRangingMeasurement> for ProtoTwoWayRangingMeasurement {
fn from(item: ShortAddressTwoWayRangingMeasurement) -> Self {
let mut result = Self::new();
- result.set_mac_address(item.mac_address.into());
- result.set_status(item.status.into());
- result.set_nlos(item.nlos.into());
- result.set_distance(item.distance.into());
- result.set_aoa_azimuth(item.aoa_azimuth.into());
- result.set_aoa_azimuth_fom(item.aoa_azimuth_fom.into());
- result.set_aoa_elevation(item.aoa_elevation.into());
- result.set_aoa_elevation_fom(item.aoa_elevation_fom.into());
- result.set_aoa_destination_azimuth(item.aoa_destination_azimuth.into());
- result.set_aoa_destination_azimuth_fom(item.aoa_destination_azimuth_fom.into());
- result.set_aoa_destination_elevation(item.aoa_destination_elevation.into());
- result.set_aoa_destination_elevation_fom(item.aoa_destination_elevation_fom.into());
- result.set_slot_index(item.slot_index.into());
- result.set_rssi(item.rssi.into());
+ result.mac_address = item.mac_address.into();
+ result.status = EnumOrUnknown::new(item.status.into());
+ result.nlos = item.nlos.into();
+ result.distance = item.distance.into();
+ result.aoa_azimuth = item.aoa_azimuth.into();
+ result.aoa_azimuth_fom = item.aoa_azimuth_fom.into();
+ result.aoa_elevation = item.aoa_elevation.into();
+ result.aoa_elevation_fom = item.aoa_elevation_fom.into();
+ result.aoa_destination_azimuth = item.aoa_destination_azimuth.into();
+ result.aoa_destination_azimuth_fom = item.aoa_destination_azimuth_fom.into();
+ result.aoa_destination_elevation = item.aoa_destination_elevation.into();
+ result.aoa_destination_elevation_fom = item.aoa_destination_elevation_fom.into();
+ result.slot_index = item.slot_index.into();
+ result.rssi = item.rssi.into();
result
}
}
@@ -732,20 +732,20 @@ impl From<ShortAddressTwoWayRangingMeasurement> for ProtoTwoWayRangingMeasuremen
impl From<ExtendedAddressTwoWayRangingMeasurement> for ProtoTwoWayRangingMeasurement {
fn from(item: ExtendedAddressTwoWayRangingMeasurement) -> Self {
let mut result = Self::new();
- result.set_mac_address(item.mac_address);
- result.set_status(item.status.into());
- result.set_nlos(item.nlos.into());
- result.set_distance(item.distance.into());
- result.set_aoa_azimuth(item.aoa_azimuth.into());
- result.set_aoa_azimuth_fom(item.aoa_azimuth_fom.into());
- result.set_aoa_elevation(item.aoa_elevation.into());
- result.set_aoa_elevation_fom(item.aoa_elevation_fom.into());
- result.set_aoa_destination_azimuth(item.aoa_destination_azimuth.into());
- result.set_aoa_destination_azimuth_fom(item.aoa_destination_azimuth_fom.into());
- result.set_aoa_destination_elevation(item.aoa_destination_elevation.into());
- result.set_aoa_destination_elevation_fom(item.aoa_destination_elevation_fom.into());
- result.set_slot_index(item.slot_index.into());
- result.set_rssi(item.rssi.into());
+ result.mac_address = item.mac_address;
+ result.status = EnumOrUnknown::new(item.status.into());
+ result.nlos = item.nlos.into();
+ result.distance = item.distance.into();
+ result.aoa_azimuth = item.aoa_azimuth.into();
+ result.aoa_azimuth_fom = item.aoa_azimuth_fom.into();
+ result.aoa_elevation = item.aoa_elevation.into();
+ result.aoa_elevation_fom = item.aoa_elevation_fom.into();
+ result.aoa_destination_azimuth = item.aoa_destination_azimuth.into();
+ result.aoa_destination_azimuth_fom = item.aoa_destination_azimuth_fom.into();
+ result.aoa_destination_elevation = item.aoa_destination_elevation.into();
+ result.aoa_destination_elevation_fom = item.aoa_destination_elevation_fom.into();
+ result.slot_index = item.slot_index.into();
+ result.rssi = item.rssi.into();
result
}
}
@@ -753,15 +753,15 @@ impl From<ExtendedAddressTwoWayRangingMeasurement> for ProtoTwoWayRangingMeasure
impl From<ShortAddressOwrAoaRangingMeasurement> for ProtoOwrAoaRangingMeasurement {
fn from(item: ShortAddressOwrAoaRangingMeasurement) -> Self {
let mut result = Self::new();
- result.set_mac_address(item.mac_address.into());
- result.set_status(item.status.into());
- result.set_nlos(item.nlos.into());
- result.set_block_index(item.block_index.into());
- result.set_frame_sequence_number(item.frame_sequence_number.into());
- result.set_aoa_azimuth(item.aoa_azimuth.into());
- result.set_aoa_azimuth_fom(item.aoa_azimuth_fom.into());
- result.set_aoa_elevation(item.aoa_elevation.into());
- result.set_aoa_elevation_fom(item.aoa_elevation_fom.into());
+ result.mac_address = item.mac_address.into();
+ result.status = EnumOrUnknown::new(item.status.into());
+ result.nlos = item.nlos.into();
+ result.block_index = item.block_index.into();
+ result.frame_sequence_number = item.frame_sequence_number.into();
+ result.aoa_azimuth = item.aoa_azimuth.into();
+ result.aoa_azimuth_fom = item.aoa_azimuth_fom.into();
+ result.aoa_elevation = item.aoa_elevation.into();
+ result.aoa_elevation_fom = item.aoa_elevation_fom.into();
result
}
}
@@ -769,15 +769,15 @@ impl From<ShortAddressOwrAoaRangingMeasurement> for ProtoOwrAoaRangingMeasuremen
impl From<ExtendedAddressOwrAoaRangingMeasurement> for ProtoOwrAoaRangingMeasurement {
fn from(item: ExtendedAddressOwrAoaRangingMeasurement) -> Self {
let mut result = Self::new();
- result.set_mac_address(item.mac_address);
- result.set_status(item.status.into());
- result.set_nlos(item.nlos.into());
- result.set_block_index(item.block_index.into());
- result.set_frame_sequence_number(item.frame_sequence_number.into());
- result.set_aoa_azimuth(item.aoa_azimuth.into());
- result.set_aoa_azimuth_fom(item.aoa_azimuth_fom.into());
- result.set_aoa_elevation(item.aoa_elevation.into());
- result.set_aoa_elevation_fom(item.aoa_elevation_fom.into());
+ result.mac_address = item.mac_address;
+ result.status = EnumOrUnknown::new(item.status.into());
+ result.nlos = item.nlos.into();
+ result.block_index = item.block_index.into();
+ result.frame_sequence_number = item.frame_sequence_number.into();
+ result.aoa_azimuth = item.aoa_azimuth.into();
+ result.aoa_azimuth_fom = item.aoa_azimuth_fom.into();
+ result.aoa_elevation = item.aoa_elevation.into();
+ result.aoa_elevation_fom = item.aoa_elevation_fom.into();
result
}
}
@@ -785,38 +785,36 @@ impl From<ExtendedAddressOwrAoaRangingMeasurement> for ProtoOwrAoaRangingMeasure
impl From<ShortAddressDlTdoaRangingMeasurement> for ProtoDlTDoARangingMeasurement {
fn from(item: ShortAddressDlTdoaRangingMeasurement) -> Self {
let mut result = Self::new();
- result.set_mac_address(item.mac_address.into());
- result.set_status(
+ result.mac_address = item.mac_address.into();
+ result.status = EnumOrUnknown::new(
StatusCode::try_from(item.measurement.status)
.unwrap_or(StatusCode::UciStatusFailed)
.into(),
);
- result.set_message_control(item.measurement.message_control.into());
- result.set_block_index(item.measurement.block_index.into());
- result.set_round_index(item.measurement.round_index.into());
- result.set_nlos(item.measurement.nlos.into());
- result.set_aoa_azimuth(item.measurement.aoa_azimuth.into());
- result.set_aoa_azimuth_fom(item.measurement.aoa_azimuth_fom.into());
- result.set_aoa_elevation(item.measurement.aoa_elevation.into());
- result.set_aoa_elevation_fom(item.measurement.aoa_elevation_fom.into());
- result.set_rssi(item.measurement.rssi.into());
- result.set_tx_timestamp(item.measurement.tx_timestamp);
- result.set_rx_timestamp(item.measurement.rx_timestamp);
- result.set_anchor_cfo(item.measurement.anchor_cfo.into());
- result.set_cfo(item.measurement.cfo.into());
- result.set_initiator_reply_time(item.measurement.initiator_reply_time);
- result.set_responder_reply_time(item.measurement.responder_reply_time);
- result.set_initiator_responder_tof(item.measurement.initiator_responder_tof.into());
- result.set_dt_anchor_location(
- item.measurement
- .dt_anchor_location
- .into_iter()
- .map(|val| val as u32)
- .collect::<Vec<u32>>(),
- );
- result.set_ranging_rounds(
- item.measurement.ranging_rounds.into_iter().map(|val| val as u32).collect::<Vec<u32>>(),
- );
+ result.message_control = item.measurement.message_control.into();
+ result.block_index = item.measurement.block_index.into();
+ result.round_index = item.measurement.round_index.into();
+ result.nlos = item.measurement.nlos.into();
+ result.aoa_azimuth = item.measurement.aoa_azimuth.into();
+ result.aoa_azimuth_fom = item.measurement.aoa_azimuth_fom.into();
+ result.aoa_elevation = item.measurement.aoa_elevation.into();
+ result.aoa_elevation_fom = item.measurement.aoa_elevation_fom.into();
+ result.rssi = item.measurement.rssi.into();
+ result.tx_timestamp = item.measurement.tx_timestamp;
+ result.rx_timestamp = item.measurement.rx_timestamp;
+ result.anchor_cfo = item.measurement.anchor_cfo.into();
+ result.cfo = item.measurement.cfo.into();
+ result.initiator_reply_time = item.measurement.initiator_reply_time;
+ result.responder_reply_time = item.measurement.responder_reply_time;
+ result.initiator_responder_tof = item.measurement.initiator_responder_tof.into();
+ result.dt_anchor_location = item
+ .measurement
+ .dt_anchor_location
+ .into_iter()
+ .map(|val| val as u32)
+ .collect::<Vec<u32>>();
+ result.ranging_rounds =
+ item.measurement.ranging_rounds.into_iter().map(|val| val as u32).collect::<Vec<u32>>();
result
}
}
@@ -824,38 +822,36 @@ impl From<ShortAddressDlTdoaRangingMeasurement> for ProtoDlTDoARangingMeasuremen
impl From<ExtendedAddressDlTdoaRangingMeasurement> for ProtoDlTDoARangingMeasurement {
fn from(item: ExtendedAddressDlTdoaRangingMeasurement) -> Self {
let mut result = Self::new();
- result.set_mac_address(item.mac_address);
- result.set_status(
+ result.mac_address = item.mac_address;
+ result.status = EnumOrUnknown::new(
StatusCode::try_from(item.measurement.status)
.unwrap_or(StatusCode::UciStatusFailed)
.into(),
);
- result.set_message_control(item.measurement.message_control.into());
- result.set_block_index(item.measurement.block_index.into());
- result.set_round_index(item.measurement.round_index.into());
- result.set_nlos(item.measurement.nlos.into());
- result.set_aoa_azimuth(item.measurement.aoa_azimuth.into());
- result.set_aoa_azimuth_fom(item.measurement.aoa_azimuth_fom.into());
- result.set_aoa_elevation(item.measurement.aoa_elevation.into());
- result.set_aoa_elevation_fom(item.measurement.aoa_elevation_fom.into());
- result.set_rssi(item.measurement.rssi.into());
- result.set_tx_timestamp(item.measurement.tx_timestamp);
- result.set_rx_timestamp(item.measurement.rx_timestamp);
- result.set_anchor_cfo(item.measurement.anchor_cfo.into());
- result.set_cfo(item.measurement.cfo.into());
- result.set_initiator_reply_time(item.measurement.initiator_reply_time);
- result.set_responder_reply_time(item.measurement.responder_reply_time);
- result.set_initiator_responder_tof(item.measurement.initiator_responder_tof.into());
- result.set_dt_anchor_location(
- item.measurement
- .dt_anchor_location
- .into_iter()
- .map(|val| val as u32)
- .collect::<Vec<u32>>(),
- );
- result.set_ranging_rounds(
- item.measurement.ranging_rounds.into_iter().map(|val| val as u32).collect::<Vec<u32>>(),
- );
+ result.message_control = item.measurement.message_control.into();
+ result.block_index = item.measurement.block_index.into();
+ result.round_index = item.measurement.round_index.into();
+ result.nlos = item.measurement.nlos.into();
+ result.aoa_azimuth = item.measurement.aoa_azimuth.into();
+ result.aoa_azimuth_fom = item.measurement.aoa_azimuth_fom.into();
+ result.aoa_elevation = item.measurement.aoa_elevation.into();
+ result.aoa_elevation_fom = item.measurement.aoa_elevation_fom.into();
+ result.rssi = item.measurement.rssi.into();
+ result.tx_timestamp = item.measurement.tx_timestamp;
+ result.rx_timestamp = item.measurement.rx_timestamp;
+ result.anchor_cfo = item.measurement.anchor_cfo.into();
+ result.cfo = item.measurement.cfo.into();
+ result.initiator_reply_time = item.measurement.initiator_reply_time;
+ result.responder_reply_time = item.measurement.responder_reply_time;
+ result.initiator_responder_tof = item.measurement.initiator_responder_tof.into();
+ result.dt_anchor_location = item
+ .measurement
+ .dt_anchor_location
+ .into_iter()
+ .map(|val| val as u32)
+ .collect::<Vec<u32>>();
+ result.ranging_rounds =
+ item.measurement.ranging_rounds.into_iter().map(|val| val as u32).collect::<Vec<u32>>();
result
}
}
@@ -863,19 +859,19 @@ impl From<ExtendedAddressDlTdoaRangingMeasurement> for ProtoDlTDoARangingMeasure
impl From<SessionRangeData> for ProtoSessionRangeData {
fn from(item: SessionRangeData) -> Self {
let mut result = Self::new();
- result.set_sequence_number(item.sequence_number);
- result.set_session_id(item.session_token);
- result.set_current_ranging_interval_ms(item.current_ranging_interval_ms);
- result.set_ranging_measurement_type(item.ranging_measurement_type.into());
+ result.sequence_number = item.sequence_number;
+ result.session_id = item.session_token;
+ result.current_ranging_interval_ms = item.current_ranging_interval_ms;
+ result.ranging_measurement_type = EnumOrUnknown::new(item.ranging_measurement_type.into());
match to_proto_ranging_measurements(item.ranging_measurements) {
ProtoRangingMeasurements::TwoWay(twoway_measurements) => {
- result.set_twoway_ranging_measurements(RepeatedField::from_vec(twoway_measurements))
+ result.twoway_ranging_measurements = twoway_measurements;
}
ProtoRangingMeasurements::OwrAoa(owraoa_measurement) => {
- result.set_owraoa_ranging_measurement(owraoa_measurement)
+ result.owraoa_ranging_measurement = MessageField::from(Some(owraoa_measurement));
}
ProtoRangingMeasurements::DlTDoa(dltdoa_measurements) => {
- result.set_dltdoa_ranging_measurements(RepeatedField::from_vec(dltdoa_measurements))
+ result.dltdoa_ranging_measurements = dltdoa_measurements;
}
}
result
@@ -914,9 +910,9 @@ impl From<ProtoRangingRoundControl> for RangingRoundControl {
impl From<RangingRoundControl> for ProtoRangingRoundControl {
fn from(item: RangingRoundControl) -> Self {
let mut res = Self::new();
- res.set_ranging_result_report_message(item.ranging_result_report_message);
- res.set_control_message(item.control_message);
- res.set_measurement_report_message(item.measurement_report_message);
+ res.ranging_result_report_message = item.ranging_result_report_message;
+ res.control_message = item.control_message;
+ res.measurement_report_message = item.measurement_report_message;
res
}
}
@@ -935,10 +931,10 @@ impl From<ProtoResultReportConfig> for ResultReportConfig {
impl From<ResultReportConfig> for ProtoResultReportConfig {
fn from(item: ResultReportConfig) -> Self {
let mut res = Self::new();
- res.set_tof(item.tof);
- res.set_aoa_azimuth(item.aoa_azimuth);
- res.set_aoa_elevation(item.aoa_elevation);
- res.set_aoa_fom(item.aoa_fom);
+ res.tof = item.tof;
+ res.aoa_azimuth = item.aoa_azimuth;
+ res.aoa_elevation = item.aoa_elevation;
+ res.aoa_fom = item.aoa_fom;
res
}
}
@@ -970,11 +966,11 @@ impl TryFrom<ProtoControlee> for Controlee {
impl From<PowerStats> for ProtoPowerStats {
fn from(item: PowerStats) -> Self {
let mut res = Self::new();
- res.set_status(item.status.into());
- res.set_idle_time_ms(item.idle_time_ms);
- res.set_tx_time_ms(item.tx_time_ms);
- res.set_rx_time_ms(item.rx_time_ms);
- res.set_total_wake_count(item.total_wake_count);
+ res.status = ProtoStatusCode::from(item.status).into();
+ res.idle_time_ms = item.idle_time_ms;
+ res.tx_time_ms = item.tx_time_ms;
+ res.rx_time_ms = item.rx_time_ms;
+ res.total_wake_count = item.total_wake_count;
res
}
}
@@ -982,66 +978,62 @@ impl From<PowerStats> for ProtoPowerStats {
impl From<FiraAppConfigParams> for ProtoFiraAppConfigParams {
fn from(item: FiraAppConfigParams) -> Self {
let mut res = Self::new();
- res.set_device_type((*item.device_type()).into());
- res.set_ranging_round_usage((*item.ranging_round_usage()).into());
- res.set_sts_config((*item.sts_config()).into());
- res.set_multi_node_mode((*item.multi_node_mode()).into());
- res.set_channel_number((*item.channel_number()).into());
- res.set_device_mac_address(item.device_mac_address().clone().into());
- res.set_dst_mac_address(
- item.dst_mac_address()
- .clone()
- .into_iter()
- .map(|addr| addr.into())
- .collect::<Vec<_>>()
- .into(),
- );
- res.set_slot_duration_rstu((*item.slot_duration_rstu()).into());
- res.set_ranging_duration_ms(*item.ranging_duration_ms());
- res.set_mac_fcs_type((*item.mac_fcs_type()).into());
- res.set_ranging_round_control(item.ranging_round_control().clone().into());
- res.set_aoa_result_request((*item.aoa_result_request()).into());
- res.set_range_data_ntf_config((*item.range_data_ntf_config()).into());
- res.set_range_data_ntf_proximity_near_cm((*item.range_data_ntf_proximity_near_cm()).into());
- res.set_range_data_ntf_proximity_far_cm((*item.range_data_ntf_proximity_far_cm()).into());
- res.set_device_role((*item.device_role()).into());
- res.set_rframe_config((*item.rframe_config()).into());
- res.set_preamble_code_index((*item.preamble_code_index()).into());
- res.set_sfd_id((*item.sfd_id()).into());
- res.set_psdu_data_rate((*item.psdu_data_rate()).into());
- res.set_preamble_duration((*item.preamble_duration()).into());
- res.set_ranging_time_struct((*item.ranging_time_struct()).into());
- res.set_slots_per_rr((*item.slots_per_rr()).into());
- res.set_tx_adaptive_payload_power((*item.tx_adaptive_payload_power()).into());
- res.set_responder_slot_index((*item.responder_slot_index()).into());
- res.set_prf_mode((*item.prf_mode()).into());
- res.set_scheduled_mode((*item.scheduled_mode()).into());
- res.set_key_rotation((*item.key_rotation()).into());
- res.set_key_rotation_rate((*item.key_rotation_rate()).into());
- res.set_session_priority((*item.session_priority()).into());
- res.set_mac_address_mode((*item.mac_address_mode()).into());
- res.set_vendor_id((*item.vendor_id()).into());
- res.set_static_sts_iv((*item.static_sts_iv()).into());
- res.set_number_of_sts_segments((*item.number_of_sts_segments()).into());
- res.set_max_rr_retry((*item.max_rr_retry()).into());
- res.set_uwb_initiation_time_ms(*item.uwb_initiation_time_ms());
- res.set_hopping_mode((*item.hopping_mode()).into());
- res.set_block_stride_length((*item.block_stride_length()).into());
- res.set_result_report_config(item.result_report_config().clone().into());
- res.set_in_band_termination_attempt_count(
- (*item.in_band_termination_attempt_count()).into(),
- );
- res.set_sub_session_id(*item.sub_session_id());
- res.set_bprf_phr_data_rate((*item.bprf_phr_data_rate()).into());
- res.set_max_number_of_measurements((*item.max_number_of_measurements()).into());
- res.set_sts_length((*item.sts_length()).into());
- res.set_number_of_range_measurements((*item.number_of_range_measurements()).into());
- res.set_number_of_aoa_azimuth_measurements(
- (*item.number_of_aoa_azimuth_measurements()).into(),
- );
- res.set_number_of_aoa_elevation_measurements(
- (*item.number_of_aoa_elevation_measurements()).into(),
- );
+ res.device_type = EnumOrUnknown::new((*item.device_type()).into());
+ res.ranging_round_usage = ProtoRangingRoundUsage::from(*item.ranging_round_usage()).into();
+ res.sts_config = ProtoStsConfig::from(*item.sts_config()).into();
+ res.multi_node_mode = ProtoMultiNodeMode::from(*item.multi_node_mode()).into();
+ res.channel_number = ProtoUwbChannel::from(*item.channel_number()).into();
+ res.device_mac_address = item.device_mac_address().clone().into();
+ res.dst_mac_address =
+ item.dst_mac_address().clone().into_iter().map(|addr| addr.into()).collect::<Vec<_>>();
+ res.slot_duration_rstu = (*item.slot_duration_rstu()).into();
+ res.ranging_duration_ms = *item.ranging_duration_ms();
+ res.mac_fcs_type = ProtoMacFcsType::from(*item.mac_fcs_type()).into();
+ res.ranging_round_control = MessageField::from(Some(ProtoRangingRoundControl::from(
+ item.ranging_round_control().clone(),
+ )));
+ res.aoa_result_request = ProtoAoaResultRequest::from(*item.aoa_result_request()).into();
+ res.range_data_ntf_config =
+ ProtoRangeDataNtfConfig::from(*item.range_data_ntf_config()).into();
+ res.range_data_ntf_proximity_near_cm = (*item.range_data_ntf_proximity_near_cm()).into();
+ res.range_data_ntf_proximity_far_cm = (*item.range_data_ntf_proximity_far_cm()).into();
+ res.device_role = ProtoDeviceRole::from(*item.device_role()).into();
+ res.rframe_config = ProtoRframeConfig::from(*item.rframe_config()).into();
+ res.preamble_code_index = (*item.preamble_code_index()).into();
+ res.sfd_id = (*item.sfd_id()).into();
+ res.psdu_data_rate = ProtoPsduDataRate::from(*item.psdu_data_rate()).into();
+ res.preamble_duration = ProtoPreambleDuration::from(*item.preamble_duration()).into();
+ res.ranging_time_struct = ProtoRangingTimeStruct::from(*item.ranging_time_struct()).into();
+ res.slots_per_rr = (*item.slots_per_rr()).into();
+ res.tx_adaptive_payload_power =
+ ProtoTxAdaptivePayloadPower::from(*item.tx_adaptive_payload_power()).into();
+ res.responder_slot_index = (*item.responder_slot_index()).into();
+ res.prf_mode = ProtoPrfMode::from(*item.prf_mode()).into();
+ res.scheduled_mode = ProtoScheduledMode::from(*item.scheduled_mode()).into();
+ res.key_rotation = ProtoKeyRotation::from(*item.key_rotation()).into();
+ res.key_rotation_rate = (*item.key_rotation_rate()).into();
+ res.session_priority = (*item.session_priority()).into();
+ res.mac_address_mode = ProtoMacAddressMode::from(*item.mac_address_mode()).into();
+ res.vendor_id = (*item.vendor_id()).into();
+ res.static_sts_iv = (*item.static_sts_iv()).into();
+ res.number_of_sts_segments = (*item.number_of_sts_segments()).into();
+ res.max_rr_retry = (*item.max_rr_retry()).into();
+ res.uwb_initiation_time_ms = *item.uwb_initiation_time_ms();
+ res.hopping_mode = ProtoHoppingMode::from(*item.hopping_mode()).into();
+ res.block_stride_length = (*item.block_stride_length()).into();
+ res.result_report_config = MessageField::from(Some(ProtoResultReportConfig::from(
+ item.result_report_config().clone(),
+ )));
+ res.in_band_termination_attempt_count = (*item.in_band_termination_attempt_count()).into();
+ res.sub_session_id = *item.sub_session_id();
+ res.bprf_phr_data_rate = ProtoBprfPhrDataRate::from(*item.bprf_phr_data_rate()).into();
+ res.max_number_of_measurements = (*item.max_number_of_measurements()).into();
+ res.sts_length = ProtoStsLength::from(*item.sts_length()).into();
+ res.number_of_range_measurements = (*item.number_of_range_measurements()).into();
+ res.number_of_aoa_azimuth_measurements =
+ (*item.number_of_aoa_azimuth_measurements()).into();
+ res.number_of_aoa_elevation_measurements =
+ (*item.number_of_aoa_elevation_measurements()).into();
res
}
@@ -1050,23 +1042,49 @@ impl From<FiraAppConfigParams> for ProtoFiraAppConfigParams {
impl TryFrom<ProtoFiraAppConfigParams> for AppConfigParams {
type Error = String;
fn try_from(mut item: ProtoFiraAppConfigParams) -> std::result::Result<Self, Self::Error> {
- let device_mac_address =
- to_uwb_address(item.device_mac_address.clone(), item.mac_address_mode)
- .ok_or("Failed to convert device_mac_address")?;
+ let device_mac_address = to_uwb_address(
+ item.device_mac_address.clone(),
+ item.mac_address_mode.enum_value().map_err(|_| "Failed to read mac_address_mode")?,
+ )
+ .ok_or("Failed to convert device_mac_address")?;
let mut dst_mac_address = vec![];
for addr in item.dst_mac_address.clone().into_iter() {
- let addr = to_uwb_address(addr, item.mac_address_mode)
- .ok_or("Failed to convert dst_mac_address")?;
+ let addr = to_uwb_address(
+ addr,
+ item.mac_address_mode
+ .enum_value()
+ .map_err(|_| "Failed to convert mac_address_mode")?,
+ )
+ .ok_or("Failed to convert dst_mac_address")?;
dst_mac_address.push(addr);
}
let mut builder = FiraAppConfigParamsBuilder::new();
builder
- .device_type(item.device_type.into())
- .ranging_round_usage(item.ranging_round_usage.into())
- .sts_config(item.sts_config.into())
- .multi_node_mode(item.multi_node_mode.into())
- .channel_number(item.channel_number.into())
+ .device_type(
+ item.device_type.enum_value().map_err(|_| "Failed to convert device_type")?.into(),
+ )
+ .ranging_round_usage(
+ item.ranging_round_usage
+ .enum_value()
+ .map_err(|_| "Failed to convert ranging_round_usage")?
+ .into(),
+ )
+ .sts_config(
+ item.sts_config.enum_value().map_err(|_| "Failed to convert sts_config")?.into(),
+ )
+ .multi_node_mode(
+ item.multi_node_mode
+ .enum_value()
+ .map_err(|_| "Failed to convert multi_node_mode")?
+ .into(),
+ )
+ .channel_number(
+ item.channel_number
+ .enum_value()
+ .map_err(|_| "Failed to convert channel_number")?
+ .into(),
+ )
.device_mac_address(device_mac_address)
.dst_mac_address(dst_mac_address)
.slot_duration_rstu(
@@ -1075,12 +1093,27 @@ impl TryFrom<ProtoFiraAppConfigParams> for AppConfigParams {
.map_err(|_| "Failed to convert slot_duration_rstu")?,
)
.ranging_duration_ms(item.ranging_duration_ms)
- .mac_fcs_type(item.mac_fcs_type.into())
+ .mac_fcs_type(
+ item.mac_fcs_type
+ .enum_value()
+ .map_err(|_| "Failed to convert mac_fcs_type")?
+ .into(),
+ )
.ranging_round_control(
item.ranging_round_control.take().ok_or("ranging_round_control is empty")?.into(),
)
- .aoa_result_request(item.aoa_result_request.into())
- .range_data_ntf_config(item.range_data_ntf_config.into())
+ .aoa_result_request(
+ item.aoa_result_request
+ .enum_value()
+ .map_err(|_| "Failed to convert aoa_result_request")?
+ .into(),
+ )
+ .range_data_ntf_config(
+ item.range_data_ntf_config
+ .enum_value()
+ .map_err(|_| "Failed to convert range_data_ntf_config")?
+ .into(),
+ )
.range_data_ntf_proximity_near_cm(
item.range_data_ntf_proximity_near_cm
.try_into()
@@ -1091,29 +1124,66 @@ impl TryFrom<ProtoFiraAppConfigParams> for AppConfigParams {
.try_into()
.map_err(|_| "Failed to convert range_data_ntf_proximity_far_cm")?,
)
- .device_role(item.device_role.into())
- .rframe_config(item.rframe_config.into())
+ .device_role(
+ item.device_role.enum_value().map_err(|_| "Failed to convert device_role")?.into(),
+ )
+ .rframe_config(
+ item.rframe_config
+ .enum_value()
+ .map_err(|_| "Failed to convert rframe_config")?
+ .into(),
+ )
.preamble_code_index(
item.preamble_code_index
.try_into()
.map_err(|_| "Failed to convert preamble_code_index")?,
)
.sfd_id(item.sfd_id.try_into().map_err(|_| "Failed to convert sfd_id")?)
- .psdu_data_rate(item.psdu_data_rate.into())
- .preamble_duration(item.preamble_duration.into())
- .ranging_time_struct(item.ranging_time_struct.into())
+ .psdu_data_rate(
+ item.psdu_data_rate
+ .enum_value()
+ .map_err(|_| "Failed to convert psdu_data_rate")?
+ .into(),
+ )
+ .preamble_duration(
+ item.preamble_duration
+ .enum_value()
+ .map_err(|_| "Failed to convert preamble_duration")?
+ .into(),
+ )
+ .ranging_time_struct(
+ item.ranging_time_struct
+ .enum_value()
+ .map_err(|_| "Failed to convert ranging_time_struct")?
+ .into(),
+ )
.slots_per_rr(
item.slots_per_rr.try_into().map_err(|_| "Failed to convert slots_per_rr")?,
)
- .tx_adaptive_payload_power(item.tx_adaptive_payload_power.into())
+ .tx_adaptive_payload_power(
+ item.tx_adaptive_payload_power
+ .enum_value()
+ .map_err(|_| "Failed to convert tx_adaptive_payload_power")?
+ .into(),
+ )
.responder_slot_index(
item.responder_slot_index
.try_into()
.map_err(|_| "Failed to convert responder_slot_index")?,
)
- .prf_mode(item.prf_mode.into())
- .scheduled_mode(item.scheduled_mode.into())
- .key_rotation(item.key_rotation.into())
+ .prf_mode(item.prf_mode.enum_value().map_err(|_| "Failed to convert prf_mode")?.into())
+ .scheduled_mode(
+ item.scheduled_mode
+ .enum_value()
+ .map_err(|_| "Failed to convert scheduled_mode")?
+ .into(),
+ )
+ .key_rotation(
+ item.key_rotation
+ .enum_value()
+ .map_err(|_| "Failed to convert key_rotation")?
+ .into(),
+ )
.key_rotation_rate(
item.key_rotation_rate
.try_into()
@@ -1124,7 +1194,12 @@ impl TryFrom<ProtoFiraAppConfigParams> for AppConfigParams {
.try_into()
.map_err(|_| "Failed to convert session_priority")?,
)
- .mac_address_mode(item.mac_address_mode.into())
+ .mac_address_mode(
+ item.mac_address_mode
+ .enum_value()
+ .map_err(|_| "Failed to convert mac_address_mode")?
+ .into(),
+ )
.vendor_id(
item.vendor_id.clone().try_into().map_err(|_| "Failed to convert vendor_id")?,
)
@@ -1143,7 +1218,7 @@ impl TryFrom<ProtoFiraAppConfigParams> for AppConfigParams {
item.max_rr_retry.try_into().map_err(|_| "Failed to convert max_rr_retry")?,
)
.uwb_initiation_time_ms(item.uwb_initiation_time_ms)
- .hopping_mode(item.hopping_mode.into())
+ .hopping_mode(item.hopping_mode.unwrap().into())
.block_stride_length(
item.block_stride_length
.try_into()
@@ -1158,13 +1233,20 @@ impl TryFrom<ProtoFiraAppConfigParams> for AppConfigParams {
.map_err(|_| "Failed to convert in_band_termination_attempt_count")?,
)
.sub_session_id(item.sub_session_id)
- .bprf_phr_data_rate(item.bprf_phr_data_rate.into())
+ .bprf_phr_data_rate(
+ item.bprf_phr_data_rate
+ .enum_value()
+ .map_err(|_| "Failed to convert bprf_phr_data_rate")?
+ .into(),
+ )
.max_number_of_measurements(
item.max_number_of_measurements
.try_into()
.map_err(|_| "Failed to convert max_number_of_measurements")?,
)
- .sts_length(item.sts_length.into())
+ .sts_length(
+ item.sts_length.enum_value().map_err(|_| "Failed to convert sts_length")?.into(),
+ )
.number_of_range_measurements(
item.number_of_range_measurements
.try_into()
diff --git a/src/rust/uwb_core/src/proto/utils.rs b/src/rust/uwb_core/src/proto/utils.rs
index 8f73e20..e1ffc9e 100644
--- a/src/rust/uwb_core/src/proto/utils.rs
+++ b/src/rust/uwb_core/src/proto/utils.rs
@@ -22,7 +22,7 @@ use crate::error::{Error, Result};
/// Convert the protobuf message to a byte buffers. Return dbus::MethodErr when conversion fails.
pub fn write_to_bytes<M: Message>(msg: &M) -> Result<Vec<u8>> {
msg.write_to_bytes().map_err(|e| {
- error!("Failed to write protobuf {} to bytes: {:?}", msg.descriptor().name(), e);
+ error!("Failed to write protobuf {} to bytes: {:?}", M::NAME, e);
Error::Unknown
})
}
@@ -30,7 +30,7 @@ pub fn write_to_bytes<M: Message>(msg: &M) -> Result<Vec<u8>> {
/// Parse the byte buffer to the protobuf message. Return dbus::MethodErr when failed to parse.
pub fn parse_from_bytes<M: Message>(bytes: &[u8]) -> Result<M> {
M::parse_from_bytes(bytes).map_err(|e| {
- error!("Failed to parse {:?}: {:?}", M::descriptor_static().name(), e);
+ error!("Failed to parse {:?}: {:?}", M::NAME, e);
Error::BadParameters
})
}
diff --git a/src/rust/uwb_core/src/service/proto_uwb_service.rs b/src/rust/uwb_core/src/service/proto_uwb_service.rs
index 747865a..7c1362b 100644
--- a/src/rust/uwb_core/src/service/proto_uwb_service.rs
+++ b/src/rust/uwb_core/src/service/proto_uwb_service.rs
@@ -16,6 +16,7 @@
//! arguments to protobuf.
use log::{debug, error};
+use protobuf::EnumOrUnknown;
use crate::error::{Error, Result};
use crate::params::{AppConfigParams, DeviceState, ReasonCode, SessionId, SessionState};
@@ -53,21 +54,31 @@ impl ProtoUwbService {
pub fn set_logger_mode(&self, request: &[u8]) -> Result<Vec<u8>> {
let request = parse_from_bytes::<SetLoggerModeRequest>(request)?;
let mut resp = SetLoggerModeResponse::new();
- resp.set_status(self.service.set_logger_mode(request.logger_mode.into()).into());
+ let res = self.service.set_logger_mode(
+ request
+ .logger_mode
+ .enum_value()
+ .map_err(|e| {
+ error!("Failed to convert logger_mode: {e}");
+ Error::BadParameters
+ })?
+ .into(),
+ );
+ resp.status = Into::<crate::proto::bindings::Status>::into(res).into();
write_to_bytes(&resp)
}
/// Enable the UWB service.
pub fn enable(&self) -> Result<Vec<u8>> {
let mut resp = EnableResponse::new();
- resp.set_status(self.service.enable().into());
+ resp.status = EnumOrUnknown::new(self.service.enable().into());
write_to_bytes(&resp)
}
/// Disable the UWB service.
pub fn disable(&self) -> Result<Vec<u8>> {
let mut resp = DisableResponse::new();
- resp.set_status(self.service.disable().into());
+ resp.status = EnumOrUnknown::new(self.service.disable().into());
write_to_bytes(&resp)
}
@@ -90,9 +101,20 @@ impl ProtoUwbService {
})?;
let mut resp = InitSessionResponse::new();
- resp.set_status(
+ resp.status = EnumOrUnknown::new(
self.service
- .init_session(request.session_id, request.session_type.into(), params)
+ .init_session(
+ request.session_id,
+ request
+ .session_type
+ .enum_value()
+ .map_err(|e| {
+ error!("Failed to convert session_type: {:?}", e);
+ Error::BadParameters
+ })?
+ .into(),
+ params,
+ )
.into(),
);
write_to_bytes(&resp)
@@ -102,7 +124,7 @@ impl ProtoUwbService {
pub fn deinit_session(&self, request: &[u8]) -> Result<Vec<u8>> {
let request = parse_from_bytes::<DeinitSessionRequest>(request)?;
let mut resp = DeinitSessionResponse::new();
- resp.set_status(self.service.deinit_session(request.session_id).into());
+ resp.status = EnumOrUnknown::new(self.service.deinit_session(request.session_id).into());
write_to_bytes(&resp)
}
@@ -113,7 +135,7 @@ impl ProtoUwbService {
// AppConfigParams is the same as the configured one before start_ranging(). Therefore, we
// don't reply the AppConfigParams received from uwb_core.
let mut resp = StartRangingResponse::new();
- resp.set_status(self.service.start_ranging(request.session_id).into());
+ resp.status = EnumOrUnknown::new(self.service.start_ranging(request.session_id).into());
write_to_bytes(&resp)
}
@@ -121,7 +143,7 @@ impl ProtoUwbService {
pub fn stop_ranging(&self, request: &[u8]) -> Result<Vec<u8>> {
let request = parse_from_bytes::<StopRangingRequest>(request)?;
let mut resp = StopRangingResponse::new();
- resp.set_status(self.service.stop_ranging(request.session_id).into());
+ resp.status = EnumOrUnknown::new(self.service.stop_ranging(request.session_id).into());
write_to_bytes(&resp)
}
@@ -142,7 +164,8 @@ impl ProtoUwbService {
})?;
let mut resp = ReconfigureResponse::new();
- resp.set_status(self.service.reconfigure(request.session_id, params).into());
+ resp.status =
+ EnumOrUnknown::new(self.service.reconfigure(request.session_id, params).into());
write_to_bytes(&resp)
}
@@ -159,11 +182,18 @@ impl ProtoUwbService {
}
let mut resp = UpdateControllerMulticastListResponse::new();
- resp.set_status(
+ resp.status = EnumOrUnknown::new(
self.service
.update_controller_multicast_list(
request.session_id,
- request.action.into(),
+ request
+ .action
+ .enum_value()
+ .map_err(|e| {
+ error!("Failed to convert action: {:?}", e);
+ Error::BadParameters
+ })?
+ .into(),
controlees,
)
.into(),
@@ -177,7 +207,8 @@ impl ProtoUwbService {
let country_code = request.country_code.try_into()?;
let mut resp = AndroidSetCountryCodeResponse::new();
- resp.set_status(self.service.android_set_country_code(country_code).into());
+ resp.status =
+ EnumOrUnknown::new(self.service.android_set_country_code(country_code).into());
write_to_bytes(&resp)
}
@@ -186,11 +217,12 @@ impl ProtoUwbService {
let mut resp = AndroidGetPowerStatsResponse::new();
match self.service.android_get_power_stats() {
Ok(power_stats) => {
- resp.set_status(Ok(()).into());
- resp.set_power_stats(power_stats.into());
+ resp.status = EnumOrUnknown::new(Ok(()).into());
+ resp.power_stats = Some(power_stats.into()).into();
}
Err(e) => {
- resp.set_status(From::<Result<()>>::from(Err(e)));
+ let err: Result<()> = Err(e);
+ resp.status = crate::proto::bindings::Status::from(err).into();
}
}
write_to_bytes(&resp)
@@ -202,13 +234,14 @@ impl ProtoUwbService {
let mut resp = SendVendorCmdResponse::new();
match self.service.raw_uci_cmd(request.mt, request.gid, request.oid, request.payload) {
Ok(msg) => {
- resp.set_status(Ok(()).into());
- resp.set_gid(msg.gid);
- resp.set_oid(msg.oid);
- resp.set_payload(msg.payload);
+ resp.status = EnumOrUnknown::new(Ok(()).into());
+ resp.gid = msg.gid;
+ resp.oid = msg.oid;
+ resp.payload = msg.payload;
}
Err(e) => {
- resp.set_status(From::<Result<()>>::from(Err(e)));
+ let err: Result<()> = Err(e);
+ resp.status = (Into::<crate::proto::bindings::Status>::into(err)).into();
}
}
write_to_bytes(&resp)
@@ -220,15 +253,17 @@ impl ProtoUwbService {
let mut resp = SessionParamsResponse::new();
match self.service.session_params(request.session_id) {
Ok(AppConfigParams::Fira(params)) => {
- resp.set_status(Ok(()).into());
- resp.set_params(params.into());
+ resp.status =
+ EnumOrUnknown::from(Into::<crate::proto::bindings::Status>::into(Ok(())));
+ resp.params = Some(params.into()).into();
}
Ok(params) => {
error!("Received non-Fira session parameters: {:?}", params);
- resp.set_status(ProtoStatus::UNKNOWN);
+ resp.status = ProtoStatus::UNKNOWN.into();
}
Err(e) => {
- resp.set_status(From::<Result<()>>::from(Err(e)));
+ let err: Result<()> = Err(e);
+ resp.status = Into::<crate::proto::bindings::Status>::into(err).into();
}
}
write_to_bytes(&resp)
@@ -258,7 +293,7 @@ impl<C: ProtoUwbServiceCallback> UwbServiceCallback for C {
fn on_service_reset(&mut self, success: bool) {
debug!("UwbService is reset, success: {}", success);
let mut msg = ServiceResetSignal::new();
- msg.set_success(success);
+ msg.success = success;
if let Ok(payload) = write_to_bytes(&msg) {
ProtoUwbServiceCallback::on_service_reset(self, payload);
} else {
@@ -269,7 +304,7 @@ impl<C: ProtoUwbServiceCallback> UwbServiceCallback for C {
fn on_uci_device_status_changed(&mut self, state: DeviceState) {
debug!("UCI device status is changed: {:?}", state);
let mut msg = UciDeviceStatusChangedSignal::new();
- msg.set_state(state.into());
+ msg.state = EnumOrUnknown::new(state.into());
if let Ok(payload) = write_to_bytes(&msg) {
ProtoUwbServiceCallback::on_uci_device_status_changed(self, payload);
} else {
@@ -288,9 +323,9 @@ impl<C: ProtoUwbServiceCallback> UwbServiceCallback for C {
session_id, session_state, reason_code
);
let mut msg = SessionStateChangedSignal::new();
- msg.set_session_id(session_id);
- msg.set_session_state(session_state.into());
- msg.set_reason_code(reason_code.into());
+ msg.session_id = session_id;
+ msg.session_state = EnumOrUnknown::new(session_state.into());
+ msg.reason_code = EnumOrUnknown::new(reason_code.into());
if let Ok(payload) = write_to_bytes(&msg) {
ProtoUwbServiceCallback::on_session_state_changed(self, payload);
} else {
@@ -301,8 +336,8 @@ impl<C: ProtoUwbServiceCallback> UwbServiceCallback for C {
fn on_range_data_received(&mut self, session_id: SessionId, range_data: SessionRangeData) {
debug!("Received range data {:?} from Session {:?}", range_data, session_id);
let mut msg = RangeDataReceivedSignal::new();
- msg.set_session_id(session_id);
- msg.set_range_data(range_data.into());
+ msg.session_id = session_id;
+ msg.range_data = Some(range_data.into()).into();
if let Ok(payload) = write_to_bytes(&msg) {
ProtoUwbServiceCallback::on_range_data_received(self, payload);
} else {
@@ -313,9 +348,9 @@ impl<C: ProtoUwbServiceCallback> UwbServiceCallback for C {
fn on_vendor_notification_received(&mut self, gid: u32, oid: u32, payload: Vec<u8>) {
debug!("Received vendor notification: gid={}, oid={}, payload={:?}", gid, oid, payload);
let mut msg = VendorNotificationReceivedSignal::new();
- msg.set_gid(gid);
- msg.set_oid(oid);
- msg.set_payload(payload);
+ msg.gid = gid;
+ msg.oid = oid;
+ msg.payload = payload;
if let Ok(payload) = write_to_bytes(&msg) {
ProtoUwbServiceCallback::on_vendor_notification_received(self, payload);
} else {