appctrl.h 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. // appctrl.h :
  2. //
  3. #if !defined(AGD_APPCTRL_H__33022269_A897_4553_AC60_4ED76DA5D077__INCLUDED_)
  4. #define AGD_APPCTRL_H__33022269_A897_4553_AC60_4ED76DA5D077__INCLUDED_
  5. #include <stdbool.h>
  6. #include <time.h>
  7. #include <sys/times.h>
  8. #include "gfaipc.h"
  9. /////////////////////////////////////////////////////////////////////////////
  10. #ifdef __cplusplus
  11. /////////////////////////////////////////////////////////////////////////////
  12. // svcipc.h - Declarations:
  13. #define _APP_CTRL_MAX_APP_PATH_LENGTH 256
  14. #define _APP_CTRL_MAX_DISPLAY_NAME_LENGTH 128
  15. #define _APP_CTRL_MAX_SLOTS ((int)(sizeof(appid_t) * 8))
  16. #define _UUID_SHM_APP_CTRL_V1 "c3316f45-bcd6-424f-83bd-7d37ef9c3c6f"
  17. #define _NAME_SHM_APP_CTRL_V1 "GfA IPC Application Control SHM v1"
  18. #define _UUID_SHM_APP_CTRL _UUID_SHM_APP_CTRL_V1
  19. #define _NAME_SHM_APP_CTRL _NAME_SHM_APP_CTRL_V1
  20. /////////////////////////////////////////////////////////////////////////////
  21. typedef struct _APP_CTRL_INFO
  22. {
  23. appid_t nStateEvtPending;
  24. ctrlmsg_t nCtrlMsgPending;
  25. GFA_APPCTRL_APPTIMES at;
  26. }APP_CTRL_INFO, *LPAPP_CTRL_INFO;
  27. typedef const APP_CTRL_INFO *LPCAPP_CTRL_INFO;
  28. /////////////////////////////////////////////////////////////////////////////
  29. typedef struct _APP_CTRL_SYSTEM
  30. {
  31. time_t nTsStart;
  32. }APP_CTRL_SYSTEM, *LPAPP_CTRL_SYSTEM;
  33. typedef const APP_CTRL_SYSTEM *LPCAPP_CTRL_SYSTEM;
  34. /////////////////////////////////////////////////////////////////////////////
  35. typedef struct _APP_CTRL_PROCESS : public APP_CTRL_INFO
  36. {
  37. clock64_t nHeartbeatCurUs;
  38. clock64_t nHeartbeatLastUs;
  39. appid_t nAppID;
  40. appid_t nStateEvtSources;
  41. appid_t nHangingApps;
  42. char szDisplayName[_APP_CTRL_MAX_DISPLAY_NAME_LENGTH];
  43. char szAppPath[_APP_CTRL_MAX_APP_PATH_LENGTH];
  44. GfaIpcAppStates state;
  45. pid_t pid;
  46. }APP_CTRL_PROCESS, *LPAPP_CTRL_PROCESS;
  47. typedef const APP_CTRL_PROCESS *LPCAPP_CTRL_PROCESS;
  48. /////////////////////////////////////////////////////////////////////////////
  49. typedef struct _APP_CTRL
  50. {
  51. APP_CTRL_SYSTEM sys;
  52. APP_CTRL_PROCESS proc[_APP_CTRL_MAX_SLOTS];
  53. }APP_CTRL, *LPAPP_CTRL;
  54. typedef const APP_CTRL *LPCAPP_CTRL;
  55. /////////////////////////////////////////////////////////////////////////////
  56. class CAppCtrl
  57. {
  58. private:
  59. class CAppCtrlShmLocker
  60. {
  61. public:
  62. CAppCtrlShmLocker(CAppCtrl &rac);
  63. ~CAppCtrlShmLocker(void);
  64. void Unlock(void);
  65. private:
  66. CAppCtrl &m_rac;
  67. bool m_bLocked;
  68. };
  69. public:
  70. CAppCtrl(void);
  71. ~CAppCtrl(void);
  72. static const char* GetAppPath(char *pszPath, size_t nCChPath, pid_t pid = 0);
  73. static const char* GetStateText(GfaIpcAppStates state);
  74. bool Create(appid_t nAppID, const char *pszDisplayName, clock64_t nCycleIntvUs, clock64_t nMaxHeartbeatDelay);
  75. void Release(bool bResetSlot = true);
  76. appid_t GetRunningAppsMask(void);
  77. LPAPP_CTRL_INFO AppInfoUpdate(clock64_t nCurWorkingTime);
  78. GfaIpcAppStates GetAppState(appid_t nAppID);
  79. GfaIpcAppStates SetAppState(GfaIpcAppStates state);
  80. static const char* GetAppStateText(GfaIpcAppStates state);
  81. const char* GetDisplayName(appid_t nAppID, char *pszName, size_t nCChName);
  82. bool PresetDisplayName(appid_t nAppID, const char *pszName);
  83. bool SubscribeStateEvents(appid_t nAppMask);
  84. bool UnsubscribeStateEvents(appid_t nAppMask);
  85. appid_t GetPendingStateEvents(void);
  86. bool SendCtrlMsg(appid_t nAppID, ctrlmsg_t msg);
  87. ctrlmsg_t GetPendingCtrlMsg(void);
  88. clock64_t GetAppTimes(appid_t nAppID, LPGFA_APPCTRL_APPTIMES pat);
  89. private:
  90. int SlotIndexFromAppID(appid_t nAppID);
  91. void AppStateChanged(appid_t nAppID, GfaIpcAppStates oldState, GfaIpcAppStates newState);
  92. const char* GetKnownAppDisplayName(appid_t nAppID, char *pszName, size_t nCChName);
  93. void Lock(void);
  94. void Unlock(void);
  95. private:
  96. static HSHM m_hShm;
  97. pid_t m_pid;
  98. LPAPP_CTRL m_pAppCtrl;
  99. int m_nSlotIdx;
  100. appid_t m_nAppID;
  101. long m_nLockCount;
  102. APP_CTRL_INFO m_ai;
  103. clock64_t m_nClkTicksPerSec;
  104. clock64_t m_nClockStartUs;
  105. clock64_t m_nLastTimesCallUs;
  106. };
  107. /////////////////////////////////////////////////////////////////////////////
  108. #endif // __cplusplus
  109. #endif // !defined(AGD_APPCTRL_H__33022269_A897_4553_AC60_4ED76DA5D077__INCLUDED_)