logvar.h 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198
  1. // logvar.h :
  2. //
  3. #if !defined(AGD_LOGVAR_H__ED3E1EC3_3899_4602_A824_5B7A58880AAC__INCLUDED_)
  4. #define AGD_LOGVAR_H__ED3E1EC3_3899_4602_A824_5B7A58880AAC__INCLUDED_
  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <time.h>
  8. #include <string.h>
  9. #include <string>
  10. #include <pthread.h>
  11. #include <typeinfo>
  12. #include <vector>
  13. #include <map>
  14. #include <gfa/gfaipc.h>
  15. #include "datalogger.h"
  16. /////////////////////////////////////////////////////////////////////////////
  17. typedef union _CHECK_UPDATE_SHM_RETVAL
  18. {
  19. struct
  20. {
  21. unsigned int nChecked;
  22. unsigned int nUpdated;
  23. };
  24. unsigned long long nRetval;
  25. }CHECK_UPDATE_SHM_RETVAL, *LPCHECK_UPDATE_SHM_RETVAL;
  26. typedef const CHECK_UPDATE_SHM_RETVAL *LPCCHECK_UPDATE_SHM_RETVAL;
  27. /////////////////////////////////////////////////////////////////////////////
  28. // logvar.h - Declarations:
  29. class CLoggable
  30. {
  31. public:
  32. virtual void InitPath(CLoggable *pParent, const char *pszMemberName) = 0;
  33. virtual const char* GetPath(void) const = 0;
  34. virtual void InitTagID(CDataLogger &rdl) = 0;
  35. virtual void Sample(void) = 0;
  36. virtual void LogInterval(time_t nTimestamp, CDataLogger &rdl) = 0;
  37. virtual void LogValueChanged(time_t nTimestamp, CDataLogger &rdl, bool bStartup, bool bWriteNull) = 0;
  38. };
  39. /////////////////////////////////////////////////////////////////////////////
  40. class CLogVariable : public CLoggable
  41. {
  42. public:
  43. enum VT
  44. {
  45. VT_Invalid,
  46. VT_bool,
  47. VT_I1,
  48. VT_UI1,
  49. VT_I2,
  50. VT_UI2,
  51. VT_I4,
  52. VT_UI4,
  53. VT_I8,
  54. VT_UI8,
  55. VT_float,
  56. VT_double,
  57. VT_string
  58. };
  59. typedef union
  60. {
  61. void *pVoid;
  62. bool *pBool;
  63. signed char *pI1;
  64. unsigned char *pUI1;
  65. signed short *pI2;
  66. unsigned short *pUI2;
  67. signed int *pI4;
  68. unsigned int *pUI4;
  69. signed long long *pI8;
  70. unsigned long long *pUI8;
  71. float *pFloat;
  72. double *pDouble;
  73. }V_Ptr;
  74. typedef union
  75. {
  76. bool boolVal;
  77. signed char I1Val;
  78. unsigned char UI1Val;
  79. signed short I2Val;
  80. unsigned short UI2Val;
  81. signed int I4Val;
  82. unsigned int UI4Val;
  83. signed long long I8Val;
  84. unsigned long long UI8Val;
  85. float FloatVal;
  86. double DoubleVal;
  87. }V_Val;
  88. public:
  89. CLogVariable(LogTypes lt, void *pData, bool *pbLogCond, const std::type_info &rti, HSHM hShm, const char *pszName, int nIndex, CLoggable *pParent);
  90. CLogVariable(LogTypes lt, void *pData, void *pBase, size_t nCvOffset, unsigned int nCvBitNr, const std::type_info &rti, HSHM hShm, const char *pszName, int nIndex, CLoggable *pParent);
  91. virtual ~CLogVariable(void);
  92. public:
  93. virtual void InitPath(CLoggable *pParent, const char *pszMemberName);
  94. virtual const char* GetPath(void) const {
  95. return m_pszPath;}
  96. virtual void InitTagID(CDataLogger &rdl);
  97. virtual void Sample(void);
  98. virtual void LogInterval(time_t nTimestamp, CDataLogger &rdl);
  99. virtual void LogValueChanged(time_t nTimestamp, CDataLogger &rdl, bool bStartup, bool bWriteNull);
  100. private:
  101. void Lock(void);
  102. void Unlock(void);
  103. bool CanLog(bool fLock);
  104. private:
  105. LogTypes m_lt;
  106. bool *m_pbLogCond;
  107. bool m_bOldLogCond;
  108. std::string m_name;
  109. std::string m_path;
  110. const char *m_pszPath;
  111. int m_nIndex;
  112. enum VT m_vt;
  113. volatile V_Ptr m_data;
  114. V_Val m_cache;
  115. double m_fLastSample;
  116. double m_fSamples;
  117. double m_fMin;
  118. double m_fMax;
  119. HSHM m_hShm;
  120. CLoggable *m_pParent;
  121. unsigned long long m_nUpdates;
  122. unsigned long m_nTagID;
  123. unsigned int m_nSampleCount;
  124. bool m_bIsIntervalLog;
  125. bool m_bIsCondLog;
  126. uint8_t *m_pnCvByte;
  127. uint8_t m_nCvMask;
  128. bool m_bCvIsBit;
  129. bool m_bIsDbPersistant;
  130. };
  131. /////////////////////////////////////////////////////////////////////////////
  132. class CLogBitVariable : public CLoggable
  133. {
  134. public:
  135. CLogBitVariable(LogTypes lt, void *pData, size_t nOffset, unsigned int nBitNr, bool *pbLogCond, HSHM hShm, const char *pszName, CLoggable *pParent);
  136. CLogBitVariable(LogTypes lt, void *pData, size_t nOffset, unsigned int nBitNr, size_t nCvOffset, unsigned int nCvBitNr, HSHM hShm, const char *pszName, CLoggable *pParent);
  137. virtual ~CLogBitVariable(void);
  138. public:
  139. virtual void InitPath(CLoggable *pParent, const char *pszMemberName);
  140. virtual const char* GetPath(void) const {
  141. return m_pszPath;}
  142. virtual void InitTagID(CDataLogger &rdl);
  143. virtual void Sample(void);
  144. virtual void LogInterval(time_t nTimestamp, CDataLogger &rdl);
  145. virtual void LogValueChanged(time_t nTimestamp, CDataLogger &rdl, bool bStartup, bool bWriteNull);
  146. private:
  147. void Lock(void);
  148. void Unlock(void);
  149. bool CanLog(bool fLock);
  150. private:
  151. LogTypes m_lt;
  152. bool *m_pbLogCond;
  153. bool m_bOldLogCond;
  154. std::string m_name;
  155. std::string m_path;
  156. const char *m_pszPath;
  157. bool m_cacheVal;
  158. double m_fLastSample;
  159. double m_fSamples;
  160. double m_fMin;
  161. double m_fMax;
  162. HSHM m_hShm;
  163. CLoggable *m_pParent;
  164. unsigned long long m_nUpdates;
  165. unsigned long m_nTagID;
  166. unsigned int m_nSampleCount;
  167. bool m_bIsIntervalLog;
  168. bool m_bIsCondLog;
  169. uint8_t *m_pnByte;
  170. uint8_t m_nMask;
  171. uint8_t *m_pnCvByte;
  172. uint8_t m_nCvMask;
  173. bool m_bCvIsBit;
  174. bool m_bIsDbPersistant;
  175. };
  176. /////////////////////////////////////////////////////////////////////////////
  177. #endif // !defined(AGD_LOGVAR_H__ED3E1EC3_3899_4602_A824_5B7A58880AAC__INCLUDED_)