API
 
Loading...
Searching...
No Matches
telem_poltrack.hpp
Go to the documentation of this file.
1/** \file telem_poltrack.hpp
2 * \brief The MagAO-X logger telem_poltrack log type.
3 * \author Jared R. Males (jaredmales@gmail.com)
4 *
5 * \ingroup logger_types_files
6 *
7 */
8#ifndef logger_types_telem_poltrack_hpp
9#define logger_types_telem_poltrack_hpp
10
12#include "flatbuffer_log.hpp"
13
14namespace MagAOX
15{
16namespace logger
17{
18
19/// Log entry recording poltrack stage specific status.
20/** \ingroup logger_types
21 */
23{
24 /// The event code
26
27 /// The default level
29
30 static timespec
31 lastRecord; ///< The timestamp of the last time this log was recorded. Used by the telemetry system.
32
33 /// The type of the input message
34 struct messageT : public fbMessage
35 {
36 /// Construct from components
37 messageT( const float &set_angle, /**<[in] the HWP set angle */
38 const float &actual_angle, /**<[in] the actual HWP angle */
39 const std::string &pos_name, /**<[in] the name of the HWP position */
40 const bool &tracking
41 )
42 {
43 auto _pos_name = builder.CreateString(pos_name);
44
46 builder.Finish( fp );
47 }
48 };
49
50 static bool verify( flatlogs::bufferPtrT &logBuff, ///< [in] Buffer containing the flatbuffer serialized message.
51 flatlogs::msgLenT len ///< [in] length of msgBuffer.
52 )
53 {
54 auto verifier = flatbuffers::Verifier( static_cast<uint8_t *>( flatlogs::logHeader::messageBuffer( logBuff ) ),
55 static_cast<size_t>( len ) );
56 return VerifyTelem_poltrack_fbBuffer( verifier );
57 }
58
59 /// Get the message formatte for human consumption.
60 static std::string msgString( void *msgBuffer, /**< [in] Buffer containing the flatbuffer serialized message.*/
61 flatlogs::msgLenT len /**< [in] [unused] length of msgBuffer.*/
62 )
63 {
64 static_cast<void>( len );
65
66 auto fbs = GetTelem_poltrack_fb( msgBuffer );
67
68 std::string msg = "[poltrack] ";
69
70 msg += "set: ";
71 msg += std::to_string( fbs->set_angle() ) + " ";
72
73 msg += "act: ";
74 msg += std::to_string( fbs->actual_angle() ) + " ";
75
76 msg += "name: ";
77 if ( fbs->pos_name() )
78 {
79 msg += std::string(fbs->pos_name()->c_str()) + " ";
80 }
81
82 msg += "tracking: ";
83 if (fbs->tracking())
84 {
85 msg += "SYNCHRO_ADI ";
86 }
87 else
88 {
89 msg += "NONE ";
90 }
91
92 return msg;
93 }
94
95 static float set_angle( void *msgBuffer )
96 {
97 auto fbs = GetTelem_poltrack_fb( msgBuffer );
98 return fbs->set_angle();
99 }
100
101 static float actual_angle( void *msgBuffer )
102 {
103 auto fbs = GetTelem_poltrack_fb( msgBuffer );
104 return fbs->actual_angle();
105 }
106
107 static std::string pos_name( void *msgBuffer )
108 {
109 auto fbs = GetTelem_poltrack_fb(msgBuffer);
110 if(fbs->pos_name())
111 {
112 return std::string(fbs->pos_name()->c_str());
113 }
114 else return std::string();
115 }
116
117 static bool tracking( void *msgBuffer )
118 {
119 auto fbs = GetTelem_poltrack_fb( msgBuffer );
120 return fbs->tracking();
121
122 }
123
124 /// Get the logMetaDetail for a member by name
125 /**
126 * \returns the a logMetaDetail filled in with the appropriate details
127 * \returns an empty logMetaDetail if member not recognized
128 */
129 static logMetaDetail getAccessor( const std::string &member /**< [in] the name of the member */ )
130 {
131 if( member == "set_angle" )
132 {
133 return logMetaDetail( { "SET ANGLE",
136 reinterpret_cast<void *>( &set_angle ) } );
137 }
138 else if( member == "actual_angle" )
139 {
140 return logMetaDetail( { "ACTUAL ANGLE",
143 reinterpret_cast<void *>( &actual_angle ) } );
144 }
145 else if( member == "pos_name" )
146 {
147 return logMetaDetail( { "POS NAME",
150 reinterpret_cast<void *>( &pos_name ) } );
151 }
152 else if( member == "tracking" )
153 {
154 return logMetaDetail( { "TRACKING",
157 reinterpret_cast<void *>( &tracking ) } );
158 }
159 else
160 {
161 std::cerr << "No member " << member << " in telem_poltrack\n";
162 return logMetaDetail();
163 }
164 }
165
166}; // telem_poltrack
167
168} // namespace logger
169} // namespace MagAOX
170
171#endif // logger_types_telem_poltrack_hpp
The MagAO-X logger flatbuffer log base type.
uint16_t eventCodeT
The type of an event code (16-bit unsigned int).
Definition logDefs.hpp:40
msgLen2T msgLenT
The type used to refer to the message length, regardless of length.
Definition logDefs.hpp:69
int8_t logPrioT
The type of the log priority code.
Definition logDefs.hpp:21
static void * messageBuffer(bufferPtrT &logBuffer)
Get the message buffer address.
std::shared_ptr< char > bufferPtrT
The log entry buffer smart pointer.
Definition logHeader.hpp:58
static constexpr flatlogs::eventCodeT TELEM_POLTRACK
Definition logCodes.hpp:64
inline ::flatbuffers::Offset< Telem_poltrack_fb > CreateTelem_poltrack_fb(::flatbuffers::FlatBufferBuilder &_fbb, float set_angle=0.0f, float actual_angle=0.0f, ::flatbuffers::Offset<::flatbuffers::String > pos_name=0, bool tracking=false)
const MagAOX::logger::Telem_poltrack_fb * GetTelem_poltrack_fb(const void *buf)
bool VerifyTelem_poltrack_fbBuffer(::flatbuffers::Verifier &verifier)
Definition dm.hpp:19
static constexpr logPrioT LOG_TELEM
A telemetry recording.
Message type for resolving log messages with a f.b. builder.
flatbuffers::FlatBufferBuilder builder
Base class for logs consisting of a flatbuffer message.
The type of the input message.
messageT(const float &set_angle, const float &actual_angle, const std::string &pos_name, const bool &tracking)
Construct from components.
Log entry recording poltrack stage specific status.
static std::string pos_name(void *msgBuffer)
static float set_angle(void *msgBuffer)
static std::string msgString(void *msgBuffer, flatlogs::msgLenT len)
Get the message formatte for human consumption.
static bool tracking(void *msgBuffer)
static const flatlogs::eventCodeT eventCode
The event code.
static bool verify(flatlogs::bufferPtrT &logBuff, flatlogs::msgLenT len)
static logMetaDetail getAccessor(const std::string &member)
Get the logMetaDetail for a member by name.
static timespec lastRecord
The timestamp of the last time this log was recorded. Used by the telemetry system.
static float actual_angle(void *msgBuffer)
static const flatlogs::logPrioT defaultLevel
The default level.