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