Line data Source code
1 : /** \file telem_loopgain.hpp
2 : * \brief The MagAO-X logger telem_loopgain log type.
3 : * \author Jared R. Males (jaredmales@gmail.com)
4 : *
5 : * \ingroup logger_types_files
6 : *
7 : * History:
8 : * - 2022-11-28 created by JRM
9 : */
10 : #ifndef logger_types_telem_loopgain_hpp
11 : #define logger_types_telem_loopgain_hpp
12 :
13 : #include "generated/telem_loopgain_generated.h"
14 : #include "flatbuffer_log.hpp"
15 :
16 : namespace MagAOX
17 : {
18 : namespace logger
19 : {
20 :
21 : /// Log entry recording the build-time git state.
22 : /** \ingroup logger_types
23 : */
24 : struct telem_loopgain : public flatbuffer_log
25 : {
26 : /// The event code
27 : static const flatlogs::eventCodeT eventCode = eventCodes::TELEM_LOOPGAIN;
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 uint8_t &state, ///< [in]
39 : const float &gain, ///< [in]
40 : const float &multcoef, ///< [in]
41 : const float &limit ///< [in]
42 : )
43 1 : {
44 1 : auto fp = CreateTelem_loopgain_fb( builder, state, gain, multcoef, limit );
45 1 : builder.Finish( fp );
46 1 : }
47 : };
48 :
49 1 : static bool verify( flatlogs::bufferPtrT &logBuff, ///< [in] Buffer containing the flatbuffer serialized message.
50 : flatlogs::msgLenT len ///< [in] length of msgBuffer.
51 : )
52 : {
53 1 : auto verifier = flatbuffers::Verifier( static_cast<uint8_t *>( flatlogs::logHeader::messageBuffer( logBuff ) ),
54 1 : static_cast<size_t>( len ) );
55 2 : return VerifyTelem_loopgain_fbBuffer( verifier );
56 : }
57 :
58 : /// Get the message formatte for human consumption.
59 0 : static std::string msgString( void *msgBuffer, /**< [in] Buffer containing the flatbuffer serialized message.*/
60 : flatlogs::msgLenT len /**< [in] [unused] length of msgBuffer.*/
61 : )
62 : {
63 : static_cast<void>( len );
64 :
65 0 : auto fbs = GetTelem_loopgain_fb( msgBuffer );
66 :
67 0 : std::string msg = "[loopgain] ";
68 :
69 0 : msg += "state: ";
70 0 : msg += std::to_string( fbs->state() ) + " ";
71 :
72 0 : msg += "gain: ";
73 0 : msg += std::to_string( fbs->gain() ) + " ";
74 :
75 0 : msg += "multcoef: ";
76 0 : msg += std::to_string( fbs->multcoef() ) + " ";
77 :
78 0 : msg += "limit: ";
79 0 : msg += std::to_string( fbs->limit() );
80 :
81 0 : return msg;
82 0 : }
83 :
84 0 : static uint8_t state( void *msgBuffer )
85 : {
86 0 : auto fbs = GetTelem_loopgain_fb( msgBuffer );
87 0 : return fbs->state();
88 : }
89 :
90 0 : static float gain( void *msgBuffer )
91 : {
92 0 : auto fbs = GetTelem_loopgain_fb( msgBuffer );
93 0 : return fbs->gain();
94 : }
95 :
96 0 : static float multcoef( void *msgBuffer )
97 : {
98 0 : auto fbs = GetTelem_loopgain_fb( msgBuffer );
99 0 : return fbs->multcoef();
100 : }
101 :
102 0 : static float limit( void *msgBuffer )
103 : {
104 0 : auto fbs = GetTelem_loopgain_fb( msgBuffer );
105 0 : return fbs->limit();
106 : }
107 :
108 : /// Get the logMetaDetail for a member by name
109 : /**
110 : * \returns the a logMetaDetail filled in with the appropriate details
111 : * \returns an empty logMetaDetail if member not recognized
112 : */
113 1 : static logMetaDetail getAccessor( const std::string &member /**< [in] the name of the member */ )
114 : {
115 1 : if( member == "state" )
116 : return logMetaDetail( { "LOOP STATE",
117 : logMeta::valTypes::Int,
118 : logMeta::metaTypes::State,
119 0 : reinterpret_cast<void *>( &state ) } );
120 1 : else if( member == "gain" )
121 : return logMetaDetail( { "LOOP GAIN",
122 : logMeta::valTypes::Float,
123 : logMeta::metaTypes::State,
124 0 : reinterpret_cast<void *>( &gain ) } );
125 1 : else if( member == "multcoef" )
126 : return logMetaDetail( { "LOOP MULTCOEF",
127 : logMeta::valTypes::Float,
128 : logMeta::metaTypes::State,
129 0 : reinterpret_cast<void *>( &multcoef ) } );
130 1 : else if( member == "limit" )
131 : return logMetaDetail( { "LOOP LIMIT",
132 : logMeta::valTypes::Float,
133 : logMeta::metaTypes::State,
134 0 : reinterpret_cast<void *>( &limit ) } );
135 : else
136 : {
137 1 : std::cerr << "No member " << member << " in telem_loopgain\n";
138 1 : return logMetaDetail();
139 : }
140 : }
141 :
142 : }; // telem_loopgain
143 :
144 : } // namespace logger
145 : } // namespace MagAOX
146 :
147 : #endif // logger_types_telem_loopgain_hpp
|