introduce client binary and models lib

This commit is contained in:
Robin Mueller
2026-01-12 16:22:17 +01:00
parent 8029444228
commit f95de5bedd
6 changed files with 53 additions and 66 deletions
+2
View File
@@ -4,6 +4,8 @@ members = [
"satrs",
"satrs-mib",
"satrs-example",
"satrs-example/models",
"satrs-example/client",
"satrs-minisim",
"satrs-shared",
"embedded-examples/embedded-client",
+6
View File
@@ -0,0 +1,6 @@
[package]
name = "client"
version = "0.1.0"
edition = "2024"
[dependencies]
+1
View File
@@ -0,0 +1 @@
fn main() {}
+8
View File
@@ -0,0 +1,8 @@
[package]
name = "models"
version = "0.1.0"
edition = "2024"
[dependencies]
serde = { version = "1", features = ["derive"] }
spacepackets = { version = "0.17" }
+36
View File
@@ -0,0 +1,36 @@
use spacepackets::{CcsdsPacketIdAndPsc, time::cds::CdsTime};
#[derive(serde::Serialize, serde::Deserialize, Clone, Copy, Debug)]
pub enum ComponentId {
Controller,
Scheduler,
Pcdu,
}
#[derive(serde::Serialize, serde::Deserialize, Clone, Copy, Debug)]
pub struct TcHeader {
pub target: ComponentId,
}
#[derive(serde::Serialize, serde::Deserialize, Clone, Copy, Debug)]
pub struct TmHeader {
pub tc_id: Option<CcsdsPacketIdAndPsc>,
pub timestamp: CdsTime,
}
pub mod request {
#[derive(serde::Serialize, serde::Deserialize, Clone, Copy, Debug)]
pub enum Request {
Ping,
}
}
pub mod response {
#[derive(serde::Serialize, serde::Deserialize, Clone, Copy, Debug)]
pub enum Response {
Ok,
}
}
#[cfg(test)]
mod tests {}
-66
View File
@@ -1,66 +0,0 @@
#![allow(dead_code)]
use crossbeam_channel::{bounded, Receiver, Sender};
use std::sync::atomic::{AtomicU16, Ordering};
use std::thread;
use zerocopy::{FromBytes, Immutable, IntoBytes, NetworkEndian, Unaligned, U16};
trait FieldDataProvider: Send {
fn get_data(&self) -> &[u8];
}
struct FixedFieldDataWrapper {
data: [u8; 8],
}
impl FixedFieldDataWrapper {
pub fn from_two_u32(p0: u32, p1: u32) -> Self {
let mut data = [0; 8];
data[0..4].copy_from_slice(p0.to_be_bytes().as_slice());
data[4..8].copy_from_slice(p1.to_be_bytes().as_slice());
Self { data }
}
}
impl FieldDataProvider for FixedFieldDataWrapper {
fn get_data(&self) -> &[u8] {
self.data.as_slice()
}
}
type FieldDataTraitObj = Box<dyn FieldDataProvider>;
struct ExampleMgmSet {
mgm_vec: [f32; 3],
temperature: u16,
}
#[derive(FromBytes, IntoBytes, Immutable, Unaligned)]
#[repr(C)]
struct ExampleMgmSetZc {
mgm_vec: [u8; 12],
temperatur: U16<NetworkEndian>,
}
fn main() {
let (s0, r0): (Sender<FieldDataTraitObj>, Receiver<FieldDataTraitObj>) = bounded(5);
let data_wrapper = FixedFieldDataWrapper::from_two_u32(2, 3);
s0.send(Box::new(data_wrapper)).unwrap();
let jh0 = thread::spawn(move || {
let data = r0.recv().unwrap();
let raw = data.get_data();
println!("Received data {raw:?}");
});
let jh1 = thread::spawn(|| {});
jh0.join().unwrap();
jh1.join().unwrap();
//let mut max_val: u16 = u16::MAX;
//max_val += 1;
//println!("Max val: {}", max_val);
let atomic_u16: AtomicU16 = AtomicU16::new(u16::MAX);
atomic_u16.fetch_add(1, Ordering::SeqCst);
println!(
"atomic after overflow: {}",
atomic_u16.load(Ordering::SeqCst)
);
}