From d79f0b5ceb041c5762f1cc625f21453c42ec89fd Mon Sep 17 00:00:00 2001 From: Robin Mueller Date: Wed, 21 Jan 2026 15:53:50 +0100 Subject: [PATCH] test event working --- satrs-example/client/src/main.rs | 35 ++++++++++- satrs-example/models/src/control.rs | 2 + satrs-example/src/acs/mgm.rs | 2 +- satrs-example/src/bin/simpleclient.rs | 87 --------------------------- 4 files changed, 35 insertions(+), 91 deletions(-) delete mode 100644 satrs-example/src/bin/simpleclient.rs diff --git a/satrs-example/client/src/main.rs b/satrs-example/client/src/main.rs index d53f56a..2257837 100644 --- a/satrs-example/client/src/main.rs +++ b/satrs-example/client/src/main.rs @@ -1,7 +1,7 @@ use anyhow::bail; use arbitrary_int::u11; use clap::Parser as _; -use models::{Apid, TcHeader}; +use models::{Apid, MessageType, TcHeader}; use satrs_example::config::{OBSW_SERVER_ADDR, SERVER_PORT}; use spacepackets::{CcsdsPacketIdAndPsc, SpacePacketHeader}; use std::{ @@ -17,6 +17,8 @@ use std::{ pub struct Cli { #[arg(short, long)] ping: bool, + #[arg(short, long)] + test_event: bool, } fn setup_logger(level: log::LevelFilter) -> Result<(), fern::InitError> { @@ -60,6 +62,20 @@ fn main() -> anyhow::Result<()> { let request_packet = request.to_vec(); client.send_to(&request_packet, addr).unwrap(); } + if cli.test_event { + let request = models::ccsds::CcsdsTcPacketOwned::new_with_request( + SpacePacketHeader::new_from_apid(u11::new(Apid::Tmtc as u16)), + TcHeader::new(models::ComponentId::Controller, models::MessageType::Event), + models::control::request::Request::TestEvent, + ); + let sent_tc_id = CcsdsPacketIdAndPsc::new_from_ccsds_packet(&request.sp_header); + log::info!( + "sending event request with TC ID {:#010x}", + sent_tc_id.raw() + ); + let request_packet = request.to_vec(); + client.send_to(&request_packet, addr).unwrap(); + } let mut recv_buf: Box<[u8; 2048]> = Box::new([0; 2048]); loop { @@ -106,8 +122,21 @@ fn handle_raw_tm_packet(data: &[u8]) -> anyhow::Result<()> { tm_header.sender_id, ); } + if tm_header.message_type == MessageType::Event { + let response = postcard::from_bytes::(remainder); + log::info!( + "Received event from {:?}: {:?}", + tm_header.sender_id, + response.unwrap() + ); + return Ok(()); + } match tm_header.sender_id { - models::ComponentId::Pcdu => todo!(), + models::ComponentId::Pcdu => { + let response = + postcard::from_bytes::(remainder); + log::info!("Received response from PCDU: {:?}", response.unwrap()); + } models::ComponentId::Controller => { let response = postcard::from_bytes::(remainder); @@ -122,7 +151,7 @@ fn handle_raw_tm_packet(data: &[u8]) -> anyhow::Result<()> { models::ComponentId::UdpServer => todo!(), models::ComponentId::TcpServer => todo!(), models::ComponentId::Ground => todo!(), - models::ComponentId::EventManager => todo!(), + models::ComponentId::EventManager => {} } } Err(_) => todo!(), diff --git a/satrs-example/models/src/control.rs b/satrs-example/models/src/control.rs index fe1926e..a56743f 100644 --- a/satrs-example/models/src/control.rs +++ b/satrs-example/models/src/control.rs @@ -25,12 +25,14 @@ pub mod response { #[derive(serde::Serialize, serde::Deserialize, Clone, Copy, Debug)] pub enum Response { Ok, + Event(super::Event), } impl Message for Response { fn message_type(&self) -> crate::MessageType { match self { Response::Ok => crate::MessageType::Verification, + Response::Event(_event) => crate::MessageType::Event, } } } diff --git a/satrs-example/src/acs/mgm.rs b/satrs-example/src/acs/mgm.rs index 6fae02f..c15e356 100644 --- a/satrs-example/src/acs/mgm.rs +++ b/satrs-example/src/acs/mgm.rs @@ -208,7 +208,7 @@ impl MgmHandlerLis3Mdl { } mgm::request::Request::Hk(hk_request) => { self.handle_hk_request(Some(tc_id), &hk_request) - } + } //mgm::request::Request::Mo } } Err(e) => { diff --git a/satrs-example/src/bin/simpleclient.rs b/satrs-example/src/bin/simpleclient.rs deleted file mode 100644 index 60a31a7..0000000 --- a/satrs-example/src/bin/simpleclient.rs +++ /dev/null @@ -1,87 +0,0 @@ -use arbitrary_int::u11; -use satrs::pus::verification::RequestId; -use satrs::spacepackets::ecss::tc::PusTcCreator; -use satrs::spacepackets::ecss::tm::PusTmReader; -use satrs::spacepackets::ecss::{CreatorConfig, MessageTypeId}; -use satrs::spacepackets::SpHeader; -use satrs_example::config::{OBSW_SERVER_ADDR, SERVER_PORT}; -use std::net::{IpAddr, SocketAddr, UdpSocket}; -use std::time::Duration; - -fn main() { - let mut buf = [0; 32]; - let addr = SocketAddr::new(IpAddr::V4(OBSW_SERVER_ADDR), SERVER_PORT); - let pus_tc = PusTcCreator::new_simple( - SpHeader::new_from_apid(u11::new(0x02)), - MessageTypeId::new(17, 1), - &[], - CreatorConfig::default(), - ); - let client = UdpSocket::bind("127.0.0.1:7302").expect("Connecting to UDP server failed"); - let tc_req_id = RequestId::new(&pus_tc); - println!("Packing and sending PUS ping command TC[17,1] with request ID {tc_req_id}"); - let size = pus_tc - .write_to_bytes(&mut buf) - .expect("Creating PUS TC failed"); - client - .send_to(&buf[0..size], addr) - .unwrap_or_else(|_| panic!("Sending to {addr:?} failed")); - client - .set_read_timeout(Some(Duration::from_secs(2))) - .expect("Setting read timeout failed"); - loop { - let res = client.recv(&mut buf); - match res { - Ok(_len) => { - let pus_tm = PusTmReader::new(&buf, 7).expect("Parsing PUS TM failed"); - if pus_tm.service_type_id() == 17 && pus_tm.message_subtype_id() == 2 { - println!("Received PUS Ping Reply TM[17,2]") - } else if pus_tm.service_type_id() == 1 { - if pus_tm.source_data().is_empty() { - println!("Invalid verification TM, no source data"); - } - let src_data = pus_tm.source_data(); - if src_data.len() < 4 { - println!("Invalid verification TM source data, less than 4 bytes") - } - let req_id = RequestId::from_bytes(src_data).unwrap(); - let subtype_id = pus_tm.message_subtype_id(); - if subtype_id == 1 { - println!("Received TM[1,1] acceptance success for request ID {req_id}") - } else if subtype_id == 2 { - println!("Received TM[1,2] acceptance failure for request ID {req_id}") - } else if subtype_id == 3 { - println!("Received TM[1,3] start success for request ID {req_id}") - } else if subtype_id == 4 { - println!("Received TM[1,2] start failure for request ID {req_id}") - } else if subtype_id == 5 { - println!("Received TM[1,5] step success for request ID {req_id}") - } else if subtype_id == 6 { - println!("Received TM[1,6] step failure for request ID {req_id}") - } else if subtype_id == 7 { - println!("Received TM[1,7] completion success for request ID {req_id}") - } else if subtype_id == 8 { - println!("Received TM[1,8] completion failure for request ID {req_id}"); - } - } else { - println!( - "Received TM[{}, {}] with {} bytes", - pus_tm.service_type_id(), - pus_tm.message_subtype_id(), - size - ); - } - } - Err(ref e) - if e.kind() == std::io::ErrorKind::WouldBlock - || e.kind() == std::io::ErrorKind::TimedOut => - { - println!("No reply received for 2 seconds"); - break; - } - _ => { - println!("UDP receive error {:?}", res.unwrap_err()); - } - } - } -}