use android_hardware_uwb::aidl::android::hardware::uwb::IUwb::{self, IUwb as _}; use android_hardware_uwb::binder; use tokio::runtime::Runtime; use std::env; use std::panic; use log::LevelFilter; mod uwb; mod uwb_chip; fn main() -> anyhow::Result<()> { logger::init( logger::Config::default() .with_max_level(LevelFilter::Debug) .with_tag_on_device("android.hardware.uwb"), ); // Redirect panic messages to logcat. panic::set_hook(Box::new(|panic_info| { log::error!("{}", panic_info); })); log::info!("UWB HAL starting up"); // Create the tokio runtime let rt = Runtime::new()?; let chips = env::args() .skip(1) // Skip binary name .enumerate() .map(|(i, arg)| uwb_chip::UwbChip::new(i.to_string(), arg)); binder::add_service( &format!("{}/default", IUwb::BpUwb::get_descriptor()), IUwb::BnUwb::new_binder( uwb::Uwb::from_chips(chips, rt.handle().clone()), binder::BinderFeatures::default(), ) .as_binder(), )?; binder::ProcessState::join_thread_pool(); Ok(()) }