v0.2:重写项目。 #6

Merged
Ivan merged 20 commits from v0.2 into master 2022-09-12 11:58:32 +08:00
4 changed files with 4 additions and 77 deletions
Showing only changes of commit 5058005031 - Show all commits

View File

@ -22,7 +22,6 @@ env_logger = "0.9.0"
esp-idf-svc = "0.42.1" esp-idf-svc = "0.42.1"
esp-idf-sys = { version = "0.31.6", features = ["binstart"] } esp-idf-sys = { version = "0.31.6", features = ["binstart"] }
log = "0.4.17" log = "0.4.17"
sntpc = "0.3.1"
[build-dependencies] [build-dependencies]

View File

@ -1,6 +1,4 @@
use std::{env, thread::sleep, time::{Duration, UNIX_EPOCH}}; use std::{env, thread::sleep, time::{Duration}};
use anyhow::{bail, Ok, Result};
use embedded_svc::mqtt::client::{Publish, QoS}; use embedded_svc::mqtt::client::{Publish, QoS};
use esp_idf_sys as _; use esp_idf_sys as _;
use log::*; use log::*;
@ -22,7 +20,7 @@ fn main() {
println!("Hello, world!"); println!("Hello, world!");
let wifi = Internet::new().unwrap(); let _wifi = Internet::new().unwrap();
let mut mq = MessageQueue::new(); let mut mq = MessageQueue::new();
mq.init().unwrap(); mq.init().unwrap();
@ -34,6 +32,7 @@ fn main() {
sleep(Duration::from_millis(1000)); sleep(Duration::from_millis(1000));
if let Some(ref mut mq_client) = mq.client { if let Some(ref mut mq_client) = mq.client {
let timestamps = time.get_time().as_millis(); let timestamps = time.get_time().as_millis();
info!("timestamps {}", timestamps); info!("timestamps {}", timestamps);
mq_client.publish( mq_client.publish(
"ups-0.2/heartbeat", "ups-0.2/heartbeat",

View File

@ -3,19 +3,15 @@ use embedded_svc::sys_time::SystemTime;
use esp_idf_svc::sntp::{self, EspSntp}; use esp_idf_svc::sntp::{self, EspSntp};
use esp_idf_svc::systime::EspSystemTime; use esp_idf_svc::systime::EspSystemTime;
use log::{warn, info}; use log::{warn, info};
use sntpc::{Error, NtpContext, NtpResult, NtpTimestampGenerator, NtpUdpSocket, Result};
use std::net::{SocketAddr, ToSocketAddrs, UdpSocket};
use std::time::{Duration}; use std::time::{Duration};
pub struct Time { pub struct Time {
result: Option<NtpResult>,
sntp: Option<Box<EspSntp>>, sntp: Option<Box<EspSntp>>,
} }
impl Time { impl Time {
pub fn new () -> Time { pub fn new () -> Time {
return Time { return Time {
result: None,
sntp: None sntp: None
} }
} }
@ -35,71 +31,4 @@ impl Time {
EspSystemTime {}.now() EspSystemTime {}.now()
} }
// pub fn sync(&mut self) -> anyhow::Result<()> {
// let mut error = None;
// for _ in 0..10 {
// let socket = UdpSocket::bind("0.0.0.0:0").expect("Unable to crate UDP socket");
// socket
// .set_read_timeout(Some(Duration::from_secs(2)))
// .expect("Unable to set UDP socket read timeout");
// let sock_wrapper = UdpSocketWrapper(socket);
// let ntp_context = NtpContext::new(StdTimestampGen::default());
// let result = sntpc::get_time("pool.ntp.org:123", sock_wrapper, ntp_context);
// match result {
// Ok(res_time) => {
// println!("Got time: {}.{}", res_time.sec(), res_time.sec_fraction());
// self.result = Some(res_time);
// return anyhow::Ok(())
// }
// Err(err) => {
// error = Some(err);
// warn!("fetch dateTime from ntp failed: {:?}", err);
// },
// }
// }
// bail!("fetch dateTime from ntp failed: {:?}", error)
// }
}
#[derive(Copy, Clone, Default)]
struct StdTimestampGen {
duration: Duration,
}
impl NtpTimestampGenerator for StdTimestampGen {
fn init(&mut self) {
self.duration = std::time::SystemTime::now()
.duration_since(std::time::SystemTime::UNIX_EPOCH)
.unwrap();
}
fn timestamp_sec(&self) -> u64 {
self.duration.as_secs()
}
fn timestamp_subsec_micros(&self) -> u32 {
self.duration.subsec_micros()
}
}
#[derive(Debug)]
struct UdpSocketWrapper(UdpSocket);
impl NtpUdpSocket for UdpSocketWrapper {
fn send_to<T: ToSocketAddrs>(&self, buf: &[u8], addr: T) -> Result<usize> {
match self.0.send_to(buf, addr) {
Ok(usize) => Ok(usize),
Err(_) => Err(Error::Network),
}
}
fn recv_from(&self, buf: &mut [u8]) -> Result<(usize, SocketAddr)> {
match self.0.recv_from(buf) {
Ok((size, addr)) => Ok((size, addr)),
Err(_) => Err(Error::Network),
}
}
} }

View File

@ -33,7 +33,7 @@ impl Internet {
fn connect_ap( fn connect_ap(
&mut self, &mut self,
) -> Result<()> { ) -> Result<()> {
const SSID: &str = "Ivan Li"; const SSID: &str = "Ivan";
const PASSWORD: &str = "ivanli.cc"; const PASSWORD: &str = "ivanli.cc";
info!("Wifi created, about to scan"); info!("Wifi created, about to scan");