new mib crate
This commit is contained in:
parent
7e0d3f394a
commit
b0b41a07dc
117
Cargo.lock
generated
117
Cargo.lock
generated
@ -15,9 +15,9 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "aho-corasick"
|
name = "aho-corasick"
|
||||||
version = "0.7.19"
|
version = "0.7.20"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b4f55bd91a0978cbfd91c457a164bab8b4001c833b7f323132c0a4e1922dd44e"
|
checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"memchr",
|
"memchr",
|
||||||
]
|
]
|
||||||
@ -31,6 +31,15 @@ dependencies = [
|
|||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "array-init"
|
||||||
|
version = "0.0.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "23589ecb866b460d3a0f1278834750268c607e8e28a1b982c907219f3178cd72"
|
||||||
|
dependencies = [
|
||||||
|
"nodrop",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "atomic-polyfill"
|
name = "atomic-polyfill"
|
||||||
version = "0.1.10"
|
version = "0.1.10"
|
||||||
@ -85,6 +94,18 @@ version = "1.3.2"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bstr"
|
||||||
|
version = "0.2.17"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ba3569f383e8f1598449f1a423e72e99569137b47740b1da11ef19af3d5c3223"
|
||||||
|
dependencies = [
|
||||||
|
"lazy_static",
|
||||||
|
"memchr",
|
||||||
|
"regex-automata",
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bumpalo"
|
name = "bumpalo"
|
||||||
version = "3.11.1"
|
version = "3.11.1"
|
||||||
@ -110,9 +131,9 @@ checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cc"
|
name = "cc"
|
||||||
version = "1.0.76"
|
version = "1.0.77"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "76a284da2e6fe2092f2353e51713435363112dfd60030e22add80be333fb928f"
|
checksum = "e9f73505338f7d905b19d18738976aae232eb46b8efc15554ffc56deb5d9ebe4"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cfg-if"
|
name = "cfg-if"
|
||||||
@ -205,13 +226,35 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crossbeam-utils"
|
name = "crossbeam-utils"
|
||||||
version = "0.8.13"
|
version = "0.8.14"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "422f23e724af1240ec469ea1e834d87a4b59ce2efe2c6a96256b0c47e2fd86aa"
|
checksum = "4fb766fa798726286dbbb842f174001dab8abc7b627a1dd86e0b7222a95d929f"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "csv"
|
||||||
|
version = "1.1.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "22813a6dc45b335f9bade10bf7271dc477e81113e89eb251a0bc2a8a81c536e1"
|
||||||
|
dependencies = [
|
||||||
|
"bstr",
|
||||||
|
"csv-core",
|
||||||
|
"itoa 0.4.8",
|
||||||
|
"ryu",
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "csv-core"
|
||||||
|
version = "0.1.10"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "2b2466559f260f48ad25fe6317b3c8dac77b5bdb5763ac7d9d6103530663bc90"
|
||||||
|
dependencies = [
|
||||||
|
"memchr",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cxx"
|
name = "cxx"
|
||||||
version = "1.0.82"
|
version = "1.0.82"
|
||||||
@ -389,6 +432,12 @@ dependencies = [
|
|||||||
"cxx-build",
|
"cxx-build",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "itoa"
|
||||||
|
version = "0.4.8"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "itoa"
|
name = "itoa"
|
||||||
version = "1.0.4"
|
version = "1.0.4"
|
||||||
@ -444,6 +493,12 @@ dependencies = [
|
|||||||
"cfg-if",
|
"cfg-if",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "maybe-uninit"
|
||||||
|
version = "2.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "memchr"
|
name = "memchr"
|
||||||
version = "2.5.0"
|
version = "2.5.0"
|
||||||
@ -465,6 +520,12 @@ version = "1.0.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "546c37ac5d9e56f55e73b677106873d9d9f5190605e41a856503623648488cae"
|
checksum = "546c37ac5d9e56f55e73b677106873d9d9f5190605e41a856503623648488cae"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "nodrop"
|
||||||
|
version = "0.1.14"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "72ef4a56884ca558e5ddb05a1d1e7e1bfd9a68d9ed024c21704cc98872dae1bb"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-integer"
|
name = "num-integer"
|
||||||
version = "0.1.45"
|
version = "0.1.45"
|
||||||
@ -509,7 +570,7 @@ dependencies = [
|
|||||||
"cfg-if",
|
"cfg-if",
|
||||||
"libc",
|
"libc",
|
||||||
"redox_syscall",
|
"redox_syscall",
|
||||||
"smallvec",
|
"smallvec 1.10.0",
|
||||||
"windows-sys",
|
"windows-sys",
|
||||||
]
|
]
|
||||||
|
|
||||||
@ -568,6 +629,12 @@ dependencies = [
|
|||||||
"regex-syntax",
|
"regex-syntax",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "regex-automata"
|
||||||
|
version = "0.1.10"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "regex-syntax"
|
name = "regex-syntax"
|
||||||
version = "0.6.28"
|
version = "0.6.28"
|
||||||
@ -645,9 +712,11 @@ name = "satrs-example"
|
|||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crossbeam-channel",
|
"crossbeam-channel",
|
||||||
|
"csv",
|
||||||
"delegate 0.8.0",
|
"delegate 0.8.0",
|
||||||
"satrs-core",
|
"satrs-core",
|
||||||
"satrs-macros",
|
"satrs-macros",
|
||||||
|
"satrs-mib",
|
||||||
"spacepackets",
|
"spacepackets",
|
||||||
"zerocopy",
|
"zerocopy",
|
||||||
]
|
]
|
||||||
@ -659,10 +728,22 @@ dependencies = [
|
|||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
"satrs-core",
|
"satrs-core",
|
||||||
|
"satrs-mib",
|
||||||
"syn",
|
"syn",
|
||||||
"trybuild",
|
"trybuild",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "satrs-mib"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"csv",
|
||||||
|
"satrs-core",
|
||||||
|
"satrs-macros",
|
||||||
|
"serde",
|
||||||
|
"serde-hex",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scopeguard"
|
name = "scopeguard"
|
||||||
version = "1.1.0"
|
version = "1.1.0"
|
||||||
@ -705,6 +786,17 @@ dependencies = [
|
|||||||
"serde_derive",
|
"serde_derive",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde-hex"
|
||||||
|
version = "0.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ca37e3e4d1b39afd7ff11ee4e947efae85adfddf4841787bfa47c470e96dc26d"
|
||||||
|
dependencies = [
|
||||||
|
"array-init",
|
||||||
|
"serde",
|
||||||
|
"smallvec 0.6.14",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_derive"
|
name = "serde_derive"
|
||||||
version = "1.0.147"
|
version = "1.0.147"
|
||||||
@ -722,11 +814,20 @@ version = "1.0.89"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "020ff22c755c2ed3f8cf162dbb41a7268d934702f3ed3631656ea597e08fc3db"
|
checksum = "020ff22c755c2ed3f8cf162dbb41a7268d934702f3ed3631656ea597e08fc3db"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"itoa",
|
"itoa 1.0.4",
|
||||||
"ryu",
|
"ryu",
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "smallvec"
|
||||||
|
version = "0.6.14"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "b97fcaeba89edba30f044a10c6a3cc39df9c3f17d7cd829dd1446cab35f890e0"
|
||||||
|
dependencies = [
|
||||||
|
"maybe-uninit",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "smallvec"
|
name = "smallvec"
|
||||||
version = "1.10.0"
|
version = "1.10.0"
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
members = [
|
members = [
|
||||||
"satrs-core",
|
"satrs-core",
|
||||||
"satrs-macros",
|
"satrs-macros",
|
||||||
|
"satrs-mib",
|
||||||
"satrs-example",
|
"satrs-example",
|
||||||
"spacepackets",
|
"spacepackets",
|
||||||
]
|
]
|
||||||
|
@ -29,6 +29,10 @@ optional = true
|
|||||||
version= "0.5"
|
version= "0.5"
|
||||||
default-features = false
|
default-features = false
|
||||||
|
|
||||||
|
[dependencies.serde]
|
||||||
|
version = "1.0"
|
||||||
|
default-features = false
|
||||||
|
|
||||||
[dependencies.spacepackets]
|
[dependencies.spacepackets]
|
||||||
path = "../spacepackets"
|
path = "../spacepackets"
|
||||||
|
|
||||||
@ -42,8 +46,8 @@ version = "1.0"
|
|||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = ["std"]
|
default = ["std"]
|
||||||
std = ["downcast-rs/std", "alloc", "bus", "postcard/use-std", "crossbeam-channel/std"]
|
std = ["downcast-rs/std", "alloc", "bus", "postcard/use-std", "crossbeam-channel/std", "serde/std"]
|
||||||
alloc = []
|
alloc = ["serde/alloc"]
|
||||||
heapless = []
|
heapless = []
|
||||||
doc-images = []
|
doc-images = []
|
||||||
|
|
||||||
|
@ -29,6 +29,6 @@ pub mod params;
|
|||||||
#[cfg_attr(doc_cfg, doc(cfg(feature = "alloc")))]
|
#[cfg_attr(doc_cfg, doc(cfg(feature = "alloc")))]
|
||||||
pub mod pool;
|
pub mod pool;
|
||||||
pub mod pus;
|
pub mod pus;
|
||||||
pub mod resultcode;
|
pub mod res_code;
|
||||||
pub mod seq_count;
|
pub mod seq_count;
|
||||||
pub mod tmtc;
|
pub mod tmtc;
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
use spacepackets::ecss::{EcssEnumU16, EcssEnumeration};
|
||||||
use spacepackets::{ByteConversionError, SizeMissmatch};
|
use spacepackets::{ByteConversionError, SizeMissmatch};
|
||||||
use spacepackets::ecss::{EcssEnumeration, EcssEnumU16};
|
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone, PartialEq, Eq)]
|
#[derive(Debug, Copy, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
||||||
pub struct ResultU16 {
|
pub struct ResultU16 {
|
||||||
group_id: u8,
|
group_id: u8,
|
||||||
unique_id: u8,
|
unique_id: u8,
|
||||||
@ -40,7 +41,7 @@ impl EcssEnumeration for ResultU16 {
|
|||||||
if buf.len() < 2 {
|
if buf.len() < 2 {
|
||||||
return Err(ByteConversionError::ToSliceTooSmall(SizeMissmatch {
|
return Err(ByteConversionError::ToSliceTooSmall(SizeMissmatch {
|
||||||
found: buf.len(),
|
found: buf.len(),
|
||||||
expected: 2
|
expected: 2,
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
buf[0] = self.group_id;
|
buf[0] = self.group_id;
|
||||||
@ -48,20 +49,3 @@ impl EcssEnumeration for ResultU16 {
|
|||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub struct ResultU16Ext {
|
|
||||||
pub name: &'static str,
|
|
||||||
pub result: &'static ResultU16,
|
|
||||||
pub info: &'static str,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ResultU16Ext {
|
|
||||||
pub const fn const_new(
|
|
||||||
name: &'static str,
|
|
||||||
result: &'static ResultU16,
|
|
||||||
info: &'static str,
|
|
||||||
) -> Self {
|
|
||||||
Self { name, result, info }
|
|
||||||
}
|
|
||||||
}
|
|
@ -9,6 +9,7 @@ default-run = "satrs-example"
|
|||||||
crossbeam-channel = "0.5"
|
crossbeam-channel = "0.5"
|
||||||
delegate = "0.8"
|
delegate = "0.8"
|
||||||
zerocopy = "0.6"
|
zerocopy = "0.6"
|
||||||
|
csv = "1"
|
||||||
|
|
||||||
[dependencies.spacepackets]
|
[dependencies.spacepackets]
|
||||||
path = "../spacepackets"
|
path = "../spacepackets"
|
||||||
@ -18,3 +19,6 @@ path = "../satrs-macros"
|
|||||||
|
|
||||||
[dependencies.satrs-core]
|
[dependencies.satrs-core]
|
||||||
path = "../satrs-core"
|
path = "../satrs-core"
|
||||||
|
|
||||||
|
[dependencies.satrs-mib]
|
||||||
|
path = "../satrs-mib"
|
||||||
|
@ -22,8 +22,8 @@ fn main() {
|
|||||||
.write_to_bytes(&mut buf)
|
.write_to_bytes(&mut buf)
|
||||||
.expect("Creating PUS TC failed");
|
.expect("Creating PUS TC failed");
|
||||||
client
|
client
|
||||||
.send_to(&buf[0..size], &addr)
|
.send_to(&buf[0..size], addr)
|
||||||
.expect(&*format!("Sending to {:?} failed", addr));
|
.unwrap_or_else(|_| panic!("Sending to {:?} failed", addr));
|
||||||
client
|
client
|
||||||
.set_read_timeout(Some(Duration::from_secs(2)))
|
.set_read_timeout(Some(Duration::from_secs(2)))
|
||||||
.expect("Setting read timeout failed");
|
.expect("Setting read timeout failed");
|
||||||
|
@ -1,4 +1,27 @@
|
|||||||
use std::net::Ipv4Addr;
|
use std::net::Ipv4Addr;
|
||||||
|
|
||||||
|
use satrs_core::res_code::ResultU16;
|
||||||
|
use satrs_macros::resultcode;
|
||||||
|
use satrs_mib::res_code::ResultU16Info;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
pub enum GroupId {
|
||||||
|
Tmtc = 0,
|
||||||
|
}
|
||||||
|
|
||||||
pub const OBSW_SERVER_ADDR: Ipv4Addr = Ipv4Addr::new(127, 0, 0, 1);
|
pub const OBSW_SERVER_ADDR: Ipv4Addr = Ipv4Addr::new(127, 0, 0, 1);
|
||||||
pub const SERVER_PORT: u16 = 7301;
|
pub const SERVER_PORT: u16 = 7301;
|
||||||
|
|
||||||
|
#[resultcode]
|
||||||
|
pub const INVALID_PUS_SERVICE: ResultU16 = ResultU16::const_new(GroupId::Tmtc as u8, 0);
|
||||||
|
#[resultcode]
|
||||||
|
pub const INVALID_PUS_SUBSERVICE: ResultU16 = ResultU16::const_new(GroupId::Tmtc as u8, 1);
|
||||||
|
|
||||||
|
#[resultcode(info = "Not enough data inside the TC application data field")]
|
||||||
|
pub const NOT_ENOUGH_APP_DATA: ResultU16 = ResultU16::const_new(GroupId::Tmtc as u8, 2);
|
||||||
|
|
||||||
|
pub const TMTC_RESULTS: &[ResultU16Info] = &[
|
||||||
|
INVALID_PUS_SERVICE_EXT,
|
||||||
|
INVALID_PUS_SUBSERVICE_EXT,
|
||||||
|
NOT_ENOUGH_APP_DATA_EXT,
|
||||||
|
];
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
mod ccsds;
|
mod ccsds;
|
||||||
mod pus;
|
mod pus;
|
||||||
mod tmtc;
|
mod tmtc;
|
||||||
mod results;
|
|
||||||
|
|
||||||
use crate::tmtc::{core_tmtc_task, CoreTmtcArgs, TmStore, PUS_APID};
|
use crate::tmtc::{core_tmtc_task, CoreTmtcArgs, TmStore, PUS_APID};
|
||||||
use satrs_core::event_man::{
|
use satrs_core::event_man::{
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
use crate::tmtc::TmStore;
|
use crate::tmtc::TmStore;
|
||||||
use crate::results::{INVALID_PUS_SERVICE, INVALID_PUS_SUBSERVICE, NOT_ENOUGH_APP_DATA};
|
|
||||||
use satrs_core::events::EventU32;
|
use satrs_core::events::EventU32;
|
||||||
use satrs_core::pool::StoreAddr;
|
use satrs_core::pool::StoreAddr;
|
||||||
use satrs_core::pus::event::Subservices;
|
use satrs_core::pus::event::Subservices;
|
||||||
@ -7,14 +6,15 @@ use satrs_core::pus::event_man::{EventRequest, EventRequestWithToken};
|
|||||||
use satrs_core::pus::verification::{
|
use satrs_core::pus::verification::{
|
||||||
FailParams, StdVerifReporterWithSender, TcStateAccepted, VerificationToken,
|
FailParams, StdVerifReporterWithSender, TcStateAccepted, VerificationToken,
|
||||||
};
|
};
|
||||||
|
use satrs_core::res_code::ResultU16;
|
||||||
use satrs_core::tmtc::tm_helper::PusTmWithCdsShortHelper;
|
use satrs_core::tmtc::tm_helper::PusTmWithCdsShortHelper;
|
||||||
use satrs_core::tmtc::PusServiceProvider;
|
use satrs_core::tmtc::PusServiceProvider;
|
||||||
|
use satrs_example::{INVALID_PUS_SERVICE, INVALID_PUS_SUBSERVICE, NOT_ENOUGH_APP_DATA};
|
||||||
use spacepackets::ecss::PusPacket;
|
use spacepackets::ecss::PusPacket;
|
||||||
use spacepackets::tc::PusTc;
|
use spacepackets::tc::PusTc;
|
||||||
use spacepackets::time::{CdsShortTimeProvider, TimeWriter};
|
use spacepackets::time::{CdsShortTimeProvider, TimeWriter};
|
||||||
use spacepackets::SpHeader;
|
use spacepackets::SpHeader;
|
||||||
use std::sync::mpsc;
|
use std::sync::mpsc;
|
||||||
use satrs_core::resultcode::ResultU16;
|
|
||||||
|
|
||||||
pub struct PusReceiver {
|
pub struct PusReceiver {
|
||||||
pub tm_helper: PusTmWithCdsShortHelper,
|
pub tm_helper: PusTmWithCdsShortHelper,
|
||||||
@ -67,7 +67,11 @@ impl PusServiceProvider for PusReceiver {
|
|||||||
self.handle_event_service(pus_tc, accepted_token);
|
self.handle_event_service(pus_tc, accepted_token);
|
||||||
} else {
|
} else {
|
||||||
self.update_time_stamp();
|
self.update_time_stamp();
|
||||||
self.verif_reporter.start_failure(accepted_token, FailParams::new(&self.time_stamp, &INVALID_PUS_SERVICE, None))
|
self.verif_reporter
|
||||||
|
.start_failure(
|
||||||
|
accepted_token,
|
||||||
|
FailParams::new(&self.time_stamp, &INVALID_PUS_SERVICE, None),
|
||||||
|
)
|
||||||
.expect("Start failure verification failed")
|
.expect("Start failure verification failed")
|
||||||
}
|
}
|
||||||
Ok(())
|
Ok(())
|
||||||
|
@ -1,15 +0,0 @@
|
|||||||
use satrs_core::resultcode::ResultU16;
|
|
||||||
use satrs_macros::resultcode;
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
pub enum GroupId {
|
|
||||||
Tmtc = 0,
|
|
||||||
}
|
|
||||||
|
|
||||||
#[resultcode]
|
|
||||||
pub const INVALID_PUS_SERVICE: ResultU16 = ResultU16::const_new(GroupId::Tmtc as u8, 0);
|
|
||||||
#[resultcode]
|
|
||||||
pub const INVALID_PUS_SUBSERVICE: ResultU16 = ResultU16::const_new(GroupId::Tmtc as u8, 1);
|
|
||||||
|
|
||||||
#[resultcode(info="Not enough data inside the TC application data field")]
|
|
||||||
pub const NOT_ENOUGH_APP_DATA: ResultU16 = ResultU16::const_new(GroupId::Tmtc as u8, 2);
|
|
@ -21,6 +21,9 @@ path = "../satrs-core"
|
|||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
trybuild = { version = "1.0", features = ["diff"] }
|
trybuild = { version = "1.0", features = ["diff"] }
|
||||||
|
|
||||||
|
[dev-dependencies.satrs-mib]
|
||||||
|
path = "../satrs-mib"
|
||||||
|
|
||||||
[dependencies.syn]
|
[dependencies.syn]
|
||||||
version = "1.0"
|
version = "1.0"
|
||||||
features = ["extra-traits"]
|
features = ["extra-traits"]
|
||||||
|
@ -90,11 +90,13 @@ impl ResultExtGenerator {
|
|||||||
} else {
|
} else {
|
||||||
String::from("")
|
String::from("")
|
||||||
};
|
};
|
||||||
|
// TODO: Group string
|
||||||
let gen_struct = quote! {
|
let gen_struct = quote! {
|
||||||
const #gen_struct_name: satrs_core::resultcode::ResultU16Ext =
|
const #gen_struct_name: satrs_mib::res_code::ResultU16Info =
|
||||||
satrs_core::resultcode::ResultU16Ext::const_new(
|
satrs_mib::res_code::ResultU16Info::const_new(
|
||||||
#name_as_str,
|
#name_as_str,
|
||||||
&#result_code_name,
|
&#result_code_name,
|
||||||
|
"",
|
||||||
#info_str
|
#info_str
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
@ -1,7 +0,0 @@
|
|||||||
use satrs_core::resultcode::ResultU16;
|
|
||||||
use satrs_macros::*;
|
|
||||||
|
|
||||||
#[resultcode(info = "This is a test result where the first parameter is foo")]
|
|
||||||
const _TEST_RESULT: ResultU16 = ResultU16::const_new(0, 1);
|
|
||||||
|
|
||||||
fn main() {}
|
|
@ -1,8 +1,8 @@
|
|||||||
//! Basic check which just verifies that everything compiles
|
//! Basic check which just verifies that everything compiles
|
||||||
use satrs_core::resultcode::ResultU16;
|
use satrs_core::res_code::ResultU16;
|
||||||
use satrs_macros::*;
|
use satrs_macros::*;
|
||||||
|
|
||||||
#[resultcode(info = "This is a test result where the first parameter is foo")]
|
#[resultcode(info = "This is a test result where the first parameter is foo")]
|
||||||
const TEST_RESULT: ResultU16 = ResultU16::const_new(0, 1);
|
const _TEST_RESULT: ResultU16 = ResultU16::const_new(0, 1);
|
||||||
|
|
||||||
fn main() {}
|
fn main() {}
|
||||||
|
@ -1,10 +1,11 @@
|
|||||||
use satrs_core::resultcode::{ResultU16, ResultU16Ext};
|
use satrs_core::res_code::ResultU16;
|
||||||
use satrs_macros::*;
|
use satrs_macros::*;
|
||||||
|
use satrs_mib::res_code::ResultU16Info;
|
||||||
|
|
||||||
#[resultcode(info = "This is a test result where the first parameter is foo")]
|
#[resultcode(info = "This is a test result where the first parameter is foo")]
|
||||||
const TEST_RESULT: ResultU16 = ResultU16::const_new(0, 1);
|
const TEST_RESULT: ResultU16 = ResultU16::const_new(0, 1);
|
||||||
// Create named reference of auto-generated struct, which can be used by IDEs etc.
|
// Create named reference of auto-generated struct, which can be used by IDEs etc.
|
||||||
const TEST_RESULT_EXT_REF: &ResultU16Ext = &TEST_RESULT_EXT;
|
const TEST_RESULT_EXT_REF: &ResultU16Info = &TEST_RESULT_EXT;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
assert_eq!(TEST_RESULT_EXT.name, "TEST_RESULT");
|
assert_eq!(TEST_RESULT_EXT.name, "TEST_RESULT");
|
||||||
|
20
satrs-mib/Cargo.toml
Normal file
20
satrs-mib/Cargo.toml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
[package]
|
||||||
|
name = "satrs-mib"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
serde-hex = "0.1.0"
|
||||||
|
csv = "1"
|
||||||
|
|
||||||
|
[dependencies.satrs-core]
|
||||||
|
path = "../satrs-core"
|
||||||
|
|
||||||
|
[dependencies.satrs-macros]
|
||||||
|
path = "../satrs-macros"
|
||||||
|
|
||||||
|
[dependencies.serde]
|
||||||
|
version = "1.0"
|
||||||
|
default-features = false
|
1
satrs-mib/src/lib.rs
Normal file
1
satrs-mib/src/lib.rs
Normal file
@ -0,0 +1 @@
|
|||||||
|
pub mod res_code;
|
151
satrs-mib/src/res_code.rs
Normal file
151
satrs-mib/src/res_code.rs
Normal file
@ -0,0 +1,151 @@
|
|||||||
|
use std::io;
|
||||||
|
use std::path::Path;
|
||||||
|
|
||||||
|
pub use satrs_core::res_code::ResultU16;
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
use serde_hex::{SerHex, StrictCapPfx};
|
||||||
|
|
||||||
|
#[derive(Debug, Copy, Clone, Serialize)]
|
||||||
|
pub struct ResultU16Info {
|
||||||
|
pub name: &'static str,
|
||||||
|
pub result: &'static ResultU16,
|
||||||
|
pub group_str: &'static str,
|
||||||
|
pub info: &'static str,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ResultU16Info {
|
||||||
|
pub const fn const_new(
|
||||||
|
name: &'static str,
|
||||||
|
result: &'static ResultU16,
|
||||||
|
group_str: &'static str,
|
||||||
|
info: &'static str,
|
||||||
|
) -> Self {
|
||||||
|
Self {
|
||||||
|
name,
|
||||||
|
result,
|
||||||
|
group_str,
|
||||||
|
info,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
|
pub struct ResultU16InfoSerializable {
|
||||||
|
#[serde(with = "SerHex::<StrictCapPfx>")]
|
||||||
|
raw: u16,
|
||||||
|
#[serde(with = "SerHex::<StrictCapPfx>")]
|
||||||
|
group_id: u8,
|
||||||
|
#[serde(with = "SerHex::<StrictCapPfx>")]
|
||||||
|
unique_id: u8,
|
||||||
|
name: &'static str,
|
||||||
|
group_str: &'static str,
|
||||||
|
info: &'static str,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<ResultU16Info> for ResultU16InfoSerializable {
|
||||||
|
fn from(v: ResultU16Info) -> Self {
|
||||||
|
Self {
|
||||||
|
raw: v.result.raw(),
|
||||||
|
group_id: v.result.group_id(),
|
||||||
|
unique_id: v.result.unique_id(),
|
||||||
|
name: v.name,
|
||||||
|
group_str: v.group_str,
|
||||||
|
info: v.info,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn print_resultcodes_as_csv(codes: &[ResultU16Info]) -> Result<(), csv::Error> {
|
||||||
|
let mut wtr = csv::Writer::from_writer(io::stdout());
|
||||||
|
for result in codes {
|
||||||
|
wtr.serialize(ResultU16InfoSerializable::from(*result))?;
|
||||||
|
}
|
||||||
|
wtr.flush()?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn write_resultcodes_to_csv(
|
||||||
|
results: &[ResultU16Info],
|
||||||
|
path: impl AsRef<Path>,
|
||||||
|
) -> Result<(), csv::Error> {
|
||||||
|
let mut wtr = csv::Writer::from_path(path)?;
|
||||||
|
for result_code in results {
|
||||||
|
wtr.serialize(ResultU16InfoSerializable::from(*result_code))?;
|
||||||
|
}
|
||||||
|
wtr.flush()?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
use std::fs::File;
|
||||||
|
use std::io::{BufRead, BufReader};
|
||||||
|
// Special solution for this crate because the code generated by a macro will use
|
||||||
|
// satrs_mib::res_code::*
|
||||||
|
use crate as satrs_mib;
|
||||||
|
use satrs_core::res_code::ResultU16;
|
||||||
|
use satrs_macros::resultcode;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub enum GroupId {
|
||||||
|
Tmtc = 0,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[resultcode]
|
||||||
|
pub const INVALID_PUS_SERVICE: ResultU16 = ResultU16::const_new(GroupId::Tmtc as u8, 0);
|
||||||
|
#[resultcode]
|
||||||
|
pub const INVALID_PUS_SUBSERVICE: ResultU16 = ResultU16::const_new(GroupId::Tmtc as u8, 1);
|
||||||
|
|
||||||
|
#[resultcode(info = "Not enough data inside the TC application data field")]
|
||||||
|
pub const NOT_ENOUGH_APP_DATA: ResultU16 = ResultU16::const_new(GroupId::Tmtc as u8, 2);
|
||||||
|
|
||||||
|
pub const TMTC_RESULTS: &[ResultU16Info] = &[
|
||||||
|
INVALID_PUS_SERVICE_EXT,
|
||||||
|
INVALID_PUS_SUBSERVICE_EXT,
|
||||||
|
NOT_ENOUGH_APP_DATA_EXT,
|
||||||
|
];
|
||||||
|
|
||||||
|
const CSV_NAME: &'static str = "dummy.csv";
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_printout() {
|
||||||
|
print_resultcodes_as_csv(TMTC_RESULTS).expect("Priting result codes failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_csv_export() {
|
||||||
|
let csvpath = Path::new(CSV_NAME);
|
||||||
|
write_resultcodes_to_csv(TMTC_RESULTS, csvpath).expect("CSV export failed");
|
||||||
|
assert!(csvpath.exists());
|
||||||
|
let file = File::open(csvpath).expect("Opening CSV file failed");
|
||||||
|
let buf_reader = BufReader::new(file);
|
||||||
|
for (idx, line) in buf_reader.lines().enumerate() {
|
||||||
|
match idx {
|
||||||
|
0 => {
|
||||||
|
assert!(line.is_ok());
|
||||||
|
let line = line.unwrap();
|
||||||
|
assert_eq!(line, "raw,group_id,unique_id,name,group_str,info");
|
||||||
|
}
|
||||||
|
1 => {
|
||||||
|
assert!(line.is_ok());
|
||||||
|
let line = line.unwrap();
|
||||||
|
assert_eq!(line, "0x0000,0x00,0x00,INVALID_PUS_SERVICE,,");
|
||||||
|
}
|
||||||
|
2 => {
|
||||||
|
assert!(line.is_ok());
|
||||||
|
let line = line.unwrap();
|
||||||
|
assert_eq!(line, "0x0001,0x00,0x01,INVALID_PUS_SUBSERVICE,,");
|
||||||
|
}
|
||||||
|
3 => {
|
||||||
|
assert!(line.is_ok());
|
||||||
|
let line = line.unwrap();
|
||||||
|
assert_eq!(line, "0x0002,0x00,0x02,NOT_ENOUGH_APP_DATA,,Not enough data inside the TC application data field");
|
||||||
|
}
|
||||||
|
_ => (),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
std::fs::remove_file(Path::new("dummy.csv")).expect("Removing dummy csv failed");
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user