xref: /aosp_15_r20/hardware/interfaces/uwb/aidl/default/src/service.rs (revision 4d7e907c777eeecc4c5bd7cf640a754fac206ff7)
1 use android_hardware_uwb::aidl::android::hardware::uwb::IUwb::{self, IUwb as _};
2 use android_hardware_uwb::binder;
3 
4 use std::env;
5 use std::panic;
6 
7 use log::LevelFilter;
8 
9 mod uwb;
10 mod uwb_chip;
11 
main() -> anyhow::Result<()>12 fn main() -> anyhow::Result<()> {
13     logger::init(
14         logger::Config::default()
15             .with_max_level(LevelFilter::Debug)
16             .with_tag_on_device("android.hardware.uwb"),
17     );
18 
19     // Redirect panic messages to logcat.
20     panic::set_hook(Box::new(|panic_info| {
21         log::error!("{}", panic_info);
22     }));
23 
24     log::info!("UWB HAL starting up");
25 
26     let rt = tokio::runtime::Runtime::new()?;
27 
28     let chips = env::args()
29         .skip(1) // Skip binary name
30         .enumerate()
31         .map(|(i, arg)| rt.block_on(uwb_chip::UwbChip::new(i.to_string(), arg)));
32 
33     binder::add_service(
34         &format!("{}/default", IUwb::BpUwb::get_descriptor()),
35         IUwb::BnUwb::new_binder(
36             uwb::Uwb::from_chips(chips, rt.handle().clone()),
37             binder::BinderFeatures::default(),
38         )
39         .as_binder(),
40     )?;
41 
42     binder::ProcessState::join_thread_pool();
43     Ok(())
44 }
45