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