Line data Source code
1 : /** \file telem_temps.hpp
2 : * \brief The MagAO-X logger telem_temps 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_temps_hpp
11 : #define logger_types_telem_temps_hpp
12 :
13 : #include "generated/telem_temps_generated.h"
14 : #include "flatbuffer_log.hpp"
15 :
16 : namespace MagAOX
17 : {
18 : namespace logger
19 : {
20 :
21 : /// Log entry recording electronics rack temperature
22 : /** \ingroup logger_types
23 : */
24 : struct telem_temps : public flatbuffer_log
25 : {
26 : /// The event code
27 : static const flatlogs::eventCodeT eventCode = eventCodes::TELEM_TEMPS;
28 :
29 : /// The default level
30 : static const flatlogs::logPrioT defaultLevel = flatlogs::logPrio::LOG_TELEM;
31 :
32 : static timespec lastRecord; ///< The time of the last time this log was recorded. Used by the telemetry system.
33 :
34 : /// The type of the input message
35 : struct messageT : public fbMessage
36 : {
37 : /// Construct from components
38 1 : messageT( const std::vector<float> &temps ///<[in] vector of temperatures
39 : )
40 1 : {
41 1 : auto _temps = builder.CreateVector( temps );
42 1 : auto fp = CreateTelem_temps_fb( builder, _temps );
43 :
44 1 : builder.Finish( fp );
45 1 : }
46 : };
47 :
48 1 : static bool verify( flatlogs::bufferPtrT &logBuff, ///< [in] Buffer containing the flatbuffer serialized message.
49 : flatlogs::msgLenT len ///< [in] length of msgBuffer.
50 : )
51 : {
52 1 : auto verifier = flatbuffers::Verifier( static_cast<uint8_t *>( flatlogs::logHeader::messageBuffer( logBuff ) ),
53 1 : static_cast<size_t>( len ) );
54 2 : return VerifyTelem_temps_fbBuffer( verifier );
55 : }
56 :
57 : /// Get the message formatted for human consumption.
58 0 : static std::string msgString( void *msgBuffer, /**< [in] Buffer containing the flatbuffer serialized message.*/
59 : flatlogs::msgLenT len /**< [in] [unused] length of msgBuffer.*/
60 : )
61 : {
62 : static_cast<void>( len );
63 :
64 0 : auto fbs = GetTelem_temps_fb( msgBuffer );
65 :
66 0 : std::string msg = "[temps] ";
67 :
68 0 : if( fbs->temps() )
69 : {
70 0 : for( size_t i = 0; i < fbs->temps()->size(); ++i )
71 : {
72 0 : msg += " ";
73 0 : msg += std::to_string( fbs->temps()->Get( i ) );
74 : }
75 : }
76 :
77 0 : return msg;
78 0 : }
79 :
80 0 : static std::vector<float> temps( void *msgBuffer /**< [in] Buffer containing the flatbuffer serialized message.*/ )
81 : {
82 0 : std::vector<float> p;
83 :
84 0 : auto fbs = GetTelem_temps_fb( msgBuffer );
85 :
86 0 : if( fbs->temps() != nullptr )
87 : {
88 0 : for( auto it = fbs->temps()->begin(); it != fbs->temps()->end(); ++it )
89 : {
90 0 : p.push_back( *it );
91 : }
92 : }
93 0 : return p;
94 0 : }
95 :
96 : /// Get the logMetaDetail for a member by name
97 : /**
98 : * \returns the a logMetaDetail filled in with the appropriate details
99 : * \returns an empty logMetaDetail if member not recognized
100 : */
101 1 : static logMetaDetail getAccessor( const std::string &member /**< [in] the name of the member */ )
102 : {
103 1 : if( member == "temps" )
104 : return logMetaDetail( { "TEMPS",
105 : "temperatures",
106 : logMeta::valTypes::Vector_Float,
107 : logMeta::metaTypes::State,
108 : reinterpret_cast<void *>( &temps ),
109 0 : false } );
110 : else
111 : {
112 1 : std::cerr << "No member " << member << " in telem_temps\n";
113 1 : return logMetaDetail();
114 : }
115 : }
116 :
117 : }; // telem_temps
118 :
119 : } // namespace logger
120 : } // namespace MagAOX
121 :
122 : #endif // logger_types_telem_temps_hpp
|