initial comms

This commit is contained in:
2025-10-25 12:23:23 -07:00
parent fd63bdc0c9
commit b067ae5cec
17 changed files with 536 additions and 356 deletions

50
ground/src/lib.rs Normal file
View 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(())
}

View File

@@ -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());
}
}
}