STAR
Cal STAR — firmware, DAQ server, and engine design
Loading...
Searching...
No Matches
EngineControlMessage.hpp
Go to the documentation of this file.
1#ifndef ENGINE_CONTROL_MESSAGE_HPP
2#define ENGINE_CONTROL_MESSAGE_HPP
3
4#include <array>
5#include <cstdint>
6
7#include "CommsMessage.hpp"
8
9/**
10 * @brief Engine Control System Message
11 *
12 * Contains engine control state, valve commands, and performance metrics
13 */
15 comms::CommsMessage<double, // (0) timestamp (s) - timestamp
16 uint8_t, // (1) engine_phase - EnginePhase enum
17 double, // (2) thrust_demand (N) - commanded thrust
18 double, // (3) thrust_actual (N) - actual thrust
19 double, // (4) chamber_pressure (Pa) - chamber pressure
20 double, // (5) mixture_ratio_demand - commanded O/F ratio
21 double, // (6) mixture_ratio_actual - actual O/F ratio
22 double, // (7) fuel_valve_position (0-1) - fuel valve position
23 double, // (8) ox_valve_position (0-1) - oxidizer valve position
24 double, // (9) fuel_flow_rate (kg/s) - fuel mass flow rate
25 double, // (10) ox_flow_rate (kg/s) - oxidizer mass flow rate
26 double, // (11) specific_impulse (s) - Isp
27 double, // (12) efficiency - overall efficiency (0-1)
28 bool, // (13) ignition_confirmed - ignition status
29 bool, // (14) all_systems_go - system health status
30 uint64_t>; // (15) time_monotonic (ns) - monotonic timestamp
31
32// Function to set engine control measurements
34 EngineControlMessage& message, double timestamp, uint8_t engine_phase, double thrust_demand,
35 double thrust_actual, double chamber_pressure, double mixture_ratio_demand,
36 double mixture_ratio_actual, double fuel_valve_position, double ox_valve_position,
37 double fuel_flow_rate, double ox_flow_rate, double specific_impulse, double efficiency,
38 bool ignition_confirmed, bool all_systems_go, uint64_t time_monotonic) {
39 message.setField<0>(timestamp);
40 message.setField<1>(engine_phase);
41 message.setField<2>(thrust_demand);
42 message.setField<3>(thrust_actual);
43 message.setField<4>(chamber_pressure);
44 message.setField<5>(mixture_ratio_demand);
45 message.setField<6>(mixture_ratio_actual);
46 message.setField<7>(fuel_valve_position);
47 message.setField<8>(ox_valve_position);
48 message.setField<9>(fuel_flow_rate);
49 message.setField<10>(ox_flow_rate);
50 message.setField<11>(specific_impulse);
51 message.setField<12>(efficiency);
52 message.setField<13>(ignition_confirmed);
53 message.setField<14>(all_systems_go);
54 message.setField<15>(time_monotonic);
55}
56
59 set_engine_control_measurement(message, 0.0, 0, 0.0, 0.0, 101325.0, 6.0, 6.0, 0.0, 0.0, 0.0,
60 0.0, 0.0, 0.0, false, false, 0);
61 return message;
62}
63
64#endif // ENGINE_CONTROL_MESSAGE_HPP
comms::CommsMessage< double, uint8_t, double, double, double, double, double, double, double, double, double, double, double, bool, bool, uint64_t > EngineControlMessage
Engine Control System Message.
static void set_engine_control_measurement(EngineControlMessage &message, double timestamp, uint8_t engine_phase, double thrust_demand, double thrust_actual, double chamber_pressure, double mixture_ratio_demand, double mixture_ratio_actual, double fuel_valve_position, double ox_valve_position, double fuel_flow_rate, double ox_flow_rate, double specific_impulse, double efficiency, bool ignition_confirmed, bool all_systems_go, uint64_t time_monotonic)
static EngineControlMessage generateTestMessageEngineControl()
CommsMessage - Template-based message serialization.