diff --git a/satrs-core/Cargo.toml b/satrs-core/Cargo.toml index 29d4122..2d25971 100644 --- a/satrs-core/Cargo.toml +++ b/satrs-core/Cargo.toml @@ -5,20 +5,20 @@ edition = "2021" rust-version = "1.61" authors = ["Robin Mueller "] description = "Core components of the sat-rs framework to build software for remote systems" -homepage = "https://egit.irs.uni-stuttgart.de/rust/satrs-core" -repository = "https://egit.irs.uni-stuttgart.de/rust/satrs-core" +homepage = "https://egit.irs.uni-stuttgart.de/rust/sat-rs" +repository = "https://egit.irs.uni-stuttgart.de/rust/sat-rs" license = "Apache-2.0" keywords = ["no-std", "space", "aerospace"] categories = ["aerospace", "aerospace::space-protocols", "no-std", "hardware-support", "embedded"] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -delegate = ">=0.8, <0.11" +delegate = ">0.7, <=0.10" paste = "1" embed-doc-image = "0.1" [dependencies.num_enum] -version = "0.6" +version = ">0.5, <=0.7" default-features = false [dependencies.dyn-clone] @@ -61,15 +61,16 @@ default-features = false optional = true [dependencies.spacepackets] -# version = "0.6" -# path = "../spacepackets" -git = "https://egit.irs.uni-stuttgart.de/rust/spacepackets.git" -rev = "62df510147b" +version = "0.7.0-beta.1" +# path = "../../spacepackets" +# git = "https://egit.irs.uni-stuttgart.de/rust/spacepackets.git" +# rev = "" +# branch = "" default-features = false [dev-dependencies] serde = "1" -zerocopy = "0.6" +zerocopy = "0.7" once_cell = "1.13" serde_json = "1" diff --git a/satrs-core/README.md b/satrs-core/README.md index 94299c8..a90a2e4 100644 --- a/satrs-core/README.md +++ b/satrs-core/README.md @@ -1,5 +1,9 @@ +[![Crates.io](https://img.shields.io/crates/v/satrs-core)](https://crates.io/crates/satrs-core) +[![docs.rs](https://img.shields.io/docsrs/satrs-core)](https://docs.rs/satrs-core) + satrs-core ====== This crate contains the core components of the sat-rs framework. -You can find more information on [homepage](https://egit.irs.uni-stuttgart.de/rust/sat-rs) +You can find more information on [homepage](https://egit.irs.uni-stuttgart.de/rust/sat-rs). + diff --git a/satrs-core/release-checklist.md b/satrs-core/release-checklist.md new file mode 100644 index 0000000..e8b8ee3 --- /dev/null +++ b/satrs-core/release-checklist.md @@ -0,0 +1,25 @@ +Checklist for new releases +======= + +# Pre-Release + +1. Make sure any new modules are documented sufficiently enough and check docs with + `cargo doc --all-features --open`. +2. Bump version specifier in `Cargo.toml`. +3. Update `CHANGELOG.md`: Convert `unreleased` section into version section with date and add new + `unreleased` section. +4. Run `cargo test --all-features`. +5. Run `cargo fmt` and `cargo clippy`. Check `cargo msrv` against MSRV in `Cargo.toml`. +6. Wait for CI/CD results for EGit and Github. These also check cross-compilation for bare-metal + targets. + +# Release + +1. `cargo publish` + +# Post-Release + +1. Create a new annotaged tag and push it with `git tag -a satrs-core-` and + `git push -u origin satrs-core-` +2. Create a new release on `EGit` based on the tag. + diff --git a/satrs-core/src/events.rs b/satrs-core/src/events.rs index 4b4c0c9..20267bd 100644 --- a/satrs-core/src/events.rs +++ b/satrs-core/src/events.rs @@ -33,7 +33,7 @@ use core::marker::PhantomData; use delegate::delegate; use spacepackets::ecss::EcssEnumeration; use spacepackets::util::{ToBeBytes, UnsignedEnum}; -use spacepackets::{ByteConversionError, SizeMissmatch}; +use spacepackets::ByteConversionError; /// Using a type definition allows to change this to u64 in the future more easily pub type LargestEventRaw = u32; @@ -124,10 +124,10 @@ impl EventBase { width: usize, ) -> Result { if buf.len() < width { - return Err(ByteConversionError::ToSliceTooSmall(SizeMissmatch { + return Err(ByteConversionError::ToSliceTooSmall { found: buf.len(), expected: width, - })); + }); } buf.copy_from_slice(raw.to_be_bytes().as_ref()); Ok(raw.written_len()) @@ -783,9 +783,9 @@ mod tests { let err = HIGH_SEV_EVENT.write_to_be_bytes(&mut buf); assert!(err.is_err()); let err = err.unwrap_err(); - if let ByteConversionError::ToSliceTooSmall(missmatch) = err { - assert_eq!(missmatch.expected, 4); - assert_eq!(missmatch.found, 3); + if let ByteConversionError::ToSliceTooSmall { found, expected } = err { + assert_eq!(expected, 4); + assert_eq!(found, 3); } } @@ -795,9 +795,9 @@ mod tests { let err = HIGH_SEV_EVENT_SMALL.write_to_be_bytes(&mut buf); assert!(err.is_err()); let err = err.unwrap_err(); - if let ByteConversionError::ToSliceTooSmall(missmatch) = err { - assert_eq!(missmatch.expected, 2); - assert_eq!(missmatch.found, 1); + if let ByteConversionError::ToSliceTooSmall { found, expected } = err { + assert_eq!(expected, 2); + assert_eq!(found, 1); } } diff --git a/satrs-core/src/mode.rs b/satrs-core/src/mode.rs index 7746572..cdd8f8d 100644 --- a/satrs-core/src/mode.rs +++ b/satrs-core/src/mode.rs @@ -2,7 +2,7 @@ use crate::tmtc::TargetId; use core::mem::size_of; #[cfg(feature = "serde")] use serde::{Deserialize, Serialize}; -use spacepackets::{ByteConversionError, SizeMissmatch}; +use spacepackets::ByteConversionError; #[derive(Debug, Copy, Clone, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] @@ -26,10 +26,10 @@ impl ModeAndSubmode { pub fn from_be_bytes(buf: &[u8]) -> Result { if buf.len() < 6 { - return Err(ByteConversionError::FromSliceTooSmall(SizeMissmatch { + return Err(ByteConversionError::FromSliceTooSmall { expected: 6, found: buf.len(), - })); + }); } Ok(Self { mode: u32::from_be_bytes(buf[0..4].try_into().unwrap()), diff --git a/satrs-core/src/params.rs b/satrs-core/src/params.rs index 9df929b..bc9cc48 100644 --- a/satrs-core/src/params.rs +++ b/satrs-core/src/params.rs @@ -55,7 +55,6 @@ use paste::paste; use spacepackets::ecss::{EcssEnumU16, EcssEnumU32, EcssEnumU64, EcssEnumU8}; use spacepackets::util::UnsignedEnum; use spacepackets::ByteConversionError; -use spacepackets::SizeMissmatch; #[cfg(feature = "alloc")] pub use alloc_mod::*; @@ -80,10 +79,10 @@ macro_rules! param_to_be_bytes_impl { fn write_to_be_bytes(&self, buf: &mut [u8]) -> Result { let raw_len = self.raw_len(); if buf.len() < raw_len { - return Err(ByteConversionError::ToSliceTooSmall(SizeMissmatch { + return Err(ByteConversionError::ToSliceTooSmall { found: buf.len(), expected: raw_len, - })); + }); } buf[0..raw_len].copy_from_slice(&self.to_be_bytes()); Ok(raw_len) @@ -186,10 +185,10 @@ macro_rules! scalar_byte_conversions_impl { fn try_from(v: &[u8]) -> Result { if v.len() < size_of::<$ty>() { - return Err(ByteConversionError::FromSliceTooSmall(SizeMissmatch { + return Err(ByteConversionError::FromSliceTooSmall{ expected: size_of::<$ty>(), found: v.len() - })); + }); } Ok([<$ty:upper>]($ty::from_be_bytes(v[0..size_of::<$ty>()].try_into().unwrap()))) } @@ -225,10 +224,10 @@ macro_rules! pair_byte_conversions_impl { fn try_from(v: &[u8]) -> Result { if v.len() < 2 * size_of::<$ty>() { - return Err(ByteConversionError::FromSliceTooSmall(SizeMissmatch { + return Err(ByteConversionError::FromSliceTooSmall{ expected: 2 * size_of::<$ty>(), found: v.len() - })); + }); } Ok([<$ty:upper Pair>]( $ty::from_be_bytes(v[0..size_of::<$ty>()].try_into().unwrap()), @@ -269,10 +268,10 @@ macro_rules! triplet_to_be_bytes_impl { fn try_from(v: &[u8]) -> Result { if v.len() < 3 * size_of::<$ty>() { - return Err(ByteConversionError::FromSliceTooSmall(SizeMissmatch { + return Err(ByteConversionError::FromSliceTooSmall{ expected: 3 * size_of::<$ty>(), found: v.len() - })); + }); } Ok([<$ty:upper Triplet>]( $ty::from_be_bytes(v[0..size_of::<$ty>()].try_into().unwrap()), diff --git a/satrs-core/src/pool.rs b/satrs-core/src/pool.rs index 526bac3..3e644d3 100644 --- a/satrs-core/src/pool.rs +++ b/satrs-core/src/pool.rs @@ -344,7 +344,7 @@ mod alloc_mod { } /// Pool implementation providing sub-pools with fixed size memory blocks. More details in - /// the [module documentation][super::pool] + /// the [module documentation][crate::pool] pub struct LocalPool { pool_cfg: PoolCfg, pool: Vec>, diff --git a/satrs-core/src/pus/event.rs b/satrs-core/src/pus/event.rs index 954c77d..165493d 100644 --- a/satrs-core/src/pus/event.rs +++ b/satrs-core/src/pus/event.rs @@ -425,12 +425,12 @@ mod tests { let err = reporter.event_info(sender, &time_stamp_empty, event, None); assert!(err.is_err()); let err = err.unwrap_err(); - if let EcssTmtcError::Pus(PusError::ByteConversion(ByteConversionError::ToSliceTooSmall( - missmatch, - ))) = err + if let EcssTmtcError::Pus(PusError::ByteConversion( + ByteConversionError::ToSliceTooSmall { found, expected }, + )) = err { - assert_eq!(missmatch.expected, 4); - assert_eq!(missmatch.found, expected_found_len); + assert_eq!(expected, 4); + assert_eq!(found, expected_found_len); } else { panic!("Unexpected error {:?}", err); } diff --git a/satrs-core/src/pus/mod.rs b/satrs-core/src/pus/mod.rs index 9f9107a..cc05a92 100644 --- a/satrs-core/src/pus/mod.rs +++ b/satrs-core/src/pus/mod.rs @@ -14,7 +14,7 @@ use std::error::Error; use spacepackets::ecss::tc::{PusTcCreator, PusTcReader}; use spacepackets::ecss::tm::PusTmCreator; use spacepackets::ecss::PusError; -use spacepackets::{ByteConversionError, SizeMissmatch, SpHeader}; +use spacepackets::{ByteConversionError, SpHeader}; pub mod event; pub mod event_man; @@ -735,10 +735,10 @@ pub mod std_mod { pub(crate) fn source_buffer_large_enough(cap: usize, len: usize) -> Result<(), EcssTmtcError> { if len > cap { return Err( - PusError::ByteConversion(ByteConversionError::ToSliceTooSmall(SizeMissmatch { + PusError::ByteConversion(ByteConversionError::ToSliceTooSmall { found: cap, expected: len, - })) + }) .into(), ); } diff --git a/satrs-core/src/pus/verification.rs b/satrs-core/src/pus/verification.rs index 9c1fda9..47c2689 100644 --- a/satrs-core/src/pus/verification.rs +++ b/satrs-core/src/pus/verification.rs @@ -1584,12 +1584,12 @@ mod tests { assert_eq!(err_with_token.1, tok); match err_with_token.0 { EcssTmtcError::Pus(PusError::ByteConversion(e)) => match e { - ByteConversionError::ToSliceTooSmall(missmatch) => { + ByteConversionError::ToSliceTooSmall { found, expected } => { assert_eq!( - missmatch.expected, + expected, fail_data.len() + RequestId::SIZE_AS_BYTES + fail_code.size() ); - assert_eq!(missmatch.found, b.rep().allowed_source_data_len()); + assert_eq!(found, b.rep().allowed_source_data_len()); } _ => { panic!("{}", format!("Unexpected error {:?}", e)) diff --git a/satrs-core/src/res_code.rs b/satrs-core/src/res_code.rs index 5b0c64e..2ef7a88 100644 --- a/satrs-core/src/res_code.rs +++ b/satrs-core/src/res_code.rs @@ -2,7 +2,7 @@ use serde::{Deserialize, Serialize}; use spacepackets::ecss::{EcssEnumU16, EcssEnumeration}; use spacepackets::util::UnsignedEnum; -use spacepackets::{ByteConversionError, SizeMissmatch}; +use spacepackets::ByteConversionError; #[derive(Debug, Copy, Clone, PartialEq, Eq)] #[cfg_attr(feature = "serde", derive(Serialize, Deserialize))] @@ -42,10 +42,10 @@ impl UnsignedEnum for ResultU16 { fn write_to_be_bytes(&self, buf: &mut [u8]) -> Result { if buf.len() < 2 { - return Err(ByteConversionError::ToSliceTooSmall(SizeMissmatch { + return Err(ByteConversionError::ToSliceTooSmall { found: buf.len(), expected: 2, - })); + }); } buf[0] = self.group_id; buf[1] = self.unique_id; diff --git a/satrs-core/src/tmtc/ccsds_distrib.rs b/satrs-core/src/tmtc/ccsds_distrib.rs index 6392e80..58fb8c6 100644 --- a/satrs-core/src/tmtc/ccsds_distrib.rs +++ b/satrs-core/src/tmtc/ccsds_distrib.rs @@ -89,7 +89,7 @@ use crate::tmtc::{ReceivesCcsdsTc, ReceivesTcCore}; use alloc::boxed::Box; use core::fmt::{Display, Formatter}; use downcast_rs::Downcast; -use spacepackets::{ByteConversionError, CcsdsPacket, SizeMissmatch, SpHeader}; +use spacepackets::{ByteConversionError, CcsdsPacket, SpHeader}; #[cfg(feature = "std")] use std::error::Error; @@ -174,10 +174,10 @@ impl ReceivesTcCore for CcsdsDistributor { fn pass_tc(&mut self, tc_raw: &[u8]) -> Result<(), Self::Error> { if tc_raw.len() < 7 { return Err(CcsdsError::ByteConversionError( - ByteConversionError::FromSliceTooSmall(SizeMissmatch { + ByteConversionError::FromSliceTooSmall { found: tc_raw.len(), expected: 7, - }), + }, )); } let (sp_header, _) = diff --git a/satrs-core/src/tmtc/pus_distrib.rs b/satrs-core/src/tmtc/pus_distrib.rs index 8fabf6e..a400484 100644 --- a/satrs-core/src/tmtc/pus_distrib.rs +++ b/satrs-core/src/tmtc/pus_distrib.rs @@ -9,8 +9,9 @@ //! [ReceivesTcCore] trait which allows to pass raw packets, CCSDS packets and PUS TC packets into //! it. Upon receiving a packet, it performs the following steps: //! -//! 1. It tries to extract the [SpHeader] and [PusTc] objects from the raw bytestream. If this -//! process fails, a [PusDistribError::PusError] is returned to the user. +//! 1. It tries to extract the [SpHeader] and [spacepackets::ecss::tc::PusTcReader] objects from +//! the raw bytestream. If this process fails, a [PusDistribError::PusError] is returned to the +//! user. //! 2. If it was possible to extract both components, the packet will be passed to the //! [PusServiceProvider::handle_pus_tc_packet] method provided by the user. //! diff --git a/satrs-example/Cargo.toml b/satrs-example/Cargo.toml index 5e6e72f..e564305 100644 --- a/satrs-example/Cargo.toml +++ b/satrs-example/Cargo.toml @@ -4,6 +4,8 @@ version = "0.1.0" edition = "2021" authors = ["Robin Mueller "] default-run = "satrs-example" +homepage = "https://egit.irs.uni-stuttgart.de/rust/sat-rs" +repository = "https://egit.irs.uni-stuttgart.de/rust/sat-rs" [dependencies] fern = "0.6" @@ -13,7 +15,7 @@ crossbeam-channel = "0.5" delegate = "0.10" zerocopy = "0.6" csv = "1" -num_enum = "0.6" +num_enum = "0.7" thiserror = "1" embedded-can = "0.4" #socketcan = "2.0" @@ -22,8 +24,10 @@ num-traits = "0.2" num-derive = "0.3" [dependencies.satrs-core] +# version = "0.1.0-alpha.0" path = "../satrs-core" + [dependencies.satrs-mib] path = "../satrs-mib" diff --git a/satrs-example/src/hk.rs b/satrs-example/src/hk.rs index 5c5bcee..a85a0bd 100644 --- a/satrs-example/src/hk.rs +++ b/satrs-example/src/hk.rs @@ -1,6 +1,6 @@ use derive_new::new; -use zerocopy::AsBytes; use satrs_example::TargetIdWithApid; +use zerocopy::AsBytes; #[derive(Debug, Copy, Clone, PartialEq, Eq)] pub enum AcsHkIds { @@ -33,7 +33,11 @@ impl HkUniqueId { Ok(()) } - pub fn bytes_from_target_id_with_apid(&self, buf: &mut [u8], target_id: TargetIdWithApid) -> Result<(), ()> { + pub fn bytes_from_target_id_with_apid( + &self, + buf: &mut [u8], + target_id: TargetIdWithApid, + ) -> Result<(), ()> { self.bytes_from_target_id(buf, target_id.target) } } diff --git a/satrs-example/src/lib.rs b/satrs-example/src/lib.rs index 9d310e8..ae311a4 100644 --- a/satrs-example/src/lib.rs +++ b/satrs-example/src/lib.rs @@ -1,11 +1,10 @@ -use delegate::delegate; use derive_new::new; use num_enum::{IntoPrimitive, TryFromPrimitive}; use satrs_core::events::{EventU32TypedSev, SeverityInfo}; use satrs_core::objects::ObjectId; -use satrs_core::spacepackets::ecss::tc::{GenericPusTcSecondaryHeader, IsPusTelecommand, PusTc}; +use satrs_core::spacepackets::ecss::tc::IsPusTelecommand; use satrs_core::spacepackets::ecss::PusPacket; -use satrs_core::spacepackets::{ByteConversionError, CcsdsPacket, SizeMissmatch}; +use satrs_core::spacepackets::{ByteConversionError, CcsdsPacket}; use satrs_core::tmtc::TargetId; use std::fmt; use std::net::Ipv4Addr; @@ -13,9 +12,6 @@ use thiserror::Error; use satrs_mib::res_code::{ResultU16, ResultU16Info}; use satrs_mib::resultcode; - -//pub mod can; -//mod can_ids; mod logger; pub type Apid = u16; @@ -55,13 +51,12 @@ impl TargetIdWithApid { tc: &(impl CcsdsPacket + PusPacket + IsPusTelecommand), ) -> Result { if tc.user_data().len() < 4 { - return Err(ByteConversionError::FromSliceTooSmall(SizeMissmatch { + return Err(ByteConversionError::FromSliceTooSmall { found: tc.user_data().len(), expected: 8, - }) + } .into()); } - let target_id = u32::from_be_bytes(tc.user_data()[0..4].try_into().unwrap()); Ok(Self { apid: tc.apid(), target: u32::from_be_bytes(tc.user_data()[0..4].try_into().unwrap()), diff --git a/satrs-example/src/main.rs b/satrs-example/src/main.rs index e70484c..fe55f79 100644 --- a/satrs-example/src/main.rs +++ b/satrs-example/src/main.rs @@ -419,7 +419,9 @@ fn main() { let mut buf: [u8; 8] = [0; 8]; let hk_id = HkUniqueId::new(1); - hk_id.bytes_from_target_id_with_apid(&mut buf, target).unwrap(); + hk_id + .bytes_from_target_id_with_apid(&mut buf, target) + .unwrap(); let pus_tm = PusTmCreator::new( &mut sp_header, sec_header, diff --git a/satrs-mib/Cargo.toml b/satrs-mib/Cargo.toml index e736fec..f6dd23a 100644 --- a/satrs-mib/Cargo.toml +++ b/satrs-mib/Cargo.toml @@ -1,7 +1,17 @@ [package] name = "satrs-mib" -version = "0.1.0" +version = "0.1.0-alpha.0" edition = "2021" +rust-version = "1.61" +authors = ["Robin Mueller "] +description = """ +Helper crate of the sat-rs framework to build a mission information base (MIB) from the +On-Board Software (OBSW) code directly.""" +homepage = "https://egit.irs.uni-stuttgart.de/rust/sat-rs" +repository = "https://egit.irs.uni-stuttgart.de/rust/sat-rs" +license = "Apache-2.0" +keywords = ["no-std", "space", "aerospace"] +categories = ["aerospace", "aerospace::space-protocols", "no-std", "hardware-support", "embedded"] # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html @@ -13,10 +23,12 @@ version = "1" optional = true [dependencies.satrs-core] -path = "../satrs-core" +version = "0.1.0-alpha.0" +# path = "../satrs-core" [dependencies.satrs-mib-codegen] path = "codegen" +version = "0.1.0-alpha.0" [dependencies.serde] version = "1" diff --git a/satrs-mib/codegen/Cargo.toml b/satrs-mib/codegen/Cargo.toml index 26d7409..ccc4d1a 100644 --- a/satrs-mib/codegen/Cargo.toml +++ b/satrs-mib/codegen/Cargo.toml @@ -1,7 +1,11 @@ [package] name = "satrs-mib-codegen" -version = "0.1.0" +version = "0.1.0-alpha.0" edition = "2021" +description = "satrs-mib proc macro implementation" +homepage = "https://egit.irs.uni-stuttgart.de/rust/sat-rs" +repository = "https://egit.irs.uni-stuttgart.de/rust/sat-rs" +license = "Apache-2.0" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [lib] @@ -16,7 +20,8 @@ quote = "1" proc-macro2 = "1" [dependencies.satrs-core] -path = "../../satrs-core" +version = "0.1.0-alpha.0" +# path = "../../satrs-core" [dev-dependencies] trybuild = { version = "1", features = ["diff"] } diff --git a/satrs-mib/codegen/LICENSE-APACHE b/satrs-mib/codegen/LICENSE-APACHE new file mode 120000 index 0000000..965b606 --- /dev/null +++ b/satrs-mib/codegen/LICENSE-APACHE @@ -0,0 +1 @@ +../LICENSE-APACHE \ No newline at end of file diff --git a/satrs-mib/codegen/NOTICE b/satrs-mib/codegen/NOTICE new file mode 120000 index 0000000..7e1b82f --- /dev/null +++ b/satrs-mib/codegen/NOTICE @@ -0,0 +1 @@ +../NOTICE \ No newline at end of file diff --git a/satrs-mib/release-checklist.md b/satrs-mib/release-checklist.md new file mode 100644 index 0000000..1cda6f9 --- /dev/null +++ b/satrs-mib/release-checklist.md @@ -0,0 +1,25 @@ +Checklist for new releases +======= + +# Pre-Release + +1. Make sure any new modules are documented sufficiently enough and check docs with + `cargo doc --all-features --open`. +2. Bump version specifier in `Cargo.toml`. +3. Update `CHANGELOG.md`: Convert `unreleased` section into version section with date and add new + `unreleased` section. +4. Run `cargo test --all-features`. +5. Run `cargo fmt` and `cargo clippy`. Check `cargo msrv` against MSRV in `Cargo.toml`. +6. Wait for CI/CD results for EGit and Github. These also check cross-compilation for bare-metal + targets. + +# Release + +1. `cargo publish` + +# Post-Release + +1. Create a new annotaged tag and push it with `git tag -a satrs-mib-` and + `git push -u origin satrs-mib-` +2. Create a new release on `EGit` based on the tag. +