ソースを参照

Kleine Änderungen. Qml-Code-Module aus Demo-App ausgelagert.

Rind 5 年 前
コミット
0534f8816e

+ 1 - 1
Test/Test.pro.user

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 4.11.1, 2020-04-01T23:25:04. -->
+<!-- Written by QtCreator 4.11.1, 2020-04-10T09:38:33. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>

+ 1 - 1
Test/main.cpp

@@ -315,7 +315,7 @@ int main(void)
 		::GfaIpcAppCtrlPresetDisplayName(hAC, GFA_APPCTRL_APPID_USER_01, "qmlApp");
 		::GfaIpcAppCtrlSetState(hAC, GIAS_Initializing);
 
-		if(!::GfaIpcAppCtrlSubscribeStateEvents(hAC, _APPID_1 | _APPID_2 | GFA_APPCTRL_APPID_USER_01 | GFA_APPCTRL_APPID_SYSINFO))
+		if(!::GfaIpcAppCtrlSubscribeStateEvents(hAC, _APPID_1 | _APPID_2 | GFA_APPCTRL_APPID_USER_01 | GFA_APPCTRL_APPID_SYSINFO | GFA_APPCTRL_APPID_DATALOGGER))
 			break;
 
 		if(!::GfaIpcAppCtrlSubscribeSysEvents(hAC, GFA_APPCTRL_SYSEVENT_ALL_STG_DEV))

+ 1 - 1
Test/qmlApp/apps.qml

@@ -418,7 +418,7 @@ Window {
         width: 120
         height: 460
 
-		property var appInfo: qGfaAppCtrl.appInfo[QGfaAppCtrl.APP_INDEX_MQTTCL]
+		property var appInfo: qGfaAppCtrl.appInfo[/*QGfaAppCtrl.APP_INDEX_MQTTCL*/41]
 
 		Rectangle {
 	        x: 0

+ 2 - 8
Test/qmlApp/main.cpp

@@ -1,11 +1,6 @@
 #include <QGuiApplication>
 #include <QQmlApplicationEngine>
-#include "qappctrl.h"
-
-#define _APP_ID								GFA_APPCTRL_APPID_USER_01
-#define _APP_NAME							"qmlApp"
-#define _UPDATE_TIMER_INT					50
-#define _UPDATE_TIMER_INT_HEAVY_LOAD		5000
+#include "main.h"
 
 int main(int argc, char *argv[])
 {
@@ -15,11 +10,10 @@ int main(int argc, char *argv[])
     QGuiApplication app(argc, argv);
     QQmlApplicationEngine engine;
     const QUrl url(QStringLiteral("qrc:/main.qml"));
-//    const QUrl url(QStringLiteral("qrc:/dev.qml"));
 
     if(appCtrl.Create(_APP_ID, _APP_NAME, _UPDATE_TIMER_INT, _UPDATE_TIMER_INT_HEAVY_LOAD))
     {
-		appCtrl.SubscribeStateEvents(GFA_APPCTRL_APPID_ALL_GFA);
+		appCtrl.SubscribeStateEvents(_APP_SUBSCRIPTIONS);
 		appCtrl.SetState(GIAS_Initializing);
 
 	    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,

+ 19 - 0
Test/qmlApp/main.h

@@ -0,0 +1,19 @@
+// main.h :
+//
+
+#if !defined(AGD_MAIN_H__77BA7586_B090_4F04_95C3_2FA17B713E99__INCLUDED_)
+#define AGD_MAIN_H__77BA7586_B090_4F04_95C3_2FA17B713E99__INCLUDED_
+
+#include <gfa/qappctrl.h>
+
+/////////////////////////////////////////////////////////////////////////////
+// main.h - Declarations:
+
+#define _APP_ID								GFA_APPCTRL_APPID_USER_01
+#define _APP_NAME							"qmlApp"
+#define _UPDATE_TIMER_INT					50
+#define _UPDATE_TIMER_INT_HEAVY_LOAD		5000
+#define _APP_SUBSCRIPTIONS					(GFA_APPCTRL_APPID_ALL_GFA | GFA_APPCTRL_APPID_USER_10)
+
+/////////////////////////////////////////////////////////////////////////////
+#endif	//	!defined(AGD_MAIN_H__77BA7586_B090_4F04_95C3_2FA17B713E99__INCLUDED_)

+ 0 - 356
Test/qmlApp/qappctrl.cpp

@@ -1,356 +0,0 @@
-#include <QTimerEvent>
-#include "qappctrl.h"
-#include "../../src/defines.h"
-
-/////////////////////////////////////////////////////////////////////////////
-
-#define _INVALID_SLOT_INDEX								-1
-#define _APP_CTRL_MAX_SLOTS								((int)(sizeof(appid_t) * 8))
-#define _APP_INDEX_FROM_APP_ID(aid)						(ffsll(aid) - 1)
-#define _IS_POWER_OF_2(x)								(!!(x) && !((x) & ((x) - 1)))
-#define _IS_VALID_APP_ID(i)								_IS_POWER_OF_2(i)
-#define _TIMESPEC_2_US(ts)								(((clock64_t)(ts).tv_sec) * 1000000LL + ((clock64_t)(ts).tv_nsec) / 1000LL)
-#define _TIMESPEC_DIFF_US(ts1, ts2)						(_TIMESPEC_2_US(ts1) - _TIMESPEC_2_US(ts2))
-#define _MIN_TIMER_INT									20
-
-
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-
-QGfaAppCtrl::QGfaAppCtrl(QObject *pParent) :	QObject(pParent),
-												m_bSysInfoRunning(false),
-												m_hAC(NULL),
-												m_nAppID(0),
-												m_nTimerID(0),
-												m_sysInfo(this),
-												m_curPass(0),
-												m_minPass(LLONG_MAX),
-												m_maxPass(LLONG_MIN),
-												m_avgPass(0),
-												m_nEvtSrcs(0),
-												m_nHeavyLoadUpdateIntervalUs(2500000)
-{
-	for(int i = 0; i < _APP_CTRL_MAX_SLOTS; ++i)
-	{
-		QGfaAppInfo *pai = new QGfaAppInfo(i, this);
-		connect(pai, SIGNAL(sendControlMessage(appid_t, ctrlmsg_t)), SLOT(onSendControlMessage(appid_t, ctrlmsg_t)));
-		m_appInfo.append(pai);
-	}
-
-	memset(&m_tsLastHeavyLoadUpdate, 0, sizeof(m_tsLastHeavyLoadUpdate));
-    setObjectName("QGfaAppCtrl");
-}
-
-QGfaAppCtrl::~QGfaAppCtrl(void)
-{
-	Release();
-	for(int i = 0; i < _APP_CTRL_MAX_SLOTS; ++i)
-	{
-		QGfaAppInfo *pai = m_appInfo.at(i);
-		delete pai;
-	}
-}
-
-/////////////////////////////////////////////////////////////////////////////
-
-bool QGfaAppCtrl::Create(appid_t nAppID, const char *pszDisplayName, int nTimerIntMs, clock64_t nHeavyLoadUpdateIntervalMs)
-{
-	if(!m_hAC)
-	{
-		if(nTimerIntMs < _MIN_TIMER_INT)
-			nTimerIntMs = _MIN_TIMER_INT;
-		if(nHeavyLoadUpdateIntervalMs < (nTimerIntMs * 50))
-			nHeavyLoadUpdateIntervalMs = (nTimerIntMs * 50);
-
-		if((m_hAC = ::GfaIpcAppCtrlAcquire(nAppID, pszDisplayName, 0, (clock64_t)(nTimerIntMs * 1000 * 2))))
-		{
-			m_nAppID = nAppID;
-			m_nHeavyLoadUpdateIntervalUs = nHeavyLoadUpdateIntervalMs * 1000;
-			::GfaIpcAppCtrlSubscribeSysEvents(m_hAC, GFA_APPCTRL_SYSEVENT_ALL_STG_DEV);
-			m_nTimerID = startTimer(nTimerIntMs, Qt::CoarseTimer);
-			
-			bool bBootFromEmmc;
-			if(::GfaIpcAppCtrlGetBootFromEmmc(m_hAC, &bBootFromEmmc))
-			{
-				m_sysInfo.setBootFromEmmc(bBootFromEmmc);
-			}
-		}
-	}
-
-	return !!m_hAC;
-}
-
-/////////////////////////////////////////////////////////////////////////////
-
-void QGfaAppCtrl::Release(void)
-{
-	if(m_hAC)
-	{
-		killTimer(m_nTimerID);
-		::GfaIpcAppCtrlRelease(m_hAC);
-		m_hAC = NULL;
-	}
-}
-
-/////////////////////////////////////////////////////////////////////////////
-
-void QGfaAppCtrl::RegisterQmlTypes(QQmlEngine &rEng, int nVerMajor, int nVerMinor)
-{
-	qmlRegisterUncreatableType<QGfaStgDevList>("com.gfa.ipc.appctrl", nVerMajor, nVerMinor, "QGfaStgDevList", QStringLiteral("class not creatable in QML"));
-	qmlRegisterUncreatableType<QGfaSysInfo>("com.gfa.ipc.appctrl", nVerMajor, nVerMinor, "QGfaSysInfo", QStringLiteral("class not creatable in QML"));
-	qmlRegisterUncreatableType<QGfaAppInfo>("com.gfa.ipc.appctrl", nVerMajor, nVerMinor, "QGfaAppInfo", QStringLiteral("class not creatable in QML"));
-	qmlRegisterUncreatableType<QGfaAppCtrl>("com.gfa.ipc.appctrl", nVerMajor, nVerMinor, "QGfaAppCtrl", QStringLiteral("class not creatable in QML"));
-	rEng.rootContext()->setContextProperty(QStringLiteral("qGfaAppCtrl"), this);
-}
-
-/////////////////////////////////////////////////////////////////////////////
-
-bool QGfaAppCtrl::PresetDisplayName(appid_t nAppID, const char *pszName)
-{
-	if(m_hAC)
-		return ::GfaIpcAppCtrlPresetDisplayName(m_hAC, nAppID, pszName);
-	return false;
-}
-
-/////////////////////////////////////////////////////////////////////////////
-
-bool QGfaAppCtrl::SubscribeStateEvents(appid_t nAppMask)
-{
-	if(m_hAC)
-	{
-		nAppMask &= ~m_nAppID;
-		m_nEvtSrcs |= nAppMask;
-		return ::GfaIpcAppCtrlSubscribeStateEvents(m_hAC, nAppMask);
-	}
-	return false;
-}
-
-/////////////////////////////////////////////////////////////////////////////
-
-void QGfaAppCtrl::timerEvent(QTimerEvent *event)
-{
-	if((event->timerId() == m_nTimerID) && m_hAC)
-	{
-		static clock64_t nCurPass = 0;
-		struct timespec	tsEnterUpdate, tsLeaveUpdate;
-		::clock_gettime(CLOCK_MONOTONIC, &tsEnterUpdate);
-		GFA_APPCTRL_SYSMEM sm;
-		HAPPINFO hAI;
-		bool bDoHeavyLoadUpdate = (_TIMESPEC_DIFF_US(tsEnterUpdate, m_tsLastHeavyLoadUpdate) >= m_nHeavyLoadUpdateIntervalUs);
-
-		if((hAI = ::GfaIpcAppCtrlInfoUpdate(m_hAC, nCurPass)))
-		{
-			int b;
-		    appid_t app, nAppIdSrc;
-		    sysevt_t nSysEvt;
-			GFA_APPCTRL_APPTIMES at;
-			GFA_APPCTRL_APPMEM am;
-			GFA_SYSINFO_DISK disk;
-			GFA_SYSINFO_PARTITION part;
-			char szDispName[128];
-
-			while((nAppIdSrc = ::GfaIpcAppCtrlGetNextStateEvtSrc(hAI)))
-			{
-				GfaIpcAppStates state = ::GfaIpcAppCtrlGetState(m_hAC, nAppIdSrc);
-				int nIndex = appIndexFromAppID(nAppIdSrc);
-				QGfaAppInfo &ai = *m_appInfo[nIndex];
-				bool bStateChanged = ai.setState(state);
-
-				if(bStateChanged)
-				{
-					if(state == GIAS_Running)
-						memset(&m_tsLastHeavyLoadUpdate, 0, sizeof(m_tsLastHeavyLoadUpdate));
-					else if(state != GIAS_Paused)
-					{
-						ai.setAppTimes(NULL, state);
-						ai.setAppMemInfo(NULL, state);
-					}
-					
-					if(nAppIdSrc == GFA_APPCTRL_APPID_SYSINFO)
-					{
-						m_bSysInfoRunning = (state == GIAS_Running);
-						m_sysInfo.setSysInfoRunning(m_bSysInfoRunning);
-					}
-				}
-
-				if((state >= GIAS_StateNotRunning) && (state <= GIAS_Paused))
-				{
-					if(::GfaIpcAppCtrlGetDisplayName(m_hAC, nAppIdSrc, szDispName, sizeof(szDispName)))
-					{
-						ai.setName(szDispName);
-					}
-				}
-			}
-			
-			if(m_bSysInfoRunning)
-			{
-				while((nSysEvt = ::GfaIpcAppCtrlGetNextSysEvt(hAI)))
-				{
-					int nIndex;
-					
-					switch(nSysEvt)
-					{
-					case GFA_APPCTRL_SYSEVENT_DISK_EVT:
-						while((nIndex = ::GfaIpcAppCtrlGetNextDiskRemoved(m_hAC, &disk)) >= 0)
-						{
-							m_sysInfo.diskRemoved(nIndex, disk);
-						}
-						while((nIndex = ::GfaIpcAppCtrlGetNextDiskAdded(m_hAC, &disk)) >= 0)
-						{
-							m_sysInfo.diskAdded(nIndex, disk);
-						}
-						break;
-					case GFA_APPCTRL_SYSEVENT_PART_EVT:
-						while((nIndex = ::GfaIpcAppCtrlGetNextPartitionRemoved(m_hAC, &part)) >= 0)
-						{
-							m_sysInfo.partitionRemoved(nIndex, part);
-						}
-						while((nIndex = ::GfaIpcAppCtrlGetNextPartitionAdded(m_hAC, &part)) >= 0)
-						{
-							m_sysInfo.partitionAdded(nIndex, part);
-						}
-						break;
-					case GFA_APPCTRL_SYSEVENT_MOUNT_EVT:
-						while((nIndex = ::GfaIpcAppCtrlGetNextMountRemoved(m_hAC, &part)) >= 0)
-						{
-							m_sysInfo.mountRemoved(nIndex, part);
-						}
-						while((nIndex = ::GfaIpcAppCtrlGetNextMountAdded(m_hAC, &part)) >= 0)
-						{
-							m_sysInfo.mountAdded(nIndex, part);
-						}
-						break;
-					}
-				}
-			}
-
-			nAppIdSrc = m_nEvtSrcs;
-			bool bDontSaveLast = false;
-
-			while(nAppIdSrc)
-			{
-				b = ffsll(nAppIdSrc) - 1;
-				app = ((appid_t)0x1 << b);
-				nAppIdSrc &= ~app;
-				QGfaAppInfo &ai = *m_appInfo[b];
-				GfaIpcAppStates state = ::GfaIpcAppCtrlGetState(m_hAC, app);
-
-				if(::GfaIpcAppCtrlGetAppMem(m_hAC, app, &am))
-				{
-					ai.setAppMemInfo(&am, state, bDoHeavyLoadUpdate);
-				}
-
-				if(::GfaIpcAppCtrlGetAppTimes(m_hAC, app, &at) >= 0)
-				{
-					if(!at.nCycleLastUs)
-					{
-						bDontSaveLast = true;
-						continue;
-					}
-
-					ai.setAppTimes(&at, state, bDoHeavyLoadUpdate);
-				}
-
-				size_t nSize = ::GfaIpcAppCtrlGetAppSize(m_hAC, app);
-				ai.setAppSize((quint32)nSize, state);
-			}
-
-			if(bDoHeavyLoadUpdate && !bDontSaveLast)
-				m_tsLastHeavyLoadUpdate = tsEnterUpdate;
-		}
-			
-		if(::GfaIpcAppCtrlGetSysMem(m_hAC, &sm))
-		{
-			m_sysInfo.setSysMemInfo(&sm, bDoHeavyLoadUpdate);
-		}
-
-		::clock_gettime(CLOCK_MONOTONIC, &tsLeaveUpdate);
-		m_curPass = nCurPass = _TIMESPEC_DIFF_US(tsLeaveUpdate, tsEnterUpdate);
-
-		if(m_minPass > m_curPass)
-		{
-			m_minPass = m_curPass;
-			emit minPassChanged(m_minPass);
-		}
-
-		if(m_maxPass < m_curPass)
-		{
-			m_maxPass = m_curPass;
-			emit maxPassChanged(m_maxPass);
-		}
-		
-		if(!m_avgPass)
-		{
-			m_avgPass = m_curPass;
-			emit avgPassChanged(m_avgPass);
-		}
-		else
-		{
-			static uint64_t nPasses = 0;
-			++nPasses;
-			clock64_t avgPass = (m_avgPass + m_curPass) / 2;
-			if(m_avgPass != avgPass)
-			{
-				m_avgPass = avgPass;
-				if(!(nPasses % 50))
-					emit avgPassChanged(m_avgPass);
-			}
-		}
-	}
-}
-
-/////////////////////////////////////////////////////////////////////////////
-
-void QGfaAppCtrl::onSendControlMessage(appid_t nAppID, ctrlmsg_t msg)
-{
-	if(m_hAC)
-		::GfaIpcAppCtrlSendCtrlMsg(m_hAC, nAppID, msg);
-}
-
-/////////////////////////////////////////////////////////////////////////////
-
-int QGfaAppCtrl::SetState(int nState)
-{
-	if(m_hAC)
-		::GfaIpcAppCtrlSetState(m_hAC, (GfaIpcAppStates)nState);
-	return GIAS_Invalid;
-}
-
-/////////////////////////////////////////////////////////////////////////////
-
-quint64 QGfaAppCtrl::minPass(void) const
-{
-	return m_minPass;
-}
-
-quint64 QGfaAppCtrl::maxPass(void) const
-{
-	return m_maxPass;
-}
-
-quint64 QGfaAppCtrl::avgPass(void) const
-{
-	return m_avgPass;
-}
-
-QGfaSysInfo* QGfaAppCtrl::sysInfo(void)
-{
-	return &m_sysInfo;
-}
-
-/////////////////////////////////////////////////////////////////////////////
-
-int QGfaAppCtrl::appIndexFromAppID(quint64 nAppID)
-{
-	if(_IS_VALID_APP_ID(nAppID))
-		return _APP_INDEX_FROM_APP_ID(nAppID);
-	return _INVALID_SLOT_INDEX;
-}
-
-/////////////////////////////////////////////////////////////////////////////
-
-QQmlListProperty<QGfaAppInfo> QGfaAppCtrl::appInfo(void)
-{
-	return QQmlListProperty<QGfaAppInfo>(this, m_appInfo);
-}

+ 0 - 336
Test/qmlApp/qappctrl.h

@@ -1,336 +0,0 @@
-// qappctrl.h :
-//
-
-#if !defined(AGD_QAPPCTRL_H__ADD46467_F628_4A07_8844_613598E359DE__INCLUDED_)
-#define AGD_QAPPCTRL_H__ADD46467_F628_4A07_8844_613598E359DE__INCLUDED_
-
-#include <QObject>
-#include <QQmlEngine>
-#include <QQmlContext>
-#include <QAbstractTableModel>
-#include <vector>
-#include <gfa/gfaipc.h>
-#include "../../src/ipcpriv.h"
-
-#ifdef __cplusplus
-
-/////////////////////////////////////////////////////////////////////////////
-// qappctrl.h - Declarations:
-
-typedef struct _STG_DEV_DISK_PART
-{
-	_STG_DEV_DISK_PART(int d, int p) {
-		nDiskIdx = d;
-		nPartIdx = p;
-	}
-	int nDiskIdx;
-	int nPartIdx;
-}STG_DEV_DISK_PART, *LPSTG_DEV_DISK_PART;
-typedef const STG_DEV_DISK_PART *LPCSTG_DEV_DISK_PART;
-
-/////////////////////////////////////////////////////////////////////////////
-
-class QGfaStgDevList : public QAbstractTableModel
-{
-    Q_OBJECT
-
-public:
-	explicit QGfaStgDevList(QObject *pParent = NULL);
-	virtual ~QGfaStgDevList(void);
-
-	int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
-	int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
-	QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
-	QHash<int, QByteArray> roleNames(void) const Q_DECL_OVERRIDE;
-	
-	void diskAdded(int nIndex, const GFA_SYSINFO_DISK &disk);
-	void diskRemoved(int nIndex, const GFA_SYSINFO_DISK &disk);
-	void partitionAdded(int nIndex, const GFA_SYSINFO_PARTITION &part);
-	void partitionRemoved(int nIndex, const GFA_SYSINFO_PARTITION &part);
-	void mountAdded(int nIndex, const GFA_SYSINFO_PARTITION &part);
-	void mountRemoved(int nIndex, const GFA_SYSINFO_PARTITION &part);
-	void clearAll(void);
-
-private:
-	void insertPartition(int nDiskIdx, int nPartIdx);
-	void removePartition(int nDiskIdx, int nPartIdx);
-	int FindPartVecEntry(int nDiskIdx, int nPartIdx);
-
-private:
-	GFA_SYSINFO_STORAGE_DEVICE_MAP m_stgDevShadowCpy;
-	std::vector<STG_DEV_DISK_PART> m_partVec;
-};
-
-/////////////////////////////////////////////////////////////////////////////
-
-class QGfaSysInfo : public QObject
-{
-    Q_OBJECT
-	Q_PROPERTY(quint64 memTotal READ memTotal NOTIFY memTotalChanged)
-	Q_PROPERTY(quint64 memUsed READ memUsed NOTIFY memUsedChanged)
-	Q_PROPERTY(quint64 memFree READ memFree NOTIFY memFreeChanged)
-	Q_PROPERTY(quint64 memAvailable READ memAvailable NOTIFY memAvailableChanged)
-	Q_PROPERTY(quint64 memBuffers READ memBuffers NOTIFY memBuffersChanged)
-	Q_PROPERTY(quint64 memCached READ memCached NOTIFY memCachedChanged)
-    Q_PROPERTY(QGfaStgDevList *stgDev READ stgDev CONSTANT)
-    Q_PROPERTY(bool bootFromEmmc READ bootFromEmmc NOTIFY bootFromEmmcChanged)
-
-public:
-	explicit QGfaSysInfo(QObject *pParent = NULL);
-	virtual ~QGfaSysInfo(void);
-
-signals:
-	void memTotalChanged(quint64 val);
-	void memUsedChanged(quint64 val);
-	void memFreeChanged(quint64 val);
-	void memAvailableChanged(quint64 val);
-	void memBuffersChanged(quint64 val);
-	void memCachedChanged(quint64 val);
-	void bootFromEmmcChanged(bool val);
-
-private:
-	quint64 memTotal(void) const;
-	quint64 memUsed(void) const;
-	quint64 memFree(void) const;
-	quint64 memAvailable(void) const;
-	quint64 memBuffers(void) const;
-	quint64 memCached(void) const;
-	QGfaStgDevList* stgDev(void);
-	bool bootFromEmmc(void) const;
-
-public:
-	void setSysMemInfo(LPCGFA_APPCTRL_SYSMEM psm, bool bDoHeavyLoadUpdate = false);
-	void setSysInfoRunning(bool bRunning);
-	void setBootFromEmmc(bool bootFromEmmc);
-
-	inline void diskAdded(int nIndex, const GFA_SYSINFO_DISK &disk) {
-		return m_stgDevList.diskAdded(nIndex, disk);}
-
-	inline void diskRemoved(int nIndex, const GFA_SYSINFO_DISK &disk) {
-		return m_stgDevList.diskRemoved(nIndex, disk);}
-
-	inline void partitionAdded(int nIndex, const GFA_SYSINFO_PARTITION &part) {
-		return m_stgDevList.partitionAdded(nIndex, part);}
-		
-	inline void partitionRemoved(int nIndex, const GFA_SYSINFO_PARTITION &part) {
-		return m_stgDevList.partitionRemoved(nIndex, part);}
-
-	inline void mountAdded(int nIndex, const GFA_SYSINFO_PARTITION &part) {
-		return m_stgDevList.mountAdded(nIndex, part);}
-
-	inline void mountRemoved(int nIndex, const GFA_SYSINFO_PARTITION &part) {
-		return m_stgDevList.mountRemoved(nIndex, part);}
-
-private:
-	bool m_bSysInfoRunning;
-	quint64 m_nMemTotal;
-	quint64 m_nMemUsed;
-	quint64 m_nMemFree;
-	quint64 m_nMemAvailable;
-	quint64 m_nMemBuffers;
-	quint64 m_nMemCached;
-	QGfaStgDevList m_stgDevList;
-	bool m_bootFromEmmc;
-};
-
-/////////////////////////////////////////////////////////////////////////////
-
-class QGfaAppInfo : public QObject
-{
-    Q_OBJECT
-	Q_PROPERTY(int state READ state NOTIFY stateChanged)
-	Q_PROPERTY(QString stateText READ stateText NOTIFY stateTextChanged)
-	Q_PROPERTY(QString name READ name NOTIFY nameChanged)
-	Q_PROPERTY(quint64 cycInt READ cycInt NOTIFY cycIntChanged)
-	Q_PROPERTY(quint64 cycCur READ cycCur NOTIFY cycCurChanged)
-	Q_PROPERTY(quint64 cycMin READ cycMin NOTIFY cycMinChanged)
-	Q_PROPERTY(quint64 cycMax READ cycMax NOTIFY cycMaxChanged)
-	Q_PROPERTY(quint64 wktCur READ wktCur NOTIFY wktCurChanged)
-	Q_PROPERTY(quint64 wktMin READ wktMin NOTIFY wktMinChanged)
-	Q_PROPERTY(quint64 wktMax READ wktMax NOTIFY wktMaxChanged)
-	Q_PROPERTY(quint64 upTime READ upTime NOTIFY upTimeChanged)
-	Q_PROPERTY(double cpuTime READ cpuTime NOTIFY cpuTimeChanged)
-	Q_PROPERTY(double cpuCur READ cpuCur NOTIFY cpuCurChanged)
-	Q_PROPERTY(double cpuAvg READ cpuAvg NOTIFY cpuAvgChanged)
-	Q_PROPERTY(quint32 vmPeak READ vmPeak NOTIFY vmPeakChanged)
-	Q_PROPERTY(quint32 vmSize READ vmSize NOTIFY vmSizeChanged)
-	Q_PROPERTY(quint32 vmHWM READ vmHWM NOTIFY vmHWMChanged)
-	Q_PROPERTY(quint32 vmRSS READ vmRSS NOTIFY vmRSSChanged)
-	Q_PROPERTY(quint32 appSize READ appSize NOTIFY appSizeChanged)
-
-public:
-	Q_INVOKABLE bool pause(void);
-	Q_INVOKABLE bool resume(void);
-	Q_INVOKABLE bool stop(void);
-
-signals:
-	void stateChanged(int val);
-	void stateTextChanged(const QString &val);
-	void nameChanged(const QString &val);
-	void sendControlMessage(appid_t nAppID, ctrlmsg_t msg);
-	void cycIntChanged(quint64 val);
-	void cycCurChanged(quint64 val);
-	void cycMinChanged(quint64 val);
-	void cycMaxChanged(quint64 val);
-	void wktCurChanged(quint64 val);
-	void wktMinChanged(quint64 val);
-	void wktMaxChanged(quint64 val);
-	void upTimeChanged(quint64 val);
-	void cpuTimeChanged(double val);
-	void cpuCurChanged(double val);
-	void cpuAvgChanged(double val);
-	void vmPeakChanged(quint32 val);
-	void vmSizeChanged(quint32 val);
-	void vmHWMChanged(quint32 val);
-	void vmRSSChanged(quint32 val);
-	void appSizeChanged(quint32 val);
-
-public:
-	explicit QGfaAppInfo(int nIndex, QObject *pParent = NULL);
-	virtual ~QGfaAppInfo(void);
-	
-	appid_t appId(void) const;
-
-	int state(void) const;
-	bool setState(int val);
-
-	QString stateText(void) const;
-	void setStateText(int val);
-
-	QString name(void) const;
-	void setName(const QString &val);
-	
-	quint64 cycInt(void) const;
-	quint64 cycCur(void) const;
-	quint64 cycMin(void) const;
-	quint64 cycMax(void) const;
-	quint64 wktCur(void) const;
-	quint64 wktMin(void) const;
-	quint64 wktMax(void) const;
-	quint64 upTime(void) const;
-	double cpuTime(void) const;
-	double cpuCur(void) const;
-	double cpuAvg(void) const;
-	quint32 vmPeak(void) const;
-	quint32 vmSize(void) const;
-	quint32 vmHWM(void) const;
-	quint32 vmRSS(void) const;
-
-	quint32 appSize(void) const;
-	void setAppSize(quint32 size, GfaIpcAppStates state);
-
-	void setAppTimes(LPCGFA_APPCTRL_APPTIMES pat, GfaIpcAppStates state, bool bDoHeavyLoadUpdate = false);
-	void setAppMemInfo(LPCGFA_APPCTRL_APPMEM pam, GfaIpcAppStates state, bool bDoHeavyLoadUpdate = false);
-
-private:
-
-private:
-	int m_state;
-	QString m_stateText;
-	QString m_name;
-	int m_nIndex;
-	appid_t m_nAppID;
-	quint64 m_cycInt;
-	quint64 m_cycCur;
-	quint64 m_cycMin;
-	quint64 m_cycMax;
-	quint64 m_wktCur;
-	quint64 m_wktMin;
-	quint64 m_wktMax;
-	quint64 m_upTime;
-	double m_cpuTime;
-	double m_cpuPercCur;
-	double m_cpuPercAvg;
-	quint32 m_vmPeak;
-	quint32 m_vmSize;
-	quint32 m_vmHWM;
-	quint32 m_vmRSS;
-	quint32 m_appSize;
-};
-
-/////////////////////////////////////////////////////////////////////////////
-
-class QGfaAppCtrl : public QObject
-{
-    Q_OBJECT
-    Q_PROPERTY(QQmlListProperty<QGfaAppInfo> appInfo READ appInfo CONSTANT)
-	Q_PROPERTY(quint64 minPass READ minPass NOTIFY minPassChanged)
-	Q_PROPERTY(quint64 maxPass READ maxPass NOTIFY maxPassChanged)
-	Q_PROPERTY(quint64 avgPass READ avgPass NOTIFY avgPassChanged)
-    Q_PROPERTY(QGfaSysInfo *sysInfo READ sysInfo CONSTANT)
-
-public:
-	enum AppStates
-	{
-		STATE_NOT_RUNNING	= GIAS_StateNotRunning,
-		STATE_INITIALIZING,
-		STATE_RUNNING,
-		STATE_PAUSED,
-		STATE_HANGING,
-		STATE_TERMINATING,
-		STATE_ZOMBIE,
-		STATE_INVALID
-	};
-	Q_ENUM(AppStates)
-	static_assert((STATE_INVALID - STATE_NOT_RUNNING) == (GIAS_Invalid - GIAS_StateNotRunning), "enum AppStates does not match enum GfaIpcAppStates!");
-	
-	enum AppIndex
-	{
-		APP_INDEX_REMANENT		= GAI_Remanent,
-		APP_INDEX_DATALOGGER	= GAI_Datalogger,
-		APP_INDEX_SUMMARIST		= GAI_Summarist,
-		APP_INDEX_REST			= GAI_Rest,
-		APP_INDEX_MQTTCL		= GAI_Mqttcl,
-		APP_INDEX_SYSINFO		= GAI_SysInfo
-	};
-	Q_ENUM(AppIndex)
-
-signals:
-	void minPassChanged(quint64 val);
-	void maxPassChanged(quint64 val);
-	void avgPassChanged(quint64 val);
-
-public:
-	explicit QGfaAppCtrl(QObject *pParent = NULL);
-	virtual ~QGfaAppCtrl(void);
-
-	bool Create(appid_t nAppID, const char *pszDisplayName, int nTimerIntMs, clock64_t nHeavyLoadUpdateIntervalMs);
-	void Release(void);
-	void RegisterQmlTypes(QQmlEngine &rEng, int nVerMajor = 1, int nVerMinor = 0);
-	bool PresetDisplayName(appid_t nAppID, const char *pszName);
-	bool SubscribeStateEvents(appid_t nAppMask);
-	int SetState(int nState);
-
-public:
-	Q_INVOKABLE int appIndexFromAppID(quint64 nAppID);
-
-public:
-	QQmlListProperty<QGfaAppInfo> appInfo(void);
-	quint64 minPass(void) const;
-	quint64 maxPass(void) const;
-	quint64 avgPass(void) const;
-	QGfaSysInfo* sysInfo(void);
-
-private slots:
-	void onSendControlMessage(appid_t nAppID, ctrlmsg_t msg);
-	void timerEvent(QTimerEvent *event) override;
-
-private:
-	bool m_bSysInfoRunning;
-	HAPPCTRL m_hAC;
-	appid_t m_nAppID;
-	int m_nTimerID;
-	QGfaSysInfo m_sysInfo;
-	QList<QGfaAppInfo*> m_appInfo;
-	clock64_t m_curPass;
-	clock64_t m_minPass;
-	clock64_t m_maxPass;
-	clock64_t m_avgPass;
-	appid_t m_nEvtSrcs;
-	clock64_t m_nHeavyLoadUpdateIntervalUs;
-	struct timespec m_tsLastHeavyLoadUpdate;
-};
-
-/////////////////////////////////////////////////////////////////////////////
-#endif	//	__cplusplus
-#endif	//	!defined(AGD_QAPPCTRL_H__ADD46467_F628_4A07_8844_613598E359DE__INCLUDED_)

+ 0 - 472
Test/qmlApp/qappinfo.cpp

@@ -1,472 +0,0 @@
-#include "qappctrl.h"
-#include "../../src/defines.h"
-
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-
-QGfaAppInfo::QGfaAppInfo(int nIndex, QObject *pParent) :	QObject(pParent),
-															m_state(GIAS_StateNotRunning),
-															m_nIndex(nIndex),
-															m_cycInt(0),
-															m_cycCur(0),
-															m_cycMin(0),
-															m_cycMax(0),
-															m_wktCur(0),
-															m_wktMin(0),
-															m_wktMax(0),
-															m_upTime(0),
-															m_cpuTime(0.0),
-															m_cpuPercCur(0.0),
-															m_cpuPercAvg(0.0),
-															m_vmPeak(0),
-															m_vmSize(0),
-															m_vmHWM(0),
-															m_vmRSS(0),
-															m_appSize(0)
-{
-	m_nAppID = 1ull << m_nIndex;
-	setStateText(m_state);
-    setObjectName("QGfaAppInfo");
-}
-
-QGfaAppInfo::~QGfaAppInfo(void)
-{
-	this->disconnect();
-}
-
-/////////////////////////////////////////////////////////////////////////////
-
-appid_t QGfaAppInfo::appId(void) const
-{
-	return m_nAppID;
-}
-
-/////////////////////////////////////////////////////////////////////////////
-
-int QGfaAppInfo::state(void) const
-{
-	return m_state;
-}
-
-bool QGfaAppInfo::setState(int val)
-{
-	if(m_state != val)
-	{
-		m_state = val;
-		emit stateChanged(val);
-		setStateText(val);
-		return true;
-	}
-
-	return false;
-}
-
-/////////////////////////////////////////////////////////////////////////////
-
-QString QGfaAppInfo::stateText(void) const
-{
-	return m_stateText;
-}
-
-void QGfaAppInfo::setStateText(int val)
-{
-	QString sval = ::GfaIpcAppCtrlGetStateText((GfaIpcAppStates)val);
-	if(m_stateText != sval)
-	{
-		m_stateText = sval;
-		emit stateTextChanged(sval);
-	}
-}
-
-/////////////////////////////////////////////////////////////////////////////
-
-QString QGfaAppInfo::name(void) const
-{
-	return m_name;
-}
-
-void QGfaAppInfo::setName(const QString &val)
-{
-	if(m_name != val)
-	{
-		m_name = val;
-		emit nameChanged(val);
-	}
-}
-
-/////////////////////////////////////////////////////////////////////////////
-
-quint64 QGfaAppInfo::cycInt(void) const
-{
-	return m_cycInt;
-}
-
-quint64 QGfaAppInfo::cycCur(void) const
-{
-	return m_cycCur;
-}
-
-quint64 QGfaAppInfo::cycMin(void) const
-{
-	return m_cycMin;
-}
-
-quint64 QGfaAppInfo::cycMax(void) const
-{
-	return m_cycMax;
-}
-
-
-quint64 QGfaAppInfo::wktCur(void) const
-{
-	return m_wktCur;
-}
-
-quint64 QGfaAppInfo::wktMin(void) const
-{
-	return m_wktMin;
-}
-
-quint64 QGfaAppInfo::wktMax(void) const
-{
-	return m_wktMax;
-}
-
-
-quint64 QGfaAppInfo::upTime(void) const
-{
-	return m_upTime;
-}
-
-double QGfaAppInfo::cpuTime(void) const
-{
-	return m_cpuTime;
-}
-
-double QGfaAppInfo::cpuCur(void) const
-{
-	return m_cpuPercCur;
-}
-
-double QGfaAppInfo::cpuAvg(void) const
-{
-	return m_cpuPercAvg;
-}
-
-quint32 QGfaAppInfo::vmPeak(void) const
-{
-	return m_vmPeak;
-}
-
-quint32 QGfaAppInfo::vmSize(void) const
-{
-	return m_vmSize;
-}
-
-quint32 QGfaAppInfo::vmHWM(void) const
-{
-	return m_vmHWM;
-}
-
-quint32 QGfaAppInfo::vmRSS(void) const
-{
-	return m_vmRSS;
-}
-
-quint32 QGfaAppInfo::appSize(void) const
-{
-	return m_appSize;
-}
-
-void QGfaAppInfo::setAppSize(quint32 size, GfaIpcAppStates state)
-{
-	if((state > GIAS_StateNotRunning) && (state < GIAS_Invalid))
-	{
-		if(m_appSize != size)
-		{
-			m_appSize = size;
-			emit appSizeChanged(m_appSize);
-		}
-	}
-	else
-	{
-		if(m_appSize != 0)
-		{
-			m_appSize = 0;
-			emit appSizeChanged(m_appSize);
-		}
-	}
-}
-
-void QGfaAppInfo::setAppMemInfo(LPCGFA_APPCTRL_APPMEM pam, GfaIpcAppStates state, bool bDoHeavyLoadUpdate)
-{
-	UNUSED(state);
-
-	if(pam && (state != GIAS_Zombie))
-	{
-		if(bDoHeavyLoadUpdate)
-		{
-			if(m_vmPeak != pam->vmPeak)
-			{
-				m_vmPeak = pam->vmPeak;
-				emit vmPeakChanged(m_vmPeak);
-			}
-
-			if(m_vmSize != pam->vmSize)
-			{
-				m_vmSize = pam->vmSize;
-				emit vmSizeChanged(m_vmSize);
-			}
-
-			if(m_vmHWM != pam->vmHWM)
-			{
-				m_vmHWM = pam->vmHWM;
-				emit vmHWMChanged(m_vmHWM);
-			}
-
-			if(m_vmRSS != pam->vmRSS)
-			{
-				m_vmRSS = pam->vmRSS;
-				emit vmRSSChanged(m_vmRSS);
-			}
-		}
-	}
-	else if(state != GIAS_Hanging)
-	{
-		if(m_vmPeak != 0)
-		{
-			m_vmPeak = 0;
-			emit vmPeakChanged(m_vmPeak);
-		}
-
-		if(m_vmSize != 0)
-		{
-			m_vmSize = 0;
-			emit vmSizeChanged(m_vmSize);
-		}
-
-		if(m_vmHWM != 0)
-		{
-			m_vmHWM = 0;
-			emit vmHWMChanged(m_vmHWM);
-		}
-
-		if(m_vmRSS != 0)
-		{
-			m_vmRSS = 0;
-			emit vmRSSChanged(m_vmRSS);
-		}
-	}
-}
-
-void QGfaAppInfo::setAppTimes(LPCGFA_APPCTRL_APPTIMES pat, GfaIpcAppStates state, bool bDoHeavyLoadUpdate)
-{
-	if(pat && (state != GIAS_Zombie))
-	{
-		if(m_cycInt != (quint64)pat->nCyclePresetUs)
-		{
-			m_cycInt = (quint64)pat->nCyclePresetUs;
-			emit cycIntChanged(m_cycInt);
-		}
-
-		if(state == GIAS_Running)
-		{
-			if(m_cycMin != (quint64)pat->nCycleMinUs)
-			{
-				m_cycMin = (quint64)pat->nCycleMinUs;
-				emit cycMinChanged(m_cycMin);
-			}
-
-			if(m_cycMax != (quint64)pat->nCycleMaxUs)
-			{
-				m_cycMax = (quint64)pat->nCycleMaxUs;
-				emit cycMaxChanged(m_cycMax);
-			}
-
-			if(m_wktMin != (quint64)pat->nWorkMinUs)
-			{
-				m_wktMin = (quint64)pat->nWorkMinUs;
-				emit wktMinChanged(m_wktMin);
-			}
-
-			if(m_wktMax != (quint64)pat->nWorkMaxUs)
-			{
-				m_wktMax = (quint64)pat->nWorkMaxUs;
-				emit wktMaxChanged(m_wktMax);
-			}
-		}
-		else
-		{
-			if(m_cycCur != 0)
-			{
-				m_cycCur = 0;
-				emit cycCurChanged(m_cycCur);
-			}
-
-			if(m_wktCur != 0)
-			{
-				m_wktCur = 0;
-				emit wktCurChanged(m_wktCur);
-			}
-		}
-
-		if(bDoHeavyLoadUpdate)
-		{
-			quint64 upTime = time(NULL) - pat->nTsStart;
-
-			if(m_upTime != upTime)
-			{
-				m_upTime = upTime;
-				emit upTimeChanged(m_upTime);
-			}
-
-			if(state == GIAS_Running)
-			{
-				if(m_cycCur != (quint64)pat->nCycleLastUs)
-				{
-					m_cycCur = (quint64)pat->nCycleLastUs;
-					emit cycCurChanged(m_cycCur);
-				}
-
-				if(m_wktCur != (quint64)pat->nWorkLastUs)
-				{
-					m_wktCur = (quint64)pat->nWorkLastUs;
-					emit wktCurChanged(m_wktCur);
-				}
-			}
-
-			if(state != GIAS_Hanging)
-			{
-				if(m_cpuTime != pat->fCpuTime)
-				{
-					m_cpuTime = pat->fCpuTime;
-					emit cpuTimeChanged(m_cpuTime);
-				}
-
-				if(m_cpuPercCur != pat->fCpuCur)
-				{
-					m_cpuPercCur = pat->fCpuCur;
-					emit cpuCurChanged(m_cpuPercCur);
-				}
-
-				if(m_cpuPercAvg != pat->fCpuAvg)
-				{
-					m_cpuPercAvg = pat->fCpuAvg;
-					emit cpuAvgChanged(m_cpuPercAvg);
-				}
-			}
-		}
-	}
-	else
-	{
-		if(m_cycInt != 0)
-		{
-			m_cycInt = 0;
-			emit cycIntChanged(m_cycInt);
-		}
-
-		if(m_cycCur != 0)
-		{
-			m_cycCur = 0;
-			emit cycCurChanged(m_cycCur);
-		}
-
-		if(m_wktCur != 0)
-		{
-			m_wktCur = 0;
-			emit wktCurChanged(m_wktCur);
-		}
-
-		if(state == GIAS_Hanging)
-		{
-			if(m_cpuTime != -1)
-			{
-				m_cpuTime = -1;
-				emit cpuTimeChanged(m_cpuTime);
-			}
-
-			if(m_cpuPercCur != -1)
-			{
-				m_cpuPercCur = -1;
-				emit cpuCurChanged(m_cpuPercCur);
-			}
-
-			if(m_cpuPercAvg != -1)
-			{
-				m_cpuPercAvg = -1;
-				emit cpuAvgChanged(m_cpuPercAvg);
-			}
-		}
-		else
-		{
-			if(m_cycMin != 0)
-			{
-				m_cycMin = 0;
-				emit cycMinChanged(m_cycMin);
-			}
-
-			if(m_cycMax != 0)
-			{
-				m_cycMax = 0;
-				emit cycMaxChanged(m_cycMax);
-			}
-
-			if(m_wktMin != 0)
-			{
-				m_wktMin = 0;
-				emit wktMinChanged(m_wktMin);
-			}
-
-			if(m_wktMax != 0)
-			{
-				m_wktMax = 0;
-				emit wktMaxChanged(m_wktMax);
-			}
-
-			if(m_upTime != 0)
-			{
-				m_upTime = 0;
-				emit upTimeChanged(m_upTime);
-			}
-
-			if(m_cpuTime != 0)
-			{
-				m_cpuTime = 0;
-				emit cpuTimeChanged(m_cpuTime);
-			}
-
-			if(m_cpuPercCur != 0)
-			{
-				m_cpuPercCur = 0;
-				emit cpuCurChanged(m_cpuPercCur);
-			}
-
-			if(m_cpuPercAvg != 0)
-			{
-				m_cpuPercAvg = 0;
-				emit cpuAvgChanged(m_cpuPercAvg);
-			}
-		}
-	}
-}
-
-/////////////////////////////////////////////////////////////////////////////
-
-bool QGfaAppInfo::pause(void)
-{
-	emit sendControlMessage(m_nAppID, GFA_APPCTRL_CTRLMSG_PAUSE);
-	return true;
-}
-
-bool QGfaAppInfo::resume(void)
-{
-	emit sendControlMessage(m_nAppID, GFA_APPCTRL_CTRLMSG_RESUME);
-	return true;
-}
-
-bool QGfaAppInfo::stop(void)
-{
-	emit sendControlMessage(m_nAppID, GFA_APPCTRL_CTRLMSG_STOP);
-	return true;
-}

+ 3 - 12
Test/qmlApp/qmlApp.pro

@@ -5,10 +5,7 @@ CONFIG += c++11
 DEFINES += QT_DEPRECATED_WARNINGS
 
 SOURCES += \
-        main.cpp \
-        qappctrl.cpp \
-        qappinfo.cpp \
-        qsysinfo.cpp
+        main.cpp
 
 RESOURCES += qml.qrc
 
@@ -20,11 +17,11 @@ CONFIG(debug, debug|release) {
     QMAKE_CFLAGS -= -Os -pthread
     QMAKE_CXXFLAGS += -D_DEBUG
     QMAKE_CFLAGS += -D_DEBUG
-	QMAKE_LIBS += -lgfaipcd -pthread
+	QMAKE_LIBS += -lgfaqtd -lgfaipcd -pthread
 }
 
 CONFIG(release, debug|release) {
-	QMAKE_LIBS += -lgfaipc -pthread
+	QMAKE_LIBS += -lgfaqt -lgfaipc -pthread
 }
 
 linux-buildroot-g++ {
@@ -33,9 +30,3 @@ linux-buildroot-g++ {
     target.path += /opt/GfA/ipc/test
 	INSTALLS += target
 }
-
-HEADERS += \
-    qappctrl.h
-
-DISTFILES +=
-

+ 0 - 512
Test/qmlApp/qsysinfo.cpp

@@ -1,512 +0,0 @@
-#include "qappctrl.h"
-#include "../../src/defines.h"
-
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-
-#define _countof(a)							(sizeof(a) / sizeof(*a))
-
-/////////////////////////////////////////////////////////////////////////////
-
-#define _OPT_STRING(s, o)					(*s ? s : o)
-#define _NA_STRING(s)						_OPT_STRING(s, "n/a")
-
-/////////////////////////////////////////////////////////////////////////////
-
-#define _BYTE_SIZE_KIB						(1ULL << 10) // Kibibyte
-#define _BYTE_SIZE_MIB						(1ULL << 20) // Mebibyte
-#define _BYTE_SIZE_GIB						(1ULL << 30) // Gibibyte
-#define _BYTE_SIZE_TIB						(1ULL << 40) // Tebibyte
-#define _BYTE_SIZE_PIB						(1ULL << 50) // Pebibyte
-#define _BYTE_SIZE_EIB						(1ULL << 60) // Exbibyte
-
-/////////////////////////////////////////////////////////////////////////////
-
-static const char *_FormatByteSize(unsigned long long nCb, char *pszBuf, size_t nCChBuf, bool bShortUnits = true, int nPrec = 1);
-
-/////////////////////////////////////////////////////////////////////////////
-
-static const char *_FormatByteSize(unsigned long long nCb, char *pszBuf, size_t nCChBuf, bool bShortUnits, int nPrec)
-{
-	if(pszBuf && nCChBuf)
-	{
-		double val = nCb;
-		
-		if(nCb < _BYTE_SIZE_KIB)
-		{
-			snprintf(pszBuf, nCChBuf, "%llu %s", nCb, bShortUnits ? "B" : "Byte"); // Byte
-		}
-		else if(nCb < _BYTE_SIZE_MIB)
-		{
-			val /= _BYTE_SIZE_KIB;
-			snprintf(pszBuf, nCChBuf, "%.*f %s", nPrec, val, bShortUnits ? "K" : "KiB"); // KiB
-		}
-		else if(nCb < _BYTE_SIZE_GIB)
-		{
-			val /= _BYTE_SIZE_MIB;
-			snprintf(pszBuf, nCChBuf, "%.*f %s", nPrec, val, bShortUnits ? "M" : "MiB"); // MiB
-		}
-		else if(nCb < _BYTE_SIZE_TIB)
-		{
-			val /= _BYTE_SIZE_GIB;
-			snprintf(pszBuf, nCChBuf, "%.*f %s", nPrec, val, bShortUnits ? "G" : "GiB"); // GiB
-		}
-		else if(nCb < _BYTE_SIZE_PIB)
-		{
-			val /= _BYTE_SIZE_TIB;
-			snprintf(pszBuf, nCChBuf, "%.*f %s", nPrec, val, bShortUnits ? "T" : "TiB"); // TiB
-		}
-		else if(nCb < _BYTE_SIZE_EIB)
-		{
-			val /= _BYTE_SIZE_PIB;
-			snprintf(pszBuf, nCChBuf, "%.*f %s", nPrec, val, bShortUnits ? "P" : "PiB"); // PiB
-		}
-		
-		return pszBuf;
-	}
-	
-	return NULL;
-}
-
-/////////////////////////////////////////////////////////////////////////////
-
-typedef enum
-{
-    SDR_DiskName = Qt::UserRole,
-    SDR_DiskDevNode,
-    SDR_DiskBusType,
-    SDR_DiskVendorName,
-    SDR_DiskVendorID,
-	SDR_DiskProductID,
-	SDR_PartFsLabel,
-	SDR_PartFsType,
-	SDR_PartFsVersion,
-	SDR_PartDevNode,
-	SDR_PartMountPoint,
-	SDR_PartSize,
-	SDR_PartFsSize,
-	SDR_PartFsFree,
-	SDR_PartFsUsed
-}StgDevRoles;
-
-typedef struct _STG_DEV_ROLES
-{
-	int nRole;
-	const char *pszRoleName;
-}STG_DEV_ROLES, *LPSTG_DEV_ROLES;
-typedef const STG_DEV_ROLES *LPCSTG_DEV_ROLES;
-
-/////////////////////////////////////////////////////////////////////////////
-
-static const STG_DEV_ROLES g_roles[] =
-{
-	{SDR_DiskName,			"DiskName"},
-	{SDR_DiskDevNode,		"DiskDevNode"},
-	{SDR_DiskBusType,		"DiskDevType"},
-	{SDR_DiskVendorName,	"DiskVendorName"},
-	{SDR_DiskVendorID,		"DiskVendorID"},
-	{SDR_DiskProductID,		"DiskProductID"},
-	{SDR_PartFsLabel,		"PartFsLabel"},
-	{SDR_PartFsType,		"PartFsType"},
-	{SDR_PartFsVersion,		"PartFsVersion"},
-	{SDR_PartDevNode,		"PartDevNode"},
-	{SDR_PartMountPoint,	"PartMountPoint"},
-	{SDR_PartSize,			"PartSize"},
-	{SDR_PartFsSize,		"PartFsSize"},
-	{SDR_PartFsFree,		"PartFsFree"},
-	{SDR_PartFsUsed,		"PartFsUsed"}
-};
-
-/////////////////////////////////////////////////////////////////////////////
-
-QGfaStgDevList::QGfaStgDevList(QObject *pParent) : 	QAbstractTableModel(pParent)
-{
-	memset(&m_stgDevShadowCpy, 0, sizeof(m_stgDevShadowCpy));
-    setObjectName("QGfaStgDevList");
-}
-
-QGfaStgDevList::~QGfaStgDevList(void)
-{
-}
-
-int QGfaStgDevList::rowCount(const QModelIndex &parent) const
-{
-	Q_UNUSED(parent);
-	return (int)m_partVec.size();
-}
-
-int QGfaStgDevList::columnCount(const QModelIndex &parent) const
-{
-	Q_UNUSED(parent);
-	return (int)_countof(g_roles);
-}
-
-QVariant QGfaStgDevList::data(const QModelIndex &index, int role) const
-{
-	if(!index.isValid())
-		return QVariant();
-
-	QVariant val;
-	char szBuf[64];
-	int nIndex = index.row();
-	const STG_DEV_DISK_PART &dp = m_partVec[nIndex];
-	const GFA_SYSINFO_DISK &disk = m_stgDevShadowCpy.disks[dp.nDiskIdx];
-	const GFA_SYSINFO_PARTITION &part = m_stgDevShadowCpy.parts[dp.nPartIdx];
-	
-	if(disk.valid && part.valid)
-	{
-		switch(role)
-		{
-		case SDR_DiskName:
-			val = _NA_STRING(disk.szName);
-			break;
-		case SDR_DiskDevNode:
-			val = _NA_STRING(disk.szDevNode);
-			break;
-		case SDR_DiskBusType:
-			val = _OPT_STRING(disk.szBus, "mmc");
-			break;
-		case SDR_DiskVendorName:
-			val = _NA_STRING(disk.szVendor);
-			break;
-		case SDR_DiskVendorID:
-			val = (int)disk.nVendorID;
-			break;
-		case SDR_DiskProductID:
-			val = (int)disk.nProductID;
-			break;
-		case SDR_PartFsLabel:
-			val = _NA_STRING(part.szFsLabel);
-			break;
-		case SDR_PartFsType:
-			val = _NA_STRING(part.szFsType);
-			break;
-		case SDR_PartFsVersion:
-			val = _NA_STRING(part.szFsVersion);
-			break;
-		case SDR_PartDevNode:
-			val = _NA_STRING(part.szDevNode);
-			break;
-		case SDR_PartMountPoint:
-			val = _NA_STRING(part.szMntPoint);
-			break;
-		case SDR_PartSize:
-			val = _FormatByteSize(part.nKiBPartSize * _BYTE_SIZE_KIB, szBuf, _countof(szBuf));
-			break;
-		case SDR_PartFsSize:
-			val = _FormatByteSize(part.nKiBSize * _BYTE_SIZE_KIB, szBuf, _countof(szBuf));
-			break;
-		case SDR_PartFsFree:
-			val = _FormatByteSize(part.nKiBFree * _BYTE_SIZE_KIB, szBuf, _countof(szBuf));
-			break;
-		case SDR_PartFsUsed:
-			val = _FormatByteSize(part.nKiBUsed * _BYTE_SIZE_KIB, szBuf, _countof(szBuf));
-			break;
-		default:
-			break;
-		}
-	}
-
-	return val;
-}
-
-QHash<int, QByteArray> QGfaStgDevList::roleNames(void) const
-{
-	QHash<int, QByteArray> roles;
-	
-	for(size_t i = 0; i < _countof(g_roles); ++i)
-	{
-		roles[g_roles[i].nRole] = g_roles[i].pszRoleName;
-	}
-
-	return roles;
-}
-
-int QGfaStgDevList::FindPartVecEntry(int nDiskIdx, int nPartIdx)
-{
-	for(auto it = m_partVec.begin(); it != m_partVec.end(); ++it)
-	{
-		const STG_DEV_DISK_PART &dp = *it;
-		if((dp.nDiskIdx == nDiskIdx) && (dp.nPartIdx == nPartIdx))
-			return it - m_partVec.begin();
-	}
-	return -1;
-}
-
-void QGfaStgDevList::insertPartition(int nDiskIdx, int nPartIdx)
-{
-	QModelIndex parent = QModelIndex();
-	int nIndex = (int)m_partVec.size();
-	emit beginInsertRows(parent, nIndex, nIndex);
-	m_partVec.emplace_back(nDiskIdx, nPartIdx);
-	emit endInsertRows();
-}
-
-void QGfaStgDevList::removePartition(int nDiskIdx, int nPartIdx)
-{
-	int nIndex;
-	if((nIndex = FindPartVecEntry(nDiskIdx, nPartIdx)) >= 0)
-	{
-		QModelIndex parent = QModelIndex();
-		emit beginRemoveRows(parent, nIndex, nIndex);
-		m_partVec.erase(m_partVec.begin() + nIndex);
-		emit endRemoveRows();
-	}
-}
-
-void QGfaStgDevList::diskAdded(int nIndex, const GFA_SYSINFO_DISK &disk)
-{
-	if((nIndex >= 0) && (nIndex < (int)_countof(m_stgDevShadowCpy.disks)) && !disk.internal)
-	{
-		TRACE("Disk [ID=%d] added:   %s [%s]\n", nIndex, disk.szDevNode, *disk.szName ? disk.szName : "Unnamed");
-		memcpy(&m_stgDevShadowCpy.disks[nIndex], &disk, sizeof(GFA_SYSINFO_DISK));
-	}
-}
-
-void QGfaStgDevList::diskRemoved(int nIndex, const GFA_SYSINFO_DISK &disk)
-{
-	if((nIndex >= 0) && (nIndex < (int)_countof(m_stgDevShadowCpy.disks)) && !disk.internal)
-	{
-		TRACE("Disk [ID=%d] removed: %s [%s]\n", nIndex, disk.szDevNode, *disk.szName ? disk.szName : "Unnamed");
-		m_stgDevShadowCpy.disks[nIndex].valid = false;
-	}
-}
-
-void QGfaStgDevList::partitionAdded(int nIndex, const GFA_SYSINFO_PARTITION &part)
-{
-	if((nIndex >= 0) && (nIndex < (int)_countof(m_stgDevShadowCpy.parts)) && !part.internal)
-	{
-		TRACE("Partition [ID=%d:%d] added:   %s [%s]\n", part.nDiskIdx, nIndex, part.szDevNode, *part.szFsLabel ? part.szFsLabel : "Unnamed");
-		memcpy(&m_stgDevShadowCpy.parts[nIndex], &part, sizeof(GFA_SYSINFO_PARTITION));
-		insertPartition(part.nDiskIdx, nIndex);
-	}
-}
-
-void QGfaStgDevList::partitionRemoved(int nIndex, const GFA_SYSINFO_PARTITION &part)
-{
-	if((nIndex >= 0) && (nIndex < (int)_countof(m_stgDevShadowCpy.parts)) && !part.internal)
-	{
-		TRACE("Partition [ID=%d:%d] removed: %s [%s]\n", part.nDiskIdx, nIndex, part.szDevNode, *part.szFsLabel ? part.szFsLabel : "Unnamed");
-		m_stgDevShadowCpy.parts[nIndex].valid = false;
-		removePartition(part.nDiskIdx, nIndex);
-	}
-}
-
-void QGfaStgDevList::mountAdded(int nIndex, const GFA_SYSINFO_PARTITION &part)
-{
-	if((nIndex >= 0) && (nIndex < (int)_countof(m_stgDevShadowCpy.parts)) && !part.internal)
-	{
-		TRACE("Partition [ID=%d:%d] mounted:   %s -> %s\n", part.nDiskIdx, nIndex, part.szDevNode, part.szMntPoint);
-		GFA_SYSINFO_PARTITION &p = m_stgDevShadowCpy.parts[nIndex];
-		memcpy(&p.szMntPoint, &part.szMntPoint, sizeof(GFA_SYSINFO_PARTITION::szMntPoint));
-		if((nIndex = FindPartVecEntry(part.nDiskIdx, nIndex)) >= 0)
-		{
-			p.nKiBSize = part.nKiBSize;
-			p.nKiBFree = part.nKiBFree;
-			p.nKiBUsed = part.nKiBUsed;
-			QModelIndex i = createIndex(nIndex, 0);
-			emit dataChanged(i, i, {SDR_PartMountPoint, SDR_PartFsSize, SDR_PartFsFree, SDR_PartFsUsed});
-		}
-	}
-}
-
-void QGfaStgDevList::mountRemoved(int nIndex, const GFA_SYSINFO_PARTITION &part)
-{
-	if((nIndex >= 0) && (nIndex < (int)_countof(m_stgDevShadowCpy.parts)) && !part.internal)
-	{
-		TRACE("Partition [ID=%d:%d] unmounted: %s\n", part.nDiskIdx, nIndex, part.szDevNode);
-		GFA_SYSINFO_PARTITION &p = m_stgDevShadowCpy.parts[nIndex];
-		memset(&p.szMntPoint, 0, sizeof(GFA_SYSINFO_PARTITION::szMntPoint));
-		if((nIndex = FindPartVecEntry(part.nDiskIdx, nIndex)) >= 0)
-		{
-			p.nKiBSize = 0;
-			p.nKiBFree = 0;
-			p.nKiBUsed = 0;
-			QModelIndex i = createIndex(nIndex, 0);
-			emit dataChanged(i, i, {SDR_PartMountPoint, SDR_PartFsSize, SDR_PartFsFree, SDR_PartFsUsed});
-		}
-	}
-}
-
-void QGfaStgDevList::clearAll(void)
-{
-	int nLast = m_partVec.size() - 1;
-	if(nLast >= 0)
-	{
-		QModelIndex parent = QModelIndex();
-		emit beginRemoveRows(parent, 0, nLast);
-		m_partVec.clear();
-		memset(&m_stgDevShadowCpy, 0, sizeof(m_stgDevShadowCpy));
-		emit endRemoveRows();
-	}
-}
-
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////////////////////////
-
-QGfaSysInfo::QGfaSysInfo(QObject *pParent) : 	QObject(pParent),
-												m_bSysInfoRunning(false),
-												m_nMemTotal(0),
-												m_nMemUsed(0),
-												m_nMemFree(0),
-												m_nMemAvailable(0),
-												m_nMemBuffers(0),
-												m_nMemCached(0),
-												m_bootFromEmmc(false)
-{
-}
-
-QGfaSysInfo::~QGfaSysInfo(void)
-{
-    setObjectName("QGfaSysInfo");
-}
-
-/////////////////////////////////////////////////////////////////////////////
-
-void QGfaSysInfo::setSysInfoRunning(bool bRunning)
-{
-	if(m_bSysInfoRunning != bRunning)
-	{
-		if(!(m_bSysInfoRunning = bRunning))
-		{
-			setSysMemInfo(NULL);
-			m_stgDevList.clearAll();
-		}
-	}
-}
-
-void QGfaSysInfo::setSysMemInfo(LPCGFA_APPCTRL_SYSMEM psm, bool bDoHeavyLoadUpdate)
-{
-	if(psm && m_bSysInfoRunning)
-	{
-		if(bDoHeavyLoadUpdate)
-		{
-			if(m_nMemTotal != psm->nMemTotal)
-			{
-				m_nMemTotal = psm->nMemTotal;
-				emit memTotalChanged(m_nMemTotal);
-			}
-
-			if(m_nMemUsed != psm->nMemUsed)
-			{
-				m_nMemUsed = psm->nMemUsed;
-				emit memUsedChanged(m_nMemUsed);
-			}
-			
-			if(m_nMemFree != psm->nMemFree)
-			{
-				m_nMemFree = psm->nMemFree;
-				emit memFreeChanged(m_nMemFree);
-			}
-
-			if(m_nMemAvailable != psm->nMemAvailable)
-			{
-				m_nMemAvailable = psm->nMemAvailable;
-				emit memAvailableChanged(m_nMemAvailable);
-			}
-			
-			if(m_nMemBuffers != psm->nMemBuffers)
-			{
-				m_nMemBuffers = psm->nMemBuffers;
-				emit memBuffersChanged(m_nMemBuffers);
-			}
-			
-			if(m_nMemCached != psm->nMemCached)
-			{
-				m_nMemCached = psm->nMemCached;
-				emit memCachedChanged(m_nMemCached);
-			}
-		}
-	}
-	else
-	{
-		if(m_nMemTotal != 0)
-		{
-			m_nMemTotal = 0;
-			emit memTotalChanged(m_nMemTotal);
-		}
-
-		if(m_nMemUsed != 0)
-		{
-			m_nMemUsed = 0;
-			emit memUsedChanged(m_nMemUsed);
-		}
-		
-		if(m_nMemFree != 0)
-		{
-			m_nMemFree = 0;
-			emit memFreeChanged(m_nMemFree);
-		}
-
-		if(m_nMemAvailable != 0)
-		{
-			m_nMemAvailable = 0;
-			emit memAvailableChanged(m_nMemAvailable);
-		}
-		
-		if(m_nMemBuffers != 0)
-		{
-			m_nMemBuffers = 0;
-			emit memBuffersChanged(m_nMemBuffers);
-		}
-		
-		if(m_nMemCached != 0)
-		{
-			m_nMemCached = 0;
-			emit memCachedChanged(m_nMemCached);
-		}
-	}
-}
-
-/////////////////////////////////////////////////////////////////////////////
-
-quint64 QGfaSysInfo::memTotal(void) const
-{
-	return m_nMemTotal;
-}
-
-quint64 QGfaSysInfo::memUsed(void) const
-{
-	return m_nMemUsed;
-}
-
-quint64 QGfaSysInfo::memFree(void) const
-{
-	return m_nMemFree;
-}
-
-quint64 QGfaSysInfo::memAvailable(void) const
-{
-	return m_nMemAvailable;
-}
-
-quint64 QGfaSysInfo::memBuffers(void) const
-{
-	return m_nMemBuffers;
-}
-
-quint64 QGfaSysInfo::memCached(void) const
-{
-	return m_nMemCached;
-}
-
-QGfaStgDevList* QGfaSysInfo::stgDev(void)
-{
-	return &m_stgDevList;
-}
-
-bool QGfaSysInfo::bootFromEmmc(void) const
-{
-	return m_bootFromEmmc;
-}
-
-void QGfaSysInfo::setBootFromEmmc(bool bootFromEmmc)
-{
-	if(m_bootFromEmmc != bootFromEmmc)
-	{
-		m_bootFromEmmc = bootFromEmmc;
-		emit bootFromEmmcChanged(m_bootFromEmmc);
-	}
-}

+ 1 - 1
Test/test.pri

@@ -27,4 +27,4 @@ linux-buildroot-g++ {
 
 SOURCES += ../main.cpp
 
-HEADERS += 
+HEADERS += app.h

+ 6 - 1
gfaipc.pro

@@ -21,6 +21,7 @@ HEADERS += \
     src/appctrl.h \
     src/defines.h \
     src/gfaipc.h \
+    src/ipcpriv.h \
     src/mutex.h \
     src/procmem.h \
     src/sema.h \
@@ -63,12 +64,14 @@ linux-g++ {
 	includes.extra += $$escape_expand(\\n\\t)-$(INSTALL_FILE) $$PWD/src/shm.h $(INSTALL_ROOT)$$includes.path
 	includes.extra += $$escape_expand(\\n\\t)-$(INSTALL_FILE) $$PWD/src/procmem.h $(INSTALL_ROOT)$$includes.path
 	includes.extra += $$escape_expand(\\n\\t)-$(INSTALL_FILE) $$PWD/src/uuid.h $(INSTALL_ROOT)$$includes.path
+	includes.extra += $$escape_expand(\\n\\t)-$(INSTALL_FILE) $$PWD/src/ipcpriv.h $(INSTALL_ROOT)$$includes.path
 	includes.uninstall += -$(DEL_FILE) $(INSTALL_ROOT)$$includes.path/gfaipc.h
 	includes.uninstall += $$escape_expand(\\n\\t)-$(DEL_FILE) $(INSTALL_ROOT)$$includes.path/mutex.h
 	includes.uninstall += $$escape_expand(\\n\\t)-$(DEL_FILE) $(INSTALL_ROOT)$$includes.path/sema.h
 	includes.uninstall += $$escape_expand(\\n\\t)-$(DEL_FILE) $(INSTALL_ROOT)$$includes.path/shm.h
 	includes.uninstall += $$escape_expand(\\n\\t)-$(DEL_FILE) $(INSTALL_ROOT)$$includes.path/procmem.h
 	includes.uninstall += $$escape_expand(\\n\\t)-$(DEL_FILE) $(INSTALL_ROOT)$$includes.path/uuid.h
+	includes.uninstall += $$escape_expand(\\n\\t)-$(DEL_FILE) $(INSTALL_ROOT)$$includes.path/ipcpriv.h
 	INSTALLS += includes
 }
 
@@ -94,12 +97,14 @@ linux-buildroot-g++ {
 		includes.extra += $$escape_expand(\\n\\t)-$(INSTALL_FILE) $$PWD/src/shm.h $(INSTALL_ROOT)$$includes.path
 		includes.extra += $$escape_expand(\\n\\t)-$(INSTALL_FILE) $$PWD/src/procmem.h $(INSTALL_ROOT)$$includes.path
 		includes.extra += $$escape_expand(\\n\\t)-$(INSTALL_FILE) $$PWD/src/uuid.h $(INSTALL_ROOT)$$includes.path
+		includes.extra += $$escape_expand(\\n\\t)-$(INSTALL_FILE) $$PWD/src/ipcpriv.h $(INSTALL_ROOT)$$includes.path
 		includes.uninstall += -$(DEL_FILE) $(INSTALL_ROOT)$$includes.path/gfaipc.h
 		includes.uninstall += $$escape_expand(\\n\\t)-$(DEL_FILE) $(INSTALL_ROOT)$$includes.path/mutex.h
 		includes.uninstall += $$escape_expand(\\n\\t)-$(DEL_FILE) $(INSTALL_ROOT)$$includes.path/sema.h
 		includes.uninstall += $$escape_expand(\\n\\t)-$(DEL_FILE) $(INSTALL_ROOT)$$includes.path/shm.h
 		includes.uninstall += $$escape_expand(\\n\\t)-$(DEL_FILE) $(INSTALL_ROOT)$$includes.path/procmem.h
 		includes.uninstall += $$escape_expand(\\n\\t)-$(DEL_FILE) $(INSTALL_ROOT)$$includes.path/uuid.h
+		includes.uninstall += $$escape_expand(\\n\\t)-$(DEL_FILE) $(INSTALL_ROOT)$$includes.path/ipcpriv.h
 		INSTALLS += includes
 
 		itoolchain.target = install_toolchain
@@ -122,7 +127,7 @@ deploylib.commands += $$escape_expand(\\n\\t)@echo TARGET="$(TARGET)" >> deployt
 deploylib.commands += $$escape_expand(\\n\\t)@echo TARGET0="$(TARGET0)" >> deploytargets
 deploylib.commands += $$escape_expand(\\n\\t)@echo TARGET1="$(TARGET1)" >> deploytargets
 deploylib.commands += $$escape_expand(\\n\\t)@echo TARGET2="$(TARGET2)" >> deploytargets
-deploylib.commands += $$escape_expand(\\n\\t)@echo HEADERS="\\\"gfaipc.h mutex.h sema.h shm.h procmem.h uuid.h\\\"" >> deploytargets
+deploylib.commands += $$escape_expand(\\n\\t)@echo HEADERS="\\\"gfaipc.h mutex.h sema.h shm.h procmem.h uuid.h ipcpriv.h\\\"" >> deploytargets
 PRE_TARGETDEPS += deploylib
 QMAKE_EXTRA_TARGETS += deploylib
 

+ 45 - 19
gfaipc.pro.user

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 4.11.1, 2020-04-03T22:51:01. -->
+<!-- Written by QtCreator 4.12.0, 2020-04-29T08:45:03. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>
@@ -54,7 +54,17 @@
  </data>
  <data>
   <variable>ProjectExplorer.Project.PluginSettings</variable>
-  <valuemap type="QVariantMap"/>
+  <valuemap type="QVariantMap">
+   <valuemap type="QVariantMap" key="ClangTools">
+    <value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
+    <value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
+    <value type="int" key="ClangTools.ParallelJobs">1</value>
+    <valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
+    <valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
+    <valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
+    <value type="bool" key="ClangTools.UseGlobalSettings">true</value>
+   </valuemap>
+  </valuemap>
  </data>
  <data>
   <variable>ProjectExplorer.Project.Target.0</variable>
@@ -66,16 +76,17 @@
    <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
    <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
+    <value type="bool">true</value>
+    <value type="int" key="EnableQmlDebugging">2</value>
     <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/wrk/share/gfaipc/Debug/Sitara_1</value>
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/wrk/share/gfaipc/Debug/Sitara_1</value>
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
      <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
       <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
       <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
       <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+      <valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
      </valuemap>
      <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
       <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
@@ -137,18 +148,21 @@
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
     <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
+    <value type="int" key="QtQuickCompiler">2</value>
+    <value type="int" key="SeparateDebugInfo">2</value>
    </valuemap>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
+    <value type="bool">true</value>
+    <value type="int" key="EnableQmlDebugging">2</value>
     <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/wrk/share/gfaipc/Release/Sitara_1</value>
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/wrk/share/gfaipc/Release/Sitara_1</value>
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
      <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
       <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
       <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
       <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+      <valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
      </valuemap>
      <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
       <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
@@ -210,6 +224,8 @@
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
     <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
+    <value type="int" key="QtQuickCompiler">2</value>
+    <value type="int" key="SeparateDebugInfo">2</value>
    </valuemap>
    <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">2</value>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
@@ -222,11 +238,13 @@
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.ProcessStep</value>
      </valuemap>
      <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deployment</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deployment</value>
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
     </valuemap>
     <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
+    <valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
+    <value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">DeployToGenericLinux</value>
    </valuemap>
    <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
@@ -392,20 +410,21 @@
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop Qt 5.7.1 GCC 64bit</value>
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop Qt 5.7.1 GCC 64bit</value>
    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">qt.57.gcc_64_kit</value>
-   <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">1</value>
+   <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
    <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
    <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
+    <value type="bool">true</value>
+    <value type="int" key="EnableQmlDebugging">2</value>
     <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/wrk/share/gfaipc/Debug/Desktop_Qt_5_7_1_GCC_64bit</value>
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/wrk/share/gfaipc/Debug/Desktop_Qt_5_7_1_GCC_64bit</value>
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
      <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
       <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">true</value>
       <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
       <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+      <valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
      </valuemap>
      <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
       <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
@@ -467,18 +486,21 @@
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Debug</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
     <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
+    <value type="int" key="QtQuickCompiler">2</value>
+    <value type="int" key="SeparateDebugInfo">2</value>
    </valuemap>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
+    <value type="bool">true</value>
+    <value type="int" key="EnableQmlDebugging">2</value>
     <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/wrk/share/gfaipc/Release/Desktop_Qt_5_7_1_GCC_64bit</value>
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory.shadowDir">/home/wrk/share/gfaipc/Release/Desktop_Qt_5_7_1_GCC_64bit</value>
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
      <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
       <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">QtProjectManager.QMakeBuildStep</value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.LinkQmlDebuggingLibrary">false</value>
       <value type="QString" key="QtProjectManager.QMakeBuildStep.QMakeArguments"></value>
       <value type="bool" key="QtProjectManager.QMakeBuildStep.QMakeForced">false</value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.SeparateDebugInfo">false</value>
-      <value type="bool" key="QtProjectManager.QMakeBuildStep.UseQtQuickCompiler">false</value>
+      <valuelist type="QVariantList" key="QtProjectManager.QMakeBuildStep.SelectedAbis"/>
      </valuemap>
      <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
       <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
@@ -540,16 +562,20 @@
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Release</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4BuildConfiguration</value>
     <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">0</value>
+    <value type="int" key="QtQuickCompiler">2</value>
+    <value type="int" key="SeparateDebugInfo">2</value>
    </valuemap>
    <value type="int" key="ProjectExplorer.Target.BuildConfigurationCount">2</value>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
     <valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
      <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
-     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deployment</value>
+     <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deployment</value>
      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
     </valuemap>
     <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
+    <valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
+    <value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
     <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
    </valuemap>
    <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>

+ 4 - 1
src/appctrl.cpp

@@ -47,9 +47,12 @@ static const char *g_pszKnownAppNames[] =
 	"Summarist",
 	"REST",
 	"MqttCl",
-	"GfaSysInfo"
+	"GfaSysInfo",
+	"GEB"
 };
 
+static_assert(_countof(g_pszKnownAppNames) == (GAI_Last - GAI_Remanent), "enum GfaAppIndex does not meet string representation!");
+
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
 

+ 6 - 2
src/gfaipc.h

@@ -62,7 +62,9 @@ typedef enum
 	GAI_Summarist,
 	GAI_Rest,
 	GAI_Mqttcl,
-	GAI_SysInfo
+	GAI_SysInfo,
+	GAI_Geb,
+	GAI_Last
 }GfaAppIndex;
 
 #define GFA_APPCTRL_APPID_REMANENT					GFA_APPCTRL_MAKE_APPID(GAI_Remanent)
@@ -71,13 +73,15 @@ typedef enum
 #define GFA_APPCTRL_APPID_REST						GFA_APPCTRL_MAKE_APPID(GAI_Rest)
 #define GFA_APPCTRL_APPID_MQTTCL					GFA_APPCTRL_MAKE_APPID(GAI_Mqttcl)
 #define GFA_APPCTRL_APPID_SYSINFO					GFA_APPCTRL_MAKE_APPID(GAI_SysInfo)
+#define GFA_APPCTRL_APPID_GEB						GFA_APPCTRL_MAKE_APPID(GAI_Geb)
 
 #define GFA_APPCTRL_APPID_ALL_GFA					(GFA_APPCTRL_APPID_REMANENT		|	\
 													GFA_APPCTRL_APPID_DATALOGGER	|	\
 													GFA_APPCTRL_APPID_SUMMARIST		|	\
 													GFA_APPCTRL_APPID_REST			|	\
 													GFA_APPCTRL_APPID_MQTTCL		|	\
-													GFA_APPCTRL_APPID_SYSINFO)
+													GFA_APPCTRL_APPID_SYSINFO		|	\
+													GFA_APPCTRL_APPID_GEB)
 
 /////////////////////////////////////////////////////////////////////////////
 

+ 1 - 0
src/ipcpriv.h

@@ -29,6 +29,7 @@ bool GfaIpcAppCtrlCreateSysInfo(HAPPCTRL hAC);
 bool GfaIpcAppCtrlReleaseSysInfo(HAPPCTRL hAC);
 bool GfaIpcAppCtrlUpdateSysInfo(HAPPCTRL hAC);
 bool GfaIpcAppCtrlUpdateStorageDeviceMap(HAPPCTRL hAC, const GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm);
+void GfaIpcForceReleaseMutex(void);
 
 /////////////////////////////////////////////////////////////////////////////
 #ifdef __cplusplus

+ 5 - 0
src/ipcshm.cpp

@@ -78,6 +78,11 @@ static CShmHandleMap g_shmHandleMap;
 
 /////////////////////////////////////////////////////////////////////////////
 
+void GfaIpcForceReleaseMutex(void)
+{
+	g_shmRot.ForceReleaseMutex();
+}
+
 HSHM GfaIpcAcquireSHM(const char *pszUuid, size_t nSizeElement, size_t nCntElements, const char *pszDescName)
 {
 	HSHM hShm = NULL;

+ 2 - 2
src/mutex.cpp

@@ -48,7 +48,7 @@ int CGlobalMutex::Create(const uuid_t &ruuid, const char *pszDir)
 	if(!pszDir)
 		pszDir = "";
 
-	size_t nLenReq = strlen(pszDir) + _UUID_STRING_LEN + 2;
+	size_t nLenReq = strlen(pszDir) + _UUID_STRING_LEN + 10;
 
 	if(nLenReq > PATH_MAX)
 	{
@@ -61,7 +61,7 @@ int CGlobalMutex::Create(const uuid_t &ruuid, const char *pszDir)
 	char szUuid[_UUID_STRING_LEN + 1];
 	char szShm[PATH_MAX];
 	_uuid_unparse(&ruuid, szUuid, sizeof(szUuid));
-	sprintf(szShm, "%s/%s.mtx", pszDir, szUuid);
+	sprintf(szShm, "%s/%s.gfa.mtx", pszDir, szUuid);
 
 	int nFdShm;
 

+ 9 - 5
src/shm.cpp

@@ -66,7 +66,7 @@ int CShm::Create(const uuid_t &ruuid, size_t nCbShm, const char *pszDir)
 	if(!pszDir)
 		pszDir = "";
 
-	size_t nLenReq = strlen(pszDir) + _UUID_STRING_LEN + 2;
+	size_t nLenReq = strlen(pszDir) + _UUID_STRING_LEN + 10;
 
 	if(nLenReq > PATH_MAX)
 	{
@@ -76,17 +76,15 @@ int CShm::Create(const uuid_t &ruuid, size_t nCbShm, const char *pszDir)
 	}
 
 	int nRet = -1;
+	int nFdShm;
 	char szUuid[_UUID_STRING_LEN + 1];
 	char szShm[PATH_MAX];
 	_uuid_unparse(&ruuid, szUuid, sizeof(szUuid));
-	sprintf(szShm, "%s/%s.shm", pszDir, szUuid);
+	sprintf(szShm, "%s/%s.gfa.shm", pszDir, szUuid);
 
 	if(m_mutex.Create(ruuid, pszDir) < 0)
 		return -1;
 
-	int nFdShm;
-//	CShmLocker locker(m_mutex);
-
 	if((nFdShm = ::open(szShm, O_RDWR | O_CREAT | O_TRUNC, _NUMBER_OF_THE_BEAST)) >= 0)
 	{
 		key_t shmKey;
@@ -165,6 +163,12 @@ long CShm::Release(void)
 	return att;
 }
 
+void CShm::ForceReleaseMutex(void)
+{
+	m_mutex.Unlock();
+	m_mutex.Release();
+}
+
 void* CShm::Attach(const void *pAddr, int shmflg)
 {
 	CShmLocker locker(m_mutex);

+ 2 - 0
src/shm.h

@@ -60,6 +60,8 @@ public:
 
 	static void DumpIpcPerm(struct ipc_perm *ip);
 	static void DumpShmidDs(struct shmid_ds *sid);
+	
+	void ForceReleaseMutex(void);
 
 private:
 

+ 5 - 0
src/shmrot.cpp

@@ -88,6 +88,11 @@ void CShmROT::Release(void)
 	}
 }
 
+void CShmROT::ForceReleaseMutex(void)
+{
+	m_shmRot.ForceReleaseMutex();
+}
+
 CShm* CShmROT::AcquireShm(const char *pszUuid, size_t nSizeElement, size_t nCntElements, const char *pszDescName)
 {
 	if(!m_pTable)

+ 1 - 0
src/shmrot.h

@@ -89,6 +89,7 @@ public:
 		return !!m_pTable;}
 
 	void DumpEntries(CShmHandleMap &map);
+	void ForceReleaseMutex(void);
 
 private:
 	CShm m_shmRot;

+ 0 - 79
src/shmstrvar.cpp

@@ -1,79 +0,0 @@
-#include "shmvar.h"
-#include <QDebug>
-
-#define _IS_VALID_VT(vt)		((vt > CShmStringVariable::VT_Invalid) && (vt < CShmStringVariable::VT_Last))
-
-CShmStringVariable::CShmStringVariable(void *pData, size_t nCChData, VT vt, const std::type_info &rti, HSHM hShm, const char *pszName, int nIndex, QObject *pParent)
-{
-	if(!pData || !hShm || !nCChData || !_IS_VALID_VT(vt))
-	{
-		Q_ASSERT_X(false, "CShmStringVariable::CShmStringVariable", "Invalid parameter!");
-		return;
-	}
-
-    m_data.pVoid = pData;
-    m_hShm = hShm;
-    setObjectName(QStringLiteral("CShmVariable"));
-    if((m_nIndex = nIndex) >= 0)
-	{
-		m_varName += QString("%1%2%3").arg('[').arg(nIndex).arg(']');
-	}
-
-    if((rti == typeid(signed char)) || (rti == typeid(unsigned char)))
-    {
-    }
-    else if(rti == typeid(wchar_t))
-	{
-	}
-    else
-	{
-		Q_ASSERT_X(false, "CShmStringVariable::CShmStringVariable", "Unknown data type!");
-	}
-}
-
-CShmStringVariable::~CShmStringVariable(void)
-{
-}
-
-void CShmStringVariable::valRaw(QString &v)
-{
-}
-
-QString CShmStringVariable::val(void)
-{
-}
-
-void CShmStringVariable::setVal(const QString &val)
-{
-}
-
-unsigned long long CShmStringVariable::CheckUpdateShm(bool fLock)
-{
-	return 0;
-}
-
-
-void CShmStringVariable::Lock(void)
-{
-	::GfaIpcLockSHM(m_hShm);
-//	qDebug() << "CShmStringVariable::Lock";
-}
-
-void CShmStringVariable::Unlock(void)
-{
-//	qDebug() << "CShmStringVariable::Unlock";
-	::GfaIpcUnlockSHM(m_hShm);
-}
-
-void CShmStringVariable::emitChanged(bool fLock)
-{
-//    qDebug() << "CShmStringVariable: val changed!";
-	if(fLock)
-	    emit valChanged(val());
-	else
-	{
-	    QString v;
-	    valRaw(v);
-	    emit valChanged(v);
-	}
-}