diff --git a/pico/app/src/main.rs b/pico/app/src/main.rs index 300e840..83edb17 100644 --- a/pico/app/src/main.rs +++ b/pico/app/src/main.rs @@ -24,7 +24,7 @@ use pico_lib::at::PicoHW; use pico_lib::poro; use pico_lib::urc; use pico_lib::utils::send_command_logged; -use pico_lib::{at, battery, call, network, sms}; +use pico_lib::{at, battery, call, gps, gsm, network, sms}; extern crate alloc; @@ -154,6 +154,16 @@ async fn main(spawner: Spawner) { Err(_) => (), } + match gps::get_gps_location(&mut client, &mut pico, 30).await { + Some(v) => log::info!("GPS location: {:?}", v), + None => (), + } + + match gsm::get_gsm_location(&mut client, &mut pico, 30, "online").await { + Some(v) => log::info!("GSM location: {:?}", v), + None => (), + } + call::call_number( &mut client, &mut pico, diff --git a/pico/pico-lib/src/location.rs b/pico/pico-lib/src/location.rs index 865408b..d62803f 100644 --- a/pico/pico-lib/src/location.rs +++ b/pico/pico-lib/src/location.rs @@ -1,3 +1,5 @@ +use crate::{gps::get_gps_location, gsm::get_gsm_location}; + #[derive(Clone, Debug, PartialEq)] pub struct Location { pub latitude: f64, @@ -5,3 +7,15 @@ pub struct Location { pub accuracy: f64, pub timestamp: i64, } + +// TODO how to abstract this in rust, a Locator trait Vec +pub async fn get_location( + client: &mut T, + pico: &mut U, + max_retries: u8, + apn: &str, +) -> Option { + return get_gps_location(client, pico, max_retries) + .await + .or(get_gsm_location(client, pico, max_retries, apn).await); +}