Line data Source code
1 : /** \file telem_pokeloop.hpp
2 : * \brief The MagAO-X logger telem_pokeloop log type.
3 : * \author Jared R. Males (jaredmales@gmail.com)
4 : *
5 : * \ingroup logger_types_files
6 : *
7 : */
8 : #ifndef logger_types_telem_pokeloop_hpp
9 : #define logger_types_telem_pokeloop_hpp
10 :
11 : #include "generated/telem_pokeloop_generated.h"
12 : #include "flatbuffer_log.hpp"
13 :
14 : namespace MagAOX
15 : {
16 : namespace logger
17 : {
18 :
19 : /// Log entry recording DM poke centering results
20 : /** \ingroup logger_types
21 : */
22 : struct telem_pokeloop : public flatbuffer_log
23 : {
24 : /// The event code
25 : static const flatlogs::eventCodeT eventCode = eventCodes::TELEM_POKELOOP;
26 :
27 : /// The default level
28 : static const flatlogs::logPrioT defaultLevel = flatlogs::logPrio::LOG_TELEM;
29 :
30 : static timespec lastRecord; ///< The time of the last time this log was recorded. Used by the telemetry system.
31 :
32 : /// The type of the input message
33 : struct messageT : public fbMessage
34 : {
35 : /// Construct from components
36 1 : messageT( const uint8_t & measuring, ///< [in] flag indicating if the WFS is measuring
37 : const float & deltaX, ///< [in] the x delta position
38 : const float & deltaY, ///< [in] the y delta position
39 : const uint64_t & counter ///< [in] the loop counter
40 : )
41 1 : {
42 :
43 1 : if(measuring == 0)
44 : {
45 0 : Telem_pokeloop_fbBuilder telem_pokeloop_builder(builder);
46 0 : telem_pokeloop_builder.add_measuring(measuring);
47 0 : auto fb = telem_pokeloop_builder.Finish();
48 0 : builder.Finish(fb);
49 0 : return;
50 : }
51 :
52 1 : auto fb = CreateTelem_pokeloop_fb(builder, measuring, deltaX, deltaY, counter);
53 :
54 1 : builder.Finish(fb);
55 0 : }
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_pokeloop_fbBuffer(verifier);
64 : }
65 :
66 : /// Get the message formatted 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_pokeloop_fb(msgBuffer);
74 :
75 0 : std::string msg;
76 0 : if(fbs->measuring() == 0)
77 : {
78 0 : msg = "[pokeloop] not measuring";
79 : }
80 : else
81 : {
82 0 : msg = "[pokeloop] X: ";
83 :
84 0 : msg += std::to_string(fbs->deltaX());
85 0 : msg += " Y: ";
86 0 : msg += std::to_string(fbs->deltaY());
87 :
88 0 : msg += " ctr: ";
89 0 : msg += std::to_string(fbs->counter());
90 : }
91 :
92 0 : return msg;
93 0 : }
94 :
95 0 : static bool measuring( void * msgBuffer /**< [in] Buffer containing the flatbuffer serialized message.*/ )
96 : {
97 0 : auto fbs = GetTelem_pokeloop_fb(msgBuffer);
98 0 : return fbs->measuring();
99 : }
100 :
101 0 : static float deltaX( void * msgBuffer /**< [in] Buffer containing the flatbuffer serialized message.*/ )
102 : {
103 0 : auto fbs = GetTelem_pokeloop_fb(msgBuffer);
104 0 : return fbs->deltaX();
105 : }
106 0 : static float deltaY( void * msgBuffer /**< [in] Buffer containing the flatbuffer serialized message.*/ )
107 : {
108 0 : auto fbs = GetTelem_pokeloop_fb(msgBuffer);
109 0 : return fbs->deltaY();
110 : }
111 :
112 0 : static unsigned long long counter( void * msgBuffer /**< [in] Buffer containing the flatbuffer serialized message.*/ )
113 : {
114 0 : auto fbs = GetTelem_pokeloop_fb(msgBuffer);
115 0 : return fbs->counter();
116 : }
117 :
118 : /// Get the logMetaDetail for a member by name
119 : /**
120 : * \returns the a logMetaDetail filled in with the appropriate details
121 : * \returns an empty logMetaDetail if member not recognized
122 : */
123 1 : static logMetaDetail getAccessor( const std::string & member /**< [in] the name of the member */ )
124 : {
125 1 : if( member == "measuring") return logMetaDetail({"MEASURING", "measuring state", logMeta::valTypes::Bool, logMeta::metaTypes::State, reinterpret_cast<void*>(&measuring), false});
126 1 : else if( member == "deltaX") return logMetaDetail({"DELTA X", "loop delta x", logMeta::valTypes::Float, logMeta::metaTypes::State, reinterpret_cast<void*>(&deltaX), false});
127 1 : else if( member == "deltaY") return logMetaDetail({"DELTA Y", "loop delta y", logMeta::valTypes::Float, logMeta::metaTypes::State, reinterpret_cast<void*>(&deltaY), false});
128 1 : else if( member == "counter") return logMetaDetail({"LOOP COUNTER", "loop counter", logMeta::valTypes::ULongLong, logMeta::metaTypes::State, reinterpret_cast<void*>(&counter), false});
129 : else
130 : {
131 1 : std::cerr << "No member " << member << " in telem_pokeloop\n";
132 1 : return logMetaDetail();
133 : }
134 : }
135 :
136 : }; // telem_pokeloop
137 :
138 : } // namespace logger
139 : } // namespace MagAOX
140 :
141 : #endif // logger_types_telem_pokeloop_hpp
|