LCOV - code coverage report
Current view: top level - libMagAOX/logger/types - telem_adctrack.hpp (source / functions) Coverage Total Hit
Test: MagAOX Lines: 32.7 % 52 17
Test Date: 2026-04-15 19:34:29 Functions: 33.3 % 9 3

            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
        

Generated by: LCOV version 2.0-1