SapCounter.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. #ifndef _SAPCOUNTER_H_
  2. #define _SAPCOUNTER_H_
  3. // SapCounter.h : header file
  4. //
  5. #include "SapClassBasicDef.h"
  6. // Forward declarations
  7. class SAPCLASSBASIC_CLASS SapCounterCallbackInfo;
  8. typedef void (*SapCounterCallback)(SapCounterCallbackInfo *);
  9. //
  10. // SapCounter class declaration
  11. //
  12. class SAPCLASSBASIC_CLASS SapCounter : public SapManager
  13. {
  14. public:
  15. // Base units
  16. typedef int BaseUnits;
  17. enum _BaseUnits
  18. {
  19. UnitsTime = CORCOUNTER_VAL_BASE_UNITS_TIME,
  20. UnitsHSync = CORCOUNTER_VAL_BASE_UNITS_HS,
  21. UnitsVSync = CORCOUNTER_VAL_BASE_UNITS_VS,
  22. UnitsExternal = CORCOUNTER_VAL_BASE_UNITS_EXTERNAL
  23. };
  24. // Counter detection types
  25. typedef int DetectType;
  26. enum _DetectType
  27. {
  28. DetectRisingEdge = CORCOUNTER_VAL_RISING_EDGE,
  29. DetectFallingEdge = CORCOUNTER_VAL_FALLING_EDGE
  30. };
  31. // Counter direction types
  32. typedef int Direction;
  33. enum _Direction
  34. {
  35. DirectionUp = CORCOUNTER_VAL_DIRECTION_UP,
  36. DirectionDown = CORCOUNTER_VAL_DIRECTION_DOWN
  37. };
  38. // Event types
  39. typedef int EventType;
  40. enum _EventType
  41. {
  42. EventNone = 0,
  43. EventElapsedTime = CORCOUNTER_VAL_EVENT_TYPE_ELAPSED_TIME
  44. };
  45. public:
  46. // Constructor/Destructor
  47. SapCounter(SapLocation loc = SapLocation::ServerSystem, SapCounterCallback pCallback = NULL, void *pContext = NULL);
  48. SapCounter(const SapCounter &counter);
  49. virtual ~SapCounter();
  50. SapCounter &operator=(const SapCounter &counter);
  51. // Module create/destroy
  52. virtual BOOL Create();
  53. virtual BOOL Destroy();
  54. // Access to implementation
  55. CORHANDLE GetHandle() const { return m_hCounter; }
  56. SapLocation GetLocation() const { return m_Location; }
  57. SapCounterCallback GetCallback() const { return m_pCallback; }
  58. void *GetContext() const { return m_pContext; }
  59. BaseUnits GetBaseUnits() const { return m_BaseUnits; }
  60. DetectType GetDetectType() const { return m_DetectType; }
  61. Direction GetDirection() const { return m_Direction; }
  62. virtual BOOL GetCount(int *pCount);
  63. virtual BOOL SetBaseUnits(BaseUnits baseUnits);
  64. virtual BOOL SetDetectType(DetectType detectType);
  65. virtual BOOL SetDirection(Direction direction);
  66. virtual BOOL SetCallbackInfo(SapCounterCallback pCallback, void *pContext = NULL);
  67. virtual BOOL GetCapability(int cap, void *pValue);
  68. virtual BOOL GetParameter(int param, void *pValue);
  69. virtual BOOL SetParameter(int param, int value);
  70. virtual BOOL SetParameter(int param, void *pValue);
  71. virtual BOOL Start();
  72. virtual BOOL Stop();
  73. // Callback management
  74. virtual BOOL EnableCallback(EventType eventType, int elapsedTime);
  75. virtual BOOL DisableCallback();
  76. protected:
  77. // Utility methods
  78. void Construct(SapLocation loc, SapCounterCallback pCallback, void *pContext);
  79. // Callback management
  80. static SAPSTATUS CounterCallback(void *context, UINT32 eventType, UINT32 eventCount);
  81. protected:
  82. SapLocation m_Location;
  83. CORCOUNTER m_hCounter;
  84. // Parameters
  85. BaseUnits m_BaseUnits;
  86. DetectType m_DetectType;
  87. Direction m_Direction;
  88. // Callback management
  89. SapCounterCallback m_pCallback; // Application callback function
  90. void *m_pContext; // Application context
  91. BOOL m_IsCallbackActive; // Callback status
  92. };
  93. //
  94. // SapCounterCallbackInfo class declaration
  95. //
  96. class SAPCLASSBASIC_CLASS SapCounterCallbackInfo
  97. {
  98. public:
  99. SapCounterCallbackInfo(SapCounter *pCounter, void *context, SapCounter::EventType eventType, int eventCount)
  100. { m_pCounter = pCounter; m_Context = context; m_EventType = eventType; m_EventCount = eventCount; }
  101. ~SapCounterCallbackInfo() {}
  102. SapCounter *GetCounter() const { return m_pCounter; }
  103. void *GetContext() const { return m_Context; }
  104. SapCounter::EventType GetEventType() const { return m_EventType; }
  105. int GetEventCount() const { return m_EventCount; }
  106. protected:
  107. SapCounter *m_pCounter;
  108. void *m_Context;
  109. SapCounter::EventType m_EventType;
  110. int m_EventCount;
  111. };
  112. #endif // _SAPCOUNTER_H_