diff options
author | Bob Wang <ziyiw@google.com> | 2022-04-01 16:29:59 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2022-04-01 16:29:59 +0000 |
commit | a0476c28da46f1214f33f49da36f668408bc359b (patch) | |
tree | ef261bec89e10e12c7db0bde2707d65b6d9da0f8 /src | |
parent | 7f9c7c33cdc19824e5f294246b2b2fd017c9f7c3 (diff) | |
parent | 10fd6cd3630149e239d30c5696885f0daf55e7ca (diff) | |
download | uwb-a0476c28da46f1214f33f49da36f668408bc359b.tar.gz |
Merge "Handle error for invalid input." into tm-dev
Diffstat (limited to 'src')
-rw-r--r-- | src/rust/error.rs | 2 | ||||
-rw-r--r-- | src/rust/uci/mod.rs | 6 | ||||
-rw-r--r-- | src/rust/uci/uci_hmsgs.rs | 32 |
3 files changed, 24 insertions, 16 deletions
diff --git a/src/rust/error.rs b/src/rust/error.rs index fc05b48..df27ba2 100644 --- a/src/rust/error.rs +++ b/src/rust/error.rs @@ -53,6 +53,8 @@ pub enum UwbErr { Exit, #[error("Could not connect to HAL")] HalUnavailable(#[from] binder::StatusCode), + #[error("Could not convert")] + ConvertToEnum(#[from] std::num::TryFromIntError), #[error("Unknown error")] Undefined, } diff --git a/src/rust/uci/mod.rs b/src/rust/uci/mod.rs index d083d44..3dd5307 100644 --- a/src/rust/uci/mod.rs +++ b/src/rust/uci/mod.rs @@ -247,7 +247,7 @@ impl<T: EventManager> Driver<T> { JNICommand::UciGetDeviceInfo => GetDeviceInfoCmdBuilder {}.build().into(), JNICommand::UciGetCapsInfo => GetCapsInfoCmdBuilder {}.build().into(), JNICommand::UciSessionInit(session_id, session_type) => { - uci_hmsgs::build_session_init_cmd(session_id, session_type).build().into() + uci_hmsgs::build_session_init_cmd(session_id, session_type)?.build().into() } JNICommand::UciSessionDeinit(session_id) => { SessionDeinitCmdBuilder { session_id }.build().into() @@ -279,7 +279,7 @@ impl<T: EventManager> Driver<T> { .build() .into(), JNICommand::UciSetCountryCode { ref code } => { - uci_hmsgs::build_set_country_code_cmd(code).build().into() + uci_hmsgs::build_set_country_code_cmd(code)?.build().into() } JNICommand::UciSetAppConfig { session_id, no_of_params, ref app_configs, .. } => { uci_hmsgs::build_set_app_config_cmd(session_id, no_of_params, app_configs)? @@ -295,7 +295,7 @@ impl<T: EventManager> Driver<T> { uci_hmsgs::build_uci_vendor_cmd_packet(gid, oid, payload)? } JNICommand::UciDeviceReset { reset_config } => { - uci_hmsgs::build_device_reset_cmd(reset_config).build().into() + uci_hmsgs::build_device_reset_cmd(reset_config)?.build().into() } JNICommand::Disable(_graceful) => { self.adaptation.hal_close().await?; diff --git a/src/rust/uci/uci_hmsgs.rs b/src/rust/uci/uci_hmsgs.rs index 7c09f9c..57e9953 100644 --- a/src/rust/uci/uci_hmsgs.rs +++ b/src/rust/uci/uci_hmsgs.rs @@ -26,15 +26,18 @@ use uwb_uci_packets::{ UciVendor_F_CommandBuilder, }; -pub fn build_session_init_cmd(session_id: u32, session_type: u8) -> SessionInitCmdBuilder { - SessionInitCmdBuilder { +pub fn build_session_init_cmd( + session_id: u32, + session_type: u8, +) -> Result<SessionInitCmdBuilder, UwbErr> { + Ok(SessionInitCmdBuilder { session_id, - session_type: SessionType::from_u8(session_type).expect("invalid session type"), - } + session_type: SessionType::from_u8(session_type).ok_or(UwbErr::InvalidArgs)?, + }) } -pub fn build_set_country_code_cmd(code: &[u8]) -> AndroidSetCountryCodeCmdBuilder { - AndroidSetCountryCodeCmdBuilder { country_code: code.try_into().expect("invalid country code") } +pub fn build_set_country_code_cmd(code: &[u8]) -> Result<AndroidSetCountryCodeCmdBuilder, UwbErr> { + Ok(AndroidSetCountryCodeCmdBuilder { country_code: code.try_into()? }) } pub fn build_multicast_list_update_cmd( @@ -74,9 +77,12 @@ pub fn build_uci_vendor_cmd_packet( payload: Vec<u8>, ) -> Result<UciCommandPacket, UwbErr> { use GroupId::*; - let group_id: GroupId = GroupId::from_u32(gid).expect("invalid vendor gid"); - let payload = if payload.is_empty() { None } else { Some(Bytes::from(payload)) }; - let opcode: u8 = oid.try_into().expect("invalid vendor oid"); + let group_id: GroupId = GroupId::from_u32(gid).ok_or(UwbErr::InvalidArgs)?; + let payload = match payload.is_empty() { + true => Some(Bytes::from(payload)), + false => None, + }; + let opcode: u8 = oid.try_into()?; let packet: UciCommandPacket = match group_id { VendorReserved9 => UciVendor_9_CommandBuilder { opcode, payload }.build().into(), VendorReservedA => UciVendor_A_CommandBuilder { opcode, payload }.build().into(), @@ -91,8 +97,8 @@ pub fn build_uci_vendor_cmd_packet( Ok(packet) } -pub fn build_device_reset_cmd(reset_config: u8) -> DeviceResetCmdBuilder { - DeviceResetCmdBuilder { - reset_config: ResetConfig::from_u8(reset_config).expect("invalid reset config"), - } +pub fn build_device_reset_cmd(reset_config: u8) -> Result<DeviceResetCmdBuilder, UwbErr> { + Ok(DeviceResetCmdBuilder { + reset_config: ResetConfig::from_u8(reset_config).ok_or(UwbErr::InvalidArgs)?, + }) } |