smaller modules
Some checks failed
Rust/sat-rs/pipeline/pr-main There was a failure building this commit
Some checks failed
Rust/sat-rs/pipeline/pr-main There was a failure building this commit
This commit is contained in:
parent
77c06718c9
commit
47b794e12f
@ -4,6 +4,7 @@ mod logging;
|
|||||||
mod pus;
|
mod pus;
|
||||||
mod requests;
|
mod requests;
|
||||||
mod tmtc;
|
mod tmtc;
|
||||||
|
mod udp;
|
||||||
|
|
||||||
use log::{info, warn};
|
use log::{info, warn};
|
||||||
use satrs_core::hal::std::udp_server::UdpTcServer;
|
use satrs_core::hal::std::udp_server::UdpTcServer;
|
||||||
@ -18,7 +19,8 @@ use crate::pus::scheduler::Pus11Wrapper;
|
|||||||
use crate::pus::test::Service17CustomWrapper;
|
use crate::pus::test::Service17CustomWrapper;
|
||||||
use crate::pus::{PusReceiver, PusTcMpscRouter};
|
use crate::pus::{PusReceiver, PusTcMpscRouter};
|
||||||
use crate::requests::{Request, RequestWithToken};
|
use crate::requests::{Request, RequestWithToken};
|
||||||
use crate::tmtc::{PusTcSource, TcArgs, TcStore, TmArgs, TmFunnel, TmtcTask, UdpTmtcServer};
|
use crate::tmtc::{PusTcSource, TcArgs, TcStore, TmArgs, TmFunnel, TmtcTask};
|
||||||
|
use crate::udp::UdpTmtcServer;
|
||||||
use satrs_core::event_man::{
|
use satrs_core::event_man::{
|
||||||
EventManagerWithMpscQueue, MpscEventReceiver, MpscEventU32SendProvider, SendEventProvider,
|
EventManagerWithMpscQueue, MpscEventReceiver, MpscEventU32SendProvider, SendEventProvider,
|
||||||
};
|
};
|
||||||
|
@ -61,11 +61,6 @@ pub struct TmFunnel {
|
|||||||
pub tm_server_tx: Sender<StoreAddr>,
|
pub tm_server_tx: Sender<StoreAddr>,
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct UdpTmtcServer {
|
|
||||||
pub udp_tc_server: UdpTcServer<CcsdsError<MpscStoreAndSendError>>,
|
|
||||||
pub tm_rx: Receiver<StoreAddr>,
|
|
||||||
pub tm_store: SharedPool,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
pub struct PusTcSource {
|
pub struct PusTcSource {
|
||||||
@ -152,64 +147,3 @@ impl TmtcTask {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl UdpTmtcServer {
|
|
||||||
pub fn periodic_operation(&mut self) {
|
|
||||||
while self.poll_tc_server() {}
|
|
||||||
if let Some(recv_addr) = self.udp_tc_server.last_sender() {
|
|
||||||
self.send_tm_to_udp_client(&recv_addr);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn poll_tc_server(&mut self) -> bool {
|
|
||||||
match self.udp_tc_server.try_recv_tc() {
|
|
||||||
Ok(_) => true,
|
|
||||||
Err(e) => match e {
|
|
||||||
ReceiveResult::ReceiverError(e) => match e {
|
|
||||||
CcsdsError::ByteConversionError(e) => {
|
|
||||||
warn!("packet error: {e:?}");
|
|
||||||
true
|
|
||||||
}
|
|
||||||
CcsdsError::CustomError(e) => {
|
|
||||||
warn!("mpsc store and send error {e:?}");
|
|
||||||
true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ReceiveResult::IoError(e) => {
|
|
||||||
warn!("IO error {e}");
|
|
||||||
false
|
|
||||||
}
|
|
||||||
ReceiveResult::NothingReceived => false,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn send_tm_to_udp_client(&mut self, recv_addr: &SocketAddr) {
|
|
||||||
while let Ok(addr) = self.tm_rx.try_recv() {
|
|
||||||
let store_lock = self.tm_store.write();
|
|
||||||
if store_lock.is_err() {
|
|
||||||
warn!("Locking TM store failed");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
let mut store_lock = store_lock.unwrap();
|
|
||||||
let pg = store_lock.read_with_guard(addr);
|
|
||||||
let read_res = pg.read();
|
|
||||||
if read_res.is_err() {
|
|
||||||
warn!("Error reading TM pool data");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
let buf = read_res.unwrap();
|
|
||||||
if buf.len() > 9 {
|
|
||||||
let service = buf[7];
|
|
||||||
let subservice = buf[8];
|
|
||||||
info!("Sending PUS TM[{service},{subservice}]")
|
|
||||||
} else {
|
|
||||||
info!("Sending PUS TM");
|
|
||||||
}
|
|
||||||
let result = self.udp_tc_server.socket.send_to(buf, recv_addr);
|
|
||||||
if let Err(e) = result {
|
|
||||||
warn!("Sending TM with UDP socket failed: {e}")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
76
satrs-example/src/udp.rs
Normal file
76
satrs-example/src/udp.rs
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
use std::{net::SocketAddr, sync::mpsc::Receiver};
|
||||||
|
|
||||||
|
use log::{info, warn};
|
||||||
|
use satrs_core::{
|
||||||
|
hal::std::udp_server::{ReceiveResult, UdpTcServer},
|
||||||
|
pool::{SharedPool, StoreAddr},
|
||||||
|
tmtc::CcsdsError,
|
||||||
|
};
|
||||||
|
|
||||||
|
use crate::tmtc::MpscStoreAndSendError;
|
||||||
|
|
||||||
|
pub struct UdpTmtcServer {
|
||||||
|
pub udp_tc_server: UdpTcServer<CcsdsError<MpscStoreAndSendError>>,
|
||||||
|
pub tm_rx: Receiver<StoreAddr>,
|
||||||
|
pub tm_store: SharedPool,
|
||||||
|
}
|
||||||
|
impl UdpTmtcServer {
|
||||||
|
pub fn periodic_operation(&mut self) {
|
||||||
|
while self.poll_tc_server() {}
|
||||||
|
if let Some(recv_addr) = self.udp_tc_server.last_sender() {
|
||||||
|
self.send_tm_to_udp_client(&recv_addr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn poll_tc_server(&mut self) -> bool {
|
||||||
|
match self.udp_tc_server.try_recv_tc() {
|
||||||
|
Ok(_) => true,
|
||||||
|
Err(e) => match e {
|
||||||
|
ReceiveResult::ReceiverError(e) => match e {
|
||||||
|
CcsdsError::ByteConversionError(e) => {
|
||||||
|
warn!("packet error: {e:?}");
|
||||||
|
true
|
||||||
|
}
|
||||||
|
CcsdsError::CustomError(e) => {
|
||||||
|
warn!("mpsc store and send error {e:?}");
|
||||||
|
true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ReceiveResult::IoError(e) => {
|
||||||
|
warn!("IO error {e}");
|
||||||
|
false
|
||||||
|
}
|
||||||
|
ReceiveResult::NothingReceived => false,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn send_tm_to_udp_client(&mut self, recv_addr: &SocketAddr) {
|
||||||
|
while let Ok(addr) = self.tm_rx.try_recv() {
|
||||||
|
let store_lock = self.tm_store.write();
|
||||||
|
if store_lock.is_err() {
|
||||||
|
warn!("Locking TM store failed");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let mut store_lock = store_lock.unwrap();
|
||||||
|
let pg = store_lock.read_with_guard(addr);
|
||||||
|
let read_res = pg.read();
|
||||||
|
if read_res.is_err() {
|
||||||
|
warn!("Error reading TM pool data");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
let buf = read_res.unwrap();
|
||||||
|
if buf.len() > 9 {
|
||||||
|
let service = buf[7];
|
||||||
|
let subservice = buf[8];
|
||||||
|
info!("Sending PUS TM[{service},{subservice}]")
|
||||||
|
} else {
|
||||||
|
info!("Sending PUS TM");
|
||||||
|
}
|
||||||
|
let result = self.udp_tc_server.socket.send_to(buf, recv_addr);
|
||||||
|
if let Err(e) = result {
|
||||||
|
warn!("Sending TM with UDP socket failed: {e}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user