diff --git a/Cargo.lock b/Cargo.lock index b24d0f7..715fde2 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -673,6 +673,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6764c3b5dd454e283a30e6dfe78e9b31096d9e32036b5d1eaac7a6119ccb9a24" dependencies = [ "cobs", + "defmt", "serde", ] @@ -1005,6 +1006,7 @@ dependencies = [ name = "water-pod-common" version = "0.1.0" dependencies = [ + "defmt", "jiff", "postcard", "serde", diff --git a/src/main.rs b/src/main.rs index 263cfa2..0f4233c 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,8 +1,8 @@ use std::time::Duration; use bluer::l2cap::{SocketAddr, Stream}; -use jiff::Timestamp; use tokio::io::{AsyncReadExt, AsyncWriteExt}; +use water_pod_common::{Request, Response}; mod scan; @@ -33,14 +33,17 @@ async fn main() -> Result<(), std::io::Error> { let mut buf = vec![0; 251]; - if let Ok(_) = stream.read(&mut buf).await { - buf.clear(); - let now1 = Timestamp::now().as_millisecond().to_le_bytes(); - buf.extend_from_slice(&now1); + log::info!("LISTENING FROM: {}", device.address()); + if let Ok(read) = stream.read(&mut buf).await + && let Ok(Request::TimeSync(mut sync)) = Request::from_bytes(&buf[..read]) + { + sync.set_t1(); tokio::time::sleep(Duration::from_millis(1)).await; - let now2 = Timestamp::now().as_millisecond().to_le_bytes(); - buf.extend_from_slice(&now2); - stream.write(&buf[..]).await.ok(); + sync.set_t2(); + let resp = Response::TimeSync(sync); + let resp = resp.to_bytes(&mut buf).unwrap(); + + stream.write(resp).await.ok(); log::info!("SUCCESSFUL SYNC with {}", device.address()); } diff --git a/water-pod-common/Cargo.toml b/water-pod-common/Cargo.toml index 69e4869..353976a 100644 --- a/water-pod-common/Cargo.toml +++ b/water-pod-common/Cargo.toml @@ -8,7 +8,9 @@ edition.workspace = true serde = { version = "1", default-features = false } jiff = { version = "0.2.32", default-features = false } postcard = { version = "1", default-features = false } +defmt = { version = "1.0", optional = true } [features] default = ["server"] server = ["jiff/std"] +defmt = ["dep:defmt", "postcard/use-defmt", "jiff/defmt"] diff --git a/water-pod-common/src/lib.rs b/water-pod-common/src/lib.rs index 7f5dac2..a0f4b13 100644 --- a/water-pod-common/src/lib.rs +++ b/water-pod-common/src/lib.rs @@ -3,11 +3,13 @@ use jiff::{SignedDuration, Timestamp}; #[derive(Debug, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "defmt", defmt::Format)] pub enum Request { TimeSync(TimeSyncMs), } #[derive(Debug, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "defmt", defmt::Format)] pub enum Response { TimeSync(TimeSyncMs), } @@ -33,6 +35,7 @@ impl Response { } #[derive(Debug, serde::Serialize, serde::Deserialize)] +#[cfg_attr(feature = "defmt", defmt::Format)] pub struct TimeSyncMs { t0: i64, t1: i64,