diff --git a/sphinx-key/src/conn/sntp.rs b/sphinx-key/src/conn/sntp.rs index 8561872..c62c4a7 100644 --- a/sphinx-key/src/conn/sntp.rs +++ b/sphinx-key/src/conn/sntp.rs @@ -1,16 +1,21 @@ +use anyhow::{anyhow, Result}; use esp_idf_svc::sntp::EspSntp; use esp_idf_svc::sntp::SyncStatus::Completed; use std::thread; use std::time::Duration; -pub fn sync_time() { - let sntp = EspSntp::new_default().unwrap(); +pub fn sync_time_timeout() -> Result<()> { + let mut counter = 0; + let sntp = EspSntp::new_default()?; loop { let status = sntp.get_sync_status(); println!("SNTP status {:?}", status); if status == Completed { - break; + break Ok(()); + } else if counter == 30 { + break Err(anyhow!("SNTP setup timed out")); } + counter = counter + 1; thread::sleep(Duration::from_secs(1)); } } diff --git a/sphinx-key/src/main.rs b/sphinx-key/src/main.rs index e27b14e..08d52d4 100644 --- a/sphinx-key/src/main.rs +++ b/sphinx-key/src/main.rs @@ -87,7 +87,11 @@ fn main() -> Result<()> { }; led_tx.send(Status::SyncingTime).unwrap(); - conn::sntp::sync_time(); + if let Err(e) = conn::sntp::sync_time_timeout() { + log::error!("Could not setup sntp: {}", e); + log::info!("Restarting esp!"); + unsafe { esp_idf_sys::esp_restart() }; + } let now = SystemTime::now() .duration_since(SystemTime::UNIX_EPOCH) .unwrap();