Line data Source code
1 : /** \file telem_adctrack.hpp
2 : * \brief The MagAO-X logger telem_adctrack log type.
3 : * \author Jared R. Males (jaredmales@gmail.com)
4 : *
5 : * \ingroup logger_types_files
6 : *
7 : */
8 : #ifndef logger_types_telem_adctrack_hpp
9 : #define logger_types_telem_adctrack_hpp
10 :
11 : #include "generated/telem_adctrack_generated.h"
12 : #include "flatbuffer_log.hpp"
13 :
14 : namespace MagAOX
15 : {
16 : namespace logger
17 : {
18 :
19 : /// Log entry recording ADC tracker operator-adjustable state.
20 : /** \ingroup logger_types
21 : */
22 : struct telem_adctrack : public flatbuffer_log
23 : {
24 : /// The event code
25 : static const flatlogs::eventCodeT eventCode = eventCodes::TELEM_ADCTRACK;
26 :
27 : /// The default level
28 : static const flatlogs::logPrioT defaultLevel = flatlogs::logPrio::LOG_TELEM;
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 30 : messageT( const bool &tracking, /**< [in] whether ADC tracking is enabled */
38 : const float &delta_angle, /**< [in] the shared ADC delta angle */
39 : const float &adc1_delta, /**< [in] the ADC 1-specific delta angle */
40 : const float &adc2_delta, /**< [in] the ADC 2-specific delta angle */
41 : const float &min_zd /**< [in] the minimum tracked zenith distance */
42 : )
43 30 : {
44 30 : auto fp = CreateTelem_adctrack_fb( builder, tracking, delta_angle, adc1_delta, adc2_delta, min_zd );
45 30 : builder.Finish( fp );
46 30 : }
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_adctrack_fbBuffer( verifier );
56 : }
57 :
58 : /// Get the message formatted 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_adctrack_fb( msgBuffer );
66 :
67 0 : std::string msg = "[adctrack] ";
68 :
69 0 : msg += "tracking: ";
70 0 : msg += fbs->tracking() ? "On " : "Off ";
71 :
72 0 : msg += "delta_angle: ";
73 0 : msg += std::to_string( fbs->delta_angle() ) + " ";
74 :
75 0 : msg += "adc1_delta: ";
76 0 : msg += std::to_string( fbs->adc1_delta() ) + " ";
77 :
78 0 : msg += "adc2_delta: ";
79 0 : msg += std::to_string( fbs->adc2_delta() ) + " ";
80 :
81 0 : msg += "min_zd: ";
82 0 : msg += std::to_string( fbs->min_zd() ) + " ";
83 :
84 0 : return msg;
85 0 : }
86 :
87 0 : static bool tracking( void *msgBuffer )
88 : {
89 0 : auto fbs = GetTelem_adctrack_fb( msgBuffer );
90 0 : return fbs->tracking();
91 : }
92 :
93 0 : static float delta_angle( void *msgBuffer )
94 : {
95 0 : auto fbs = GetTelem_adctrack_fb( msgBuffer );
96 0 : return fbs->delta_angle();
97 : }
98 :
99 0 : static float adc1_delta( void *msgBuffer )
100 : {
101 0 : auto fbs = GetTelem_adctrack_fb( msgBuffer );
102 0 : return fbs->adc1_delta();
103 : }
104 :
105 0 : static float adc2_delta( void *msgBuffer )
106 : {
107 0 : auto fbs = GetTelem_adctrack_fb( msgBuffer );
108 0 : return fbs->adc2_delta();
109 : }
110 :
111 0 : static float min_zd( void *msgBuffer )
112 : {
113 0 : auto fbs = GetTelem_adctrack_fb( msgBuffer );
114 0 : return fbs->min_zd();
115 : }
116 :
117 : /// Get the logMetaDetail for a member by name
118 : /**
119 : * \returns the a logMetaDetail filled in with the appropriate details
120 : * \returns an empty logMetaDetail if member not recognized
121 : */
122 1 : static logMetaDetail getAccessor( const std::string &member /**< [in] the name of the member */ )
123 : {
124 1 : if( member == "tracking" )
125 : {
126 : return logMetaDetail( { "TRACKING",
127 : logMeta::valTypes::Bool,
128 : logMeta::metaTypes::State,
129 0 : reinterpret_cast<void *>( &tracking ) } );
130 : }
131 1 : else if( member == "delta_angle" )
132 : {
133 : return logMetaDetail( { "DELTA ANGLE",
134 : logMeta::valTypes::Float,
135 : logMeta::metaTypes::State,
136 0 : reinterpret_cast<void *>( &delta_angle ) } );
137 : }
138 1 : else if( member == "adc1_delta" )
139 : {
140 : return logMetaDetail( { "ADC1 DELTA",
141 : logMeta::valTypes::Float,
142 : logMeta::metaTypes::State,
143 0 : reinterpret_cast<void *>( &adc1_delta ) } );
144 : }
145 1 : else if( member == "adc2_delta" )
146 : {
147 : return logMetaDetail( { "ADC2 DELTA",
148 : logMeta::valTypes::Float,
149 : logMeta::metaTypes::State,
150 0 : reinterpret_cast<void *>( &adc2_delta ) } );
151 : }
152 1 : else if( member == "min_zd" )
153 : {
154 : return logMetaDetail( { "MIN ZD",
155 : logMeta::valTypes::Float,
156 : logMeta::metaTypes::State,
157 0 : reinterpret_cast<void *>( &min_zd ) } );
158 : }
159 : else
160 : {
161 1 : std::cerr << "No member " << member << " in telem_adctrack\n";
162 1 : return logMetaDetail();
163 : }
164 : }
165 :
166 : }; // telem_adctrack
167 :
168 : } // namespace logger
169 : } // namespace MagAOX
170 :
171 : #endif // logger_types_telem_adctrack_hpp
|