Line data Source code
1 : /** \file telem_teldata.hpp
2 : * \brief The MagAO-X logger telem_teldata 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_teldata_hpp
11 : #define logger_types_telem_teldata_hpp
12 :
13 : #include "generated/telem_teldata_generated.h"
14 : #include "flatbuffer_log.hpp"
15 : #include "../logMeta.hpp"
16 :
17 : namespace MagAOX
18 : {
19 : namespace logger
20 : {
21 :
22 :
23 : /// Log entry recording the build-time git state.
24 : /** \ingroup logger_types
25 : */
26 : struct telem_teldata : public flatbuffer_log
27 : {
28 : ///The event code
29 : static const flatlogs::eventCodeT eventCode = eventCodes::TELEM_TELDATA;
30 :
31 : ///The default level
32 : static const flatlogs::logPrioT defaultLevel = flatlogs::logPrio::LOG_TELEM;
33 :
34 : static timespec lastRecord; ///< The time of the last time this log was recorded. Used by the telemetry system.
35 :
36 : ///The type of the input message
37 : struct messageT : public fbMessage
38 : {
39 : ///Construct from components
40 1 : messageT( const int & roi, ///<[in] rotator of interest
41 : const int & tracking, ///<[in] tracking state
42 : const int & guiding, ///<[in] guiding state
43 : const int & slewing, ///<[in] slewing state
44 : const int & guiderMoving, ///<[in] guider moving state
45 : const double & az, ///<[in] azimuth
46 : const double & zd, ///<[in] zenith distance
47 : const double & pa, ///<[in] parallactic angle
48 : const double & domeAz, ///<[in] dome azimuth
49 : const int & domeStat ///<[in] dome status
50 : )
51 1 : {
52 1 : auto fp = CreateTelem_teldata_fb(builder, roi, tracking, guiding, slewing, guiderMoving, az, zd, pa, domeAz, domeStat);
53 1 : builder.Finish(fp);
54 1 : }
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_teldata_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_teldata_fb(msgBuffer);
74 :
75 0 : std::string msg = "[teldata] ";
76 :
77 0 : msg += "roi: ";
78 0 : msg += std::to_string(fbs->roi()) + " ";
79 :
80 0 : msg += "tr: ";
81 0 : msg += std::to_string(fbs->tracking()) + " ";
82 :
83 0 : msg += "gd: ";
84 0 : msg += std::to_string(fbs->guiding()) + " ";
85 :
86 0 : msg += "sl: ";
87 0 : msg += std::to_string(fbs->slewing()) + " ";
88 :
89 0 : msg += "gm: ";
90 0 : msg += std::to_string(fbs->guiderMoving()) + " ";
91 :
92 0 : msg += "az: ";
93 0 : msg += std::to_string(fbs->az()) + " ";
94 :
95 0 : msg += "zd: ";
96 0 : msg += std::to_string(fbs->zd()) + " ";
97 :
98 0 : msg += "pa: ";
99 0 : msg += std::to_string(fbs->pa()) + " ";
100 :
101 0 : msg += "da: ";
102 0 : msg += std::to_string(fbs->domeAz()) + " ";
103 :
104 0 : msg += "ds: ";
105 0 : msg += std::to_string(fbs->domeStat());
106 :
107 0 : return msg;
108 :
109 0 : }
110 :
111 0 : static int roi( void * msgBuffer )
112 : {
113 0 : auto fbs = GetTelem_teldata_fb(msgBuffer);
114 0 : return fbs->roi();
115 : }
116 :
117 0 : static int tracking( void * msgBuffer )
118 : {
119 0 : auto fbs = GetTelem_teldata_fb(msgBuffer);
120 0 : return fbs->tracking();
121 : }
122 :
123 0 : static int guiding( void * msgBuffer )
124 : {
125 0 : auto fbs = GetTelem_teldata_fb(msgBuffer);
126 0 : return fbs->guiding();
127 : }
128 :
129 0 : static int slewing( void * msgBuffer )
130 : {
131 0 : auto fbs = GetTelem_teldata_fb(msgBuffer);
132 0 : return fbs->slewing();
133 : }
134 :
135 0 : static int guiderMoving( void * msgBuffer )
136 : {
137 0 : auto fbs = GetTelem_teldata_fb(msgBuffer);
138 0 : return fbs->guiderMoving();
139 : }
140 :
141 0 : static double az( void * msgBuffer )
142 : {
143 0 : auto fbs = GetTelem_teldata_fb(msgBuffer);
144 0 : return fbs->az();
145 : }
146 :
147 0 : static double zd( void * msgBuffer )
148 : {
149 0 : auto fbs = GetTelem_teldata_fb(msgBuffer);
150 0 : return fbs->zd();
151 : }
152 :
153 0 : static double pa( void * msgBuffer )
154 : {
155 0 : auto fbs = GetTelem_teldata_fb(msgBuffer);
156 0 : return fbs->pa();
157 : }
158 :
159 0 : static double domeAz( void * msgBuffer )
160 : {
161 0 : auto fbs = GetTelem_teldata_fb(msgBuffer);
162 0 : return fbs->domeAz();
163 : }
164 :
165 0 : static int domeStat( void * msgBuffer )
166 : {
167 0 : auto fbs = GetTelem_teldata_fb(msgBuffer);
168 0 : return fbs->domeStat();
169 : }
170 :
171 : /// Get the logMetaDetail for a member by name
172 : /**
173 : * \returns the function pointer cast to void*
174 : * \returns -1 for an unknown member
175 : */
176 1 : static logMetaDetail getAccessor( const std::string & member /**< [in] the name of the member */ )
177 : {
178 1 : if( member == "roi") return logMetaDetail({"ROI", logMeta::valTypes::Int, logMeta::metaTypes::State, reinterpret_cast<void*>(&roi)});
179 1 : else if(member == "tracking") return logMetaDetail({"TRACKING", logMeta::valTypes::Int, logMeta::metaTypes::State, reinterpret_cast<void*>(&tracking)});
180 1 : else if(member == "guiding") return logMetaDetail({"GUIDING", logMeta::valTypes::Int, logMeta::metaTypes::State, reinterpret_cast<void*>(&guiding)});
181 1 : else if(member == "slewing") return logMetaDetail({"SLEWING", logMeta::valTypes::Int, logMeta::metaTypes::State, reinterpret_cast<void*>(&slewing)});
182 1 : else if(member == "guiderMoving") return logMetaDetail({"GUIDER MOVING", logMeta::valTypes::Int, logMeta::metaTypes::State, reinterpret_cast<void*>(&guiderMoving)});
183 1 : else if(member == "az") return logMetaDetail({"AZ", logMeta::valTypes::Double, logMeta::metaTypes::Continuous, reinterpret_cast<void*>(&az), false});
184 1 : else if(member == "zd") return logMetaDetail({"ZD", logMeta::valTypes::Double, logMeta::metaTypes::Continuous, reinterpret_cast<void*>(&zd), false});
185 1 : else if(member == "pa") return logMetaDetail({"PARANG", logMeta::valTypes::Double, logMeta::metaTypes::Continuous, reinterpret_cast<void*>(&pa), false});
186 1 : else if(member == "domeAz") return logMetaDetail({"DOME AZ", logMeta::valTypes::Double, logMeta::metaTypes::Continuous, reinterpret_cast<void*>(&domeAz)});
187 1 : else if(member == "domeStat") return logMetaDetail({"DOME STATUS", logMeta::valTypes::Int, logMeta::metaTypes::State, reinterpret_cast<void*>(&domeStat)});
188 : else
189 : {
190 1 : std::cerr << "No member " << member << " in telem_teldata\n";
191 1 : return logMetaDetail();
192 : }
193 : }
194 :
195 : }; //telem_teldata
196 :
197 :
198 :
199 : } //namespace logger
200 : } //namespace MagAOX
201 :
202 : #endif //logger_types_telem_teldata_hpp
203 :
|