Przeglądaj źródła

Funktion zum Updaten der Storage-Device-Infos im SysInfo-Prozess. Funktion zum Ermitteln der Storage-Device-Infos.

Rind 2 lat temu
rodzic
commit
0698bcedd5
6 zmienionych plików z 74 dodań i 20 usunięć
  1. 4 1
      README.md
  2. 1 1
      gfaipc.pro
  3. 49 5
      src/appctrl.cpp
  4. 2 1
      src/appctrl.h
  5. 17 1
      src/gfaipc.h
  6. 1 11
      src/ipcpriv.h

+ 4 - 1
README.md

@@ -1,7 +1,7 @@
 ## libgfaipc  
 
 ***Version:***  
-libgfaipc.so.1.6.0  
+libgfaipc.so.1.7.0  
 
 ***SO-Name:***  
 libgfaipc.so.1
@@ -54,3 +54,6 @@ gfa/shm.h, gfa/mutex.h, gfa/sema.h, gfa/procmem.h, gfa/thread.h
 
 * **1.6.0**<br>
 	VM-Erkennung implementiert.
+
+* **1.7.0**<br>
+	Funktion zum Updaten der Storage-Device-Infos im SysInfo-Prozess.

+ 1 - 1
gfaipc.pro

@@ -1,5 +1,5 @@
 TEMPLATE = lib
-VERSION = 1.6
+VERSION = 1.7
 CONFIG -= qt app_bundle
 CONFIG += c++11 shared thread
 

+ 49 - 5
src/appctrl.cpp

@@ -292,7 +292,7 @@ LPAPP_CTRL_INFO CAppCtrl::AppInfoUpdate(clock64_t nCurWorkingTime)
 
 		m_ai.nStateEvtPending	= proc.nStateEvtPending;
 		m_ai.nCtrlMsgPending	= proc.nCtrlMsgPending;
-		m_ai.nSysEvtPending		= proc.nSysEvtPending & ~GFA_APPCTRL_SYSEVENT_ALL_STG_DEV;
+		m_ai.nSysEvtPending		= proc.nSysEvtPending & ~(GFA_APPCTRL_SYSEVENT_DISK_EVT | GFA_APPCTRL_SYSEVENT_PART_EVT | GFA_APPCTRL_SYSEVENT_MOUNT_EVT); // not GFA_APPCTRL_SYSEVENT_STG_DEV_UPDT_EVT!!!
 		proc.nStateEvtPending	= 0;
 		proc.nCtrlMsgPending	= 0;
 		proc.nSysEvtPending		= 0;
@@ -323,7 +323,6 @@ LPAPP_CTRL_INFO CAppCtrl::AppInfoUpdate(clock64_t nCurWorkingTime)
 					m_ai.nSysEvtPending |= GFA_APPCTRL_SYSEVENT_MOUNT_EVT;
 			}
 
-
 			proc.nDiskMask = sys.nDiskMask;
 			proc.nPartMask = sys.nPartMask;
 			proc.nMountMask = sys.nMountMask;
@@ -997,7 +996,7 @@ bool CAppCtrl::UpdateSysInfo(void)
 	return false;
 }
 
-bool CAppCtrl::UpdateStorageDeviceMap(const GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm, bool bReset)
+bool CAppCtrl::UpdateStorageDeviceMap(const GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm, bool bReset, bool bUpdateOnly)
 {
 	APP_CTRL_SYSTEM &sys = m_pAppCtrl->sys;
 	unsigned int nPartChangeMask = sdm.nPartChangeMask;
@@ -1022,6 +1021,23 @@ bool CAppCtrl::UpdateStorageDeviceMap(const GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm,
 		sys.nPartMask = 0;
 		sys.nMountMask = 0;
 	}
+	else if(bUpdateOnly)
+	{
+		memcpy(&sys.sdm, &sdm, sizeof(sdm));
+
+		for(int i = 0; i < (int)_countof(m_pAppCtrl->proc); ++i)
+		{
+			APP_CTRL_PROCESS &proc = m_pAppCtrl->proc[i];
+
+			if((proc.pid > 0) && getpgid(proc.pid) > 0)
+			{
+				if(proc.nSysEvtRegistered & GFA_APPCTRL_SYSEVENT_STG_DEV_UPDT_EVT)
+				{
+					proc.nSysEvtPending |= GFA_APPCTRL_SYSEVENT_STG_DEV_UPDT_EVT;
+				}
+			}
+		}
+	}
 	else
 	{
 		while(nPartChangeMask)
@@ -1255,6 +1271,19 @@ int CAppCtrl::GetNextMountRemoved(LPGFA_SYSINFO_PARTITION pPart)
 	return -1;
 }
 
+bool CAppCtrl::GetStgDevMap(LPGFA_SYSINFO_STORAGE_DEVICE_MAP pStgDevMap)
+{
+	if(pStgDevMap)
+	{
+		const GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm = m_pAppCtrl->sys.sdm;
+		CAppCtrlShmLocker locker(*this);
+		memcpy(pStgDevMap, &sdm, sizeof(sdm));
+		return true;
+	}
+
+	return false;
+}
+
 /////////////////////////////////////////////////////////////////////////////
 
 bool CAppCtrl::UpdateDbInfo(const GFA_SYSINFO_DATABASE &sdb)
@@ -1661,11 +1690,11 @@ extern "C" bool GfaIpcAppCtrlUpdateSysInfo(HAPPCTRL hAC)
 	return false;
 }
 
-extern "C" bool GfaIpcAppCtrlUpdateStorageDeviceMap(HAPPCTRL hAC, const GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm, bool bReset)
+extern "C" bool GfaIpcAppCtrlUpdateStorageDeviceMap(HAPPCTRL hAC, const GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm, bool bReset, bool bUpdateOnly)
 {
 	CAppCtrl *p = reinterpret_cast<CAppCtrl*>(hAC);
 	if(p)
-		return p->UpdateStorageDeviceMap(sdm, bReset);
+		return p->UpdateStorageDeviceMap(sdm, bReset, bUpdateOnly);
 	return false;
 }
 
@@ -1748,6 +1777,14 @@ int GfaIpcAppCtrlGetNextMountRemoved(HAPPCTRL hAC, LPGFA_SYSINFO_PARTITION pPart
 	return -1;
 }
 
+bool GfaIpcAppCtrlGetStgDevMap(HAPPCTRL hAC, LPGFA_SYSINFO_STORAGE_DEVICE_MAP pStgDevMap)
+{
+	CAppCtrl *p = reinterpret_cast<CAppCtrl*>(hAC);
+	if(p)
+		return p->GetStgDevMap(pStgDevMap);
+	return false;
+}
+
 bool GfaIpcAppCtrlGetSysMem(HAPPCTRL hAC, LPGFA_APPCTRL_SYSMEM psm)
 {
 	CAppCtrl *p = reinterpret_cast<CAppCtrl*>(hAC);
@@ -1851,3 +1888,10 @@ sysevt_t GfaIpcAppCtrlGetNextSysEvt(HAPPINFO hAI)
 
 	return 0;
 }
+
+/////////////////////////////////////////////////////////////////////////////
+
+bool GfaIpcAppCtrlSysInfoUpdateStgDevInfo(HAPPCTRL hAC)
+{
+	return GfaIpcAppCtrlSendCtrlMsg(hAC, GFA_APPCTRL_APPID_SYSINFO, GFA_APPCTRL_CTRLMSG_SYSINFO_UPDATE_STGDEV);
+}

+ 2 - 1
src/appctrl.h

@@ -149,7 +149,7 @@ public:
 	bool CreateSysInfo(void);
 	bool ReleaseSysInfo(void);
 	bool UpdateSysInfo(void);
-	bool UpdateStorageDeviceMap(const GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm, bool bReset);
+	bool UpdateStorageDeviceMap(const GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm, bool bReset, bool bUpdateOnly);
 	bool UpdateDbInfo(const GFA_SYSINFO_DATABASE &sdb);
 	bool UpdateSpiInfo(const GFA_SYSINFO_SPI &spi, bool bReset);
 
@@ -166,6 +166,7 @@ public:
 	int GetNextPartitionRemoved(LPGFA_SYSINFO_PARTITION pPart);
 	int GetNextMountAdded(LPGFA_SYSINFO_PARTITION pPart);
 	int GetNextMountRemoved(LPGFA_SYSINFO_PARTITION pPart);
+	bool GetStgDevMap(LPGFA_SYSINFO_STORAGE_DEVICE_MAP pStgDevMap);
 	
 	bool GetBootFromEmmc(bool *pbBootFromEmmc);
 	bool GetDbInfo(LPGFA_SYSINFO_DATABASE psdb);

+ 17 - 1
src/gfaipc.h

@@ -116,6 +116,7 @@ typedef enum
 #define GFA_APPCTRL_CTRLMSG_STOP					GFA_APPCTRL_MAKE_CTRLMSG(0)
 #define GFA_APPCTRL_CTRLMSG_PAUSE					GFA_APPCTRL_MAKE_CTRLMSG(1)
 #define GFA_APPCTRL_CTRLMSG_RESUME					GFA_APPCTRL_MAKE_CTRLMSG(2)
+#define GFA_APPCTRL_CTRLMSG_SYSINFO_UPDATE_STGDEV	GFA_APPCTRL_MAKE_CTRLMSG(10)
 
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
@@ -194,7 +195,8 @@ typedef enum
 #define GFA_APPCTRL_SYSEVENT_DISK_EVT				GFA_APPCTRL_MAKE_SYSEVENT(0)
 #define GFA_APPCTRL_SYSEVENT_PART_EVT				GFA_APPCTRL_MAKE_SYSEVENT(1)
 #define GFA_APPCTRL_SYSEVENT_MOUNT_EVT				GFA_APPCTRL_MAKE_SYSEVENT(2)
-#define GFA_APPCTRL_SYSEVENT_ALL_STG_DEV			(GFA_APPCTRL_SYSEVENT_DISK_EVT | GFA_APPCTRL_SYSEVENT_PART_EVT | GFA_APPCTRL_SYSEVENT_MOUNT_EVT)
+#define GFA_APPCTRL_SYSEVENT_STG_DEV_UPDT_EVT		GFA_APPCTRL_MAKE_SYSEVENT(9)
+#define GFA_APPCTRL_SYSEVENT_ALL_STG_DEV			(GFA_APPCTRL_SYSEVENT_DISK_EVT | GFA_APPCTRL_SYSEVENT_PART_EVT | GFA_APPCTRL_SYSEVENT_MOUNT_EVT | GFA_APPCTRL_SYSEVENT_STG_DEV_UPDT_EVT)
 
 #define GFA_APPCTRL_SYSEVENT_MYSQL_INIT_EVT			GFA_APPCTRL_MAKE_SYSEVENT(3)
 #define GFA_APPCTRL_SYSEVENT_MYSQL_SERVER_EVT		GFA_APPCTRL_MAKE_SYSEVENT(4)
@@ -317,6 +319,17 @@ typedef const GFA_SYSINFO_DISK *LPCGFA_SYSINFO_DISK;
 
 /////////////////////////////////////////////////////////////////////////////
 
+typedef struct _GFA_SYSINFO_STORAGE_DEVICE_MAP
+{
+	unsigned int nPartChangeMask;
+	unsigned int nUpdateCookie;
+	GFA_SYSINFO_DISK disks[GFA_APPCTRL_MAX_DISKS];
+	GFA_SYSINFO_PARTITION parts[GFA_APPCTRL_MAX_PARTITIONS];
+}GFA_SYSINFO_STORAGE_DEVICE_MAP, *LPGFA_SYSINFO_STORAGE_DEVICE_MAP;
+typedef const GFA_SYSINFO_STORAGE_DEVICE_MAP *LPCGFA_SYSINFO_STORAGE_DEVICE_MAP;
+
+/////////////////////////////////////////////////////////////////////////////
+
 typedef struct _GFA_SYSINFO_SPI_ADC
 {
 	float fVoltagePowerSupply;
@@ -439,6 +452,8 @@ int				GfaIpcAppCtrlGetNextPartitionRemoved(HAPPCTRL hAC, LPGFA_SYSINFO_PARTITIO
 int				GfaIpcAppCtrlGetNextMountAdded		(HAPPCTRL hAC, LPGFA_SYSINFO_PARTITION pPart);
 int				GfaIpcAppCtrlGetNextMountRemoved	(HAPPCTRL hAC, LPGFA_SYSINFO_PARTITION pPart);
 
+bool			GfaIpcAppCtrlGetStgDevMap			(HAPPCTRL hAC, LPGFA_SYSINFO_STORAGE_DEVICE_MAP pStgDevMap);
+
 bool			GfaIpcAppCtrlGetBootFromEmmc		(HAPPCTRL hAC, bool *pbBootFromEmmc);
 bool			GfaIpcAppCtrlGetDbInfo				(HAPPCTRL hAC, LPGFA_SYSINFO_DATABASE psdb);
 
@@ -446,6 +461,7 @@ bool			GfaIpcAppCtrlGetDbInfo				(HAPPCTRL hAC, LPGFA_SYSINFO_DATABASE psdb);
 
 bool			GfaIpcAppCtrlKillApp				(HAPPCTRL hAC, appid_t nAppID);
 bool			GfaIpcAppCtrlSetLockUnlockFunctions	(HAPPCTRL hAC, PFN_GFA_IPC_LOCK_SHM pfnLockSHM, PFN_GFA_IPC_UNLOCK_SHM pfnUnlockSHM);
+bool			GfaIpcAppCtrlSysInfoUpdateStgDevInfo(HAPPCTRL hAC);
 
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////

+ 1 - 11
src/ipcpriv.h

@@ -15,20 +15,10 @@ extern "C" {
 
 /////////////////////////////////////////////////////////////////////////////
 
-typedef struct _GFA_SYSINFO_STORAGE_DEVICE_MAP
-{
-	unsigned int nPartChangeMask;
-	GFA_SYSINFO_DISK disks[GFA_APPCTRL_MAX_DISKS];
-	GFA_SYSINFO_PARTITION parts[GFA_APPCTRL_MAX_PARTITIONS];
-}GFA_SYSINFO_STORAGE_DEVICE_MAP, *LPGFA_SYSINFO_STORAGE_DEVICE_MAP;
-typedef const GFA_SYSINFO_STORAGE_DEVICE_MAP *LPCGFA_SYSINFO_STORAGE_DEVICE_MAP;
-
-/////////////////////////////////////////////////////////////////////////////
-
 bool GfaIpcAppCtrlCreateSysInfo(HAPPCTRL hAC);
 bool GfaIpcAppCtrlReleaseSysInfo(HAPPCTRL hAC);
 bool GfaIpcAppCtrlUpdateSysInfo(HAPPCTRL hAC);
-bool GfaIpcAppCtrlUpdateStorageDeviceMap(HAPPCTRL hAC, const GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm, bool bReset = false);
+bool GfaIpcAppCtrlUpdateStorageDeviceMap(HAPPCTRL hAC, const GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm, bool bReset = false, bool bUpdateOnly = false);
 void GfaIpcForceReleaseMutex(void);
 bool GfaIpcAppCtrlUpdateDbInfo(HAPPCTRL hAC, const GFA_SYSINFO_DATABASE &sdb);
 bool GfaIpcAppCtrlUpdateSpiInfo(HAPPCTRL hAC, const GFA_SYSINFO_SPI &spi, bool bReset = false);