initial comms
This commit is contained in:
@@ -4,3 +4,7 @@ version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
[dependencies]
|
||||
anyhow = "1.0.100"
|
||||
nautilus_common = { path = "../common" }
|
||||
log = "0.4.28"
|
||||
ciborium = { version = "0.2.2" }
|
||||
|
||||
50
ground/src/lib.rs
Normal file
50
ground/src/lib.rs
Normal file
@@ -0,0 +1,50 @@
|
||||
use anyhow::Result;
|
||||
use log::{error, info};
|
||||
use nautilus_common::add_ctrlc_handler;
|
||||
use nautilus_common::command::Command;
|
||||
use nautilus_common::telemetry::Telemetry;
|
||||
use nautilus_common::udp::{UdpRecvCborError, UdpSocketExt};
|
||||
use std::io::Cursor;
|
||||
use std::net::{IpAddr, Ipv4Addr, SocketAddr, UdpSocket};
|
||||
use std::sync::atomic::{AtomicBool, Ordering};
|
||||
use std::sync::Arc;
|
||||
use std::time::Duration;
|
||||
|
||||
pub fn run() -> Result<()> {
|
||||
info!(
|
||||
"Project Nautilus Ground Software {}",
|
||||
env!("CARGO_PKG_VERSION")
|
||||
);
|
||||
|
||||
let running = Arc::new(AtomicBool::new(true));
|
||||
|
||||
add_ctrlc_handler(running.clone())?;
|
||||
|
||||
let mut flight_addr = None;
|
||||
let bind_addr = SocketAddr::new(IpAddr::V4(Ipv4Addr::UNSPECIFIED), 14000);
|
||||
let udp = UdpSocket::bind(bind_addr)?;
|
||||
udp.set_read_timeout(Some(Duration::from_millis(100)))?;
|
||||
|
||||
let mut buffer = Cursor::new([0u8; 512]);
|
||||
while running.load(Ordering::Relaxed) {
|
||||
match udp.recv_cbor::<Telemetry, _>(&mut buffer) {
|
||||
Ok((tlm, addr)) => {
|
||||
flight_addr = Some(addr);
|
||||
info!("{tlm:?}");
|
||||
}
|
||||
Err(UdpRecvCborError::NoData) => {
|
||||
// NoOp
|
||||
}
|
||||
Err(err) => {
|
||||
error!("Rx error: {err}");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(flight_addr) = flight_addr {
|
||||
let cmd = Command::Shutdown;
|
||||
udp.send_cbor(&cmd, &mut buffer, &flight_addr)?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -1,3 +1,13 @@
|
||||
use log::error;
|
||||
use nautilus_common::logger::setup_logger;
|
||||
use nautilus_ground::run;
|
||||
|
||||
fn main() {
|
||||
println!("Hello, world!");
|
||||
setup_logger(env!("CARGO_PKG_NAME")).expect("Failed to setup logger");
|
||||
match run() {
|
||||
Ok(_) => {}
|
||||
Err(err) => {
|
||||
error!("An unhandled error occurred: {}\n\n{}", err, err.backtrace());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user