xref: /aosp_15_r20/hardware/interfaces/uwb/aidl/default/src/uwb.rs (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
1*4d7e907cSAndroid Build Coastguard Worker use android_hardware_uwb::aidl::android::hardware::uwb::{IUwb, IUwbChip};
2*4d7e907cSAndroid Build Coastguard Worker use android_hardware_uwb::binder;
3*4d7e907cSAndroid Build Coastguard Worker use binder::{Result, Strong};
4*4d7e907cSAndroid Build Coastguard Worker use binder_tokio::TokioRuntime;
5*4d7e907cSAndroid Build Coastguard Worker use tokio::runtime::Handle as TokioHandle;
6*4d7e907cSAndroid Build Coastguard Worker 
7*4d7e907cSAndroid Build Coastguard Worker use crate::uwb_chip;
8*4d7e907cSAndroid Build Coastguard Worker 
9*4d7e907cSAndroid Build Coastguard Worker pub struct Uwb {
10*4d7e907cSAndroid Build Coastguard Worker     chips: Vec<Strong<dyn IUwbChip::IUwbChip>>,
11*4d7e907cSAndroid Build Coastguard Worker }
12*4d7e907cSAndroid Build Coastguard Worker 
13*4d7e907cSAndroid Build Coastguard Worker impl Uwb {
from_chips( chips: impl IntoIterator<Item = uwb_chip::UwbChip>, handle: TokioHandle, ) -> Self14*4d7e907cSAndroid Build Coastguard Worker     pub fn from_chips(
15*4d7e907cSAndroid Build Coastguard Worker         chips: impl IntoIterator<Item = uwb_chip::UwbChip>,
16*4d7e907cSAndroid Build Coastguard Worker         handle: TokioHandle,
17*4d7e907cSAndroid Build Coastguard Worker     ) -> Self {
18*4d7e907cSAndroid Build Coastguard Worker         Self {
19*4d7e907cSAndroid Build Coastguard Worker             chips: chips
20*4d7e907cSAndroid Build Coastguard Worker                 .into_iter()
21*4d7e907cSAndroid Build Coastguard Worker                 .map(|chip| {
22*4d7e907cSAndroid Build Coastguard Worker                     IUwbChip::BnUwbChip::new_async_binder(
23*4d7e907cSAndroid Build Coastguard Worker                         chip,
24*4d7e907cSAndroid Build Coastguard Worker                         TokioRuntime(handle.clone()),
25*4d7e907cSAndroid Build Coastguard Worker                         binder::BinderFeatures::default(),
26*4d7e907cSAndroid Build Coastguard Worker                     )
27*4d7e907cSAndroid Build Coastguard Worker                 })
28*4d7e907cSAndroid Build Coastguard Worker                 .collect(),
29*4d7e907cSAndroid Build Coastguard Worker         }
30*4d7e907cSAndroid Build Coastguard Worker     }
31*4d7e907cSAndroid Build Coastguard Worker }
32*4d7e907cSAndroid Build Coastguard Worker 
33*4d7e907cSAndroid Build Coastguard Worker impl binder::Interface for Uwb {}
34*4d7e907cSAndroid Build Coastguard Worker 
35*4d7e907cSAndroid Build Coastguard Worker impl IUwb::IUwb for Uwb {
getChips(&self) -> Result<Vec<String>>36*4d7e907cSAndroid Build Coastguard Worker     fn getChips(&self) -> Result<Vec<String>> {
37*4d7e907cSAndroid Build Coastguard Worker         log::debug!("getChips");
38*4d7e907cSAndroid Build Coastguard Worker         self.chips.iter().map(|chip| chip.getName()).collect()
39*4d7e907cSAndroid Build Coastguard Worker     }
40*4d7e907cSAndroid Build Coastguard Worker 
getChip(&self, name: &str) -> Result<Strong<dyn IUwbChip::IUwbChip>>41*4d7e907cSAndroid Build Coastguard Worker     fn getChip(&self, name: &str) -> Result<Strong<dyn IUwbChip::IUwbChip>> {
42*4d7e907cSAndroid Build Coastguard Worker         log::debug!("getChip {}", name);
43*4d7e907cSAndroid Build Coastguard Worker         let chip = self
44*4d7e907cSAndroid Build Coastguard Worker             .chips
45*4d7e907cSAndroid Build Coastguard Worker             .iter()
46*4d7e907cSAndroid Build Coastguard Worker             .find(|chip| chip.getName().as_deref() == Ok(name));
47*4d7e907cSAndroid Build Coastguard Worker         if let Some(chip) = chip {
48*4d7e907cSAndroid Build Coastguard Worker             Ok(chip.clone())
49*4d7e907cSAndroid Build Coastguard Worker         } else {
50*4d7e907cSAndroid Build Coastguard Worker             Err(binder::ExceptionCode::ILLEGAL_ARGUMENT.into())
51*4d7e907cSAndroid Build Coastguard Worker         }
52*4d7e907cSAndroid Build Coastguard Worker     }
53*4d7e907cSAndroid Build Coastguard Worker }
54