123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- // 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 "ipcpriv.h"
- #include "gfaipc.h"
- #include "procmem.h"
- #include "sysinfo.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;
- sysevt_t nSysEvtPending;
- }APP_CTRL_INFO, *LPAPP_CTRL_INFO;
- typedef const APP_CTRL_INFO *LPCAPP_CTRL_INFO;
- /////////////////////////////////////////////////////////////////////////////
- typedef struct _APP_CTRL_SYSTEM
- {
- pid_t nPidInCharge;
- bool bBootFromEmmc;
- time_t nTsSystemStart;
- clock64_t nClkLastUpdate;
- int nUpdateError;
- GFA_APPCTRL_SYSMEM mem;
- uint32_t nDiskMask;
- uint32_t nPartMask;
- uint32_t nMountMask;
- GFA_SYSINFO_STORAGE_DEVICE_MAP sdm;
- GFA_SYSINFO_SPI spi;
- }APP_CTRL_SYSTEM, *LPAPP_CTRL_SYSTEM;
- typedef const APP_CTRL_SYSTEM *LPCAPP_CTRL_SYSTEM;
- /////////////////////////////////////////////////////////////////////////////
- typedef struct _APP_CTRL_PROCESS : public APP_CTRL_INFO
- {
- GFA_APPCTRL_APPTIMES at;
- GFA_APPCTRL_APPMEM am;
- clock64_t nHeartbeatCurUs;
- clock64_t nHeartbeatLastUs;
- appid_t nAppID;
- appid_t nStateEvtSources;
- appid_t nHangingApps;
- sysevt_t nSysEvtRegistered;
- uint32_t nDiskMask;
- uint32_t nDiskAdded;
- uint32_t nDiskRemoved;
- uint32_t nPartMask;
- uint32_t nPartAdded;
- uint32_t nPartRemoved;
- uint32_t nMountMask;
- uint32_t nMountAdded;
- uint32_t nMountRemoved;
- char szDisplayName[_APP_CTRL_MAX_DISPLAY_NAME_LENGTH];
- char szAppPath[_APP_CTRL_MAX_APP_PATH_LENGTH];
- GfaIpcAppStates state;
- pid_t pid;
- uint32_t nAppFileSize;
- }APP_CTRL_PROCESS, *LPAPP_CTRL_PROCESS;
- typedef const APP_CTRL_PROCESS *LPCAPP_CTRL_PROCESS;
- /////////////////////////////////////////////////////////////////////////////
- typedef struct _APP_CTRL
- {
- APP_CTRL_SYSTEM sys;
- GFA_SYSINFO_DATABASE sdb;
- 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 size_t GetAppSize(const char *pszAppPath);
- 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);
- void TriggertHeartBeat(void);
- 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);
- size_t GetAppSize(appid_t nAppID);
-
- 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);
- bool GetAppMem(appid_t nAppID, LPGFA_APPCTRL_APPMEM pam);
- bool CreateSysInfo(void);
- bool ReleaseSysInfo(void);
- bool UpdateSysInfo(void);
- bool UpdateStorageDeviceMap(const GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm);
- bool UpdateDbInfo(const GFA_SYSINFO_DATABASE &sdb);
- bool GetSysMem(LPGFA_APPCTRL_SYSMEM psm);
- bool GetSysSPI(LPGFA_SYSINFO_SPI pspi);
- bool SubscribeSysEvents(sysevt_t nEvtMask);
- bool UnsubscribeSysEvents(sysevt_t nEvtMask);
- sysevt_t GetPendingSysEvents(void);
- int GetNextDiskAdded(LPGFA_SYSINFO_DISK pDisk);
- int GetNextDiskRemoved(LPGFA_SYSINFO_DISK pDisk);
- int GetNextPartitionAdded(LPGFA_SYSINFO_PARTITION pPart);
- int GetNextPartitionRemoved(LPGFA_SYSINFO_PARTITION pPart);
- int GetNextMountAdded(LPGFA_SYSINFO_PARTITION pPart);
- int GetNextMountRemoved(LPGFA_SYSINFO_PARTITION pPart);
-
- bool GetBootFromEmmc(bool *pbBootFromEmmc);
- bool GetDbInfo(LPGFA_SYSINFO_DATABASE psdb);
-
- bool KillApp(appid_t nAppID);
- 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;
- CProcMem m_procMem;
- CSysInfo m_sysInfo;
- };
- /////////////////////////////////////////////////////////////////////////////
- #endif // __cplusplus
- #endif // !defined(AGD_APPCTRL_H__33022269_A897_4553_AC60_4ED76DA5D077__INCLUDED_)
|