appctrl.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  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 "ipcpriv.h"
  9. #include "gfaipc.h"
  10. #include "procmem.h"
  11. #include "sysinfo.h"
  12. /////////////////////////////////////////////////////////////////////////////
  13. #ifdef __cplusplus
  14. /////////////////////////////////////////////////////////////////////////////
  15. // svcipc.h - Declarations:
  16. #define _APP_CTRL_MAX_APP_PATH_LENGTH 256
  17. #define _APP_CTRL_MAX_DISPLAY_NAME_LENGTH 128
  18. #define _APP_CTRL_MAX_SLOTS ((int)(sizeof(appid_t) * 8))
  19. #define _UUID_SHM_APP_CTRL_V1 "c3316f45-bcd6-424f-83bd-7d37ef9c3c6f"
  20. #define _NAME_SHM_APP_CTRL_V1 "GfA IPC Application-Control SHM v1"
  21. #define _UUID_SHM_APP_CTRL _UUID_SHM_APP_CTRL_V1
  22. #define _NAME_SHM_APP_CTRL _NAME_SHM_APP_CTRL_V1
  23. /////////////////////////////////////////////////////////////////////////////
  24. typedef struct _APP_CTRL_INFO
  25. {
  26. appid_t nStateEvtPending;
  27. ctrlmsg_t nCtrlMsgPending;
  28. sysevt_t nSysEvtPending;
  29. }APP_CTRL_INFO, *LPAPP_CTRL_INFO;
  30. typedef const APP_CTRL_INFO *LPCAPP_CTRL_INFO;
  31. /////////////////////////////////////////////////////////////////////////////
  32. typedef struct _APP_CTRL_SYSTEM
  33. {
  34. pid_t nPidInCharge;
  35. bool bBootFromEmmc;
  36. time_t nTsSystemStart;
  37. clock64_t nClkLastUpdate;
  38. int nUpdateError;
  39. GFA_APPCTRL_SYSMEM mem;
  40. uint32_t nDiskMask;
  41. uint32_t nPartMask;
  42. uint32_t nMountMask;
  43. GFA_SYSINFO_STORAGE_DEVICE_MAP sdm;
  44. GFA_SYSINFO_SPI spi;
  45. }APP_CTRL_SYSTEM, *LPAPP_CTRL_SYSTEM;
  46. typedef const APP_CTRL_SYSTEM *LPCAPP_CTRL_SYSTEM;
  47. /////////////////////////////////////////////////////////////////////////////
  48. typedef struct _APP_CTRL_PROCESS : public APP_CTRL_INFO
  49. {
  50. GFA_APPCTRL_APPTIMES at;
  51. GFA_APPCTRL_APPMEM am;
  52. clock64_t nHeartbeatCurUs;
  53. clock64_t nHeartbeatLastUs;
  54. appid_t nAppID;
  55. appid_t nStateEvtSources;
  56. appid_t nHangingApps;
  57. sysevt_t nSysEvtRegistered;
  58. uint32_t nDiskMask;
  59. uint32_t nDiskAdded;
  60. uint32_t nDiskRemoved;
  61. uint32_t nPartMask;
  62. uint32_t nPartAdded;
  63. uint32_t nPartRemoved;
  64. uint32_t nMountMask;
  65. uint32_t nMountAdded;
  66. uint32_t nMountRemoved;
  67. char szDisplayName[_APP_CTRL_MAX_DISPLAY_NAME_LENGTH];
  68. char szAppPath[_APP_CTRL_MAX_APP_PATH_LENGTH];
  69. GfaIpcAppStates state;
  70. pid_t pid;
  71. uint32_t nAppFileSize;
  72. }APP_CTRL_PROCESS, *LPAPP_CTRL_PROCESS;
  73. typedef const APP_CTRL_PROCESS *LPCAPP_CTRL_PROCESS;
  74. /////////////////////////////////////////////////////////////////////////////
  75. typedef struct _APP_CTRL
  76. {
  77. APP_CTRL_SYSTEM sys;
  78. GFA_SYSINFO_DATABASE sdb;
  79. APP_CTRL_PROCESS proc[_APP_CTRL_MAX_SLOTS];
  80. }APP_CTRL, *LPAPP_CTRL;
  81. typedef const APP_CTRL *LPCAPP_CTRL;
  82. /////////////////////////////////////////////////////////////////////////////
  83. class CAppCtrl
  84. {
  85. private:
  86. class CAppCtrlShmLocker
  87. {
  88. public:
  89. CAppCtrlShmLocker(CAppCtrl &rac);
  90. ~CAppCtrlShmLocker(void);
  91. void Unlock(void);
  92. private:
  93. CAppCtrl &m_rac;
  94. bool m_bLocked;
  95. };
  96. public:
  97. CAppCtrl(void);
  98. ~CAppCtrl(void);
  99. static const char* GetAppPath(char *pszPath, size_t nCChPath, pid_t pid = 0);
  100. static size_t GetAppSize(const char *pszAppPath);
  101. static const char* GetStateText(GfaIpcAppStates state);
  102. bool Create(appid_t nAppID, const char *pszDisplayName, clock64_t nCycleIntvUs, clock64_t nMaxHeartbeatDelay);
  103. void Release(bool bResetSlot = true);
  104. appid_t GetRunningAppsMask(void);
  105. LPAPP_CTRL_INFO AppInfoUpdate(clock64_t nCurWorkingTime);
  106. void TriggertHeartBeat(void);
  107. GfaIpcAppStates GetAppState(appid_t nAppID);
  108. GfaIpcAppStates SetAppState(GfaIpcAppStates state);
  109. static const char* GetAppStateText(GfaIpcAppStates state);
  110. const char* GetDisplayName(appid_t nAppID, char *pszName, size_t nCChName);
  111. bool PresetDisplayName(appid_t nAppID, const char *pszName);
  112. size_t GetAppSize(appid_t nAppID);
  113. bool SubscribeStateEvents(appid_t nAppMask);
  114. bool UnsubscribeStateEvents(appid_t nAppMask);
  115. appid_t GetPendingStateEvents(void);
  116. bool SendCtrlMsg(appid_t nAppID, ctrlmsg_t msg);
  117. ctrlmsg_t GetPendingCtrlMsg(void);
  118. clock64_t GetAppTimes(appid_t nAppID, LPGFA_APPCTRL_APPTIMES pat);
  119. bool GetAppMem(appid_t nAppID, LPGFA_APPCTRL_APPMEM pam);
  120. bool CreateSysInfo(void);
  121. bool ReleaseSysInfo(void);
  122. bool UpdateSysInfo(void);
  123. bool UpdateStorageDeviceMap(const GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm);
  124. bool UpdateDbInfo(const GFA_SYSINFO_DATABASE &sdb);
  125. bool GetSysMem(LPGFA_APPCTRL_SYSMEM psm);
  126. bool GetSysSPI(LPGFA_SYSINFO_SPI pspi);
  127. bool SubscribeSysEvents(sysevt_t nEvtMask);
  128. bool UnsubscribeSysEvents(sysevt_t nEvtMask);
  129. sysevt_t GetPendingSysEvents(void);
  130. int GetNextDiskAdded(LPGFA_SYSINFO_DISK pDisk);
  131. int GetNextDiskRemoved(LPGFA_SYSINFO_DISK pDisk);
  132. int GetNextPartitionAdded(LPGFA_SYSINFO_PARTITION pPart);
  133. int GetNextPartitionRemoved(LPGFA_SYSINFO_PARTITION pPart);
  134. int GetNextMountAdded(LPGFA_SYSINFO_PARTITION pPart);
  135. int GetNextMountRemoved(LPGFA_SYSINFO_PARTITION pPart);
  136. bool GetBootFromEmmc(bool *pbBootFromEmmc);
  137. bool GetDbInfo(LPGFA_SYSINFO_DATABASE psdb);
  138. bool KillApp(appid_t nAppID);
  139. private:
  140. int SlotIndexFromAppID(appid_t nAppID);
  141. void AppStateChanged(appid_t nAppID, GfaIpcAppStates oldState, GfaIpcAppStates newState);
  142. const char* GetKnownAppDisplayName(appid_t nAppID, char *pszName, size_t nCChName);
  143. void Lock(void);
  144. void Unlock(void);
  145. private:
  146. static HSHM m_hShm;
  147. pid_t m_pid;
  148. LPAPP_CTRL m_pAppCtrl;
  149. int m_nSlotIdx;
  150. appid_t m_nAppID;
  151. long m_nLockCount;
  152. APP_CTRL_INFO m_ai;
  153. clock64_t m_nClkTicksPerSec;
  154. clock64_t m_nClockStartUs;
  155. clock64_t m_nLastTimesCallUs;
  156. CProcMem m_procMem;
  157. CSysInfo m_sysInfo;
  158. };
  159. /////////////////////////////////////////////////////////////////////////////
  160. #endif // __cplusplus
  161. #endif // !defined(AGD_APPCTRL_H__33022269_A897_4553_AC60_4ED76DA5D077__INCLUDED_)