2022-07-06 20:33:43 +02:00
|
|
|
use anyhow;
|
|
|
|
|
|
|
|
use std::sync::mpsc::SyncSender;
|
|
|
|
use std::thread;
|
|
|
|
use std::time::Duration;
|
|
|
|
|
2022-07-11 16:17:17 +02:00
|
|
|
use esp_idf_hal::prelude::*;
|
|
|
|
use esp_idf_hal::serial;
|
|
|
|
|
|
|
|
use ublox::*;
|
|
|
|
|
2022-07-06 20:33:43 +02:00
|
|
|
use crate::modem::Msg;
|
|
|
|
|
2022-07-11 16:17:17 +02:00
|
|
|
pub fn main<T: Sync + Send>(
|
|
|
|
rx: esp_idf_hal::gpio::Gpio32<T>,
|
|
|
|
tx: esp_idf_hal::gpio::Gpio33<T>,
|
|
|
|
uart: serial::UART2,
|
|
|
|
sender: SyncSender<Msg>,
|
|
|
|
) -> Result<(), anyhow::Error> {
|
|
|
|
let serial_pins = serial::Pins {
|
|
|
|
tx,
|
|
|
|
rx,
|
|
|
|
cts: None,
|
|
|
|
rts: None,
|
|
|
|
};
|
|
|
|
let _serial: serial::Serial<serial::UART2, _, _> = serial::Serial::new(
|
|
|
|
uart,
|
|
|
|
serial_pins,
|
|
|
|
serial::config::Config::default().baudrate(Hertz(9600)),
|
|
|
|
)?;
|
|
|
|
|
|
|
|
let mut parser = Parser::default();
|
|
|
|
let mut it = parser.consume(&raw_packet);
|
|
|
|
|
|
|
|
loop {
|
|
|
|
match it.next() {
|
|
|
|
Some(Ok(packet)) => {
|
|
|
|
println!("We've received a &PacketRef, we can handle it ... {:?}", packet);
|
|
|
|
}
|
|
|
|
Some(Err(err)) => {
|
|
|
|
println!("Received a malformed packet {:?}", err);
|
|
|
|
}
|
|
|
|
None => {
|
|
|
|
println!("The internal buffer is now empty");
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-07-06 20:33:43 +02:00
|
|
|
println!("entering GPS sender loop ...");
|
|
|
|
for i in 0..20 {
|
|
|
|
println!("sending GPS message ({}) of 20 ...", i);
|
|
|
|
let _ = sender.send(Msg::Location("{\"lat\": 20.4322, \"long\": 44.5432}".to_string()))?;
|
|
|
|
thread::sleep(Duration::from_millis(2000));
|
|
|
|
}
|
|
|
|
Ok(())
|
|
|
|
}
|