LCOV - code coverage report
Current view: top level - libMagAOX/logger/types - telem_pokeloop.hpp (source / functions) Coverage Total Hit
Test: MagAOX Lines: 32.6 % 46 15
Test Date: 2026-01-03 21:03:39 Functions: 37.5 % 8 3

            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
        

Generated by: LCOV version 2.0-1