123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- // appctrl.h :
- //
- #if !defined(AGD_APPCTRL_H__33022269_A897_4553_AC60_4ED76DA5D077__INCLUDED_)
- #define AGD_APPCTRL_H__33022269_A897_4553_AC60_4ED76DA5D077__INCLUDED_
- #include <stdbool.h>
- #include <time.h>
- #include <sys/times.h>
- #include "gfaipc.h"
- /////////////////////////////////////////////////////////////////////////////
- #ifdef __cplusplus
- /////////////////////////////////////////////////////////////////////////////
- // svcipc.h - Declarations:
- #define _APP_CTRL_MAX_APP_PATH_LENGTH 256
- #define _APP_CTRL_MAX_DISPLAY_NAME_LENGTH 128
- #define _APP_CTRL_MAX_SLOTS ((int)(sizeof(appid_t) * 8))
- #define _UUID_SHM_APP_CTRL_V1 "c3316f45-bcd6-424f-83bd-7d37ef9c3c6f"
- #define _NAME_SHM_APP_CTRL_V1 "GfA IPC Application Control SHM v1"
- #define _UUID_SHM_APP_CTRL _UUID_SHM_APP_CTRL_V1
- #define _NAME_SHM_APP_CTRL _NAME_SHM_APP_CTRL_V1
- /////////////////////////////////////////////////////////////////////////////
- typedef struct _APP_CTRL_INFO
- {
- appid_t nStateEvtPending;
- ctrlmsg_t nCtrlMsgPending;
- GFA_APPCTRL_APPTIMES at;
- }APP_CTRL_INFO, *LPAPP_CTRL_INFO;
- typedef const APP_CTRL_INFO *LPCAPP_CTRL_INFO;
- /////////////////////////////////////////////////////////////////////////////
- typedef struct _APP_CTRL_SYSTEM
- {
- time_t nTsStart;
- }APP_CTRL_SYSTEM, *LPAPP_CTRL_SYSTEM;
- typedef const APP_CTRL_SYSTEM *LPCAPP_CTRL_SYSTEM;
- /////////////////////////////////////////////////////////////////////////////
- typedef struct _APP_CTRL_PROCESS : public APP_CTRL_INFO
- {
- clock64_t nHeartbeatCurUs;
- clock64_t nHeartbeatLastUs;
- appid_t nAppID;
- appid_t nStateEvtSources;
- appid_t nHangingApps;
- char szDisplayName[_APP_CTRL_MAX_DISPLAY_NAME_LENGTH];
- char szAppPath[_APP_CTRL_MAX_APP_PATH_LENGTH];
- GfaIpcAppStates state;
- pid_t pid;
- }APP_CTRL_PROCESS, *LPAPP_CTRL_PROCESS;
- typedef const APP_CTRL_PROCESS *LPCAPP_CTRL_PROCESS;
- /////////////////////////////////////////////////////////////////////////////
- typedef struct _APP_CTRL
- {
- APP_CTRL_SYSTEM sys;
- APP_CTRL_PROCESS proc[_APP_CTRL_MAX_SLOTS];
- }APP_CTRL, *LPAPP_CTRL;
- typedef const APP_CTRL *LPCAPP_CTRL;
- /////////////////////////////////////////////////////////////////////////////
- class CAppCtrl
- {
- private:
- class CAppCtrlShmLocker
- {
- public:
- CAppCtrlShmLocker(CAppCtrl &rac);
- ~CAppCtrlShmLocker(void);
- void Unlock(void);
- private:
- CAppCtrl &m_rac;
- bool m_bLocked;
- };
- public:
- CAppCtrl(void);
- ~CAppCtrl(void);
-
- static const char* GetAppPath(char *pszPath, size_t nCChPath, pid_t pid = 0);
- static const char* GetStateText(GfaIpcAppStates state);
- bool Create(appid_t nAppID, const char *pszDisplayName, clock64_t nCycleIntvUs, clock64_t nMaxHeartbeatDelay);
- void Release(bool bResetSlot = true);
- appid_t GetRunningAppsMask(void);
- LPAPP_CTRL_INFO AppInfoUpdate(clock64_t nCurWorkingTime);
- GfaIpcAppStates GetAppState(appid_t nAppID);
- GfaIpcAppStates SetAppState(GfaIpcAppStates state);
- static const char* GetAppStateText(GfaIpcAppStates state);
-
- const char* GetDisplayName(appid_t nAppID, char *pszName, size_t nCChName);
- bool PresetDisplayName(appid_t nAppID, const char *pszName);
-
- bool SubscribeStateEvents(appid_t nAppMask);
- bool UnsubscribeStateEvents(appid_t nAppMask);
- appid_t GetPendingStateEvents(void);
-
- bool SendCtrlMsg(appid_t nAppID, ctrlmsg_t msg);
- ctrlmsg_t GetPendingCtrlMsg(void);
-
- clock64_t GetAppTimes(appid_t nAppID, LPGFA_APPCTRL_APPTIMES pat);
- private:
- int SlotIndexFromAppID(appid_t nAppID);
- void AppStateChanged(appid_t nAppID, GfaIpcAppStates oldState, GfaIpcAppStates newState);
- const char* GetKnownAppDisplayName(appid_t nAppID, char *pszName, size_t nCChName);
- void Lock(void);
- void Unlock(void);
- private:
- static HSHM m_hShm;
- pid_t m_pid;
- LPAPP_CTRL m_pAppCtrl;
- int m_nSlotIdx;
- appid_t m_nAppID;
- long m_nLockCount;
- APP_CTRL_INFO m_ai;
- clock64_t m_nClkTicksPerSec;
- clock64_t m_nClockStartUs;
- clock64_t m_nLastTimesCallUs;
- };
- /////////////////////////////////////////////////////////////////////////////
- #endif // __cplusplus
- #endif // !defined(AGD_APPCTRL_H__33022269_A897_4553_AC60_4ED76DA5D077__INCLUDED_)
|