summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorBob Wang <ziyiw@google.com>2022-04-01 16:29:59 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2022-04-01 16:29:59 +0000
commita0476c28da46f1214f33f49da36f668408bc359b (patch)
treeef261bec89e10e12c7db0bde2707d65b6d9da0f8 /src
parent7f9c7c33cdc19824e5f294246b2b2fd017c9f7c3 (diff)
parent10fd6cd3630149e239d30c5696885f0daf55e7ca (diff)
downloaduwb-a0476c28da46f1214f33f49da36f668408bc359b.tar.gz
Merge "Handle error for invalid input." into tm-dev
Diffstat (limited to 'src')
-rw-r--r--src/rust/error.rs2
-rw-r--r--src/rust/uci/mod.rs6
-rw-r--r--src/rust/uci/uci_hmsgs.rs32
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)?,
+ })
}