spacepackets/ecss/
scheduling.rs1use num_enum::{IntoPrimitive, TryFromPrimitive};
3#[cfg(feature = "serde")]
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, PartialEq, Eq, Copy, Clone, IntoPrimitive, TryFromPrimitive)]
7#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
8#[cfg_attr(feature = "defmt", derive(defmt::Format))]
9#[repr(u8)]
10pub enum Subservice {
11 TcEnableScheduling = 1,
13 TcDisableScheduling = 2,
14 TcResetScheduling = 3,
15 TcInsertActivity = 4,
16 TcDeleteActivityByRequestId = 5,
17 TcDeleteActivitiesByFilter = 6,
18
19 TcTimeShiftActivityWithRequestId = 7,
21 TcTimeShiftActivitiesByFilter = 8,
22 TcTimeShiftAll = 15,
23
24 TcDetailReportByRequestId = 9,
26 TmDetailReport = 10,
27 TcDetailReportByFilter = 11,
28 TcSummaryReportByRequestId = 12,
29 TmSummaryReport = 13,
30 TcSummaryReportByFilter = 14,
31 TcDetailReportAll = 16,
32 TcSummaryReportAll = 17,
33
34 TcReportSubscheduleStatus = 18,
36 TmReportSubscheduleStatus = 19,
37 TcEnableSubschedule = 20,
38 TcDisableSubschedule = 21,
39
40 TcCreateScheduleGroup = 22,
42 TcDeleteScheduleGroup = 23,
43 TcEnableScheduleGroup = 24,
44 TcDisableScheduleGroup = 25,
45 TcReportAllGroupsStatus = 26,
46 TmReportAllGroupsStatus = 27,
47}
48
49#[derive(Debug, PartialEq, Eq, Copy, Clone)]
51#[cfg_attr(feature = "defmt", derive(defmt::Format))]
52#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
53pub enum SchedStatus {
54 Disabled = 0,
55 Enabled = 1,
56}
57
58impl From<bool> for SchedStatus {
59 #[inline]
60 fn from(value: bool) -> Self {
61 if value {
62 SchedStatus::Enabled
63 } else {
64 SchedStatus::Disabled
65 }
66 }
67}
68
69#[derive(Debug, PartialEq, Eq, Copy, Clone)]
71#[cfg_attr(feature = "defmt", derive(defmt::Format))]
72#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
73pub enum TimeWindowType {
74 SelectAll = 0,
75 TimeTagToTimeTag = 1,
76 FromTimeTag = 2,
77 ToTimeTag = 3,
78}
79
80#[cfg(test)]
81mod tests {
82 use super::*;
83 #[cfg(feature = "serde")]
84 use crate::tests::generic_serde_test;
85
86 #[test]
87 fn test_bool_conv_0() {
88 let enabled = true;
89 let status: SchedStatus = enabled.into();
90 assert_eq!(status, SchedStatus::Enabled)
91 }
92
93 #[test]
94 fn test_bool_conv_1() {
95 let enabled = false;
96 let status: SchedStatus = enabled.into();
97 assert_eq!(status, SchedStatus::Disabled)
98 }
99
100 #[test]
101 fn test_conv_into_u8() {
102 let subservice: u8 = Subservice::TcCreateScheduleGroup.into();
103 assert_eq!(subservice, 22);
104 }
105
106 #[test]
107 fn test_conv_from_u8() {
108 let subservice: Subservice = 22u8.try_into().unwrap();
109 assert_eq!(subservice, Subservice::TcCreateScheduleGroup);
110 }
111
112 #[test]
113 #[cfg(feature = "serde")]
114 fn test_serde_subservice_id() {
115 generic_serde_test(Subservice::TcEnableScheduling);
116 }
117
118 #[test]
119 #[cfg(feature = "serde")]
120 fn test_serde_sched_status() {
121 generic_serde_test(SchedStatus::Enabled);
122 }
123
124 #[test]
125 #[cfg(feature = "serde")]
126 fn test_serde_time_window_type() {
127 generic_serde_test(TimeWindowType::SelectAll);
128 }
129}