Line data Source code
1 : /** \file telem_cooler.hpp
2 : * \brief The MagAO-X logger telem_cooler log type.
3 : * \author Jared R. Males (jaredmales@gmail.com)
4 : *
5 : * \ingroup logger_types_files
6 : *
7 : * History:
8 : * - 2018-09-06 created by JRM
9 : */
10 : #ifndef logger_types_telem_cooler_hpp
11 : #define logger_types_telem_cooler_hpp
12 :
13 : #include "generated/telem_cooler_generated.h"
14 : #include "flatbuffer_log.hpp"
15 :
16 : #include <cmath>
17 :
18 : namespace MagAOX
19 : {
20 : namespace logger
21 : {
22 :
23 :
24 : /// Log entry recording the build-time git state.
25 : /** \ingroup logger_types
26 : */
27 : struct telem_cooler : public flatbuffer_log
28 : {
29 : ///The event code
30 : static const flatlogs::eventCodeT eventCode = eventCodes::TELEM_COOLER;
31 :
32 : ///The default level
33 : static const flatlogs::logPrioT defaultLevel = flatlogs::logPrio::LOG_TELEM;
34 :
35 : static timespec lastRecord; ///< The time of the last time this log was recorded. Used by the telemetry system.
36 :
37 : enum member{ em_liquidTemp, em_flowRate, em_pumpLevel, em_pumpSpeed, em_fanLevel, em_fanSpeed };
38 :
39 : ///The type of the input message
40 : struct messageT : public fbMessage
41 : {
42 : ///Construct from components
43 1 : messageT( const float & liqTemp, ///<[in] liquid temperature
44 : const float & flowRate, ///<[in] flow rate
45 : const uint8_t & pumpLvl, ///<[in] pump level
46 : const uint16_t & pumpSpd, ///<[in] pump speed
47 : const uint8_t & fanLvl, ///<[in] fan level
48 : const uint16_t & fanSpd ///<[in] fan speed
49 : )
50 1 : {
51 1 : auto fp = CreateTelem_cooler_fb(builder, liqTemp, flowRate, pumpLvl, pumpSpd, fanLvl, fanSpd);
52 1 : builder.Finish(fp);
53 1 : }
54 :
55 : };
56 :
57 :
58 1 : static bool verify( flatlogs::bufferPtrT & logBuff, ///< [in] Buffer containing the flatbuffer serialized message.
59 : flatlogs::msgLenT len ///< [in] length of msgBuffer.
60 : )
61 : {
62 1 : auto verifier = flatbuffers::Verifier( static_cast<uint8_t*>(flatlogs::logHeader::messageBuffer(logBuff)), static_cast<size_t>(len));
63 2 : return VerifyTelem_cooler_fbBuffer(verifier);
64 : }
65 :
66 : ///Get the message formatte for human consumption.
67 0 : static std::string msgString( void * msgBuffer, /**< [in] Buffer containing the flatbuffer serialized message.*/
68 : flatlogs::msgLenT len /**< [in] [unused] length of msgBuffer.*/
69 : )
70 : {
71 : static_cast<void>(len);
72 :
73 0 : auto fbs = GetTelem_cooler_fb(msgBuffer);
74 :
75 0 : std::string msg = "[cooler] ";
76 :
77 0 : msg += "temp: ";
78 0 : msg += std::to_string(fbs->liquidTemp()) + " C ";
79 :
80 0 : msg += "flow: ";
81 0 : msg += std::to_string(fbs->flowRate()) + " L/min ";
82 :
83 0 : msg += "pump lvl: ";
84 0 : msg += std::to_string(fbs->pumpLevel()) + " ";
85 :
86 0 : msg += "spd: ";
87 0 : msg += std::to_string(fbs->pumpSpeed()) + " RPM ";
88 :
89 0 : msg += "fan lvl: ";
90 0 : msg += std::to_string(fbs->fanLevel()) + " ";
91 :
92 0 : msg += "speed: ";
93 0 : msg += std::to_string(fbs->fanSpeed()) + " RPM ";
94 :
95 0 : return msg;
96 :
97 0 : }
98 :
99 : static double getDouble( flatlogs::bufferPtrT & buffer,
100 : member m
101 : )
102 : {
103 : switch(m)
104 : {
105 : case em_liquidTemp:
106 : return GetTelem_cooler_fb(flatlogs::logHeader::messageBuffer(buffer))->liquidTemp();
107 : case em_flowRate:
108 : return GetTelem_cooler_fb(flatlogs::logHeader::messageBuffer(buffer))->flowRate();
109 : case em_pumpLevel:
110 : return GetTelem_cooler_fb(flatlogs::logHeader::messageBuffer(buffer))->pumpLevel();
111 : case em_pumpSpeed:
112 : return GetTelem_cooler_fb(flatlogs::logHeader::messageBuffer(buffer))->pumpSpeed();
113 : case em_fanLevel:
114 : return GetTelem_cooler_fb(flatlogs::logHeader::messageBuffer(buffer))->fanLevel();
115 : case em_fanSpeed:
116 : return GetTelem_cooler_fb(flatlogs::logHeader::messageBuffer(buffer))->fanSpeed();
117 : default:
118 : return nan("");
119 : }
120 : }
121 :
122 : /// Get the logMetaDetail for a member by name
123 : /**
124 : * \returns the a logMetaDetail filled in with the appropriate details
125 : * \returns an empty logMetaDetail if member not recognized
126 : */
127 1 : static logMetaDetail getAccessor( const std::string & member /**< [in] the name of the member */ )
128 : {
129 : static_cast<void>(member);
130 1 : std::cerr << "Meta data accessor not implemented in telem_usage\n";
131 1 : return logMetaDetail();
132 : }
133 :
134 : }; //telem_cooler
135 :
136 :
137 :
138 : } //namespace logger
139 : } //namespace MagAOX
140 :
141 : #endif //logger_types_telem_cooler_hpp
142 :
|