Line data Source code
1 : /** \file telem_rhusb.hpp
2 : * \brief The MagAO-X logger telem_rhusb log type.
3 : * \author Jared R. Males (jaredmales@gmail.com)
4 : *
5 : * \ingroup logger_types_files
6 : *
7 : * History:
8 : * - 2021-08-22 created by JRM
9 : */
10 : #ifndef logger_types_telem_rhusb_hpp
11 : #define logger_types_telem_rhusb_hpp
12 :
13 : #include "generated/telem_rhusb_generated.h"
14 : #include "flatbuffer_log.hpp"
15 :
16 : namespace MagAOX
17 : {
18 : namespace logger
19 : {
20 :
21 :
22 : /// Log entry recording the build-time git state.
23 : /** \ingroup logger_types
24 : */
25 : struct telem_rhusb : public flatbuffer_log
26 : {
27 : ///The event code
28 : static const flatlogs::eventCodeT eventCode = eventCodes::TELEM_RHUSB;
29 :
30 : ///The default level
31 : static const flatlogs::logPrioT defaultLevel = flatlogs::logPrio::LOG_TELEM;
32 :
33 : static timespec lastRecord; ///< The time of the last time this log was recorded. Used by the telemetry system.
34 :
35 : ///The type of the input message
36 : struct messageT : public fbMessage
37 : {
38 : ///Construct from components
39 1 : messageT( const float & temp, ///< [in]
40 : const float & rh ///< [in]
41 : )
42 1 : {
43 1 : auto fp = CreateTelem_rhusb_fb(builder, temp, rh);
44 1 : builder.Finish(fp);
45 1 : }
46 :
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)), static_cast<size_t>(len));
54 2 : return VerifyTelem_rhusb_fbBuffer(verifier);
55 : }
56 :
57 : ///Get the message formatte for human consumption.
58 0 : static std::string msgString( void * msgBuffer, /**< [in] Buffer containing the flatbuffer serialized message.*/
59 : flatlogs::msgLenT len /**< [in] [unused] length of msgBuffer.*/
60 : )
61 : {
62 : static_cast<void>(len);
63 :
64 0 : auto fbs = GetTelem_rhusb_fb(msgBuffer);
65 :
66 0 : std::string msg = "[rhusb] ";
67 :
68 :
69 :
70 0 : msg += "temp: ";
71 0 : msg += std::to_string(fbs->temp()) + "C ";
72 :
73 0 : msg += "RH: ";
74 0 : msg += std::to_string(fbs->rh()) + "%";
75 :
76 :
77 0 : return msg;
78 :
79 0 : }
80 :
81 0 : static float temp(void * msgBuffer)
82 : {
83 0 : auto fbs = GetTelem_rhusb_fb(msgBuffer);
84 0 : return fbs->temp();
85 : }
86 :
87 0 : static float rh(void * msgBuffer)
88 : {
89 0 : auto fbs = GetTelem_rhusb_fb(msgBuffer);
90 0 : return fbs->rh();
91 : }
92 :
93 : /// Get the logMetaDetail for a member by name
94 : /**
95 : * \returns the a logMetaDetail filled in with the appropriate details
96 : * \returns an empty logMetaDetail if member not recognized
97 : */
98 1 : static logMetaDetail getAccessor( const std::string & member /**< [in] the name of the member */ )
99 : {
100 1 : if( member == "temp") return logMetaDetail({"TEMP", "temperature [C]", logMeta::valTypes::Float, logMeta::metaTypes::State, reinterpret_cast<void*>(&temp), true});
101 1 : else if( member == "rh") return logMetaDetail({"RH", "relative humidity [%]", logMeta::valTypes::Float, logMeta::metaTypes::State, reinterpret_cast<void*>(&rh), true});
102 : else
103 : {
104 1 : std::cerr << "No member " << member << " in telem_rhusb\n";
105 1 : return logMetaDetail();
106 : }
107 : }
108 :
109 :
110 : }; //telem_rhusb
111 :
112 :
113 :
114 : } //namespace logger
115 : } //namespace MagAOX
116 :
117 : #endif //logger_types_telem_rhusb_hpp
118 :
|