1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
use crate::schema::Context;
use clyde_3g_eps_api::MotherboardTelemetry::Type as MotherboardTelemetryType;
use juniper::FieldResult;
pub struct Telemetry;
macro_rules! make_telemetry {
(
$($type: ident,)+
) => {
#[derive(Clone, Debug, Hash, Eq, GraphQLEnum, PartialEq)]
pub enum Type {
$(
$type,
)+
}
impl Into<MotherboardTelemetryType> for Type {
fn into(self) -> MotherboardTelemetryType {
match self {
$(Type::$type => MotherboardTelemetryType::$type,)+
}
}
}
graphql_object!(Telemetry: Context as "MotherboardTelemetry" |&self| {
$(
field $type(&executor) -> FieldResult<f64>
{
Ok(f64::from(executor.context().subsystem().get_motherboard_telemetry(Type::$type)?))
}
)+
});
}
}
make_telemetry!(
VoltageFeedingBcr1,
CurrentBcr1Sa1a,
CurrentBcr1Sa1b,
ArrayTempSa1a,
ArrayTempSa1b,
SunDetectorSa1a,
SunDetectorSa1b,
VoltageFeedingBcr2,
CurrentBcr2Sa2a,
CurrentBcr2Sa2b,
ArrayTempSa2a,
ArrayTempSa2b,
SunDetectorSa2a,
SunDetectorSa2b,
VoltageFeedingBcr3,
CurrentBcr3Sa3a,
CurrentBcr3Sa3b,
ArrayTempSa3a,
ArrayTempSa3b,
SunDetectorSa3a,
SunDetectorSa3b,
BcrOutputCurrent,
BcrOutputVoltage,
CurrentDraw3V3,
CurrentDraw5V,
OutputCurrent12V,
OutputVoltage12V,
OutputCurrentBattery,
OutputVoltageBattery,
OutputCurrent5V,
OutputVoltage5V,
OutputCurrent33V,
OutputVoltage33V,
OutputVoltageSwitch1,
OutputCurrentSwitch1,
OutputVoltageSwitch2,
OutputCurrentSwitch2,
OutputVoltageSwitch3,
OutputCurrentSwitch3,
OutputVoltageSwitch4,
OutputCurrentSwitch4,
OutputVoltageSwitch5,
OutputCurrentSwitch5,
OutputVoltageSwitch6,
OutputCurrentSwitch6,
OutputVoltageSwitch7,
OutputCurrentSwitch7,
OutputVoltageSwitch8,
OutputCurrentSwitch8,
OutputVoltageSwitch9,
OutputCurrentSwitch9,
OutputVoltageSwitch10,
OutputCurrentSwitch10,
BoardTemperature,
);