diff --git a/Cargo.lock b/Cargo.lock index c96eb18..0a312c6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -172,7 +172,8 @@ dependencies = [ [[package]] name = "cobs" version = "0.2.3" -source = "git+https://github.com/robamu/cobs.rs.git?branch=all_features#c70a7f30fd00a7cbdb7666dec12b437977385d40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67ba02a97a2bd10f4b59b25c7973101c79642302776489e030cd13cdab09ed15" [[package]] name = "colorchoice" @@ -780,8 +781,9 @@ checksum = "e86697c916019a8588c99b5fac3cead74ec0b4b819707a682fd4d23fa0ce1ba1" [[package]] name = "satrs" -version = "0.2.0-rc.5" -source = "git+https://egit.irs.uni-stuttgart.de/rust/sat-rs.git?branch=main#9ffe4d0ae02064444da606b2cd1a3c0dd6858fbb" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9de5d1f732620b9623289e0e5e3cb480f6bc8d8704f528ca2875dfe200ba90b2" dependencies = [ "bus", "cobs", diff --git a/Cargo.toml b/Cargo.toml index 5585622..3c4c557 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -24,9 +24,9 @@ socket2 = "0.5" once_cell = "1.19" [dependencies.satrs] -version = "0.2.0-rc.5" -git = "https://egit.irs.uni-stuttgart.de/rust/sat-rs.git" -branch = "main" +version = "0.2.0" +# git = "https://egit.irs.uni-stuttgart.de/rust/sat-rs.git" +# branch = "main" features = ["test_util"] [dependencies.satrs-mib] diff --git a/README.md b/README.md index e35f4eb..3809d1f 100644 --- a/README.md +++ b/README.md @@ -17,6 +17,17 @@ You might need to set the [`CROSS_CONTAINER_ENGINE`](https://github.com/cross-rs and [`CROSS_ROOTLESS_CONTAINER_ENGINE`](https://github.com/cross-rs/cross/blob/main/docs/environment_variables.md#configuring-cross-with-environment-variables) variables manually before calling cross. +The OPS-SAT software filesystem handling will determine a home path at the start of the software. +This home path is used for various mechanisms inside the OPS-SAT infrastructure. + +Currently, there are 3 possible configurations: + +1. If the software is built with the `host` feature, the HOME path will be the current path the + software is run at. +2. If the `host` feature is not set and the `/home/exp278` folder exists, that folder will be + the home directory. +3. Otherwise, the default OS home directory will be the home directory. + ### Debug Build ```sh diff --git a/src/config.rs b/src/config.rs index 323871e..3abfde0 100644 --- a/src/config.rs +++ b/src/config.rs @@ -55,32 +55,30 @@ pub enum GroupId { pub const TEST_EVENT: EventU32TypedSev = EventU32TypedSev::::new(GroupId::Tmtc as u16, 0); -pub fn set_up_home_path() { +pub fn set_up_home_path() -> PathBuf { let mut home_path = PathBuf::new(); - let home_path_default = homedir::get_my_home() - .expect("Getting home dir from OS failed.") - .expect("No home dir found."); - - home_path.push(if Path::new(HOME_FOLDER_EXPERIMENT).exists() { - HOME_FOLDER_EXPERIMENT + if cfg!(feature = "host") { + home_path = std::env::current_dir() + .expect("getting current dir failed") + .to_path_buf(); } else { - home_path_default - .to_str() - .expect("Error converting to string.") - }); + let home_path_default = homedir::get_my_home() + .expect("Getting home dir from OS failed.") + .expect("No home dir found."); + if Path::new(HOME_FOLDER_EXPERIMENT).exists() { + home_path.push(HOME_FOLDER_EXPERIMENT); + } else { + home_path = home_path_default; + } + } HOME_PATH - .set(home_path) - .expect("attempting to set once cell twice") + .set(home_path.clone()) + .expect("attempting to set once cell twice"); + home_path } -pub fn set_up_low_prio_ground_dir(base_path: PathBuf) { - /* - #[cfg(feature = "host")] - let mut to_ground_lp_dir = std::env::current_dir().expect("getting current dir failed"); - #[cfg(not(feature = "host"))] - let mut to_ground_lp_dir = home_path; - */ - let mut to_ground_lp_dir = base_path.to_path_buf(); +pub fn set_up_low_prio_ground_dir(home_path: PathBuf) { + let mut to_ground_lp_dir = home_path.to_path_buf(); to_ground_lp_dir.push(TO_GROUND_LP_FOLDER_NAME); if !Path::new(&to_ground_lp_dir).exists() { log::info!( @@ -99,14 +97,8 @@ pub fn set_up_low_prio_ground_dir(base_path: PathBuf) { .expect("attemting to set once cell twice"); } -pub fn set_up_ground_dir(base_path: PathBuf) { - /* - #[cfg(feature = "host")] - let mut to_ground_dir = std::env::current_dir().expect("getting current dir failed"); - #[cfg(not(feature = "host"))] - let mut to_ground_dir = HOME_PATH.clone(); - */ - let mut to_ground_dir = base_path.to_path_buf(); +pub fn set_up_ground_dir(home_path: PathBuf) { + let mut to_ground_dir = home_path.to_path_buf(); to_ground_dir.push(TO_GROUND_FOLDER_NAME); if !Path::new(&to_ground_dir).exists() { log::info!("creating to ground directory at {:?}", to_ground_dir); diff --git a/src/controller.rs b/src/controller.rs index 16408aa..7920598 100644 --- a/src/controller.rs +++ b/src/controller.rs @@ -54,11 +54,10 @@ pub struct ControllerPathCollection { pub to_ground_low_prio_dir: PathBuf, } -impl Default for ControllerPathCollection { - fn default() -> Self { - let home_path = HOME_PATH.get().unwrap(); - let mut home_path_stop_file = PathBuf::new(); - home_path_stop_file.push(home_path); +impl ControllerPathCollection { + pub fn new(base_path: &Path) -> Self { + let home_path = base_path.to_path_buf(); + let mut home_path_stop_file = home_path.clone(); home_path_stop_file.push(STOP_FILE_NAME); let mut tmp_path_stop_file = temp_dir(); tmp_path_stop_file.push(STOP_FILE_NAME); @@ -77,6 +76,7 @@ impl Default for ControllerPathCollection { } } } + pub struct ExperimentController { pub composite_request_rx: mpsc::Receiver>, pub action_reply_tx: mpsc::Sender>, diff --git a/src/main.rs b/src/main.rs index faa467a..46c78d1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -58,17 +58,11 @@ fn main() { println!("OPS-SAT Rust Experiment OBSW v{}", version_str); setup_logger().expect("setting up logging with fern failed"); - set_up_home_path(); - #[cfg(feature = "host")] - let base_dir = std::env::current_dir() - .expect("getting current dir failed") - .to_path_buf(); - #[cfg(not(feature = "host"))] - let base_dir = HOME_PATH.get().unwrap(); - set_up_low_prio_ground_dir(base_dir.clone()); - set_up_ground_dir(base_dir.clone()); + let home_path = set_up_home_path(); + set_up_low_prio_ground_dir(home_path.clone()); + set_up_ground_dir(home_path.clone()); - let app_cfg = create_app_config(base_dir.clone()); + let app_cfg = create_app_config(home_path.clone()); info!("App Configuration: {:?}", app_cfg); let stop_signal = Arc::new(AtomicBool::new(false)); @@ -201,7 +195,7 @@ fn main() { stop_signal.clone(), ); - let mut home_path_stop_file = base_dir.clone(); + let mut home_path_stop_file = home_path.clone(); home_path_stop_file.push(STOP_FILE_NAME); let mut tmp_path_stop_file = temp_dir(); tmp_path_stop_file.push(STOP_FILE_NAME); @@ -209,7 +203,7 @@ fn main() { controller_composite_rx, pus_action_reply_tx.clone(), stop_signal.clone(), - ControllerPathCollection::default(), + ControllerPathCollection::new(&home_path), ); let mut tcp_spp_client = TcpSppClientStd::new( diff --git a/src/pus/event.rs b/src/pus/event.rs index ffd6fb6..b666446 100644 --- a/src/pus/event.rs +++ b/src/pus/event.rs @@ -66,7 +66,8 @@ impl DirectPusService for EventServiceWrapper { Self::SERVICE_STR, e ); - return HandlingStatus::HandledOne; + // To avoid permanent loops. + return HandlingStatus::Empty; } match result.unwrap() { DirectPusPacketHandlerResult::Handled(handling_status) => return handling_status, diff --git a/src/pus/mod.rs b/src/pus/mod.rs index d8bba72..607d09d 100644 --- a/src/pus/mod.rs +++ b/src/pus/mod.rs @@ -171,7 +171,7 @@ pub trait TargetedPusService { let result = self.poll_and_handle_next_tc(time_stamp); if let Err(e) = result { log::error!( - "PUS service {}({})packet handling error: {:?}", + "PUS service {}({}) packet handling error: {:?}", Self::SERVICE_ID, Self::SERVICE_STR, e @@ -187,7 +187,7 @@ pub trait TargetedPusService { self.poll_and_handle_next_reply(time_stamp) .unwrap_or_else(|e| { warn!( - "PUS servce {}({}): Handling reply failed with error {:?}", + "PUS service {}({}): handling reply failed with error {:?}", Self::SERVICE_ID, Self::SERVICE_STR, e diff --git a/src/pus/scheduler.rs b/src/pus/scheduler.rs index cf3d08a..dff883f 100644 --- a/src/pus/scheduler.rs +++ b/src/pus/scheduler.rs @@ -57,7 +57,8 @@ impl DirectPusService for SchedulingService { Self::SERVICE_STR, e ); - return HandlingStatus::HandledOne; + // To avoid permanent loops. + return HandlingStatus::Empty; } match result.unwrap() { DirectPusPacketHandlerResult::Handled(handling_status) => return handling_status, diff --git a/src/pus/test.rs b/src/pus/test.rs index 31830ea..5eb8ad7 100644 --- a/src/pus/test.rs +++ b/src/pus/test.rs @@ -67,7 +67,8 @@ impl DirectPusService for TestCustomServiceWrapper { Self::SERVICE_STR, e ); - return HandlingStatus::HandledOne; + // To avoid permanent loops. + return HandlingStatus::Empty; } match res.unwrap() { DirectPusPacketHandlerResult::Handled(handling_status) => {