Rename example models crates to types
- satrs-example/models (package "models") -> satrs-example/types ("types")
- embedded-examples/models (package "embedded-models") -> embedded-examples/types ("embedded-types")
Updates all path dependencies and use/models:: references accordingly.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
3e4c3c4e64
commit
5fffcc011f
44 files changed
+230
-233
No files matched your search
+2
-2
@@ -4,12 +4,12 @@ members = [
|
||||
"satrs",
|
||||
"satrs-mib",
|
||||
"satrs-example",
|
||||
"satrs-example/models",
|
||||
"satrs-example/types",
|
||||
"satrs-example/client",
|
||||
"satrs-example/minisim",
|
||||
"satrs-shared",
|
||||
"embedded-examples/embedded-client",
|
||||
"embedded-examples/models",
|
||||
"embedded-examples/types",
|
||||
]
|
||||
|
||||
exclude = [
|
||||
|
||||
@@ -9,7 +9,7 @@ serialport = "4"
|
||||
toml = "0.9"
|
||||
serde = { version = "1", features = ["derive"] }
|
||||
spacepackets = { version = "0.18" }
|
||||
embedded-models = { path = "../models" }
|
||||
embedded-types = { path = "../types" }
|
||||
tmtc-utils = { git = "https://egit.irs.uni-stuttgart.de/rust/tmtc-utils.git", version = "0.1", rev = "d8015379a45e77400dd9c71afbf22ca415ed67d1" }
|
||||
postcard = { version = "1", features = ["alloc"] }
|
||||
anyhow = "1"
|
||||
|
||||
@@ -4,7 +4,7 @@ use anyhow::bail;
|
||||
use clap::Parser;
|
||||
use cobs::CobsDecoderOwned;
|
||||
use embedded_client::setup_logger;
|
||||
use embedded_models::stm32f3;
|
||||
use embedded_types::stm32f3;
|
||||
use spacepackets::{CcsdsPacketCreatorOwned, CcsdsPacketReader, SpHeader};
|
||||
use tmtc_utils::transport::serial::PacketTransportSerialCobs;
|
||||
|
||||
@@ -34,7 +34,7 @@ fn main() -> anyhow::Result<()> {
|
||||
let mut transport = PacketTransportSerialCobs::new(serial, CobsDecoderOwned::new(1024));
|
||||
|
||||
if cli.ping {
|
||||
let tc = create_stm32f3_tc(&embedded_models::stm32f3::Request::Ping);
|
||||
let tc = create_stm32f3_tc(&embedded_types::stm32f3::Request::Ping);
|
||||
log::info!(
|
||||
"Sending ping request with TC ID: {:#010x}",
|
||||
tc.ccsds_packet_id_and_psc().raw()
|
||||
@@ -66,6 +66,6 @@ fn main() -> anyhow::Result<()> {
|
||||
|
||||
fn create_stm32f3_tc(request: &stm32f3::Request) -> CcsdsPacketCreatorOwned {
|
||||
let req_raw = postcard::to_allocvec(&request).unwrap();
|
||||
let sp_header = SpHeader::new_from_apid(embedded_models::stm32f3::PUS_APID);
|
||||
let sp_header = SpHeader::new_from_apid(embedded_types::stm32f3::PUS_APID);
|
||||
CcsdsPacketCreatorOwned::new_tc_with_checksum(sp_header, &req_raw).unwrap()
|
||||
}
|
||||
@@ -3,7 +3,7 @@ use std::{net::UdpSocket, time::Duration};
|
||||
use anyhow::{Context as _, bail};
|
||||
use clap::Parser;
|
||||
use embedded_client::setup_logger;
|
||||
use embedded_models::{TmHeader, stm32h7};
|
||||
use embedded_types::{TmHeader, stm32h7};
|
||||
use spacepackets::{CcsdsPacketCreatorOwned, CcsdsPacketReader, SpHeader};
|
||||
use tmtc_utils::transport::udp::PacketTransportUdp;
|
||||
|
||||
@@ -40,7 +40,7 @@ fn main() -> anyhow::Result<()> {
|
||||
.with_context(|| "crateing UDP transport failed")?;
|
||||
|
||||
if cli.ping {
|
||||
let tc = create_stm32h7_tc(&embedded_models::stm32h7::Request::Ping);
|
||||
let tc = create_stm32h7_tc(&embedded_types::stm32h7::Request::Ping);
|
||||
log::info!(
|
||||
"Sending ping request with TC ID: {:#010x}",
|
||||
tc.ccsds_packet_id_and_psc().raw()
|
||||
@@ -90,6 +90,6 @@ fn main() -> anyhow::Result<()> {
|
||||
|
||||
fn create_stm32h7_tc(request: &stm32h7::Request) -> CcsdsPacketCreatorOwned {
|
||||
let req_raw = postcard::to_allocvec(&request).unwrap();
|
||||
let sp_header = SpHeader::new_from_apid(embedded_models::stm32h7::PUS_APID);
|
||||
let sp_header = SpHeader::new_from_apid(embedded_types::stm32h7::PUS_APID);
|
||||
CcsdsPacketCreatorOwned::new_tc_with_checksum(sp_header, &req_raw).unwrap()
|
||||
}
|
||||
+12
-12
@@ -633,17 +633,6 @@ dependencies = [
|
||||
"embedded-io 0.7.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "embedded-models"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"arbitrary-int",
|
||||
"defmt 1.1.1",
|
||||
"postcard",
|
||||
"serde",
|
||||
"spacepackets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "embedded-storage"
|
||||
version = "0.3.1"
|
||||
@@ -659,6 +648,17 @@ dependencies = [
|
||||
"embedded-storage",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "embedded-types"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"arbitrary-int",
|
||||
"defmt 1.1.1",
|
||||
"postcard",
|
||||
"serde",
|
||||
"spacepackets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "enumset"
|
||||
version = "1.1.13"
|
||||
@@ -1164,7 +1164,7 @@ dependencies = [
|
||||
"embassy-sync",
|
||||
"embassy-time",
|
||||
"embedded-hal 1.0.0",
|
||||
"embedded-models",
|
||||
"embedded-types",
|
||||
"enumset",
|
||||
"heapless 0.9.3",
|
||||
"panic-probe",
|
||||
|
||||
@@ -7,7 +7,7 @@ default-run = "satrs-stm32f3-disco-rtic"
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
embedded-models = { path = "../models", features = ["defmt"] }
|
||||
embedded-types = { path = "../types", features = ["defmt"] }
|
||||
cortex-m = { version = "0.7", features = ["critical-section-single-core"] }
|
||||
cortex-m-rt = "0.7"
|
||||
defmt = "1"
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
use arbitrary_int::u14;
|
||||
use cortex_m_semihosting::debug::{self, EXIT_FAILURE, EXIT_SUCCESS};
|
||||
use embassy_sync::blocking_mutex::raw::CriticalSectionRawMutex;
|
||||
use embedded_models::{create_tm_packet, stm32f3, tm_size, TmHeader};
|
||||
use embedded_types::{create_tm_packet, stm32f3, tm_size, TmHeader};
|
||||
use spacepackets::{CcsdsPacketCreationError, CcsdsPacketIdAndPsc, SpHeader};
|
||||
|
||||
use defmt_rtt as _; // global logger
|
||||
@@ -50,7 +50,7 @@ mod app {
|
||||
use super::*;
|
||||
use arbitrary_int::u14;
|
||||
use embassy_time::Timer;
|
||||
use embedded_models::stm32f3::{Request, Response};
|
||||
use embedded_types::stm32f3::{Request, Response};
|
||||
use rtic::Mutex;
|
||||
use rtic_sync::{
|
||||
channel::{Receiver, Sender},
|
||||
|
||||
+12
-12
@@ -575,17 +575,6 @@ dependencies = [
|
||||
"embedded-io",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "embedded-models"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"arbitrary-int",
|
||||
"defmt 1.1.0",
|
||||
"postcard",
|
||||
"serde",
|
||||
"spacepackets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "embedded-nal"
|
||||
version = "0.9.0"
|
||||
@@ -620,6 +609,17 @@ dependencies = [
|
||||
"embedded-storage",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "embedded-types"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"arbitrary-int",
|
||||
"defmt 1.1.0",
|
||||
"postcard",
|
||||
"serde",
|
||||
"spacepackets",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "equivalent"
|
||||
version = "1.0.2"
|
||||
@@ -1032,7 +1032,7 @@ dependencies = [
|
||||
"embassy-sync",
|
||||
"embassy-time",
|
||||
"embedded-alloc",
|
||||
"embedded-models",
|
||||
"embedded-types",
|
||||
"panic-probe",
|
||||
"postcard",
|
||||
"rtic",
|
||||
|
||||
@@ -14,7 +14,7 @@ name = "integration"
|
||||
harness = false
|
||||
|
||||
[dependencies]
|
||||
embedded-models = { path = "../models", features = ["defmt"] }
|
||||
embedded-types = { path = "../types", features = ["defmt"] }
|
||||
|
||||
cortex-m = { version = "0.7", features = ["critical-section-single-core"] }
|
||||
arbitrary-int = "2"
|
||||
|
||||
@@ -39,10 +39,10 @@ mod app {
|
||||
use embassy_time::Duration;
|
||||
use embassy_time::Timer;
|
||||
use embassy_time::WithTimeout as _;
|
||||
use embedded_models::create_tm_packet;
|
||||
use embedded_models::stm32h7;
|
||||
use embedded_models::tm_size;
|
||||
use embedded_models::TmHeader;
|
||||
use embedded_types::create_tm_packet;
|
||||
use embedded_types::stm32h7;
|
||||
use embedded_types::tm_size;
|
||||
use embedded_types::TmHeader;
|
||||
use spacepackets::CcsdsPacketCreationError;
|
||||
use spacepackets::CcsdsPacketIdAndPsc;
|
||||
use spacepackets::CcsdsPacketReader;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[package]
|
||||
name = "embedded-models"
|
||||
name = "embedded-types"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
File renamed without changes.
@@ -29,7 +29,7 @@ serde = { version = "1", features = ["derive"] }
|
||||
serde_json = "1"
|
||||
|
||||
satrs = { path = "../satrs", features = ["test_util"] }
|
||||
models = { path = "./models" }
|
||||
types = { path = "./types" }
|
||||
satrs-minisim = { path = "./minisim" }
|
||||
satrs-mib = { path = "../satrs-mib" }
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ fern = "0.7"
|
||||
humantime = "2"
|
||||
serde = { version = "1" }
|
||||
satrs-example = { path = ".." }
|
||||
models = { path = "../models" }
|
||||
types = { path = "../types" }
|
||||
spacepackets = { version = "0.18", default-features = false }
|
||||
bitbybit = "2"
|
||||
arbitrary-int = "2"
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
use anyhow::bail;
|
||||
use arbitrary_int::u11;
|
||||
use clap::Parser as _;
|
||||
use models::{Apid, MessageType, TcHeader, acs::mgm::request::HkRequest};
|
||||
use satrs_example::config::{OBSW_SERVER_ADDR, SERVER_PORT};
|
||||
use spacepackets::{CcsdsPacketIdAndPsc, SpacePacketHeader};
|
||||
use std::{
|
||||
@@ -12,6 +11,7 @@ use std::{
|
||||
},
|
||||
time::{Duration, SystemTime},
|
||||
};
|
||||
use types::{Apid, MessageType, TcHeader, acs::mgm::request::HkRequest};
|
||||
|
||||
#[derive(clap::Parser)]
|
||||
pub struct Cli {
|
||||
@@ -33,11 +33,11 @@ enum Commands {
|
||||
|
||||
impl Commands {
|
||||
#[inline]
|
||||
pub fn target_id(&self) -> models::ComponentId {
|
||||
pub fn target_id(&self) -> types::ComponentId {
|
||||
match self {
|
||||
Commands::Mgm0(_mgm_args) => models::ComponentId::AcsMgm0,
|
||||
Commands::Mgm1(_mgm_args) => models::ComponentId::AcsMgm1,
|
||||
Commands::MgmAssy(_mgm_assembly_args) => models::ComponentId::AcsMgmAssembly,
|
||||
Commands::Mgm0(_mgm_args) => types::ComponentId::AcsMgm0,
|
||||
Commands::Mgm1(_mgm_args) => types::ComponentId::AcsMgm1,
|
||||
Commands::MgmAssy(_mgm_assembly_args) => types::ComponentId::AcsMgmAssembly,
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -104,10 +104,10 @@ fn main() -> anyhow::Result<()> {
|
||||
client.set_read_timeout(Some(Duration::from_millis(200)))?;
|
||||
|
||||
if cli.ping {
|
||||
let request = models::ccsds::CcsdsTcPacketOwned::new_with_request(
|
||||
let request = types::ccsds::CcsdsTcPacketOwned::new_with_request(
|
||||
SpacePacketHeader::new_from_apid(u11::new(Apid::Tmtc as u16)),
|
||||
TcHeader::new(models::ComponentId::Controller, models::MessageType::Ping),
|
||||
models::control::request::Request::Ping,
|
||||
TcHeader::new(types::ComponentId::Controller, types::MessageType::Ping),
|
||||
types::control::request::Request::Ping,
|
||||
);
|
||||
let sent_tc_id = CcsdsPacketIdAndPsc::new_from_ccsds_packet(&request.sp_header);
|
||||
log::info!("sending ping request with TC ID {:#010x}", sent_tc_id.raw());
|
||||
@@ -115,10 +115,10 @@ fn main() -> anyhow::Result<()> {
|
||||
client.send_to(&request_packet, addr).unwrap();
|
||||
}
|
||||
if cli.test_event {
|
||||
let request = models::ccsds::CcsdsTcPacketOwned::new_with_request(
|
||||
let request = types::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,
|
||||
TcHeader::new(types::ComponentId::Controller, types::MessageType::Event),
|
||||
types::control::request::Request::TestEvent,
|
||||
);
|
||||
let sent_tc_id = CcsdsPacketIdAndPsc::new_from_ccsds_packet(&request.sp_header);
|
||||
log::info!(
|
||||
@@ -133,10 +133,10 @@ fn main() -> anyhow::Result<()> {
|
||||
match cmd {
|
||||
Commands::Mgm0(args) | Commands::Mgm1(args) => {
|
||||
if args.ping {
|
||||
let request = models::ccsds::CcsdsTcPacketOwned::new_with_request(
|
||||
let request = types::ccsds::CcsdsTcPacketOwned::new_with_request(
|
||||
SpacePacketHeader::new_from_apid(u11::new(Apid::Acs as u16)),
|
||||
TcHeader::new(cmd.target_id(), models::MessageType::Ping),
|
||||
models::acs::mgm::request::Request::Ping,
|
||||
TcHeader::new(cmd.target_id(), types::MessageType::Ping),
|
||||
types::acs::mgm::request::Request::Ping,
|
||||
);
|
||||
let sent_tc_id = CcsdsPacketIdAndPsc::new_from_ccsds_packet(&request.sp_header);
|
||||
log::info!(
|
||||
@@ -148,12 +148,12 @@ fn main() -> anyhow::Result<()> {
|
||||
client.send_to(&request_packet, addr).unwrap();
|
||||
}
|
||||
if args.request_hk {
|
||||
let request = models::ccsds::CcsdsTcPacketOwned::new_with_request(
|
||||
let request = types::ccsds::CcsdsTcPacketOwned::new_with_request(
|
||||
SpacePacketHeader::new_from_apid(u11::new(Apid::Acs as u16)),
|
||||
TcHeader::new(target_id, models::MessageType::Hk),
|
||||
models::acs::mgm::request::Request::Hk(HkRequest {
|
||||
id: models::acs::mgm::request::HkId::Sensor,
|
||||
req_type: models::HkRequestType::OneShot,
|
||||
TcHeader::new(target_id, types::MessageType::Hk),
|
||||
types::acs::mgm::request::Request::Hk(HkRequest {
|
||||
id: types::acs::mgm::request::HkId::Sensor,
|
||||
req_type: types::HkRequestType::OneShot,
|
||||
}),
|
||||
);
|
||||
let sent_tc_id = CcsdsPacketIdAndPsc::new_from_ccsds_packet(&request.sp_header);
|
||||
@@ -167,15 +167,15 @@ fn main() -> anyhow::Result<()> {
|
||||
}
|
||||
if let Some(mode) = args.mode {
|
||||
let dev_mode = match mode {
|
||||
DeviceModeSelect::Off => models::DeviceMode::Off,
|
||||
DeviceModeSelect::Normal => models::DeviceMode::Normal,
|
||||
DeviceModeSelect::Off => types::DeviceMode::Off,
|
||||
DeviceModeSelect::Normal => types::DeviceMode::Normal,
|
||||
};
|
||||
|
||||
let request = models::ccsds::CcsdsTcPacketOwned::new_with_request(
|
||||
let request = types::ccsds::CcsdsTcPacketOwned::new_with_request(
|
||||
SpacePacketHeader::new_from_apid(u11::new(Apid::Acs as u16)),
|
||||
TcHeader::new(target_id, models::MessageType::Mode),
|
||||
models::acs::mgm::request::Request::Mode(
|
||||
models::acs::mgm::request::ModeRequest::SetMode(dev_mode),
|
||||
TcHeader::new(target_id, types::MessageType::Mode),
|
||||
types::acs::mgm::request::Request::Mode(
|
||||
types::acs::mgm::request::ModeRequest::SetMode(dev_mode),
|
||||
),
|
||||
);
|
||||
let sent_tc_id = CcsdsPacketIdAndPsc::new_from_ccsds_packet(&request.sp_header);
|
||||
@@ -190,10 +190,10 @@ fn main() -> anyhow::Result<()> {
|
||||
}
|
||||
Commands::MgmAssy(mgm_assembly_args) => {
|
||||
if mgm_assembly_args.ping {
|
||||
let request = models::ccsds::CcsdsTcPacketOwned::new_with_request(
|
||||
let request = types::ccsds::CcsdsTcPacketOwned::new_with_request(
|
||||
SpacePacketHeader::new_from_apid(u11::new(Apid::Acs as u16)),
|
||||
TcHeader::new(cmd.target_id(), models::MessageType::Ping),
|
||||
models::acs::mgm::request::Request::Ping,
|
||||
TcHeader::new(cmd.target_id(), types::MessageType::Ping),
|
||||
types::acs::mgm::request::Request::Ping,
|
||||
);
|
||||
let sent_tc_id = CcsdsPacketIdAndPsc::new_from_ccsds_packet(&request.sp_header);
|
||||
log::info!(
|
||||
@@ -207,21 +207,21 @@ fn main() -> anyhow::Result<()> {
|
||||
if let Some(mode) = mgm_assembly_args.mode {
|
||||
let assembly_mode = match mode {
|
||||
AssemblyModeSelect::NoModeKeeping => {
|
||||
models::acs::mgm_assembly::Mode::NoModeKeeping
|
||||
types::acs::mgm_assembly::Mode::NoModeKeeping
|
||||
}
|
||||
AssemblyModeSelect::Off => {
|
||||
models::acs::mgm_assembly::Mode::Device(models::DeviceMode::Off)
|
||||
types::acs::mgm_assembly::Mode::Device(types::DeviceMode::Off)
|
||||
}
|
||||
AssemblyModeSelect::Normal => {
|
||||
models::acs::mgm_assembly::Mode::Device(models::DeviceMode::Normal)
|
||||
types::acs::mgm_assembly::Mode::Device(types::DeviceMode::Normal)
|
||||
}
|
||||
};
|
||||
|
||||
let request = models::ccsds::CcsdsTcPacketOwned::new_with_request(
|
||||
let request = types::ccsds::CcsdsTcPacketOwned::new_with_request(
|
||||
SpacePacketHeader::new_from_apid(u11::new(Apid::Acs as u16)),
|
||||
TcHeader::new(target_id, models::MessageType::Mode),
|
||||
models::acs::mgm_assembly::request::Request::Mode(
|
||||
models::acs::mgm_assembly::request::ModeRequest::SetMode(assembly_mode),
|
||||
TcHeader::new(target_id, types::MessageType::Mode),
|
||||
types::acs::mgm_assembly::request::Request::Mode(
|
||||
types::acs::mgm_assembly::request::ModeRequest::SetMode(assembly_mode),
|
||||
),
|
||||
);
|
||||
let sent_tc_id = CcsdsPacketIdAndPsc::new_from_ccsds_packet(&request.sp_header);
|
||||
@@ -262,8 +262,7 @@ fn main() -> anyhow::Result<()> {
|
||||
fn handle_raw_tm_packet(data: &[u8]) -> anyhow::Result<()> {
|
||||
match spacepackets::CcsdsPacketReader::new_with_checksum(data) {
|
||||
Ok(packet) => {
|
||||
let tm_header_result =
|
||||
postcard::take_from_bytes::<models::TmHeader>(packet.user_data());
|
||||
let tm_header_result = postcard::take_from_bytes::<types::TmHeader>(packet.user_data());
|
||||
if let Err(e) = tm_header_result {
|
||||
bail!("Failed to deserialize TM header: {}", e);
|
||||
}
|
||||
@@ -283,7 +282,7 @@ fn handle_raw_tm_packet(data: &[u8]) -> anyhow::Result<()> {
|
||||
);
|
||||
}
|
||||
if tm_header.message_type == MessageType::Event {
|
||||
let response = postcard::from_bytes::<models::Event>(remainder);
|
||||
let response = postcard::from_bytes::<types::Event>(remainder);
|
||||
log::info!(
|
||||
"Received event from {:?}: {:?}",
|
||||
tm_header.sender_id,
|
||||
@@ -292,43 +291,43 @@ fn handle_raw_tm_packet(data: &[u8]) -> anyhow::Result<()> {
|
||||
return Ok(());
|
||||
}
|
||||
match tm_header.sender_id {
|
||||
models::ComponentId::EpsPcdu => {
|
||||
types::ComponentId::EpsPcdu => {
|
||||
let response =
|
||||
postcard::from_bytes::<models::pcdu::response::Response>(remainder);
|
||||
postcard::from_bytes::<types::pcdu::response::Response>(remainder);
|
||||
log::info!("Received response from PCDU: {:?}", response.unwrap());
|
||||
}
|
||||
models::ComponentId::Controller => {
|
||||
types::ComponentId::Controller => {
|
||||
let response =
|
||||
postcard::from_bytes::<models::control::response::Response>(remainder);
|
||||
postcard::from_bytes::<types::control::response::Response>(remainder);
|
||||
log::info!("Received response from controller: {:?}", response.unwrap());
|
||||
}
|
||||
models::ComponentId::AcsMgmAssembly => {
|
||||
types::ComponentId::AcsMgmAssembly => {
|
||||
let response = postcard::from_bytes::<
|
||||
models::acs::mgm_assembly::response::Response,
|
||||
types::acs::mgm_assembly::response::Response,
|
||||
>(remainder);
|
||||
log::info!(
|
||||
"Received response from MGM Assembly: {:?}",
|
||||
response.unwrap()
|
||||
);
|
||||
}
|
||||
models::ComponentId::AcsMgm0 => {
|
||||
types::ComponentId::AcsMgm0 => {
|
||||
let response =
|
||||
postcard::from_bytes::<models::acs::mgm::response::Response>(remainder);
|
||||
postcard::from_bytes::<types::acs::mgm::response::Response>(remainder);
|
||||
log::info!("Received response from MGM0: {:?}", response.unwrap());
|
||||
}
|
||||
models::ComponentId::AcsMgm1 => {
|
||||
types::ComponentId::AcsMgm1 => {
|
||||
let response =
|
||||
postcard::from_bytes::<models::acs::mgm::response::Response>(remainder);
|
||||
postcard::from_bytes::<types::acs::mgm::response::Response>(remainder);
|
||||
log::info!("Received response from MGM1: {:?}", response.unwrap());
|
||||
}
|
||||
models::ComponentId::AcsSubsystem => todo!(),
|
||||
models::ComponentId::EpsSubsystem => todo!(),
|
||||
models::ComponentId::UdpServer => todo!(),
|
||||
models::ComponentId::TcpServer => todo!(),
|
||||
models::ComponentId::Ground => todo!(),
|
||||
models::ComponentId::EventManager => {}
|
||||
models::ComponentId::AcsController => todo!(),
|
||||
models::ComponentId::AcsMgt => todo!(),
|
||||
types::ComponentId::AcsSubsystem => todo!(),
|
||||
types::ComponentId::EpsSubsystem => todo!(),
|
||||
types::ComponentId::UdpServer => todo!(),
|
||||
types::ComponentId::TcpServer => todo!(),
|
||||
types::ComponentId::Ground => todo!(),
|
||||
types::ComponentId::EventManager => {}
|
||||
types::ComponentId::AcsController => todo!(),
|
||||
types::ComponentId::AcsMgt => todo!(),
|
||||
}
|
||||
}
|
||||
Err(_) => todo!(),
|
||||
|
||||
@@ -18,7 +18,7 @@ tai-time = { version = "0.3", features = ["serde"] }
|
||||
nexosim = { version = "0.3.1" }
|
||||
|
||||
satrs = { path = "../../satrs" }
|
||||
models = { path = "../models" }
|
||||
types = { path = "../types" }
|
||||
|
||||
[dev-dependencies]
|
||||
delegate = "0.13"
|
||||
@@ -1,6 +1,5 @@
|
||||
use std::{f32::consts::PI, sync::mpsc, time::Duration};
|
||||
|
||||
use models::pcdu::SwitchStateBinary;
|
||||
use nexosim::{
|
||||
model::{Context, Model},
|
||||
ports::Output,
|
||||
@@ -12,6 +11,7 @@ use satrs_minisim::{
|
||||
},
|
||||
SimReply,
|
||||
};
|
||||
use types::pcdu::SwitchStateBinary;
|
||||
|
||||
use crate::time::current_millis;
|
||||
|
||||
@@ -179,7 +179,6 @@ impl Model for MagnetorquerModel {}
|
||||
pub mod tests {
|
||||
use std::time::Duration;
|
||||
|
||||
use models::pcdu::{SwitchId, SwitchStateBinary};
|
||||
use satrs_minisim::{
|
||||
acs::{
|
||||
lis3mdl::{self, MgmLis3MdlReply},
|
||||
@@ -187,6 +186,7 @@ pub mod tests {
|
||||
},
|
||||
SerializableSimMsgPayload, SimComponent, SimMessageProvider, SimRequest,
|
||||
};
|
||||
use types::pcdu::{SwitchId, SwitchStateBinary};
|
||||
|
||||
use crate::{eps::tests::switch_device_on, test_helpers::SimTestbench};
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
use std::{sync::mpsc, time::Duration};
|
||||
|
||||
use models::pcdu::{SwitchId, SwitchMapBinaryWrapper, SwitchStateBinary};
|
||||
use nexosim::{
|
||||
model::{Context, Model},
|
||||
ports::Output,
|
||||
};
|
||||
use satrs_minisim::{eps::PcduReply, SimReply};
|
||||
use types::pcdu::{SwitchId, SwitchMapBinaryWrapper, SwitchStateBinary};
|
||||
|
||||
pub const SWITCH_INFO_DELAY_MS: u64 = 10;
|
||||
|
||||
@@ -73,10 +73,10 @@ pub(crate) mod tests {
|
||||
use super::*;
|
||||
use std::time::Duration;
|
||||
|
||||
use models::pcdu::SwitchMapBinary;
|
||||
use satrs_minisim::{
|
||||
eps::PcduRequest, SerializableSimMsgPayload, SimComponent, SimMessageProvider, SimRequest,
|
||||
};
|
||||
use types::pcdu::SwitchMapBinary;
|
||||
|
||||
use crate::test_helpers::SimTestbench;
|
||||
|
||||
|
||||
@@ -161,7 +161,7 @@ impl From<SimRequestError> for SimCtrlReply {
|
||||
|
||||
pub mod eps {
|
||||
use super::*;
|
||||
use models::pcdu::{SwitchId, SwitchMapBinary, SwitchStateBinary};
|
||||
use types::pcdu::{SwitchId, SwitchMapBinary, SwitchStateBinary};
|
||||
|
||||
#[derive(Debug, Copy, Clone)]
|
||||
#[repr(u8)]
|
||||
@@ -197,7 +197,7 @@ pub mod eps {
|
||||
pub mod acs {
|
||||
use std::time::Duration;
|
||||
|
||||
use models::pcdu::SwitchStateBinary;
|
||||
use types::pcdu::SwitchStateBinary;
|
||||
|
||||
use super::*;
|
||||
|
||||
|
||||
@@ -1,8 +1,3 @@
|
||||
use models::acs::mgm::SensorData;
|
||||
use models::acs::mgm::request::ModeRequest;
|
||||
use models::acs::mgm::response::ModeResponse;
|
||||
use models::pcdu::SwitchId;
|
||||
use models::{ComponentId, DeviceMode, HkRequestType, acs::mgm};
|
||||
use satrs::spacepackets::CcsdsPacketIdAndPsc;
|
||||
use satrs_example::{HkHelperSingleSet, ModeHelper, TimestampHelper, TmtcQueues};
|
||||
use satrs_minisim::acs::MgmRequestLis3Mdl;
|
||||
@@ -13,6 +8,11 @@ use satrs_minisim::{SerializableSimMsgPayload, SimReply, SimRequest};
|
||||
use std::sync::mpsc;
|
||||
use std::sync::{Arc, Mutex};
|
||||
use std::time::Duration;
|
||||
use types::acs::mgm::SensorData;
|
||||
use types::acs::mgm::request::ModeRequest;
|
||||
use types::acs::mgm::response::ModeResponse;
|
||||
use types::pcdu::SwitchId;
|
||||
use types::{ComponentId, DeviceMode, HkRequestType, acs::mgm};
|
||||
|
||||
use satrs::request::MessageMetadata;
|
||||
|
||||
@@ -308,7 +308,7 @@ impl MgmHandlerLis3Mdl {
|
||||
pub fn handle_hk_request(
|
||||
&mut self,
|
||||
tc_id: Option<CcsdsPacketIdAndPsc>,
|
||||
hk_request: &models::acs::mgm::request::HkRequest,
|
||||
hk_request: &types::acs::mgm::request::HkRequest,
|
||||
) {
|
||||
match hk_request.req_type {
|
||||
HkRequestType::OneShot => {
|
||||
@@ -460,14 +460,14 @@ mod tests {
|
||||
};
|
||||
|
||||
use arbitrary_int::u11;
|
||||
use models::{
|
||||
use satrs::{request::GenericMessage, spacepackets::SpacePacketHeader};
|
||||
use satrs_minisim::acs::lis3mdl::MgmLis3RawValues;
|
||||
use types::{
|
||||
Apid, ComponentId, TcHeader,
|
||||
acs::mgm::request::HkRequest,
|
||||
ccsds::{CcsdsTcPacketOwned, CcsdsTmPacketOwned},
|
||||
pcdu::{SwitchRequest, SwitchState, SwitchStateBinary},
|
||||
};
|
||||
use satrs::{request::GenericMessage, spacepackets::SpacePacketHeader};
|
||||
use satrs_minisim::acs::lis3mdl::MgmLis3RawValues;
|
||||
|
||||
use crate::eps::pcdu::{SharedSwitchSet, SwitchMap, SwitchSet};
|
||||
|
||||
@@ -490,11 +490,11 @@ mod tests {
|
||||
|
||||
pub fn create_request_tc(
|
||||
select: MgmSelect,
|
||||
request: models::acs::mgm::request::Request,
|
||||
) -> models::ccsds::CcsdsTcPacketOwned {
|
||||
models::ccsds::CcsdsTcPacketOwned::new_with_request(
|
||||
request: types::acs::mgm::request::Request,
|
||||
) -> types::ccsds::CcsdsTcPacketOwned {
|
||||
types::ccsds::CcsdsTcPacketOwned::new_with_request(
|
||||
SpacePacketHeader::new_from_apid(u11::new(Apid::Acs as u16)),
|
||||
TcHeader::new(select.id(), models::MessageType::Ping),
|
||||
TcHeader::new(select.id(), types::MessageType::Ping),
|
||||
request,
|
||||
)
|
||||
}
|
||||
@@ -602,9 +602,9 @@ mod tests {
|
||||
assert_eq!(tm_packet.tm_header.sender_id, ComponentId::AcsMgm0);
|
||||
|
||||
let response =
|
||||
postcard::from_bytes::<models::acs::mgm::response::Response>(&tm_packet.payload)
|
||||
postcard::from_bytes::<types::acs::mgm::response::Response>(&tm_packet.payload)
|
||||
.expect("failed to deserialize mode reply");
|
||||
matches!(response, models::acs::mgm::response::Response::Ok);
|
||||
matches!(response, types::acs::mgm::response::Response::Ok);
|
||||
// The device should have been polled once.
|
||||
assert_eq!(testbench.test_spi_interface().call_count, 1);
|
||||
let mgm_set = *testbench.handler.shared_mgm_set.lock().unwrap();
|
||||
@@ -691,9 +691,9 @@ mod tests {
|
||||
assert_eq!(tm_packet.tm_header.sender_id, ComponentId::AcsMgm0);
|
||||
|
||||
let response =
|
||||
postcard::from_bytes::<models::acs::mgm::response::Response>(&tm_packet.payload)
|
||||
postcard::from_bytes::<types::acs::mgm::response::Response>(&tm_packet.payload)
|
||||
.expect("failed to deserialize mode reply");
|
||||
if let models::acs::mgm::response::Response::Hk(mgm::response::HkResponse::MgmData(data)) =
|
||||
if let types::acs::mgm::response::Response::Hk(mgm::response::HkResponse::MgmData(data)) =
|
||||
response
|
||||
{
|
||||
assert_eq!(data.valid, false);
|
||||
@@ -743,17 +743,17 @@ mod tests {
|
||||
assert_eq!(mode_tm.tm_header.sender_id, ComponentId::AcsMgm0);
|
||||
|
||||
let response =
|
||||
postcard::from_bytes::<models::acs::mgm::response::Response>(&mode_tm.payload)
|
||||
postcard::from_bytes::<types::acs::mgm::response::Response>(&mode_tm.payload)
|
||||
.expect("failed to deserialize mode reply");
|
||||
matches!(response, models::acs::mgm::response::Response::Ok);
|
||||
matches!(response, types::acs::mgm::response::Response::Ok);
|
||||
|
||||
let hk_tm = testbench.tm_rx.try_recv().expect("no hk reply generated");
|
||||
|
||||
assert_eq!(hk_tm.tm_header.sender_id, ComponentId::AcsMgm0);
|
||||
|
||||
let response = postcard::from_bytes::<models::acs::mgm::response::Response>(&hk_tm.payload)
|
||||
let response = postcard::from_bytes::<types::acs::mgm::response::Response>(&hk_tm.payload)
|
||||
.expect("failed to deserialize mode reply");
|
||||
if let models::acs::mgm::response::Response::Hk(mgm::response::HkResponse::MgmData(data)) =
|
||||
if let types::acs::mgm::response::Response::Hk(mgm::response::HkResponse::MgmData(data)) =
|
||||
response
|
||||
{
|
||||
// Set is now valid.
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
use std::{sync::mpsc, time::Duration};
|
||||
|
||||
use models::{
|
||||
use satrs::spacepackets::CcsdsPacketIdAndPsc;
|
||||
use satrs_example::{ModeHelper, TmtcQueues};
|
||||
use types::{
|
||||
ComponentId, DeviceMode,
|
||||
acs::mgm_assembly::{Mode, request, response},
|
||||
};
|
||||
use satrs::spacepackets::CcsdsPacketIdAndPsc;
|
||||
use satrs_example::{ModeHelper, TmtcQueues};
|
||||
|
||||
use crate::ccsds::pack_ccsds_tm_packet_for_now;
|
||||
|
||||
@@ -16,8 +16,8 @@ pub struct ParentQueueHelper {
|
||||
|
||||
/// Helper component for communication with a parent component, which is usually as assembly.
|
||||
pub struct ChildrenQueueHelper {
|
||||
pub request_tx_queues: [mpsc::SyncSender<models::acs::mgm::request::ModeRequest>; 2],
|
||||
pub report_rx_queues: [mpsc::Receiver<models::acs::mgm::response::ModeResponse>; 2],
|
||||
pub request_tx_queues: [mpsc::SyncSender<types::acs::mgm::request::ModeRequest>; 2],
|
||||
pub report_rx_queues: [mpsc::Receiver<types::acs::mgm::response::ModeResponse>; 2],
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
|
||||
@@ -80,14 +80,14 @@ impl Assembly {
|
||||
match self.tmtc_queues.tc_rx.try_recv() {
|
||||
Ok(packet) => {
|
||||
let tc_id = CcsdsPacketIdAndPsc::new_from_ccsds_packet(&packet.sp_header);
|
||||
match postcard::from_bytes::<models::acs::mgm_assembly::request::Request>(
|
||||
match postcard::from_bytes::<types::acs::mgm_assembly::request::Request>(
|
||||
&packet.payload,
|
||||
) {
|
||||
Ok(request) => match request {
|
||||
models::acs::mgm_assembly::request::Request::Ping => {
|
||||
types::acs::mgm_assembly::request::Request::Ping => {
|
||||
self.send_telemetry(Some(tc_id), response::Response::Ok)
|
||||
}
|
||||
models::acs::mgm_assembly::request::Request::Mode(request) => {
|
||||
types::acs::mgm_assembly::request::Request::Mode(request) => {
|
||||
match request {
|
||||
request::ModeRequest::SetMode(assembly_mode) => {
|
||||
self.start_transition(false, assembly_mode, Some(tc_id))
|
||||
@@ -117,7 +117,7 @@ impl Assembly {
|
||||
pub fn send_telemetry(
|
||||
&self,
|
||||
tc_id: Option<CcsdsPacketIdAndPsc>,
|
||||
response: models::acs::mgm_assembly::response::Response,
|
||||
response: types::acs::mgm_assembly::response::Response,
|
||||
) {
|
||||
match pack_ccsds_tm_packet_for_now(Self::ID, tc_id, &response) {
|
||||
Ok(packet) => {
|
||||
@@ -165,12 +165,12 @@ impl Assembly {
|
||||
loop {
|
||||
match rx.try_recv() {
|
||||
Ok(report) => match report {
|
||||
models::acs::mgm::response::ModeResponse::Mode(device_mode) => {
|
||||
types::acs::mgm::response::ModeResponse::Mode(device_mode) => {
|
||||
self.mgm_modes[idx].mode = Some(device_mode);
|
||||
self.mgm_modes[idx].reply_received = true;
|
||||
mode_report_received = true;
|
||||
}
|
||||
models::acs::mgm::response::ModeResponse::SetModeTimeout => {
|
||||
types::acs::mgm::response::ModeResponse::SetModeTimeout => {
|
||||
// Ignore, handle this with our own timeout.
|
||||
log::warn!("MGM {} mode timeout", idx);
|
||||
}
|
||||
@@ -275,7 +275,7 @@ impl Assembly {
|
||||
|
||||
pub fn command_children(&self, mode: DeviceMode) {
|
||||
for tx in &self.children_queues.request_tx_queues {
|
||||
tx.send(models::acs::mgm::request::ModeRequest::SetMode(mode))
|
||||
tx.send(types::acs::mgm::request::ModeRequest::SetMode(mode))
|
||||
.unwrap();
|
||||
}
|
||||
}
|
||||
@@ -320,20 +320,20 @@ mod tests {
|
||||
use std::sync::mpsc::TryRecvError;
|
||||
|
||||
use arbitrary_int::u11;
|
||||
use models::{
|
||||
use satrs::spacepackets::SpacePacketHeader;
|
||||
use types::{
|
||||
Apid, Message, MessageType, TcHeader,
|
||||
acs::mgm_assembly,
|
||||
ccsds::{CcsdsTcPacketOwned, CcsdsTmPacketOwned},
|
||||
};
|
||||
use satrs::spacepackets::SpacePacketHeader;
|
||||
|
||||
use super::*;
|
||||
|
||||
pub struct Testbench {
|
||||
subsystem_req_tx: mpsc::SyncSender<request::ModeRequest>,
|
||||
subsystem_report_rx: mpsc::Receiver<response::ModeResponse>,
|
||||
mgm_request_rx: [mpsc::Receiver<models::acs::mgm::request::ModeRequest>; 2],
|
||||
mgm_report_tx: [mpsc::SyncSender<models::acs::mgm::response::ModeResponse>; 2],
|
||||
mgm_request_rx: [mpsc::Receiver<types::acs::mgm::request::ModeRequest>; 2],
|
||||
mgm_report_tx: [mpsc::SyncSender<types::acs::mgm::response::ModeResponse>; 2],
|
||||
tc_tx: mpsc::SyncSender<CcsdsTcPacketOwned>,
|
||||
tm_rx: mpsc::Receiver<CcsdsTmPacketOwned>,
|
||||
assembly: Assembly,
|
||||
@@ -396,9 +396,9 @@ mod tests {
|
||||
}
|
||||
|
||||
pub fn create_request_tc(
|
||||
request: models::acs::mgm_assembly::request::Request,
|
||||
) -> models::ccsds::CcsdsTcPacketOwned {
|
||||
models::ccsds::CcsdsTcPacketOwned::new_with_request(
|
||||
request: types::acs::mgm_assembly::request::Request,
|
||||
) -> types::ccsds::CcsdsTcPacketOwned {
|
||||
types::ccsds::CcsdsTcPacketOwned::new_with_request(
|
||||
SpacePacketHeader::new_from_apid(u11::new(Apid::Acs as u16)),
|
||||
TcHeader::new(Assembly::ID, request.message_type()),
|
||||
request,
|
||||
@@ -429,13 +429,13 @@ mod tests {
|
||||
let request = rx.try_recv().unwrap();
|
||||
assert_eq!(
|
||||
request,
|
||||
models::acs::mgm::request::ModeRequest::SetMode(DeviceMode::Normal)
|
||||
types::acs::mgm::request::ModeRequest::SetMode(DeviceMode::Normal)
|
||||
);
|
||||
}
|
||||
|
||||
// Confirm the mode is set.
|
||||
for tx in tb.mgm_report_tx.iter() {
|
||||
tx.send(models::acs::mgm::response::ModeResponse::Mode(
|
||||
tx.send(types::acs::mgm::response::ModeResponse::Mode(
|
||||
DeviceMode::Normal,
|
||||
))
|
||||
.unwrap();
|
||||
@@ -467,13 +467,13 @@ mod tests {
|
||||
let request = rx.try_recv().unwrap();
|
||||
assert_eq!(
|
||||
request,
|
||||
models::acs::mgm::request::ModeRequest::SetMode(DeviceMode::Normal)
|
||||
types::acs::mgm::request::ModeRequest::SetMode(DeviceMode::Normal)
|
||||
);
|
||||
}
|
||||
|
||||
// Confirm the mode is set.
|
||||
for tx in tb.mgm_report_tx.iter() {
|
||||
tx.send(models::acs::mgm::response::ModeResponse::Mode(
|
||||
tx.send(types::acs::mgm::response::ModeResponse::Mode(
|
||||
DeviceMode::Normal,
|
||||
))
|
||||
.unwrap();
|
||||
@@ -505,18 +505,18 @@ mod tests {
|
||||
let request = rx.try_recv().unwrap();
|
||||
assert_eq!(
|
||||
request,
|
||||
models::acs::mgm::request::ModeRequest::SetMode(DeviceMode::Normal)
|
||||
types::acs::mgm::request::ModeRequest::SetMode(DeviceMode::Normal)
|
||||
);
|
||||
}
|
||||
|
||||
// One device is sufficient.
|
||||
tb.mgm_report_tx[0]
|
||||
.send(models::acs::mgm::response::ModeResponse::Mode(
|
||||
.send(types::acs::mgm::response::ModeResponse::Mode(
|
||||
DeviceMode::Normal,
|
||||
))
|
||||
.unwrap();
|
||||
tb.mgm_report_tx[1]
|
||||
.send(models::acs::mgm::response::ModeResponse::Mode(
|
||||
.send(types::acs::mgm::response::ModeResponse::Mode(
|
||||
DeviceMode::Off,
|
||||
))
|
||||
.unwrap();
|
||||
@@ -547,13 +547,13 @@ mod tests {
|
||||
let request = rx.try_recv().unwrap();
|
||||
assert_eq!(
|
||||
request,
|
||||
models::acs::mgm::request::ModeRequest::SetMode(DeviceMode::Normal)
|
||||
types::acs::mgm::request::ModeRequest::SetMode(DeviceMode::Normal)
|
||||
);
|
||||
}
|
||||
|
||||
// Confirm the mode is set.
|
||||
for tx in tb.mgm_report_tx.iter() {
|
||||
tx.send(models::acs::mgm::response::ModeResponse::Mode(
|
||||
tx.send(types::acs::mgm::response::ModeResponse::Mode(
|
||||
DeviceMode::Off,
|
||||
))
|
||||
.unwrap();
|
||||
@@ -585,13 +585,13 @@ mod tests {
|
||||
let request = rx.try_recv().unwrap();
|
||||
assert_eq!(
|
||||
request,
|
||||
models::acs::mgm::request::ModeRequest::SetMode(DeviceMode::Normal)
|
||||
types::acs::mgm::request::ModeRequest::SetMode(DeviceMode::Normal)
|
||||
);
|
||||
}
|
||||
|
||||
// Confirm the mode is set.
|
||||
for tx in tb.mgm_report_tx.iter() {
|
||||
tx.send(models::acs::mgm::response::ModeResponse::Mode(
|
||||
tx.send(types::acs::mgm::response::ModeResponse::Mode(
|
||||
DeviceMode::Normal,
|
||||
))
|
||||
.unwrap();
|
||||
@@ -608,7 +608,7 @@ mod tests {
|
||||
);
|
||||
|
||||
for tx in tb.mgm_report_tx.iter() {
|
||||
tx.send(models::acs::mgm::response::ModeResponse::Mode(
|
||||
tx.send(types::acs::mgm::response::ModeResponse::Mode(
|
||||
DeviceMode::Off,
|
||||
))
|
||||
.unwrap();
|
||||
@@ -621,13 +621,13 @@ mod tests {
|
||||
let request = rx.try_recv().unwrap();
|
||||
assert_eq!(
|
||||
request,
|
||||
models::acs::mgm::request::ModeRequest::SetMode(DeviceMode::Normal)
|
||||
types::acs::mgm::request::ModeRequest::SetMode(DeviceMode::Normal)
|
||||
);
|
||||
}
|
||||
|
||||
// Let the mode keeping fail.
|
||||
for tx in tb.mgm_report_tx.iter() {
|
||||
tx.send(models::acs::mgm::response::ModeResponse::Mode(
|
||||
tx.send(types::acs::mgm::response::ModeResponse::Mode(
|
||||
DeviceMode::Off,
|
||||
))
|
||||
.unwrap();
|
||||
|
||||
@@ -4,16 +4,16 @@ use std::{
|
||||
time::Duration,
|
||||
};
|
||||
|
||||
use models::{
|
||||
ComponentId,
|
||||
acs::subsystem::{Mode, response},
|
||||
};
|
||||
use satrs::{
|
||||
mode_tree::{ModeStoreProvider, ModeStoreVec, SequenceModeTables, TargetModeTables},
|
||||
spacepackets::CcsdsPacketIdAndPsc,
|
||||
subsystem::SubsystemCommandingHelper,
|
||||
};
|
||||
use satrs_example::{ModeHelper, TmtcQueues};
|
||||
use types::{
|
||||
ComponentId,
|
||||
acs::subsystem::{Mode, response},
|
||||
};
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct TransitionInfo {
|
||||
@@ -29,16 +29,16 @@ pub enum TransitionState {
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct ChildModes {
|
||||
mgm_assembly_mode: models::acs::mgm_assembly::Mode,
|
||||
mgt_mode: models::acs::mgt::Mode,
|
||||
controller_mode: models::acs::ctrl::Mode,
|
||||
mgm_assembly_mode: types::acs::mgm_assembly::Mode,
|
||||
mgt_mode: types::acs::mgt::Mode,
|
||||
controller_mode: types::acs::ctrl::Mode,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct TransitionCommands {
|
||||
mgm_assembly_mode: Option<(models::acs::mgm_assembly::Mode, TransitionInfo)>,
|
||||
mgt_mode: Option<(models::acs::mgt::Mode, TransitionInfo)>,
|
||||
controller_mode: Option<(models::acs::ctrl::Mode, TransitionInfo)>,
|
||||
mgm_assembly_mode: Option<(types::acs::mgm_assembly::Mode, TransitionInfo)>,
|
||||
mgt_mode: Option<(types::acs::mgt::Mode, TransitionInfo)>,
|
||||
controller_mode: Option<(types::acs::ctrl::Mode, TransitionInfo)>,
|
||||
}
|
||||
|
||||
const OFF_SEQUENCE: [TransitionCommands; 2] = [
|
||||
@@ -46,7 +46,7 @@ const OFF_SEQUENCE: [TransitionCommands; 2] = [
|
||||
mgm_assembly_mode: None,
|
||||
mgt_mode: None,
|
||||
controller_mode: Some((
|
||||
models::acs::ctrl::Mode::Passive,
|
||||
types::acs::ctrl::Mode::Passive,
|
||||
TransitionInfo {
|
||||
check_mode_reached: true,
|
||||
},
|
||||
@@ -54,13 +54,13 @@ const OFF_SEQUENCE: [TransitionCommands; 2] = [
|
||||
},
|
||||
TransitionCommands {
|
||||
mgm_assembly_mode: Some((
|
||||
models::acs::mgm_assembly::Mode::Device(models::DeviceMode::Off),
|
||||
types::acs::mgm_assembly::Mode::Device(types::DeviceMode::Off),
|
||||
TransitionInfo {
|
||||
check_mode_reached: false,
|
||||
},
|
||||
)),
|
||||
mgt_mode: Some((
|
||||
models::acs::mgt::Mode::Off,
|
||||
types::acs::mgt::Mode::Off,
|
||||
TransitionInfo {
|
||||
check_mode_reached: false,
|
||||
},
|
||||
@@ -72,13 +72,13 @@ const OFF_SEQUENCE: [TransitionCommands; 2] = [
|
||||
const SAFE_SEQUENCE: [TransitionCommands; 2] = [
|
||||
TransitionCommands {
|
||||
mgm_assembly_mode: Some((
|
||||
models::acs::mgm_assembly::Mode::Device(models::DeviceMode::Normal),
|
||||
types::acs::mgm_assembly::Mode::Device(types::DeviceMode::Normal),
|
||||
TransitionInfo {
|
||||
check_mode_reached: false,
|
||||
},
|
||||
)),
|
||||
mgt_mode: Some((
|
||||
models::acs::mgt::Mode::Normal,
|
||||
types::acs::mgt::Mode::Normal,
|
||||
TransitionInfo {
|
||||
check_mode_reached: false,
|
||||
},
|
||||
@@ -89,7 +89,7 @@ const SAFE_SEQUENCE: [TransitionCommands; 2] = [
|
||||
mgm_assembly_mode: None,
|
||||
mgt_mode: None,
|
||||
controller_mode: Some((
|
||||
models::acs::ctrl::Mode::Safe,
|
||||
types::acs::ctrl::Mode::Safe,
|
||||
TransitionInfo {
|
||||
check_mode_reached: false,
|
||||
},
|
||||
@@ -99,21 +99,21 @@ const SAFE_SEQUENCE: [TransitionCommands; 2] = [
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct ModeRequestSenders {
|
||||
pub mode_request_ctrl: SyncSender<models::acs::ctrl::request::ModeRequest>,
|
||||
pub mode_request_assy: SyncSender<models::acs::mgm_assembly::request::ModeRequest>,
|
||||
pub mode_request_mgt: SyncSender<models::acs::mgt::request::ModeRequest>,
|
||||
pub mode_request_ctrl: SyncSender<types::acs::ctrl::request::ModeRequest>,
|
||||
pub mode_request_assy: SyncSender<types::acs::mgm_assembly::request::ModeRequest>,
|
||||
pub mode_request_mgt: SyncSender<types::acs::mgt::request::ModeRequest>,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct ModeReportReceivers {
|
||||
pub mode_response_ctrl: Receiver<models::acs::ctrl::response::ModeReport>,
|
||||
pub mode_response_assy: Receiver<models::acs::mgm_assembly::response::ModeResponse>,
|
||||
pub mode_response_mgt: Receiver<models::acs::mgt::response::ModeReport>,
|
||||
pub mode_response_ctrl: Receiver<types::acs::ctrl::response::ModeReport>,
|
||||
pub mode_response_assy: Receiver<types::acs::mgm_assembly::response::ModeResponse>,
|
||||
pub mode_response_mgt: Receiver<types::acs::mgt::response::ModeReport>,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Subsystem {
|
||||
mode_helper: ModeHelper<models::acs::subsystem::Mode, TransitionState>,
|
||||
mode_helper: ModeHelper<types::acs::subsystem::Mode, TransitionState>,
|
||||
transition_step: usize,
|
||||
current_child_modes: Option<ChildModes>,
|
||||
mode_request_senders: ModeRequestSenders,
|
||||
@@ -134,19 +134,19 @@ impl Subsystem {
|
||||
mode_store_vec
|
||||
.add_component(
|
||||
ComponentId::AcsMgmAssembly as satrs::ComponentId,
|
||||
models::acs::mgm_assembly::Mode::NoModeKeeping.into(),
|
||||
types::acs::mgm_assembly::Mode::NoModeKeeping.into(),
|
||||
)
|
||||
.unwrap();
|
||||
mode_store_vec
|
||||
.add_component(
|
||||
ComponentId::AcsController as satrs::ComponentId,
|
||||
models::acs::ctrl::Mode::Passive.into(),
|
||||
types::acs::ctrl::Mode::Passive.into(),
|
||||
)
|
||||
.unwrap();
|
||||
mode_store_vec
|
||||
.add_component(
|
||||
ComponentId::AcsMgt as satrs::ComponentId,
|
||||
models::acs::mgt::Mode::Off.into(),
|
||||
types::acs::mgt::Mode::Off.into(),
|
||||
)
|
||||
.unwrap();
|
||||
|
||||
@@ -156,7 +156,7 @@ impl Subsystem {
|
||||
|
||||
Self {
|
||||
mode_helper: ModeHelper::new(
|
||||
models::acs::subsystem::Mode::Off,
|
||||
types::acs::subsystem::Mode::Off,
|
||||
Duration::from_millis(2000),
|
||||
),
|
||||
current_child_modes: None,
|
||||
@@ -181,14 +181,14 @@ impl Subsystem {
|
||||
match self.tmtc_queues.tc_rx.try_recv() {
|
||||
Ok(packet) => {
|
||||
let tc_id = CcsdsPacketIdAndPsc::new_from_ccsds_packet(&packet.sp_header);
|
||||
match postcard::from_bytes::<models::acs::subsystem::request::Request>(
|
||||
match postcard::from_bytes::<types::acs::subsystem::request::Request>(
|
||||
&packet.payload,
|
||||
) {
|
||||
Ok(request) => match request {
|
||||
models::acs::subsystem::request::Request::Ping => {
|
||||
types::acs::subsystem::request::Request::Ping => {
|
||||
self.send_telemetry(Some(tc_id), response::Response::Ok)
|
||||
}
|
||||
models::acs::subsystem::request::Request::Mode(mode_request) => {
|
||||
types::acs::subsystem::request::Request::Mode(mode_request) => {
|
||||
self.handle_mode_request(mode_request);
|
||||
}
|
||||
},
|
||||
@@ -216,7 +216,7 @@ impl Subsystem {
|
||||
if let Some((target_mode, _info)) = &step.mgm_assembly_mode {
|
||||
self.mode_request_senders
|
||||
.mode_request_assy
|
||||
.send(models::acs::mgm_assembly::request::ModeRequest::SetMode(
|
||||
.send(types::acs::mgm_assembly::request::ModeRequest::SetMode(
|
||||
*target_mode,
|
||||
))
|
||||
.expect("failed to send mode request to MGM assembly");
|
||||
@@ -224,15 +224,13 @@ impl Subsystem {
|
||||
if let Some((target_mode, _info)) = &step.mgt_mode {
|
||||
self.mode_request_senders
|
||||
.mode_request_mgt
|
||||
.send(models::acs::mgt::request::ModeRequest::SetMode(
|
||||
*target_mode,
|
||||
))
|
||||
.send(types::acs::mgt::request::ModeRequest::SetMode(*target_mode))
|
||||
.expect("failed to send mode request to MGM assembly");
|
||||
}
|
||||
if let Some((target_mode, _info)) = &step.controller_mode {
|
||||
self.mode_request_senders
|
||||
.mode_request_ctrl
|
||||
.send(models::acs::ctrl::request::ModeRequest::SetMode(
|
||||
.send(types::acs::ctrl::request::ModeRequest::SetMode(
|
||||
*target_mode,
|
||||
))
|
||||
.expect("failed to send mode request to MGM assembly");
|
||||
@@ -241,10 +239,10 @@ impl Subsystem {
|
||||
|
||||
pub fn handle_mode_request(
|
||||
&mut self,
|
||||
mode_request: models::acs::subsystem::request::ModeRequest,
|
||||
mode_request: types::acs::subsystem::request::ModeRequest,
|
||||
) {
|
||||
match mode_request {
|
||||
models::acs::subsystem::request::ModeRequest::SetMode(target_mode) => {
|
||||
types::acs::subsystem::request::ModeRequest::SetMode(target_mode) => {
|
||||
self.mode_helper.start(target_mode);
|
||||
self.transition_step = 0;
|
||||
let first_step = Self::transition_sequence_for_mode(target_mode)
|
||||
@@ -252,7 +250,7 @@ impl Subsystem {
|
||||
.expect("empty transition table");
|
||||
self.execute_transition_step(first_step);
|
||||
}
|
||||
models::acs::subsystem::request::ModeRequest::ReadMode => {
|
||||
types::acs::subsystem::request::ModeRequest::ReadMode => {
|
||||
self.send_telemetry(
|
||||
None,
|
||||
response::Response::Mode(response::ModeResponse::Mode(
|
||||
@@ -266,7 +264,7 @@ impl Subsystem {
|
||||
pub fn send_telemetry(
|
||||
&self,
|
||||
tc_id: Option<CcsdsPacketIdAndPsc>,
|
||||
response: models::acs::subsystem::response::Response,
|
||||
response: types::acs::subsystem::response::Response,
|
||||
) {
|
||||
match crate::ccsds::pack_ccsds_tm_packet_for_now(Self::ID, tc_id, &response) {
|
||||
Ok(packet) => {
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
use arbitrary_int::u11;
|
||||
use models::{Apid, ComponentId, Message, TmHeader, ccsds::CcsdsTmPacketOwned};
|
||||
use satrs::spacepackets::{
|
||||
CcsdsPacketIdAndPsc, SpHeader,
|
||||
time::{StdTimestampError, cds::CdsTime},
|
||||
};
|
||||
use serde::Serialize;
|
||||
use types::{Apid, ComponentId, Message, TmHeader, ccsds::CcsdsTmPacketOwned};
|
||||
|
||||
#[derive(Debug, thiserror::Error)]
|
||||
pub enum CcsdsTmCreationError {
|
||||
|
||||
@@ -39,14 +39,14 @@ pub const SERVER_PORT: u16 = 7301;
|
||||
lazy_static! {
|
||||
pub static ref PACKET_ID_VALIDATOR: HashSet<PacketId> = {
|
||||
let mut set = HashSet::new();
|
||||
for id in models::Apid::iter() {
|
||||
for id in types::Apid::iter() {
|
||||
set.insert(PacketId::new(PacketType::Tc, true, u11::new(id as u16)));
|
||||
}
|
||||
set
|
||||
};
|
||||
pub static ref APID_VALIDATOR: HashSet<u16> = {
|
||||
let mut set = HashSet::new();
|
||||
for id in models::Apid::iter() {
|
||||
for id in types::Apid::iter() {
|
||||
set.insert(id as u16);
|
||||
}
|
||||
set
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
use models::{
|
||||
use satrs::spacepackets::CcsdsPacketIdAndPsc;
|
||||
use types::{
|
||||
ComponentId,
|
||||
ccsds::{CcsdsTcPacketOwned, CcsdsTmPacketOwned},
|
||||
control,
|
||||
};
|
||||
use satrs::spacepackets::CcsdsPacketIdAndPsc;
|
||||
|
||||
use crate::ccsds::pack_ccsds_tm_packet_for_now;
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
use derive_new::new;
|
||||
use models::pcdu::{SwitchId, SwitchRequest, SwitchState, SwitchStateBinary};
|
||||
use std::{cell::RefCell, collections::VecDeque, sync::mpsc, time::Duration};
|
||||
use types::pcdu::{SwitchId, SwitchRequest, SwitchState, SwitchStateBinary};
|
||||
|
||||
use satrs::{
|
||||
queue::GenericSendError,
|
||||
|
||||
@@ -5,14 +5,6 @@ use std::{
|
||||
};
|
||||
|
||||
use derive_new::new;
|
||||
use models::{
|
||||
ComponentId, DeviceMode,
|
||||
ccsds::{CcsdsTcPacketOwned, CcsdsTmPacketOwned},
|
||||
pcdu::{
|
||||
self, SwitchId, SwitchMapBinary, SwitchMapBinaryWrapper, SwitchRequest, SwitchState,
|
||||
SwitchStateBinary, SwitchesBitfield,
|
||||
},
|
||||
};
|
||||
use num_enum::{IntoPrimitive, TryFromPrimitive};
|
||||
use satrs::{request::GenericMessage, spacepackets::CcsdsPacketIdAndPsc};
|
||||
use satrs_example::TimestampHelper;
|
||||
@@ -22,6 +14,14 @@ use satrs_minisim::{
|
||||
};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use strum::IntoEnumIterator as _;
|
||||
use types::{
|
||||
ComponentId, DeviceMode,
|
||||
ccsds::{CcsdsTcPacketOwned, CcsdsTmPacketOwned},
|
||||
pcdu::{
|
||||
self, SwitchId, SwitchMapBinary, SwitchMapBinaryWrapper, SwitchRequest, SwitchState,
|
||||
SwitchStateBinary, SwitchesBitfield,
|
||||
},
|
||||
};
|
||||
|
||||
use crate::ccsds::pack_ccsds_tm_packet_for_now;
|
||||
|
||||
@@ -531,21 +531,21 @@ mod tests {
|
||||
use std::sync::mpsc;
|
||||
|
||||
use arbitrary_int::u11;
|
||||
use models::{
|
||||
Apid, TcHeader,
|
||||
pcdu::{SwitchMapBinary, SwitchStateBinary},
|
||||
};
|
||||
use satrs::{
|
||||
request::{GenericMessage, MessageMetadata},
|
||||
spacepackets::SpacePacketHeader,
|
||||
};
|
||||
use types::{
|
||||
Apid, TcHeader,
|
||||
pcdu::{SwitchMapBinary, SwitchStateBinary},
|
||||
};
|
||||
|
||||
use super::*;
|
||||
|
||||
pub fn create_request_tc(
|
||||
request: models::pcdu::request::Request,
|
||||
) -> models::ccsds::CcsdsTcPacketOwned {
|
||||
models::ccsds::CcsdsTcPacketOwned::new_with_request(
|
||||
request: types::pcdu::request::Request,
|
||||
) -> types::ccsds::CcsdsTcPacketOwned {
|
||||
types::ccsds::CcsdsTcPacketOwned::new_with_request(
|
||||
SpacePacketHeader::new_from_apid(u11::new(Apid::Eps as u16)),
|
||||
TcHeader::new(ComponentId::EpsPcdu, request.message_type()),
|
||||
request,
|
||||
@@ -589,8 +589,8 @@ mod tests {
|
||||
|
||||
#[allow(dead_code)]
|
||||
pub struct PcduTestbench {
|
||||
pub mode_request_tx: mpsc::SyncSender<models::pcdu::request::Request>,
|
||||
pub mode_reply_rx_to_parent: mpsc::Receiver<models::pcdu::response::Response>,
|
||||
pub mode_request_tx: mpsc::SyncSender<types::pcdu::request::Request>,
|
||||
pub mode_reply_rx_to_parent: mpsc::Receiver<types::pcdu::response::Response>,
|
||||
pub tc_tx: mpsc::SyncSender<CcsdsTcPacketOwned>,
|
||||
pub tm_rx: mpsc::Receiver<CcsdsTmPacketOwned>,
|
||||
pub switch_request_tx: mpsc::Sender<GenericMessage<SwitchRequest>>,
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
use models::{ComponentId, Event, Message, ccsds::CcsdsTmPacketOwned, control};
|
||||
use types::{ComponentId, Event, Message, ccsds::CcsdsTmPacketOwned, control};
|
||||
|
||||
use crate::ccsds::pack_ccsds_tm_packet_for_now;
|
||||
|
||||
|
||||
@@ -4,10 +4,10 @@ use std::net::{SocketAddr, UdpSocket};
|
||||
use std::sync::{Arc, Mutex, mpsc};
|
||||
|
||||
use log::warn;
|
||||
use models::ccsds::CcsdsTmPacketOwned;
|
||||
use satrs::hal::std::udp_server::{ReceiveResult, UdpTcServer};
|
||||
use satrs::pus::HandlingStatus;
|
||||
use satrs::queue::GenericSendError;
|
||||
use types::ccsds::CcsdsTmPacketOwned;
|
||||
|
||||
use crate::tmtc::sender::TmTcSender;
|
||||
|
||||
@@ -112,7 +112,6 @@ mod tests {
|
||||
|
||||
use arbitrary_int::traits::Integer as _;
|
||||
use arbitrary_int::u14;
|
||||
use models::Apid;
|
||||
use satrs::spacepackets::ecss::{CreatorConfig, MessageTypeId};
|
||||
use satrs::{
|
||||
ComponentId,
|
||||
@@ -122,6 +121,7 @@ mod tests {
|
||||
},
|
||||
};
|
||||
use satrs_example::config::OBSW_SERVER_ADDR;
|
||||
use types::Apid;
|
||||
|
||||
use crate::tmtc::sender::MockSender;
|
||||
|
||||
|
||||
@@ -5,9 +5,9 @@ use std::{
|
||||
time::{Duration, Instant},
|
||||
};
|
||||
|
||||
pub use models::ComponentId;
|
||||
use models::ccsds::{CcsdsTcPacketOwned, CcsdsTmPacketOwned};
|
||||
use satrs::spacepackets::{CcsdsPacketIdAndPsc, time::cds::CdsTime};
|
||||
pub use types::ComponentId;
|
||||
use types::ccsds::{CcsdsTcPacketOwned, CcsdsTmPacketOwned};
|
||||
|
||||
pub mod config;
|
||||
|
||||
|
||||
@@ -20,7 +20,6 @@ use interface::{
|
||||
};
|
||||
use log::info;
|
||||
use logger::setup_logger;
|
||||
use models::{ComponentId, DeviceMode};
|
||||
use satrs::{
|
||||
hal::std::{tcp_server::ServerConfig, udp_server::UdpTcServer},
|
||||
pus::HandlingStatus,
|
||||
@@ -35,6 +34,7 @@ use satrs_example::{
|
||||
};
|
||||
use tmtc::sender::TmTcSender;
|
||||
use tmtc::{tc_source::TcSourceTask, tm_sink::TmSink};
|
||||
use types::{ComponentId, DeviceMode};
|
||||
|
||||
use crate::{
|
||||
acs::{mgm, mgm_assembly, subsystem},
|
||||
@@ -263,7 +263,7 @@ fn main() {
|
||||
|
||||
// The PCDU is a critical component which should be in normal mode immediately.
|
||||
pcdu_handler_mode_tx
|
||||
.send(models::pcdu::request::Request::Mode(DeviceMode::Normal))
|
||||
.send(types::pcdu::request::Request::Mode(DeviceMode::Normal))
|
||||
.expect("sending initial mode request failed");
|
||||
|
||||
info!("Starting TMTC and UDP task");
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
use models::{ComponentId, TcHeader, ccsds::CcsdsTcPacketOwned};
|
||||
use satrs::{
|
||||
pus::HandlingStatus,
|
||||
spacepackets::{CcsdsPacketReader, ChecksumType},
|
||||
@@ -8,6 +7,7 @@ use std::{
|
||||
collections::HashMap,
|
||||
sync::mpsc::{self, TryRecvError},
|
||||
};
|
||||
use types::{ComponentId, TcHeader, ccsds::CcsdsTcPacketOwned};
|
||||
|
||||
pub type CcsdsDistributor = HashMap<ComponentId, std::sync::mpsc::SyncSender<CcsdsTcPacketOwned>>;
|
||||
|
||||
|
||||
@@ -4,8 +4,8 @@ use std::{
|
||||
};
|
||||
|
||||
use arbitrary_int::{u11, u14};
|
||||
use models::ccsds::CcsdsTmPacketOwned;
|
||||
use satrs::spacepackets::seq_count::{SequenceCounter, SequenceCounterCcsdsSimple};
|
||||
use types::ccsds::CcsdsTmPacketOwned;
|
||||
|
||||
use crate::interface::tcp::SyncTcpTmSource;
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[package]
|
||||
name = "models"
|
||||
name = "types"
|
||||
version = "0.1.0"
|
||||
edition = "2024"
|
||||
|
||||
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
Reference in new issue
Block a user