AJA NTV2 SDK  17.0.1.1246
NTV2 SDK 17.0.1.1246
debug.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MIT */
8 #ifndef AJA_DEBUG_H
9 #define AJA_DEBUG_H
10 
11 #include <stdio.h>
12 #include <sstream>
13 #include <set>
14 #include "ajabase/common/public.h"
16 
17 
18 
45 #if defined(AJA_WINDOWS)
46 
47  #if defined(AJA_DEBUG)
48  #define AJA_ASSERT(_expression_) \
49  if (!(_expression_)) AJADebug::AssertWithMessage(__FILE__, __LINE__, #_expression_);
50  #define AJA_PRINT(...) \
51  AJADebug::Report(0, AJA_DebugSeverity_Debug, NULL, 0, __VA_ARGS__)
52  #else
53  #define AJA_ASSERT(_expression_)
54  #define AJA_PRINT(...)
55  #endif
56 
57  #define AJA_REPORT(_index_, _severity_, ...) \
58  AJADebug::Report(_index_, _severity_, __FILE__, __LINE__, __VA_ARGS__);
59 
60 #elif defined(AJA_LINUX)
61 
62  #if defined(AJA_DEBUG)
63  #define AJA_ASSERT(_expression_) \
64  if(!(_expression_)) AJADebug::AssertWithMessage(NULL, 0, #_expression_);
65  #define AJA_PRINT(...) \
66  AJADebug::Report(0, AJA_DebugSeverity_Error, NULL, 0, __VA_ARGS__)
67  #else
68  #define AJA_ASSERT(_expression_)
69  #define AJA_PRINT(...)
70  #endif
71 
72  #define AJA_REPORT(_index_, _severity_, ...) \
73  AJADebug::Report(_index_, _severity_, __FILE__, __LINE__, __VA_ARGS__);
74 
75 #elif defined(AJA_MAC)
76 
77  #if defined(AJA_DEBUG)
78  #define AJA_ASSERT(_expression_) \
79  if (!(_expression_)) AJADebug::AssertWithMessage(__FILE__, __LINE__, #_expression_);
80  #if !defined (AJA_PRINTTYPE)
81  #define AJA_PRINTTYPE 0
82  #endif // if AJA_PRINTTYPE undefined
83  #if (AJA_PRINTTYPE==0)
84  #define AJA_PRINT(...) \
85  AJADebug::Report(0, AJA_DebugSeverity_Error, NULL, 0, __VA_ARGS__)
86  #elif (AJA_PRINTTYPE==1)
87  #include <stdio.h>
88  #define AJA_PRINT(_format_...) printf(_format_)
89  #elif (AJA_PRINTTYPE==3)
90  #include <stdio.h>
91  #define AJA_PRINT(_format_...) fprintf(stderr, _format_)
92  #elif (AJA_PRINTTYPE==4)
93  #include <syslog.h>
94  #include <stdarg.h>
95  #define AJA_PRINT(_format_...) syslog(LOG_ERR, _format_)
96  #endif
97  #else
98  #define AJA_ASSERT(_expression_)
99  #define AJA_PRINT(...)
100  #endif
101 
102  #define AJA_REPORT(_index_, _severity_, ...) \
103  AJADebug::Report(_index_, _severity_, __FILE__, __LINE__, __VA_ARGS__);
104 
105 #else
106 
107  #if defined(AJA_DEBUG)
108  #define AJA_ASSERT(_expression_) \
109  if(!(_expression_)) AJADebug::AssertWithMessage(NULL, 0, #_expression_);
110  #define AJA_PRINT(_format_,...) \
111  AJADebug::Report(0, AJA_DebugSeverity_Error, NULL, 0, _format_)
112  #else
113  #define AJA_ASSERT(_expression_)
114  #define AJA_PRINT(_format_,...)
115  #endif
116 
117  #define AJA_REPORT(_index_, _severity_, _format_, ...) \
118  AJADebug::Report(_index_, _severity_, NULL, 0, _format_);
119 
120 #endif
121 
122 
123 
124 // Handy ostream-based macros...
125 
126 #define AJA_sASSERT(_expr_) do { std::ostringstream __ss__; __ss__ << #_expr_; \
127  AJADebug::AssertWithMessage(__FILE__, __LINE__, __ss__.str()); \
128  } while (false)
129 
130 
141 #define AJA_sREPORT(_index_,_severity_,_expr_) do {std::ostringstream __ss__; __ss__ << _expr_; \
142  AJADebug::Report((_index_), (_severity_), __FILE__, __LINE__, __ss__.str()); \
143  } while (false)
144 
154 #define AJA_sEMERGENCY(_index_,_expr_) AJA_sREPORT((_index_), AJA_DebugSeverity_Emergency, _expr_)
155 
165 #define AJA_sALERT(_index_,_expr_) AJA_sREPORT((_index_), AJA_DebugSeverity_Alert, _expr_)
166 
176 #define AJA_sERROR(_index_,_expr_) AJA_sREPORT((_index_), AJA_DebugSeverity_Error, _expr_)
177 
187 #define AJA_sWARNING(_index_,_expr_) AJA_sREPORT((_index_), AJA_DebugSeverity_Warning, _expr_)
188 
198 #define AJA_sNOTICE(_index_,_expr_) AJA_sREPORT((_index_), AJA_DebugSeverity_Notice, _expr_)
199 
209 #define AJA_sINFO(_index_,_expr_) AJA_sREPORT((_index_), AJA_DebugSeverity_Info, _expr_)
210 
220 #define AJA_sDEBUG(_index_,_expr_) AJA_sREPORT((_index_), AJA_DebugSeverity_Debug, _expr_)
221 
226 // forward declarations
227 class AJAMemory;
228 
236 AJA_EXPORT std::string AJAStatusToString (const AJAStatus inStatus, const bool inDetailed = false);
237 
238 
244 {
245 public:
246 
247  AJADebug() {}
248  virtual ~AJADebug() {}
249 
253  static uint32_t Version (void); // New in SDK 16.0
254 
258  static uint32_t TotalBytes (void); // New in SDK 16.0
259 
272  static AJAStatus Open (bool incrementRefCount = false);
273 
286  static AJAStatus Close (bool decrementRefCount = false);
287 
297  static AJAStatus Enable (int32_t index, uint32_t destination = AJA_DEBUG_DESTINATION_NONE);
298 
308  static AJAStatus Disable (int32_t index, uint32_t destination = AJA_DEBUG_DESTINATION_NONE);
309 
319  static AJAStatus SetDestination (int32_t index, uint32_t destination = AJA_DEBUG_DESTINATION_NONE);
320 
331  static AJAStatus GetDestination (const int32_t inGroup, uint32_t & outDestination);
332 
337  static bool IsActive (int32_t index);
338 
342  static bool IsOpen (void);
343 
347  static bool IsDebugBuild (void);
348 
358  static void Report (int32_t index, int32_t severity, const char* pFileName, int32_t lineNumber, ...);
359 
369  static void Report (int32_t index, int32_t severity, const char* pFileName, int32_t lineNumber, const std::string& message);
370 
378  static void AssertWithMessage (const char* pFileName, int32_t lineNumber, const std::string& pExpression);
379 
383  static uint32_t MessageRingCapacity (void); // New in SDK 16.0
384 
394  static AJAStatus GetClientReferenceCount (int32_t & outRefCount);
395 
406  static AJAStatus SetClientReferenceCount (int32_t refCount);
407 
417  static AJAStatus GetSequenceNumber (uint64_t & outSequenceNumber);
418 
429  static AJAStatus GetMessageSequenceNumber (const uint64_t sequenceNumber, uint64_t & outSequenceNumber);
430 
441  static AJAStatus GetMessageGroup (const uint64_t sequenceNumber, int32_t & outGroupIndex);
442 
453  static AJAStatus GetMessageDestination (const uint64_t sequenceNumber, uint32_t & outDestination);
454 
465  static AJAStatus GetMessageTime (const uint64_t sequenceNumber, uint64_t & outTime);
466 
477  static AJAStatus GetMessageWallClockTime (const uint64_t sequenceNumber, int64_t & outTime);
478 
479 
490  static AJAStatus GetMessageFileName (const uint64_t sequenceNumber, std::string & outFileName);
491 
502  static AJAStatus GetMessageLineNumber (const uint64_t sequenceNumber, int32_t & outLineNumber);
503 
514  static AJAStatus GetMessageSeverity (const uint64_t sequenceNumber, int32_t & outSeverity);
515 
526  static AJAStatus GetMessageText (const uint64_t sequenceNumber, std::string & outMessage);
527 
538  static AJAStatus GetProcessId (const uint64_t sequenceNumber, uint64_t & outPid);
539 
550  static AJAStatus GetThreadId (const uint64_t sequenceNumber, uint64_t & outTid);
551 
561  static AJAStatus GetMessagesAccepted (uint64_t & outCount);
562 
572  static AJAStatus GetMessagesIgnored (uint64_t & outCount);
573 
578  static const std::string & SeverityName (const int32_t severity);
579 
580 
585  static const std::string & GroupName (const int32_t group);
586 
595  static AJAStatus SaveState (const std::string & inFilePath);
596 
605  static AJAStatus RestoreState (const std::string & inFilePath);
606 
610  static uint32_t StatsCapacity (void); // New in SDK 16.0
611 
615  static bool HasStats (void); // New in SDK 16.0
616 
623  static AJAStatus StatAllocate (const uint32_t inKey); // New in SDK 16.0
624 
631  static AJAStatus StatFree (const uint32_t inKey); // New in SDK 16.0
632 
639  static bool StatIsAllocated (const uint32_t inKey); // New in SDK 16.0
640 
647  static AJAStatus StatReset (const uint32_t inKey); // New in SDK 16.0
648 
655  static AJAStatus StatTimerStart (const uint32_t inKey); // New in SDK 16.0
656 
664  static AJAStatus StatTimerStop (const uint32_t inKey); // New in SDK 16.0
665 
673  static AJAStatus StatCounterIncrement (const uint32_t inKey, const uint32_t inIncrement = 1); // New in SDK 16.0
674 
682  static AJAStatus StatSetValue (const uint32_t inKey, const uint32_t inValue); // New in SDK 16.0
683 
691  static AJAStatus StatGetInfo (const uint32_t inKey, AJADebugStat & outInfo); // New in SDK 16.0
692 
700  static AJAStatus StatGetKeys (std::vector<uint32_t> & outKeys, uint32_t & outSeqNum); // New in SDK 16.0
701 
709  static AJAStatus StatGetKeys (std::set<uint32_t> & outKeys, uint32_t & outSeqNum); // New in SDK 16.3
710 
717  static AJAStatus StatGetSequenceNum (uint32_t & outSeqNum); // New in SDK 16.3
718 
724  static int64_t DebugTime (void);
725 
726  // Old APIs
727  static const char* GetSeverityString (int32_t severity);
728  static const char* GetGroupString (int32_t group);
729  static AJAStatus GetDestination (int32_t index, uint32_t* pDestination) {return pDestination ? GetDestination(index, *pDestination) : AJA_STATUS_NULL;}
730  static AJAStatus GetClientReferenceCount (int32_t* pRefCount) {return pRefCount ? GetClientReferenceCount(*pRefCount) : AJA_STATUS_NULL;}
731  static AJAStatus GetSequenceNumber (uint64_t* pSequenceNumber) {return pSequenceNumber ? GetSequenceNumber(*pSequenceNumber) : AJA_STATUS_NULL;}
732  static AJAStatus GetMessageSequenceNumber (uint64_t sequenceNumber, uint64_t *pSequenceNumber) {return pSequenceNumber ? GetMessageSequenceNumber(sequenceNumber, *pSequenceNumber) : AJA_STATUS_NULL;}
733  static AJAStatus GetMessageGroup (uint64_t sequenceNumber, int32_t* pGroupIndex) {return pGroupIndex ? GetMessageGroup(sequenceNumber, *pGroupIndex) : AJA_STATUS_NULL;}
734  static AJAStatus GetMessageDestination (uint64_t sequenceNumber, uint32_t* pDestination) {return pDestination ? GetMessageDestination(sequenceNumber, *pDestination) : AJA_STATUS_NULL;}
735  static AJAStatus GetMessageTime (uint64_t sequenceNumber, uint64_t* pTime) {return pTime ? GetMessageTime(sequenceNumber, *pTime) : AJA_STATUS_NULL;}
736  static AJAStatus GetMessageWallClockTime (uint64_t sequenceNumber, int64_t *pTime) {return pTime ? GetMessageWallClockTime(sequenceNumber, *pTime) : AJA_STATUS_NULL;}
737  static AJAStatus GetMessageFileName (uint64_t sequenceNumber, const char** ppFileName);
738  static AJAStatus GetMessageLineNumber (uint64_t sequenceNumber, int32_t* pLineNumber) {return pLineNumber ? GetMessageLineNumber(sequenceNumber, *pLineNumber) : AJA_STATUS_NULL;}
739  static AJAStatus GetMessageSeverity (uint64_t sequenceNumber, int32_t* pSeverity) {return pSeverity ? GetMessageSeverity(sequenceNumber, *pSeverity) : AJA_STATUS_NULL;}
740  static AJAStatus GetMessageText (uint64_t sequenceNumber, const char** ppMessage);
741  static AJAStatus GetProcessId (uint64_t sequenceNumber, uint64_t* pPid) {return pPid ? GetProcessId(sequenceNumber, *pPid) : AJA_STATUS_NULL;}
742  static AJAStatus GetThreadId (uint64_t sequenceNumber, uint64_t* pTid) {return pTid ? GetThreadId(sequenceNumber, *pTid) : AJA_STATUS_NULL;}
743  static AJAStatus GetMessagesAccepted (uint64_t* pCount) {return pCount ? GetMessagesAccepted(*pCount) : AJA_STATUS_NULL;}
744  static AJAStatus GetMessagesIgnored (uint64_t* pCount) {return pCount ? GetMessagesIgnored(*pCount) : AJA_STATUS_NULL;}
745 
746  // Other APIs
747  static void * GetPrivateDataLoc (void);
748  static size_t GetPrivateDataLen (void);
749 
750 }; // AJADebug
751 
752 std::ostream & operator << (std::ostream & oss, const AJADebugStat & inStat);
753 
754 #endif // AJA_DEBUG_H
AJADebug::GetMessageGroup
static AJAStatus GetMessageGroup(uint64_t sequenceNumber, int32_t *pGroupIndex)
Definition: debug.h:733
AJADebug::GetMessageDestination
static AJAStatus GetMessageDestination(uint64_t sequenceNumber, uint32_t *pDestination)
Definition: debug.h:734
debugshare.h
Declares the constants used for sharing debug messages. These structures are used to gather debug mes...
AJADebug::GetMessageSeverity
static AJAStatus GetMessageSeverity(uint64_t sequenceNumber, int32_t *pSeverity)
Definition: debug.h:739
AJADebug::GetProcessId
static AJAStatus GetProcessId(uint64_t sequenceNumber, uint64_t *pPid)
Definition: debug.h:741
operator<<
std::ostream & operator<<(std::ostream &oss, const AJADebugStat &inStat)
Definition: debug.cpp:1496
AJA_EXPORT
#define AJA_EXPORT
Definition: export.h:34
AJAMemory
Definition: memory.h:17
AJADebug
Definition: debug.h:243
AJADebug::GetMessageWallClockTime
static AJAStatus GetMessageWallClockTime(uint64_t sequenceNumber, int64_t *pTime)
Definition: debug.h:736
public.h
Master header for the ajabase library.
AJAStatus
AJAStatus
Definition: types.h:365
AJADebug::GetThreadId
static AJAStatus GetThreadId(uint64_t sequenceNumber, uint64_t *pTid)
Definition: debug.h:742
AJADebug::GetMessageTime
static AJAStatus GetMessageTime(uint64_t sequenceNumber, uint64_t *pTime)
Definition: debug.h:735
AJADebug::GetMessagesIgnored
static AJAStatus GetMessagesIgnored(uint64_t *pCount)
Definition: debug.h:744
AJAStatusToString
AJA_EXPORT std::string AJAStatusToString(const AJAStatus inStatus, const bool inDetailed=false)
Definition: debug.cpp:980
AJADebug::GetClientReferenceCount
static AJAStatus GetClientReferenceCount(int32_t *pRefCount)
Definition: debug.h:730
AJADebug::AJADebug
AJADebug()
Definition: debug.h:247
AJA_STATUS_NULL
@ AJA_STATUS_NULL
Definition: types.h:374
AJADebug::GetMessageSequenceNumber
static AJAStatus GetMessageSequenceNumber(uint64_t sequenceNumber, uint64_t *pSequenceNumber)
Definition: debug.h:732
AJA_DEBUG_DESTINATION_NONE
#define AJA_DEBUG_DESTINATION_NONE
Definition: debugshare.h:165
AJADebug::GetMessagesAccepted
static AJAStatus GetMessagesAccepted(uint64_t *pCount)
Definition: debug.h:743
AJADebug::~AJADebug
virtual ~AJADebug()
Definition: debug.h:248
AJADebugStat
Definition: debugshare.h:262
AJADebug::GetMessageLineNumber
static AJAStatus GetMessageLineNumber(uint64_t sequenceNumber, int32_t *pLineNumber)
Definition: debug.h:738
AJADebug::GetSequenceNumber
static AJAStatus GetSequenceNumber(uint64_t *pSequenceNumber)
Definition: debug.h:731
AJADebug::GetDestination
static AJAStatus GetDestination(int32_t index, uint32_t *pDestination)
Definition: debug.h:729