Browse Source

Speicherlayout erweitert.

Rind 5 years ago
parent
commit
4b97f160c6

+ 99 - 99
Test/Test.pro.user

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 4.11.1, 2020-03-24T14:58:04. -->
+<!-- Written by QtCreator 4.11.1, 2020-04-01T23:25:04. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>
@@ -68,14 +68,14 @@
  <data>
   <variable>ProjectExplorer.Project.Target.0</variable>
   <valuemap type="QVariantMap">
-   <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="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Sitara 1</value>
+   <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Sitara 1</value>
+   <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{b0a415a1-ecbe-4123-8afc-05ffc0004131}</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">3</value>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
-    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/wrk/share/gfaipc/Test/Debug/Desktop_Qt_5_7_1_GCC_64bit</value>
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/wrk/share/gfaipc/Test/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>
@@ -123,7 +123,7 @@
     <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
    </valuemap>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
-    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/wrk/share/gfaipc/Test/Release/Desktop_Qt_5_7_1_GCC_64bit</value>
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/wrk/share/gfaipc/Test/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>
@@ -173,13 +173,47 @@
    <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>
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinux.CheckForFreeDiskSpaceStep</value>
+      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedFiles"/>
+      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedHosts"/>
+      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedRemotePaths"/>
+      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedSysroots"/>
+      <value type="QString" key="RemoteLinux.CheckForFreeDiskSpaceStep.PathToCheck">/</value>
+      <value type="qlonglong" key="RemoteLinux.CheckForFreeDiskSpaceStep.RequiredSpace">5242880</value>
+      <valuelist type="QVariantList" key="RemoteLinux.LastDeployedLocalTimes"/>
+      <valuelist type="QVariantList" key="RemoteLinux.LastDeployedRemoteTimes"/>
+     </valuemap>
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinux.KillAppStep</value>
+      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedFiles"/>
+      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedHosts"/>
+      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedRemotePaths"/>
+      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedSysroots"/>
+      <valuelist type="QVariantList" key="RemoteLinux.LastDeployedLocalTimes"/>
+      <valuelist type="QVariantList" key="RemoteLinux.LastDeployedRemoteTimes"/>
+     </valuemap>
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.2">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinux.DirectUploadStep</value>
+      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedFiles"/>
+      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedHosts"/>
+      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedRemotePaths"/>
+      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedSysroots"/>
+      <value type="bool" key="RemoteLinux.GenericDirectUploadStep.IgnoreMissingFiles">false</value>
+      <value type="bool" key="RemoteLinux.GenericDirectUploadStep.Incremental">false</value>
+      <valuelist type="QVariantList" key="RemoteLinux.LastDeployedLocalTimes"/>
+      <valuelist type="QVariantList" key="RemoteLinux.LastDeployedRemoteTimes"/>
+     </valuemap>
+     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">3</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.Id">ProjectExplorer.BuildSteps.Deploy</value>
     </valuemap>
     <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">DeployToGenericLinux</value>
    </valuemap>
    <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
@@ -241,21 +275,26 @@
      <value type="int">13</value>
      <value type="int">14</value>
     </valuelist>
-    <value type="int" key="PE.EnvironmentAspect.Base">2</value>
+    <value type="int" key="PE.EnvironmentAspect.Base">1</value>
     <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/wrk/share/gfaipc/Test/app1/app1.pro</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">app1 (auf Sitara 1)</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinuxRunConfiguration:/home/wrk/share/gfaipc/Test/app1/app1.pro</value>
     <value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/wrk/share/gfaipc/Test/app1/app1.pro</value>
+    <value type="int" key="RemoteLinux.EnvironmentAspect.Version">1</value>
+    <value type="QString" key="RemoteLinux.RunConfig.AlternateRemoteExecutable"></value>
+    <value type="bool" key="RemoteLinux.RunConfig.UseAlternateRemoteExecutable">false</value>
     <value type="QString" key="RunConfiguration.Arguments"></value>
     <value type="bool" key="RunConfiguration.Arguments.multi">false</value>
     <value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
     <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
     <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
-    <value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
     <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
     <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
-    <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
+    <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">false</value>
+    <value type="bool" key="RunConfiguration.UseX11Forwarding">false</value>
     <value type="QString" key="RunConfiguration.WorkingDirectory"></value>
-    <value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/wrk/share/gfaipc/Test/Debug/Desktop_Qt_5_7_1_GCC_64bit/app1</value>
+    <value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
+    <value type="QString" key="RunConfiguration.X11Forwarding">:0</value>
    </valuemap>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.1">
     <value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
@@ -315,21 +354,26 @@
      <value type="int">13</value>
      <value type="int">14</value>
     </valuelist>
-    <value type="int" key="PE.EnvironmentAspect.Base">2</value>
+    <value type="int" key="PE.EnvironmentAspect.Base">1</value>
     <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/wrk/share/gfaipc/Test/app2/app2.pro</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">app2 (auf Sitara 1)</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinuxRunConfiguration:/home/wrk/share/gfaipc/Test/app2/app2.pro</value>
     <value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/wrk/share/gfaipc/Test/app2/app2.pro</value>
+    <value type="int" key="RemoteLinux.EnvironmentAspect.Version">1</value>
+    <value type="QString" key="RemoteLinux.RunConfig.AlternateRemoteExecutable"></value>
+    <value type="bool" key="RemoteLinux.RunConfig.UseAlternateRemoteExecutable">false</value>
     <value type="QString" key="RunConfiguration.Arguments"></value>
     <value type="bool" key="RunConfiguration.Arguments.multi">false</value>
     <value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
     <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
     <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
-    <value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
     <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
     <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
     <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
+    <value type="bool" key="RunConfiguration.UseX11Forwarding">false</value>
     <value type="QString" key="RunConfiguration.WorkingDirectory"></value>
-    <value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/wrk/share/gfaipc/Test/Debug/Desktop_Qt_5_7_1_GCC_64bit/app2</value>
+    <value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
+    <value type="QString" key="RunConfiguration.X11Forwarding">:0</value>
    </valuemap>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.2">
     <value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
@@ -389,21 +433,26 @@
      <value type="int">13</value>
      <value type="int">14</value>
     </valuelist>
-    <value type="int" key="PE.EnvironmentAspect.Base">2</value>
+    <value type="int" key="PE.EnvironmentAspect.Base">1</value>
     <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/wrk/share/gfaipc/Test/app3/app3.pro</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">app3 (auf Sitara 1)</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinuxRunConfiguration:/home/wrk/share/gfaipc/Test/app3/app3.pro</value>
     <value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/wrk/share/gfaipc/Test/app3/app3.pro</value>
+    <value type="int" key="RemoteLinux.EnvironmentAspect.Version">1</value>
+    <value type="QString" key="RemoteLinux.RunConfig.AlternateRemoteExecutable"></value>
+    <value type="bool" key="RemoteLinux.RunConfig.UseAlternateRemoteExecutable">false</value>
     <value type="QString" key="RunConfiguration.Arguments"></value>
     <value type="bool" key="RunConfiguration.Arguments.multi">false</value>
     <value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
     <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
     <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
-    <value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
     <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
     <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
     <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
+    <value type="bool" key="RunConfiguration.UseX11Forwarding">false</value>
     <value type="QString" key="RunConfiguration.WorkingDirectory"></value>
-    <value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/wrk/share/gfaipc/Test/Debug/Desktop_Qt_5_7_1_GCC_64bit/app3</value>
+    <value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
+    <value type="QString" key="RunConfiguration.X11Forwarding">:0</value>
    </valuemap>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.3">
     <value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
@@ -463,21 +512,26 @@
      <value type="int">13</value>
      <value type="int">14</value>
     </valuelist>
-    <value type="int" key="PE.EnvironmentAspect.Base">2</value>
+    <value type="int" key="PE.EnvironmentAspect.Base">1</value>
     <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/wrk/share/gfaipc/Test/qmlApp/qmlApp.pro</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">qmlApp (auf Sitara 1)</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinuxRunConfiguration:/home/wrk/share/gfaipc/Test/qmlApp/qmlApp.pro</value>
     <value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/wrk/share/gfaipc/Test/qmlApp/qmlApp.pro</value>
+    <value type="int" key="RemoteLinux.EnvironmentAspect.Version">1</value>
+    <value type="QString" key="RemoteLinux.RunConfig.AlternateRemoteExecutable"></value>
+    <value type="bool" key="RemoteLinux.RunConfig.UseAlternateRemoteExecutable">false</value>
     <value type="QString" key="RunConfiguration.Arguments"></value>
     <value type="bool" key="RunConfiguration.Arguments.multi">false</value>
     <value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
     <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
     <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
-    <value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
     <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
     <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
     <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
+    <value type="bool" key="RunConfiguration.UseX11Forwarding">false</value>
     <value type="QString" key="RunConfiguration.WorkingDirectory"></value>
-    <value type="QString" key="RunConfiguration.WorkingDirectory.default">/home/wrk/share/gfaipc/Test/Debug/Desktop_Qt_5_7_1_GCC_64bit/qmlApp</value>
+    <value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
+    <value type="QString" key="RunConfiguration.X11Forwarding">:0</value>
    </valuemap>
    <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">4</value>
   </valuemap>
@@ -485,14 +539,14 @@
  <data>
   <variable>ProjectExplorer.Project.Target.1</variable>
   <valuemap type="QVariantMap">
-   <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Sitara 1</value>
-   <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Sitara 1</value>
-   <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{b0a415a1-ecbe-4123-8afc-05ffc0004131}</value>
+   <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">0</value>
    <value type="int" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
    <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">3</value>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
-    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/wrk/share/gfaipc/Test/Debug/Sitara_1</value>
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/wrk/share/gfaipc/Test/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>
@@ -540,7 +594,7 @@
     <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
    </valuemap>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
-    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/wrk/share/gfaipc/Test/Release/Sitara_1</value>
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/wrk/share/gfaipc/Test/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>
@@ -590,47 +644,13 @@
    <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">
-     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
-      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
-      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinux.CheckForFreeDiskSpaceStep</value>
-      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedFiles"/>
-      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedHosts"/>
-      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedRemotePaths"/>
-      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedSysroots"/>
-      <value type="QString" key="RemoteLinux.CheckForFreeDiskSpaceStep.PathToCheck">/</value>
-      <value type="qlonglong" key="RemoteLinux.CheckForFreeDiskSpaceStep.RequiredSpace">5242880</value>
-      <valuelist type="QVariantList" key="RemoteLinux.LastDeployedLocalTimes"/>
-      <valuelist type="QVariantList" key="RemoteLinux.LastDeployedRemoteTimes"/>
-     </valuemap>
-     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.1">
-      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
-      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinux.KillAppStep</value>
-      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedFiles"/>
-      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedHosts"/>
-      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedRemotePaths"/>
-      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedSysroots"/>
-      <valuelist type="QVariantList" key="RemoteLinux.LastDeployedLocalTimes"/>
-      <valuelist type="QVariantList" key="RemoteLinux.LastDeployedRemoteTimes"/>
-     </valuemap>
-     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.2">
-      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
-      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinux.DirectUploadStep</value>
-      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedFiles"/>
-      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedHosts"/>
-      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedRemotePaths"/>
-      <valuelist type="QVariantList" key="ProjectExplorer.RunConfiguration.LastDeployedSysroots"/>
-      <value type="bool" key="RemoteLinux.GenericDirectUploadStep.IgnoreMissingFiles">false</value>
-      <value type="bool" key="RemoteLinux.GenericDirectUploadStep.Incremental">false</value>
-      <valuelist type="QVariantList" key="RemoteLinux.LastDeployedLocalTimes"/>
-      <valuelist type="QVariantList" key="RemoteLinux.LastDeployedRemoteTimes"/>
-     </valuemap>
-     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">3</value>
+     <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.Id">ProjectExplorer.BuildSteps.Deploy</value>
     </valuemap>
     <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">DeployToGenericLinux</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
    </valuemap>
    <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
@@ -692,26 +712,21 @@
      <value type="int">13</value>
      <value type="int">14</value>
     </valuelist>
-    <value type="int" key="PE.EnvironmentAspect.Base">1</value>
+    <value type="int" key="PE.EnvironmentAspect.Base">2</value>
     <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">app1 (auf Sitara 1)</value>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinuxRunConfiguration:/home/wrk/share/gfaipc/Test/app1/app1.pro</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/wrk/share/gfaipc/Test/app1/app1.pro</value>
     <value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/wrk/share/gfaipc/Test/app1/app1.pro</value>
-    <value type="int" key="RemoteLinux.EnvironmentAspect.Version">1</value>
-    <value type="QString" key="RemoteLinux.RunConfig.AlternateRemoteExecutable"></value>
-    <value type="bool" key="RemoteLinux.RunConfig.UseAlternateRemoteExecutable">false</value>
     <value type="QString" key="RunConfiguration.Arguments"></value>
     <value type="bool" key="RunConfiguration.Arguments.multi">false</value>
     <value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
     <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
     <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
+    <value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
     <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
     <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
-    <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">false</value>
-    <value type="bool" key="RunConfiguration.UseX11Forwarding">false</value>
+    <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
     <value type="QString" key="RunConfiguration.WorkingDirectory"></value>
     <value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
-    <value type="QString" key="RunConfiguration.X11Forwarding">:0</value>
    </valuemap>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.1">
     <value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
@@ -771,26 +786,21 @@
      <value type="int">13</value>
      <value type="int">14</value>
     </valuelist>
-    <value type="int" key="PE.EnvironmentAspect.Base">1</value>
+    <value type="int" key="PE.EnvironmentAspect.Base">2</value>
     <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">app2 (auf Sitara 1)</value>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinuxRunConfiguration:/home/wrk/share/gfaipc/Test/app2/app2.pro</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/wrk/share/gfaipc/Test/app2/app2.pro</value>
     <value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/wrk/share/gfaipc/Test/app2/app2.pro</value>
-    <value type="int" key="RemoteLinux.EnvironmentAspect.Version">1</value>
-    <value type="QString" key="RemoteLinux.RunConfig.AlternateRemoteExecutable"></value>
-    <value type="bool" key="RemoteLinux.RunConfig.UseAlternateRemoteExecutable">false</value>
     <value type="QString" key="RunConfiguration.Arguments"></value>
     <value type="bool" key="RunConfiguration.Arguments.multi">false</value>
     <value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
     <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
     <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
+    <value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
     <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
     <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
     <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
-    <value type="bool" key="RunConfiguration.UseX11Forwarding">false</value>
     <value type="QString" key="RunConfiguration.WorkingDirectory"></value>
     <value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
-    <value type="QString" key="RunConfiguration.X11Forwarding">:0</value>
    </valuemap>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.2">
     <value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
@@ -850,26 +860,21 @@
      <value type="int">13</value>
      <value type="int">14</value>
     </valuelist>
-    <value type="int" key="PE.EnvironmentAspect.Base">1</value>
+    <value type="int" key="PE.EnvironmentAspect.Base">2</value>
     <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">app3 (auf Sitara 1)</value>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinuxRunConfiguration:/home/wrk/share/gfaipc/Test/app3/app3.pro</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/wrk/share/gfaipc/Test/app3/app3.pro</value>
     <value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/wrk/share/gfaipc/Test/app3/app3.pro</value>
-    <value type="int" key="RemoteLinux.EnvironmentAspect.Version">1</value>
-    <value type="QString" key="RemoteLinux.RunConfig.AlternateRemoteExecutable"></value>
-    <value type="bool" key="RemoteLinux.RunConfig.UseAlternateRemoteExecutable">false</value>
     <value type="QString" key="RunConfiguration.Arguments"></value>
     <value type="bool" key="RunConfiguration.Arguments.multi">false</value>
     <value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
     <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
     <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
+    <value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
     <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
     <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
     <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
-    <value type="bool" key="RunConfiguration.UseX11Forwarding">false</value>
     <value type="QString" key="RunConfiguration.WorkingDirectory"></value>
     <value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
-    <value type="QString" key="RunConfiguration.X11Forwarding">:0</value>
    </valuemap>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.3">
     <value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
@@ -929,26 +934,21 @@
      <value type="int">13</value>
      <value type="int">14</value>
     </valuelist>
-    <value type="int" key="PE.EnvironmentAspect.Base">1</value>
+    <value type="int" key="PE.EnvironmentAspect.Base">2</value>
     <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">qmlApp (auf Sitara 1)</value>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinuxRunConfiguration:/home/wrk/share/gfaipc/Test/qmlApp/qmlApp.pro</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.Qt4RunConfiguration:/home/wrk/share/gfaipc/Test/qmlApp/qmlApp.pro</value>
     <value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey">/home/wrk/share/gfaipc/Test/qmlApp/qmlApp.pro</value>
-    <value type="int" key="RemoteLinux.EnvironmentAspect.Version">1</value>
-    <value type="QString" key="RemoteLinux.RunConfig.AlternateRemoteExecutable"></value>
-    <value type="bool" key="RemoteLinux.RunConfig.UseAlternateRemoteExecutable">false</value>
     <value type="QString" key="RunConfiguration.Arguments"></value>
     <value type="bool" key="RunConfiguration.Arguments.multi">false</value>
     <value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
     <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
     <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
+    <value type="bool" key="RunConfiguration.UseLibrarySearchPath">true</value>
     <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
     <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
     <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
-    <value type="bool" key="RunConfiguration.UseX11Forwarding">false</value>
     <value type="QString" key="RunConfiguration.WorkingDirectory"></value>
     <value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
-    <value type="QString" key="RunConfiguration.X11Forwarding">:0</value>
    </valuemap>
    <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">4</value>
   </valuemap>

+ 24 - 16
Test/main.cpp

@@ -18,6 +18,7 @@
 #define _CTRL_MSG_HANG			0x08
 #define _CTRL_MSG_ALLOC			0x10
 #define _CTRL_MSG_FREE			0x20
+#define _CTRL_MSG_ZOMBIE		0x40
 #define _HANG_LOOPS				1000000000
 #define _NORMAL_LOOPS			100000
 #define _MEM_WASTE_SIZE			524288
@@ -29,23 +30,13 @@
 static volatile bool g_fRun		= false;
 static volatile bool g_fPause	= false;
 static volatile bool g_fHang	= false;
+static volatile bool g_fZombie	= false;
 static volatile bool g_fAlloc	= false;
 static volatile bool g_fFree	= false;
 static volatile bool g_fSysInfoRunning	= false;
 
 /////////////////////////////////////////////////////////////////////////////
 
-static const char *g_pszStateNames[] =
-{
-	"Not running",
-	"Initializing",
-	"Running",
-	"Paused",
-	"Hanging",
-	"Terminating",
-	"Invalid"
-};
-
 static std::vector<void*> g_vP;
 
 /////////////////////////////////////////////////////////////////////////////
@@ -55,6 +46,7 @@ static void _SigHandler(int sig)
 	UNUSED(sig);
 	g_fPause = false;
 	g_fRun = false;
+	g_fZombie = false;
 }
 
 /////////////////////////////////////////////////////////////////////////////
@@ -85,7 +77,7 @@ static void _ProcessCtrlMessages(HAPPCTRL hAC, HAPPINFO hAI)
 			{
 				g_fPause = true;
 				::GfaIpcAppCtrlSetState(hAC, GIAS_Paused);
-				TRACE("%-8s: State: %s\n", "Me", g_pszStateNames[GIAS_Paused]);
+				TRACE("%-8s: State: %s\n", "Me", ::GfaIpcAppCtrlGetStateText(GIAS_Paused));
 			}
 			break;
 		case GFA_APPCTRL_CTRLMSG_RESUME:
@@ -93,7 +85,7 @@ static void _ProcessCtrlMessages(HAPPCTRL hAC, HAPPINFO hAI)
 			{
 				g_fPause = false;
 				::GfaIpcAppCtrlSetState(hAC, GIAS_Running);
-				TRACE("%-8s: State: %s\n", "Me", g_pszStateNames[GIAS_Running]);
+				TRACE("%-8s: State: %s\n", "Me", ::GfaIpcAppCtrlGetStateText(GIAS_Running));
 			}
 			break;
 		case _CTRL_MSG_HANG:
@@ -105,6 +97,10 @@ static void _ProcessCtrlMessages(HAPPCTRL hAC, HAPPINFO hAI)
 		case _CTRL_MSG_FREE:
 			g_fFree = true;
 			break;
+		case _CTRL_MSG_ZOMBIE:
+			g_fRun = false;
+			g_fZombie = true;
+			break;
 		default:
 			break;
 		}
@@ -122,7 +118,7 @@ static void _ProcessStateEvents(HAPPCTRL hAC, HAPPINFO hAI)
 	{
 		GfaIpcAppStates state = ::GfaIpcAppCtrlGetState(hAC, nAppIdSrc);
 		GfaIpcAppCtrlGetDisplayName(hAC, nAppIdSrc, szDispName, sizeof(szDispName));
-		TRACE("%-8s: State: %s\n", szDispName, g_pszStateNames[state]);
+		TRACE("%-8s: State: %s\n", szDispName, ::GfaIpcAppCtrlGetStateText(state));
 
 		switch(nAppIdSrc)
 		{
@@ -133,7 +129,7 @@ static void _ProcessStateEvents(HAPPCTRL hAC, HAPPINFO hAI)
 				{
 					g_fPause = false;
 					::GfaIpcAppCtrlSetState(hAC, GIAS_Running);
-					TRACE("%-8s: State: %s\n", "Me", g_pszStateNames[GIAS_Running]);
+					TRACE("%-8s: State: %s\n", "Me", ::GfaIpcAppCtrlGetStateText(GIAS_Running));
 				}
 			}
 			else
@@ -142,7 +138,7 @@ static void _ProcessStateEvents(HAPPCTRL hAC, HAPPINFO hAI)
 				{
 					g_fPause = true;
 					::GfaIpcAppCtrlSetState(hAC, GIAS_Paused);
-					TRACE("%-8s: State: %s\n", "Me", g_pszStateNames[GIAS_Paused]);
+					TRACE("%-8s: State: %s\n", "Me", ::GfaIpcAppCtrlGetStateText(GIAS_Paused));
 				}
 			}
 			break;
@@ -309,6 +305,8 @@ int main(void)
 
 	do
 	{
+		g_fZombie = true;
+
 		if(!(hAC = ::GfaIpcAppCtrlAcquire(_APPID_0, _APPNAME_0, _CYCLE_INTV * 1000, _CYCLE_INTV * 3000)))
 			break;
 
@@ -328,6 +326,7 @@ int main(void)
 		TRACE("My PID:   %d\n", getpid());
 		TRACE("My Cycle: %d\n", _CYCLE_INTV);
 
+		g_fZombie = false;
 		g_fRun = true;
 		::GfaIpcAppCtrlSetState(hAC, GIAS_Running);
 	}
@@ -385,10 +384,19 @@ int main(void)
 	/////////////////////////////////////////////////////////////////////////
 	/////////////////////////////////////////////////////////////////////////
 	// terminate
+	
+	if(g_fZombie)
+	{
+		if(hAC)
+			::GfaIpcAppCtrlSetState(hAC, GIAS_Zombie);
+		TRACE("%-8s: State: %s\n", "Me", ::GfaIpcAppCtrlGetStateText(GIAS_Zombie));
+		pause();
+	}
 
 	if(hAC)
 	{
 		::GfaIpcAppCtrlSetState(hAC, GIAS_Terminating);
+		TRACE("%-8s: State: %s\n", "Me", ::GfaIpcAppCtrlGetStateText(GIAS_Terminating));
 		::GfaIpcAppCtrlRelease(hAC);
 	}
 

+ 1212 - 0
Test/qmlApp/apps.qml

@@ -0,0 +1,1212 @@
+import QtQuick 2.7
+import QtQuick.Window 2.2
+import QtQuick.Controls 1.4
+import com.gfa.ipc.appctrl 1.0
+
+Window {
+    visible: true
+    width: 800
+    height: 480
+    title: qsTr("GfA App Control")
+    
+    function stateColor(state)
+    {
+    	switch(state)
+    	{
+    	case QGfaAppCtrl.STATE_RUNNING:
+    		return "lightgreen";
+    	case QGfaAppCtrl.STATE_PAUSED:
+    		return "lightgrey";
+    	case QGfaAppCtrl.STATE_HANGING:
+    		return "orange";
+    	case QGfaAppCtrl.STATE_ZOMBIE:
+    		return "red";
+    	default:
+    		return "white";
+    	}
+    }
+    
+    function sec2HMS(sec)
+    {
+    	var h = parseInt(sec / 3600);
+    	sec -= h * 3600;
+    	var m = parseInt(sec / 60);
+    	sec -= m * 60;
+    	return "" + h + (m < 10 ? ":0" : ":") + m + (sec < 10 ? ":0" : ":") + sec;
+    }
+
+    Rectangle {
+        x: 10
+        y: 20
+        width: 120
+        height: 460
+
+		Rectangle {
+	        x: 0
+	        y: 40
+	        width: parent.width
+	        height: 30
+		    Text {
+		        font.pixelSize: 14
+		        font.italic: true
+				anchors.verticalCenter: parent.verticalCenter
+	            anchors.left: parent.left
+		        text: "State:"
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 70
+	        width: parent.width
+	        height: 30
+		    Text {
+		        font.pixelSize: 14
+		        font.italic: true
+				anchors.verticalCenter: parent.verticalCenter
+	            anchors.left: parent.left
+		        text: "Cyc. cur. μs:"
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 100
+	        width: parent.width
+	        height: 30
+		    Text {
+		        font.pixelSize: 14
+		        font.italic: true
+				anchors.verticalCenter: parent.verticalCenter
+	            anchors.left: parent.left
+		        text: "Wkt. max. μs:"
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 130
+	        width: parent.width
+	        height: 30
+		    Text {
+		        font.pixelSize: 14
+		        font.italic: true
+				anchors.verticalCenter: parent.verticalCenter
+	            anchors.left: parent.left
+		        text: "Wkt. cur. μs:"
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 160
+	        width: parent.width
+	        height: 30
+		    Text {
+		        font.pixelSize: 14
+		        font.italic: true
+				anchors.verticalCenter: parent.verticalCenter
+	            anchors.left: parent.left
+		        text: "CPU Time sec.:"
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 190
+	        width: parent.width
+	        height: 30
+		    Text {
+		        font.pixelSize: 14
+		        font.italic: true
+				anchors.verticalCenter: parent.verticalCenter
+	            anchors.left: parent.left
+		        text: "CPU avg. %:"
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 220
+	        width: parent.width
+	        height: 30
+		    Text {
+		        font.pixelSize: 14
+		        font.italic: true
+				anchors.verticalCenter: parent.verticalCenter
+	            anchors.left: parent.left
+		        text: "CPU cur. %:"
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 250
+	        width: parent.width
+	        height: 30
+		    Text {
+		        font.pixelSize: 14
+		        font.italic: true
+				anchors.verticalCenter: parent.verticalCenter
+	            anchors.left: parent.left
+		        text: "VM RSS KiB:"
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 280
+	        width: parent.width
+	        height: 30
+		    Text {
+		        font.pixelSize: 14
+		        font.italic: true
+				anchors.verticalCenter: parent.verticalCenter
+	            anchors.left: parent.left
+		        text: "VM Size KiB:"
+		    }
+		}
+
+	    Rectangle {
+	        x: 0
+	        y: 330
+	        height: 30
+	        width: parent.width
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: qGfaAppCtrl.minPass
+		    }
+	    }
+
+	    Rectangle {
+	        x: 0
+	        y: 370
+	        height: 30
+	        width: parent.width
+	        border.width: 1
+			border.color: "black"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: qGfaAppCtrl.avgPass
+		    }
+	    }
+
+	    Rectangle {
+	        x: 0
+	        y: 410
+	        height: 30
+	        width: parent.width
+			Button {
+	            text: "Exit"
+	            anchors.fill: parent
+	            onClicked: Qt.quit()
+			}
+	    }
+	}
+
+	/////////////////////////////////////////////////////////////////////////////////////////////////
+
+    Rectangle {
+        x: 140
+        y: 20
+        width: 120
+        height: 460
+
+		property var appInfo: qGfaAppCtrl.appInfo[QGfaAppCtrl.APP_INDEX_REMANENT]
+
+		Rectangle {
+	        x: 0
+	        y: 0
+	        width: parent.width
+	        height: 30
+		    Text {
+		        font.pixelSize: 18
+		        font.bold: true
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.name
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 40
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+	        color: stateColor(parent.appInfo.state)
+		    Text {
+		        font.pixelSize: 14
+		        font.bold: true
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.stateText
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 70
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.cycCur
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 100
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.wktMax
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 130
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "black"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.wktCur
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 160
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.cpuTime.toFixed(1)
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 190
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.cpuAvg.toFixed(2)
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 220
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.cpuCur.toFixed(2)
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 250
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.vmRSS
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 280
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.vmSize
+		    }
+		}
+
+	    Rectangle {
+	        x: 0
+	        y: 330
+	        height: 30
+	        width: parent.width
+			Button {
+	            text: "Pause"
+	            anchors.fill: parent
+	            onClicked: parent.parent.appInfo.pause()
+	            enabled: (parent.parent.appInfo.state === QGfaAppCtrl.STATE_RUNNING)
+			}
+	    }
+
+	    Rectangle {
+	        x: 0
+	        y: 370
+	        height: 30
+	        width: parent.width
+			Button {
+	            text: "Resume"
+	            anchors.fill: parent
+	            onClicked: parent.parent.appInfo.resume()
+	            enabled: (parent.parent.appInfo.state === QGfaAppCtrl.STATE_PAUSED)
+			}
+	    }
+
+	    Rectangle {
+	        x: 0
+	        y: 410
+	        height: 30
+	        width: parent.width
+			Button {
+	            text: "Stop"
+	            anchors.fill: parent
+	            onClicked: parent.parent.appInfo.stop()
+                enabled: (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_NOT_RUNNING) && (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_ZOMBIE)
+			}
+	    }
+	}
+
+	/////////////////////////////////////////////////////////////////////////////////////////////////
+
+    Rectangle {
+        x: 270
+        y: 20
+        width: 120
+        height: 460
+
+		property var appInfo: qGfaAppCtrl.appInfo[QGfaAppCtrl.APP_INDEX_MQTTCL]
+
+		Rectangle {
+	        x: 0
+	        y: 0
+	        width: parent.width
+	        height: 30
+		    Text {
+		        font.pixelSize: 18
+		        font.bold: true
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.name
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 40
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+	        color: stateColor(parent.appInfo.state)
+		    Text {
+		        font.pixelSize: 14
+		        font.bold: true
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.stateText
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 70
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.cycCur
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 100
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.wktMax
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 130
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "black"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.wktCur
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 160
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.cpuTime.toFixed(1)
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 190
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.cpuAvg.toFixed(2)
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 220
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.cpuCur.toFixed(2)
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 250
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.vmRSS
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 280
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.vmSize
+		    }
+		}
+
+	    Rectangle {
+	        x: 0
+	        y: 330
+	        height: 30
+	        width: parent.width
+			Button {
+	            text: "Pause"
+	            anchors.fill: parent
+	            onClicked: parent.parent.appInfo.pause()
+	            enabled: (parent.parent.appInfo.state === QGfaAppCtrl.STATE_RUNNING)
+			}
+	    }
+
+	    Rectangle {
+	        x: 0
+	        y: 370
+	        height: 30
+	        width: parent.width
+			Button {
+	            text: "Resume"
+	            anchors.fill: parent
+	            onClicked: parent.parent.appInfo.resume()
+	            enabled: (parent.parent.appInfo.state === QGfaAppCtrl.STATE_PAUSED)
+			}
+	    }
+
+	    Rectangle {
+	        x: 0
+	        y: 410
+	        height: 30
+	        width: parent.width
+			Button {
+	            text: "Stop"
+	            anchors.fill: parent
+	            onClicked: parent.parent.appInfo.stop()
+                enabled: (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_NOT_RUNNING) && (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_ZOMBIE)
+			}
+	    }
+	}
+
+	/////////////////////////////////////////////////////////////////////////////////////////////////
+
+    Rectangle {
+        x: 400
+        y: 20
+        width: 120
+        height: 460
+
+		property var appInfo: qGfaAppCtrl.appInfo[QGfaAppCtrl.APP_INDEX_REST]
+
+		Rectangle {
+	        x: 0
+	        y: 0
+	        width: parent.width
+	        height: 30
+		    Text {
+		        font.pixelSize: 18
+		        font.bold: true
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.name
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 40
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+	        color: stateColor(parent.appInfo.state)
+		    Text {
+		        font.pixelSize: 14
+		        font.bold: true
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.stateText
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 70
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.cycCur
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 100
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.wktMax
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 130
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "black"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.wktCur
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 160
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.cpuTime.toFixed(1)
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 190
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.cpuAvg.toFixed(2)
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 220
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.cpuCur.toFixed(2)
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 250
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.vmRSS
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 280
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.vmSize
+		    }
+		}
+
+	    Rectangle {
+	        x: 0
+	        y: 330
+	        height: 30
+	        width: parent.width
+			Button {
+	            text: "Pause"
+	            anchors.fill: parent
+	            onClicked: parent.parent.appInfo.pause()
+	            enabled: (parent.parent.appInfo.state === QGfaAppCtrl.STATE_RUNNING)
+			}
+	    }
+
+	    Rectangle {
+	        x: 0
+	        y: 370
+	        height: 30
+	        width: parent.width
+			Button {
+	            text: "Resume"
+	            anchors.fill: parent
+	            onClicked: parent.parent.appInfo.resume()
+	            enabled: (parent.parent.appInfo.state === QGfaAppCtrl.STATE_PAUSED)
+			}
+	    }
+
+	    Rectangle {
+	        x: 0
+	        y: 410
+	        height: 30
+	        width: parent.width
+			Button {
+	            text: "Stop"
+	            anchors.fill: parent
+	            onClicked: parent.parent.appInfo.stop()
+                enabled: (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_NOT_RUNNING) && (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_ZOMBIE)
+			}
+	    }
+	}
+
+	/////////////////////////////////////////////////////////////////////////////////////////////////
+
+    Rectangle {
+        x: 530
+        y: 20
+        width: 120
+        height: 460
+
+		property var appInfo: qGfaAppCtrl.appInfo[QGfaAppCtrl.APP_INDEX_DATALOGGER]
+
+		Rectangle {
+	        x: 0
+	        y: 0
+	        width: parent.width
+	        height: 30
+		    Text {
+		        font.pixelSize: 18
+		        font.bold: true
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.name
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 40
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+	        color: stateColor(parent.appInfo.state)
+		    Text {
+		        font.pixelSize: 14
+		        font.bold: true
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.stateText
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 70
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.cycCur
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 100
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.wktMax
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 130
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "black"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.wktCur
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 160
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.cpuTime.toFixed(1)
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 190
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.cpuAvg.toFixed(2)
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 220
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.cpuCur.toFixed(2)
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 250
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.vmRSS
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 280
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.vmSize
+		    }
+		}
+
+	    Rectangle {
+	        x: 0
+	        y: 330
+	        height: 30
+	        width: parent.width
+			Button {
+	            text: "Pause"
+	            anchors.fill: parent
+	            onClicked: parent.parent.appInfo.pause()
+	            enabled: (parent.parent.appInfo.state === QGfaAppCtrl.STATE_RUNNING)
+			}
+	    }
+
+	    Rectangle {
+	        x: 0
+	        y: 370
+	        height: 30
+	        width: parent.width
+			Button {
+	            text: "Resume"
+	            anchors.fill: parent
+	            onClicked: parent.parent.appInfo.resume()
+	            enabled: (parent.parent.appInfo.state === QGfaAppCtrl.STATE_PAUSED)
+			}
+	    }
+
+	    Rectangle {
+	        x: 0
+	        y: 410
+	        height: 30
+	        width: parent.width
+			Button {
+	            text: "Stop"
+	            anchors.fill: parent
+	            onClicked: parent.parent.appInfo.stop()
+                enabled: (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_NOT_RUNNING) && (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_ZOMBIE)
+			}
+	    }
+	}
+
+	/////////////////////////////////////////////////////////////////////////////////////////////////
+
+    Rectangle {
+        x: 660
+        y: 20
+        width: 120
+        height: 460
+
+		property var appInfo: qGfaAppCtrl.appInfo[QGfaAppCtrl.APP_INDEX_SYSINFO]
+
+		Rectangle {
+	        x: 0
+	        y: 0
+	        width: parent.width
+	        height: 30
+		    Text {
+		        font.pixelSize: 18
+		        font.bold: true
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.name
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 40
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+	        color: stateColor(parent.appInfo.state)
+		    Text {
+		        font.pixelSize: 14
+		        font.bold: true
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.stateText
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 70
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.cycCur
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 100
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.wktMax
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 130
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "black"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.wktCur
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 160
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.cpuTime.toFixed(1)
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 190
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.cpuAvg.toFixed(2)
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 220
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.cpuCur.toFixed(2)
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 250
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.vmRSS
+		    }
+		}
+
+		Rectangle {
+	        x: 0
+	        y: 280
+	        width: parent.width
+	        height: 30
+	        border.width: 1
+			border.color: "lightgrey"
+	        radius: 5
+		    Text {
+		        font.pixelSize: 14
+	            anchors.centerIn: parent
+		        text: parent.parent.appInfo.vmSize
+		    }
+		}
+
+	    Rectangle {
+	        x: 0
+	        y: 330
+	        height: 30
+	        width: parent.width
+			Button {
+	            text: "Pause"
+	            anchors.fill: parent
+	            onClicked: parent.parent.appInfo.pause()
+	            enabled: (parent.parent.appInfo.state === QGfaAppCtrl.STATE_RUNNING)
+			}
+	    }
+
+	    Rectangle {
+	        x: 0
+	        y: 370
+	        height: 30
+	        width: parent.width
+			Button {
+	            text: "Resume"
+	            anchors.fill: parent
+	            onClicked: parent.parent.appInfo.resume()
+	            enabled: (parent.parent.appInfo.state === QGfaAppCtrl.STATE_PAUSED)
+			}
+	    }
+
+	    Rectangle {
+	        x: 0
+	        y: 410
+	        height: 30
+	        width: parent.width
+			Button {
+	            text: "Stop"
+	            anchors.fill: parent
+	            onClicked: parent.parent.appInfo.stop()
+                enabled: (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_NOT_RUNNING) && (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_ZOMBIE)
+			}
+	    }
+	}
+}

+ 21 - 7
Test/qmlApp/dev.qml

@@ -3,6 +3,26 @@ import QtQuick.Window 2.2
 import QtQuick.Controls 1.4
 import com.gfa.ipc.appctrl 1.0
 
+/*
+	Roles:
+
+	DiskName
+	DiskDevNode
+	DiskDevType
+	DiskVendorName
+	DiskVendorID
+	DiskProductID
+	PartFsLabel
+	PartFsType
+	PartFsVersion
+	PartDevNode
+	PartMountPoint
+	PartSize
+	PartFsSize
+	PartFsFree
+	PartFsUsed
+*/
+
 Window {
     visible: true
     title: qsTr("GfA Storage Device Map")
@@ -25,7 +45,7 @@ Window {
 		anchors.fill: parent
 
 		TableViewColumn {
-			role: "DiskBusType"
+			role: "DiskDevType"
 			width: 32
 			delegate:imageDelegate
 		}
@@ -42,12 +62,6 @@ Window {
 			role: "PartFsLabel"
 		}
 
-/*		TableViewColumn {
-			width: 60
-			title: "Type"
-			role: "DiskBusType"
-		}*/
-
 		TableViewColumn {
 			width: 80
 			title: "Size"

+ 2 - 2
Test/qmlApp/main.cpp

@@ -14,8 +14,8 @@ int main(int argc, char *argv[])
     QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
     QGuiApplication app(argc, argv);
     QQmlApplicationEngine engine;
-//    const QUrl url(QStringLiteral("qrc:/main.qml"));
-    const QUrl url(QStringLiteral("qrc:/dev.qml"));
+    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))
     {

+ 3 - 1204
Test/qmlApp/main.qml

@@ -3,1208 +3,7 @@ import QtQuick.Window 2.2
 import QtQuick.Controls 1.4
 import com.gfa.ipc.appctrl 1.0
 
-Window {
-    visible: true
-    width: 800
-    height: 480
-    title: qsTr("GfA App Control")
-    
-    function stateColor(state)
-    {
-    	switch(state)
-    	{
-    	case QGfaAppCtrl.STATE_RUNNING:
-    		return "lightgreen";
-    	case QGfaAppCtrl.STATE_PAUSED:
-    		return "lightgrey";
-    	case QGfaAppCtrl.STATE_HANGING:
-    		return "red";
-    	default:
-    		return "white";
-    	}
-    }
-    
-    function sec2HMS(sec)
-    {
-    	var h = parseInt(sec / 3600);
-    	sec -= h * 3600;
-    	var m = parseInt(sec / 60);
-    	sec -= m * 60;
-    	return "" + h + (m < 10 ? ":0" : ":") + m + (sec < 10 ? ":0" : ":") + sec;
-    }
-
-    Rectangle {
-        x: 10
-        y: 20
-        width: 120
-        height: 460
-
-		Rectangle {
-	        x: 0
-	        y: 40
-	        width: parent.width
-	        height: 30
-		    Text {
-		        font.pixelSize: 14
-		        font.italic: true
-				anchors.verticalCenter: parent.verticalCenter
-	            anchors.left: parent.left
-		        text: "State:"
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 70
-	        width: parent.width
-	        height: 30
-		    Text {
-		        font.pixelSize: 14
-		        font.italic: true
-				anchors.verticalCenter: parent.verticalCenter
-	            anchors.left: parent.left
-		        text: "Cyc. cur. μs:"
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 100
-	        width: parent.width
-	        height: 30
-		    Text {
-		        font.pixelSize: 14
-		        font.italic: true
-				anchors.verticalCenter: parent.verticalCenter
-	            anchors.left: parent.left
-		        text: "Wkt. max. μs:"
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 130
-	        width: parent.width
-	        height: 30
-		    Text {
-		        font.pixelSize: 14
-		        font.italic: true
-				anchors.verticalCenter: parent.verticalCenter
-	            anchors.left: parent.left
-		        text: "Wkt. cur. μs:"
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 160
-	        width: parent.width
-	        height: 30
-		    Text {
-		        font.pixelSize: 14
-		        font.italic: true
-				anchors.verticalCenter: parent.verticalCenter
-	            anchors.left: parent.left
-		        text: "CPU Time sec.:"
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 190
-	        width: parent.width
-	        height: 30
-		    Text {
-		        font.pixelSize: 14
-		        font.italic: true
-				anchors.verticalCenter: parent.verticalCenter
-	            anchors.left: parent.left
-		        text: "CPU avg. %:"
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 220
-	        width: parent.width
-	        height: 30
-		    Text {
-		        font.pixelSize: 14
-		        font.italic: true
-				anchors.verticalCenter: parent.verticalCenter
-	            anchors.left: parent.left
-		        text: "CPU cur. %:"
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 250
-	        width: parent.width
-	        height: 30
-		    Text {
-		        font.pixelSize: 14
-		        font.italic: true
-				anchors.verticalCenter: parent.verticalCenter
-	            anchors.left: parent.left
-		        text: "VM RSS KiB:"
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 280
-	        width: parent.width
-	        height: 30
-		    Text {
-		        font.pixelSize: 14
-		        font.italic: true
-				anchors.verticalCenter: parent.verticalCenter
-	            anchors.left: parent.left
-		        text: "VM Size KiB:"
-		    }
-		}
-
-	    Rectangle {
-	        x: 0
-	        y: 330
-	        height: 30
-	        width: parent.width
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: qGfaAppCtrl.minPass
-		    }
-	    }
-
-	    Rectangle {
-	        x: 0
-	        y: 370
-	        height: 30
-	        width: parent.width
-	        border.width: 1
-			border.color: "black"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: qGfaAppCtrl.avgPass
-		    }
-	    }
-
-	    Rectangle {
-	        x: 0
-	        y: 410
-	        height: 30
-	        width: parent.width
-			Button {
-	            text: "Exit"
-	            anchors.fill: parent
-	            onClicked: Qt.quit()
-			}
-	    }
-	}
-
-	/////////////////////////////////////////////////////////////////////////////////////////////////
-
-    Rectangle {
-        x: 140
-        y: 20
-        width: 120
-        height: 460
-
-		property var appInfo: qGfaAppCtrl.appInfo[QGfaAppCtrl.APP_INDEX_REMANENT]
-
-		Rectangle {
-	        x: 0
-	        y: 0
-	        width: parent.width
-	        height: 30
-		    Text {
-		        font.pixelSize: 18
-		        font.bold: true
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.name
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 40
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-	        color: stateColor(parent.appInfo.state)
-		    Text {
-		        font.pixelSize: 14
-		        font.bold: true
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.stateText
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 70
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.cycCur
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 100
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.wktMax
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 130
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "black"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.wktCur
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 160
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.cpuTime.toFixed(1)
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 190
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.cpuAvg.toFixed(2)
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 220
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.cpuCur.toFixed(2)
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 250
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.vmRSS
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 280
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.vmSize
-		    }
-		}
-
-	    Rectangle {
-	        x: 0
-	        y: 330
-	        height: 30
-	        width: parent.width
-			Button {
-	            text: "Pause"
-	            anchors.fill: parent
-	            onClicked: parent.parent.appInfo.pause()
-	            enabled: (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_NOT_RUNNING) && (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_PAUSED)
-			}
-	    }
-
-	    Rectangle {
-	        x: 0
-	        y: 370
-	        height: 30
-	        width: parent.width
-			Button {
-	            text: "Resume"
-	            anchors.fill: parent
-	            onClicked: parent.parent.appInfo.resume()
-	            enabled: (parent.parent.appInfo.state === QGfaAppCtrl.STATE_PAUSED)
-			}
-	    }
-
-	    Rectangle {
-	        x: 0
-	        y: 410
-	        height: 30
-	        width: parent.width
-			Button {
-	            text: "Stop"
-	            anchors.fill: parent
-	            onClicked: parent.parent.appInfo.stop()
-                enabled: (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_NOT_RUNNING)
-			}
-	    }
-	}
-
-	/////////////////////////////////////////////////////////////////////////////////////////////////
-
-    Rectangle {
-        x: 270
-        y: 20
-        width: 120
-        height: 460
-
-		property var appInfo: qGfaAppCtrl.appInfo[QGfaAppCtrl.APP_INDEX_MQTTCL]
-
-		Rectangle {
-	        x: 0
-	        y: 0
-	        width: parent.width
-	        height: 30
-		    Text {
-		        font.pixelSize: 18
-		        font.bold: true
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.name
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 40
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-	        color: stateColor(parent.appInfo.state)
-		    Text {
-		        font.pixelSize: 14
-		        font.bold: true
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.stateText
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 70
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.cycCur
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 100
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.wktMax
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 130
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "black"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.wktCur
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 160
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.cpuTime.toFixed(1)
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 190
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.cpuAvg.toFixed(2)
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 220
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.cpuCur.toFixed(2)
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 250
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.vmRSS
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 280
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.vmSize
-		    }
-		}
-
-	    Rectangle {
-	        x: 0
-	        y: 330
-	        height: 30
-	        width: parent.width
-			Button {
-	            text: "Pause"
-	            anchors.fill: parent
-	            onClicked: parent.parent.appInfo.pause()
-	            enabled: (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_NOT_RUNNING) && (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_PAUSED)
-			}
-	    }
-
-	    Rectangle {
-	        x: 0
-	        y: 370
-	        height: 30
-	        width: parent.width
-			Button {
-	            text: "Resume"
-	            anchors.fill: parent
-	            onClicked: parent.parent.appInfo.resume()
-	            enabled: (parent.parent.appInfo.state === QGfaAppCtrl.STATE_PAUSED)
-			}
-	    }
-
-	    Rectangle {
-	        x: 0
-	        y: 410
-	        height: 30
-	        width: parent.width
-			Button {
-	            text: "Stop"
-	            anchors.fill: parent
-	            onClicked: parent.parent.appInfo.stop()
-                enabled: (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_NOT_RUNNING)
-			}
-	    }
-	}
-
-	/////////////////////////////////////////////////////////////////////////////////////////////////
-
-    Rectangle {
-        x: 400
-        y: 20
-        width: 120
-        height: 460
-
-		property var appInfo: qGfaAppCtrl.appInfo[QGfaAppCtrl.APP_INDEX_REST]
-
-		Rectangle {
-	        x: 0
-	        y: 0
-	        width: parent.width
-	        height: 30
-		    Text {
-		        font.pixelSize: 18
-		        font.bold: true
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.name
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 40
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-	        color: stateColor(parent.appInfo.state)
-		    Text {
-		        font.pixelSize: 14
-		        font.bold: true
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.stateText
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 70
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.cycCur
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 100
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.wktMax
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 130
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "black"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.wktCur
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 160
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.cpuTime.toFixed(1)
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 190
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.cpuAvg.toFixed(2)
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 220
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.cpuCur.toFixed(2)
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 250
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.vmRSS
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 280
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.vmSize
-		    }
-		}
-
-	    Rectangle {
-	        x: 0
-	        y: 330
-	        height: 30
-	        width: parent.width
-			Button {
-	            text: "Pause"
-	            anchors.fill: parent
-	            onClicked: parent.parent.appInfo.pause()
-	            enabled: (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_NOT_RUNNING) && (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_PAUSED)
-			}
-	    }
-
-	    Rectangle {
-	        x: 0
-	        y: 370
-	        height: 30
-	        width: parent.width
-			Button {
-	            text: "Resume"
-	            anchors.fill: parent
-	            onClicked: parent.parent.appInfo.resume()
-	            enabled: (parent.parent.appInfo.state === QGfaAppCtrl.STATE_PAUSED)
-			}
-	    }
-
-	    Rectangle {
-	        x: 0
-	        y: 410
-	        height: 30
-	        width: parent.width
-			Button {
-	            text: "Stop"
-	            anchors.fill: parent
-	            onClicked: parent.parent.appInfo.stop()
-                enabled: (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_NOT_RUNNING)
-			}
-	    }
-	}
-
-	/////////////////////////////////////////////////////////////////////////////////////////////////
-
-    Rectangle {
-        x: 530
-        y: 20
-        width: 120
-        height: 460
-
-		property var appInfo: qGfaAppCtrl.appInfo[QGfaAppCtrl.APP_INDEX_DATALOGGER]
-
-		Rectangle {
-	        x: 0
-	        y: 0
-	        width: parent.width
-	        height: 30
-		    Text {
-		        font.pixelSize: 18
-		        font.bold: true
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.name
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 40
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-	        color: stateColor(parent.appInfo.state)
-		    Text {
-		        font.pixelSize: 14
-		        font.bold: true
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.stateText
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 70
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.cycCur
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 100
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.wktMax
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 130
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "black"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.wktCur
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 160
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.cpuTime.toFixed(1)
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 190
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.cpuAvg.toFixed(2)
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 220
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.cpuCur.toFixed(2)
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 250
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.vmRSS
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 280
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.vmSize
-		    }
-		}
-
-	    Rectangle {
-	        x: 0
-	        y: 330
-	        height: 30
-	        width: parent.width
-			Button {
-	            text: "Pause"
-	            anchors.fill: parent
-	            onClicked: parent.parent.appInfo.pause()
-	            enabled: (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_NOT_RUNNING) && (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_PAUSED)
-			}
-	    }
-
-	    Rectangle {
-	        x: 0
-	        y: 370
-	        height: 30
-	        width: parent.width
-			Button {
-	            text: "Resume"
-	            anchors.fill: parent
-	            onClicked: parent.parent.appInfo.resume()
-	            enabled: (parent.parent.appInfo.state === QGfaAppCtrl.STATE_PAUSED)
-			}
-	    }
-
-	    Rectangle {
-	        x: 0
-	        y: 410
-	        height: 30
-	        width: parent.width
-			Button {
-	            text: "Stop"
-	            anchors.fill: parent
-	            onClicked: parent.parent.appInfo.stop()
-                enabled: (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_NOT_RUNNING)
-			}
-	    }
-	}
-
-	/////////////////////////////////////////////////////////////////////////////////////////////////
-
-    Rectangle {
-        x: 660
-        y: 20
-        width: 120
-        height: 460
-
-		property var appInfo: qGfaAppCtrl.appInfo[QGfaAppCtrl.APP_INDEX_SYSINFO]
-
-		Rectangle {
-	        x: 0
-	        y: 0
-	        width: parent.width
-	        height: 30
-		    Text {
-		        font.pixelSize: 18
-		        font.bold: true
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.name
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 40
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-	        color: stateColor(parent.appInfo.state)
-		    Text {
-		        font.pixelSize: 14
-		        font.bold: true
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.stateText
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 70
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.cycCur
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 100
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.wktMax
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 130
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "black"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.wktCur
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 160
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.cpuTime.toFixed(1)
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 190
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.cpuAvg.toFixed(2)
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 220
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.cpuCur.toFixed(2)
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 250
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.vmRSS
-		    }
-		}
-
-		Rectangle {
-	        x: 0
-	        y: 280
-	        width: parent.width
-	        height: 30
-	        border.width: 1
-			border.color: "lightgrey"
-	        radius: 5
-		    Text {
-		        font.pixelSize: 14
-	            anchors.centerIn: parent
-		        text: parent.parent.appInfo.vmSize
-		    }
-		}
-
-	    Rectangle {
-	        x: 0
-	        y: 330
-	        height: 30
-	        width: parent.width
-			Button {
-	            text: "Pause"
-	            anchors.fill: parent
-	            onClicked: parent.parent.appInfo.pause()
-	            enabled: (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_NOT_RUNNING) && (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_PAUSED)
-			}
-	    }
-
-	    Rectangle {
-	        x: 0
-	        y: 370
-	        height: 30
-	        width: parent.width
-			Button {
-	            text: "Resume"
-	            anchors.fill: parent
-	            onClicked: parent.parent.appInfo.resume()
-	            enabled: (parent.parent.appInfo.state === QGfaAppCtrl.STATE_PAUSED)
-			}
-	    }
-
-	    Rectangle {
-	        x: 0
-	        y: 410
-	        height: 30
-	        width: parent.width
-			Button {
-	            text: "Stop"
-	            anchors.fill: parent
-	            onClicked: parent.parent.appInfo.stop()
-                enabled: (parent.parent.appInfo.state !== QGfaAppCtrl.STATE_NOT_RUNNING)
-			}
-	    }
-	}
+Loader {
+	id: pageLoader
+	source: "apps.qml"
 }

+ 6 - 0
Test/qmlApp/qappctrl.cpp

@@ -69,6 +69,12 @@ bool QGfaAppCtrl::Create(appid_t nAppID, const char *pszDisplayName, int nTimerI
 			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);
+			}
 		}
 	}
 

+ 7 - 0
Test/qmlApp/qappctrl.h

@@ -73,6 +73,7 @@ class QGfaSysInfo : public QObject
 	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);
@@ -85,6 +86,7 @@ signals:
 	void memAvailableChanged(quint64 val);
 	void memBuffersChanged(quint64 val);
 	void memCachedChanged(quint64 val);
+	void bootFromEmmcChanged(bool val);
 
 private:
 	quint64 memTotal(void) const;
@@ -94,10 +96,12 @@ private:
 	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);}
@@ -126,6 +130,7 @@ private:
 	quint64 m_nMemBuffers;
 	quint64 m_nMemCached;
 	QGfaStgDevList m_stgDevList;
+	bool m_bootFromEmmc;
 };
 
 /////////////////////////////////////////////////////////////////////////////
@@ -263,9 +268,11 @@ public:
 		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
 	{

+ 12 - 12
Test/qmlApp/qappinfo.cpp

@@ -202,8 +202,8 @@ void QGfaAppInfo::setAppSize(quint32 size, GfaIpcAppStates state)
 void QGfaAppInfo::setAppMemInfo(LPCGFA_APPCTRL_APPMEM pam, GfaIpcAppStates state, bool bDoHeavyLoadUpdate)
 {
 	UNUSED(state);
-	
-	if(pam)
+
+	if(pam && (state != GIAS_Zombie))
 	{
 		if(bDoHeavyLoadUpdate)
 		{
@@ -262,7 +262,7 @@ void QGfaAppInfo::setAppMemInfo(LPCGFA_APPCTRL_APPMEM pam, GfaIpcAppStates state
 
 void QGfaAppInfo::setAppTimes(LPCGFA_APPCTRL_APPTIMES pat, GfaIpcAppStates state, bool bDoHeavyLoadUpdate)
 {
-	if(pat)
+	if(pat && (state != GIAS_Zombie))
 	{
 		if(m_cycInt != (quint64)pat->nCyclePresetUs)
 		{
@@ -314,7 +314,7 @@ void QGfaAppInfo::setAppTimes(LPCGFA_APPCTRL_APPTIMES pat, GfaIpcAppStates state
 		if(bDoHeavyLoadUpdate)
 		{
 			quint64 upTime = time(NULL) - pat->nTsStart;
-			
+
 			if(m_upTime != upTime)
 			{
 				m_upTime = upTime;
@@ -335,7 +335,7 @@ void QGfaAppInfo::setAppTimes(LPCGFA_APPCTRL_APPTIMES pat, GfaIpcAppStates state
 					emit wktCurChanged(m_wktCur);
 				}
 			}
-			
+
 			if(state != GIAS_Hanging)
 			{
 				if(m_cpuTime != pat->fCpuTime)
@@ -343,13 +343,13 @@ void QGfaAppInfo::setAppTimes(LPCGFA_APPCTRL_APPTIMES pat, GfaIpcAppStates state
 					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;
@@ -385,13 +385,13 @@ void QGfaAppInfo::setAppTimes(LPCGFA_APPCTRL_APPTIMES pat, GfaIpcAppStates state
 				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;
@@ -429,19 +429,19 @@ void QGfaAppInfo::setAppTimes(LPCGFA_APPCTRL_APPTIMES pat, GfaIpcAppStates state
 				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;

+ 1 - 0
Test/qmlApp/qml.qrc

@@ -5,5 +5,6 @@
         <file>res/img/mmc64.png</file>
         <file>res/img/usb64.png</file>
         <file>res/img/ata64.png</file>
+        <file>apps.qml</file>
     </qresource>
 </RCC>

+ 27 - 7
Test/qmlApp/qsysinfo.cpp

@@ -7,6 +7,13 @@
 
 #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
@@ -14,6 +21,8 @@
 #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);
 
 /////////////////////////////////////////////////////////////////////////////
@@ -26,7 +35,7 @@ static const char *_FormatByteSize(unsigned long long nCb, char *pszBuf, size_t
 		
 		if(nCb < _BYTE_SIZE_KIB)
 		{
-			snprintf(pszBuf, nCChBuf, "%llu %s", nCb, bShortUnits ? "" : "Byte"); // Byte
+			snprintf(pszBuf, nCChBuf, "%llu %s", nCb, bShortUnits ? "B" : "Byte"); // Byte
 		}
 		else if(nCb < _BYTE_SIZE_MIB)
 		{
@@ -94,7 +103,7 @@ static const STG_DEV_ROLES g_roles[] =
 {
 	{SDR_DiskName,			"DiskName"},
 	{SDR_DiskDevNode,		"DiskDevNode"},
-	{SDR_DiskBusType,		"DiskBusType"},
+	{SDR_DiskBusType,		"DiskDevType"},
 	{SDR_DiskVendorName,	"DiskVendorName"},
 	{SDR_DiskVendorID,		"DiskVendorID"},
 	{SDR_DiskProductID,		"DiskProductID"},
@@ -133,10 +142,6 @@ int QGfaStgDevList::columnCount(const QModelIndex &parent) const
 	return (int)_countof(g_roles);
 }
 
-#define _OPT_STRING(s, o)	(*s ? s : o)
-
-#define _NA_STRING(s)		_OPT_STRING(s, "n/a")
-
 QVariant QGfaStgDevList::data(const QModelIndex &index, int role) const
 {
 	if(!index.isValid())
@@ -348,7 +353,8 @@ QGfaSysInfo::QGfaSysInfo(QObject *pParent) : 	QObject(pParent),
 												m_nMemFree(0),
 												m_nMemAvailable(0),
 												m_nMemBuffers(0),
-												m_nMemCached(0)
+												m_nMemCached(0),
+												m_bootFromEmmc(false)
 {
 }
 
@@ -490,3 +496,17 @@ 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);
+	}
+}

+ 112 - 112
gfaipc.pro.user

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 4.11.1, 2020-03-24T14:59:52. -->
+<!-- Written by QtCreator 4.11.1, 2020-04-03T22:51:01. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>
@@ -8,7 +8,7 @@
  </data>
  <data>
   <variable>ProjectExplorer.Project.ActiveTarget</variable>
-  <value type="int">1</value>
+  <value type="int">0</value>
  </data>
  <data>
   <variable>ProjectExplorer.Project.EditorSettings</variable>
@@ -59,14 +59,14 @@
  <data>
   <variable>ProjectExplorer.Project.Target.0</variable>
   <valuemap type="QVariantMap">
-   <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="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Sitara 1</value>
+   <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Sitara 1</value>
+   <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{b0a415a1-ecbe-4123-8afc-05ffc0004131}</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="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">/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>
@@ -91,7 +91,7 @@
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
       <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
       <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
-      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">install</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">install_toolchain</value>
       <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
       <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
      </valuemap>
@@ -122,7 +122,7 @@
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
       <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
       <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
-      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">uninstall</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">uninstall_toolchain</value>
       <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
       <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
      </valuemap>
@@ -139,7 +139,7 @@
     <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
    </valuemap>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
-    <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">/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>
@@ -164,7 +164,7 @@
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
       <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
       <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
-      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">install</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">install_toolchain</value>
       <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
       <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
      </valuemap>
@@ -195,7 +195,7 @@
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
       <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
       <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
-      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">uninstall</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">uninstall_toolchain</value>
       <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
       <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
      </valuemap>
@@ -214,13 +214,20 @@
    <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>
+     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
+      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
+      <value type="QString" key="ProjectExplorer.ProcessStep.Arguments">&quot;%{Device:UserName}&quot; &quot;%{Device:HostAddress}&quot; &quot;%{Device:KeyFile}&quot;</value>
+      <value type="QString" key="ProjectExplorer.ProcessStep.Command">/home/wrk/share/gfalibtools/deploylib.sh</value>
+      <value type="QString" key="ProjectExplorer.ProcessStep.WorkingDirectory">%{buildDir}</value>
+      <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.Id">ProjectExplorer.BuildSteps.Deploy</value>
     </valuemap>
     <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">DeployToGenericLinux</value>
    </valuemap>
    <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
@@ -298,20 +305,98 @@
     <value type="QString" key="RunConfiguration.WorkingDirectory"></value>
     <value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
    </valuemap>
-   <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
+   <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.1">
+    <value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
+    <valuelist type="QVariantList" key="Analyzer.Perf.Events">
+     <value type="QString">cpu-cycles</value>
+    </valuelist>
+    <valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
+    <value type="int" key="Analyzer.Perf.Frequency">250</value>
+    <valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
+     <value type="QString">-e</value>
+     <value type="QString">cpu-cycles</value>
+     <value type="QString">--call-graph</value>
+     <value type="QString">dwarf,4096</value>
+     <value type="QString">-F</value>
+     <value type="QString">250</value>
+    </valuelist>
+    <value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
+    <value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
+    <value type="int" key="Analyzer.Perf.StackSize">4096</value>
+    <value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
+    <value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
+    <value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
+    <value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
+    <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
+    <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
+    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
+    <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
+    <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
+    <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
+    <value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
+    <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
+    <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
+    <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
+    <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
+    <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
+    <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
+    <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
+    <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
+    <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
+     <value type="int">0</value>
+     <value type="int">1</value>
+     <value type="int">2</value>
+     <value type="int">3</value>
+     <value type="int">4</value>
+     <value type="int">5</value>
+     <value type="int">6</value>
+     <value type="int">7</value>
+     <value type="int">8</value>
+     <value type="int">9</value>
+     <value type="int">10</value>
+     <value type="int">11</value>
+     <value type="int">12</value>
+     <value type="int">13</value>
+     <value type="int">14</value>
+    </valuelist>
+    <value type="int" key="PE.EnvironmentAspect.Base">1</value>
+    <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinux.CustomRunConfig</value>
+    <value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
+    <value type="QString" key="RemoteLinux.CustomRunConfig.LocalExecutable"></value>
+    <value type="QString" key="RemoteLinux.CustomRunConfig.RemoteExecutable"></value>
+    <value type="int" key="RemoteLinux.EnvironmentAspect.Version">1</value>
+    <value type="QString" key="RunConfiguration.Arguments"></value>
+    <value type="bool" key="RunConfiguration.Arguments.multi">false</value>
+    <value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
+    <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
+    <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
+    <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
+    <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
+    <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
+    <value type="bool" key="RunConfiguration.UseX11Forwarding">false</value>
+    <value type="QString" key="RunConfiguration.WorkingDirectory"></value>
+    <value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
+    <value type="QString" key="RunConfiguration.X11Forwarding">:0</value>
+   </valuemap>
+   <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">2</value>
   </valuemap>
  </data>
  <data>
   <variable>ProjectExplorer.Project.Target.1</variable>
   <valuemap type="QVariantMap">
-   <value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Sitara 1</value>
-   <value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Sitara 1</value>
-   <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{b0a415a1-ecbe-4123-8afc-05ffc0004131}</value>
-   <value type="int" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
+   <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.ActiveDeployConfiguration">0</value>
    <value type="int" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
-    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/wrk/share/gfaipc/Debug/Sitara_1</value>
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/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>
@@ -336,7 +421,7 @@
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
       <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
       <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
-      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">install_toolchain</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">install</value>
       <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
       <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
      </valuemap>
@@ -367,7 +452,7 @@
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
       <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
       <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
-      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">uninstall_toolchain</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">uninstall</value>
       <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
       <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
      </valuemap>
@@ -384,7 +469,7 @@
     <value type="int" key="Qt4ProjectManager.Qt4BuildConfiguration.BuildConfiguration">2</value>
    </valuemap>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.1">
-    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/home/wrk/share/gfaipc/Release/Sitara_1</value>
+    <value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/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>
@@ -409,7 +494,7 @@
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
       <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
       <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">false</value>
-      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">install_toolchain</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">install</value>
       <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
       <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
      </valuemap>
@@ -440,7 +525,7 @@
       <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">Qt4ProjectManager.MakeStep</value>
       <valuelist type="QVariantList" key="Qt4ProjectManager.MakeStep.BuildTargets"/>
       <value type="bool" key="Qt4ProjectManager.MakeStep.Clean">true</value>
-      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">uninstall_toolchain</value>
+      <value type="QString" key="Qt4ProjectManager.MakeStep.MakeArguments">uninstall</value>
       <value type="QString" key="Qt4ProjectManager.MakeStep.MakeCommand"></value>
       <value type="bool" key="Qt4ProjectManager.MakeStep.OverrideMakeflags">false</value>
      </valuemap>
@@ -459,20 +544,13 @@
    <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">
-     <valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
-      <value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
-      <value type="QString" key="ProjectExplorer.ProcessStep.Arguments">&quot;%{Device:UserName}&quot; &quot;%{Device:HostAddress}&quot; &quot;%{Device:KeyFile}&quot;</value>
-      <value type="QString" key="ProjectExplorer.ProcessStep.Command">/home/wrk/share/gfalibtools/deploylib.sh</value>
-      <value type="QString" key="ProjectExplorer.ProcessStep.WorkingDirectory">%{buildDir}</value>
-      <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.ProcessStep</value>
-     </valuemap>
-     <value type="int" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
+     <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.Id">ProjectExplorer.BuildSteps.Deploy</value>
     </valuemap>
     <value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">DeployToGenericLinux</value>
+    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
    </valuemap>
    <value type="int" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
    <valuemap type="QVariantMap" key="ProjectExplorer.Target.PluginSettings"/>
@@ -550,85 +628,7 @@
     <value type="QString" key="RunConfiguration.WorkingDirectory"></value>
     <value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
    </valuemap>
-   <valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.1">
-    <value type="QString" key="Analyzer.Perf.CallgraphMode">dwarf</value>
-    <valuelist type="QVariantList" key="Analyzer.Perf.Events">
-     <value type="QString">cpu-cycles</value>
-    </valuelist>
-    <valuelist type="QVariantList" key="Analyzer.Perf.ExtraArguments"/>
-    <value type="int" key="Analyzer.Perf.Frequency">250</value>
-    <valuelist type="QVariantList" key="Analyzer.Perf.RecordArguments">
-     <value type="QString">-e</value>
-     <value type="QString">cpu-cycles</value>
-     <value type="QString">--call-graph</value>
-     <value type="QString">dwarf,4096</value>
-     <value type="QString">-F</value>
-     <value type="QString">250</value>
-    </valuelist>
-    <value type="QString" key="Analyzer.Perf.SampleMode">-F</value>
-    <value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
-    <value type="int" key="Analyzer.Perf.StackSize">4096</value>
-    <value type="bool" key="Analyzer.QmlProfiler.AggregateTraces">false</value>
-    <value type="bool" key="Analyzer.QmlProfiler.FlushEnabled">false</value>
-    <value type="uint" key="Analyzer.QmlProfiler.FlushInterval">1000</value>
-    <value type="QString" key="Analyzer.QmlProfiler.LastTraceFile"></value>
-    <value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
-    <valuelist type="QVariantList" key="Analyzer.Valgrind.AddedSuppressionFiles"/>
-    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectBusEvents">false</value>
-    <value type="bool" key="Analyzer.Valgrind.Callgrind.CollectSystime">false</value>
-    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableBranchSim">false</value>
-    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableCacheSim">false</value>
-    <value type="bool" key="Analyzer.Valgrind.Callgrind.EnableEventToolTips">true</value>
-    <value type="double" key="Analyzer.Valgrind.Callgrind.MinimumCostRatio">0.01</value>
-    <value type="double" key="Analyzer.Valgrind.Callgrind.VisualisationMinimumCostRatio">10</value>
-    <value type="bool" key="Analyzer.Valgrind.FilterExternalIssues">true</value>
-    <value type="QString" key="Analyzer.Valgrind.KCachegrindExecutable">kcachegrind</value>
-    <value type="int" key="Analyzer.Valgrind.LeakCheckOnFinish">1</value>
-    <value type="int" key="Analyzer.Valgrind.NumCallers">25</value>
-    <valuelist type="QVariantList" key="Analyzer.Valgrind.RemovedSuppressionFiles"/>
-    <value type="int" key="Analyzer.Valgrind.SelfModifyingCodeDetection">1</value>
-    <value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
-    <value type="bool" key="Analyzer.Valgrind.ShowReachable">false</value>
-    <value type="bool" key="Analyzer.Valgrind.TrackOrigins">true</value>
-    <value type="QString" key="Analyzer.Valgrind.ValgrindExecutable">valgrind</value>
-    <valuelist type="QVariantList" key="Analyzer.Valgrind.VisibleErrorKinds">
-     <value type="int">0</value>
-     <value type="int">1</value>
-     <value type="int">2</value>
-     <value type="int">3</value>
-     <value type="int">4</value>
-     <value type="int">5</value>
-     <value type="int">6</value>
-     <value type="int">7</value>
-     <value type="int">8</value>
-     <value type="int">9</value>
-     <value type="int">10</value>
-     <value type="int">11</value>
-     <value type="int">12</value>
-     <value type="int">13</value>
-     <value type="int">14</value>
-    </valuelist>
-    <value type="int" key="PE.EnvironmentAspect.Base">1</value>
-    <valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
-    <value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">RemoteLinux.CustomRunConfig</value>
-    <value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
-    <value type="QString" key="RemoteLinux.CustomRunConfig.LocalExecutable"></value>
-    <value type="QString" key="RemoteLinux.CustomRunConfig.RemoteExecutable"></value>
-    <value type="int" key="RemoteLinux.EnvironmentAspect.Version">1</value>
-    <value type="QString" key="RunConfiguration.Arguments"></value>
-    <value type="bool" key="RunConfiguration.Arguments.multi">false</value>
-    <value type="QString" key="RunConfiguration.OverrideDebuggerStartup"></value>
-    <value type="bool" key="RunConfiguration.UseCppDebugger">false</value>
-    <value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
-    <value type="bool" key="RunConfiguration.UseMultiProcess">false</value>
-    <value type="bool" key="RunConfiguration.UseQmlDebugger">false</value>
-    <value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
-    <value type="bool" key="RunConfiguration.UseX11Forwarding">false</value>
-    <value type="QString" key="RunConfiguration.WorkingDirectory"></value>
-    <value type="QString" key="RunConfiguration.WorkingDirectory.default"></value>
-    <value type="QString" key="RunConfiguration.X11Forwarding">:0</value>
-   </valuemap>
-   <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">2</value>
+   <value type="int" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
   </valuemap>
  </data>
  <data>

+ 2 - 3
gfasysinfo/gfasysinfo.pro

@@ -1,7 +1,6 @@
 TEMPLATE = app
-CONFIG += console
-CONFIG -= app_bundle
-CONFIG -= qt
+CONFIG += console c++11 thread
+CONFIG -= qt app_bundle
 
 QMAKE_LIBDIR += $$[QT_SYSROOT]/usr/lib/gfa
 QMAKE_RPATHDIR += /usr/lib/gfa

+ 2 - 2
gfasysinfo/gfasysinfo.pro.user

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE QtCreatorProject>
-<!-- Written by QtCreator 4.11.1, 2020-03-24T14:58:04. -->
+<!-- Written by QtCreator 4.11.1, 2020-04-01T23:25:04. -->
 <qtcreator>
  <data>
   <variable>EnvironmentId</variable>
@@ -8,7 +8,7 @@
  </data>
  <data>
   <variable>ProjectExplorer.Project.ActiveTarget</variable>
-  <value type="int">0</value>
+  <value type="int">1</value>
  </data>
  <data>
   <variable>ProjectExplorer.Project.EditorSettings</variable>

+ 15 - 1
gfasysinfo/src/main.cpp

@@ -62,6 +62,7 @@ typedef std::map<std::string, std::string>	MountMap;
 
 static volatile bool						g_fRun		= false;
 static volatile bool						g_fPause	= false;
+static volatile bool						g_fZombie	= false;
 
 /////////////////////////////////////////////////////////////////////////////
 
@@ -849,6 +850,7 @@ static void _SigHandler(int sig)
 	UNUSED(sig);
 	g_fPause = false;
 	g_fRun = false;
+	g_fZombie = false;
 }
 
 /////////////////////////////////////////////////////////////////////////////
@@ -904,12 +906,16 @@ int main(int argc, char *argv[])
 
 	do
 	{
+		g_fZombie = true;
+
 		if(!(hAC = ::GfaIpcAppCtrlAcquire(_APPID, _APPNAME, _CYCLE_INTV * 1000, _CYCLE_INTV * 3000)))
 	    {
 	        TRACE("GfaIpcAppCtrlAcquire failed\n");
 			break;
 	    }
 
+		::GfaIpcAppCtrlSetState(hAC, GIAS_Initializing);
+
 		if(!::GfaIpcAppCtrlCreateSysInfo(hAC))
 	    {
 	        TRACE("GfaIpcAppCtrlCreateSysInfo failed\n");
@@ -951,13 +957,13 @@ int main(int argc, char *argv[])
 		pfd[1].revents = 0;
 
 		;;GfaIpcDumpSHMROT();
-		::GfaIpcAppCtrlSetState(hAC, GIAS_Initializing);
 
 		TRACE("My Name:  %s\n", _APPNAME);
 		TRACE("My AppID: %llu\n", _APPID);
 		TRACE("My PID:   %d\n", getpid());
 		TRACE("My Cycle: %d\n", _CYCLE_INTV);
 
+		g_fZombie = false;
 		g_fRun = true;
 		::GfaIpcAppCtrlSetState(hAC, GIAS_Running);
 		::GfaIpcAppCtrlUpdateStorageDeviceMap(hAC, sdm);
@@ -1044,6 +1050,14 @@ int main(int argc, char *argv[])
 		::udev_monitor_unref(pUdevMon);
 	if(pUdev)
 		::udev_unref(pUdev);
+	
+	if(g_fZombie)
+	{
+		if(hAC)
+			::GfaIpcAppCtrlSetState(hAC, GIAS_Zombie);
+		TRACE("%-8s: State: %s\n", "Me", ::GfaIpcAppCtrlGetStateText(GIAS_Zombie));
+		pause();
+	}
 
 	if(hAC)
 	{

+ 60 - 1
src/appctrl.cpp

@@ -477,8 +477,11 @@ const char* CAppCtrl::GetStateText(GfaIpcAppStates state)
 		"Paused",
 		"Hanging",
 		"Terminating",
+		"Zombie",
 		"Invalid"
 	};
+	
+	static_assert(_countof(pszStateNames) == (GIAS_Invalid - GIAS_StateNotRunning + 1), "enum GfaIpcAppStates does not meet string representation!");
 
 	if(state >= GIAS_StateNotRunning && state <= GIAS_Invalid)
 		return pszStateNames[state];
@@ -805,6 +808,37 @@ bool CAppCtrl::GetSysMem(LPGFA_APPCTRL_SYSMEM psm)
 	return false;
 }
 
+bool CAppCtrl::GetSysSPI(LPGFA_SYSINFO_SPI pspi)
+{
+	if(m_hShm)
+	{
+		const APP_CTRL_SYSTEM &sys = m_pAppCtrl->sys;
+		if(pspi)
+		{
+			CAppCtrlShmLocker locker(*this);
+			memcpy(pspi, &sys.spi, sizeof(GFA_SYSINFO_SPI));
+			return true;
+		}
+	}
+
+	return false;
+}
+
+/////////////////////////////////////////////////////////////////////////////
+
+bool CAppCtrl::GetBootFromEmmc(bool *pbBootFromEmmc)
+{
+	if(m_hShm && pbBootFromEmmc)
+	{
+		APP_CTRL_SYSTEM &sys = m_pAppCtrl->sys;
+		CAppCtrlShmLocker locker(*this);
+		*pbBootFromEmmc = sys.bBootFromEmmc;
+		return true;
+	}
+
+	return false;
+}
+
 /////////////////////////////////////////////////////////////////////////////
 
 bool CAppCtrl::CreateSysInfo(void)
@@ -824,7 +858,8 @@ bool CAppCtrl::CreateSysInfo(void)
 			return true;
 		}
 #else	//	_TARGET_BUILD
-			return true;
+        UNUSED(bBootFromEmmc);
+		return true;
 #endif	//	_TARGET_BUILD
 	}
 	else
@@ -835,11 +870,15 @@ bool CAppCtrl::CreateSysInfo(void)
 		{
 			memset(&sys, 0, sizeof(APP_CTRL_SYSTEM));
 			sys.nPidInCharge = m_pid;
+#if _TARGET_BUILD
 			if(m_sysInfo.GetBootInfo(bBootFromEmmc))
 			{
 				sys.bBootFromEmmc = bBootFromEmmc;
 				return true;
 			}
+#else	//	_TARGET_BUILD
+			return true;
+#endif	//	_TARGET_BUILD
 		}
 	}
 
@@ -1401,6 +1440,8 @@ sysevt_t GfaIpcAppCtrlGetPendingSysEvents(HAPPCTRL hAC)
 	return 0;
 }
 
+/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
 // for the GfaSysInfo process only, will not be documented!
 
@@ -1436,6 +1477,8 @@ extern "C" bool GfaIpcAppCtrlUpdateStorageDeviceMap(HAPPCTRL hAC, const GFA_SYSI
 	return false;
 }
 
+/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
 
 int GfaIpcAppCtrlGetNextDiskAdded(HAPPCTRL hAC, LPGFA_SYSINFO_DISK pDisk)
@@ -1494,6 +1537,22 @@ bool GfaIpcAppCtrlGetSysMem(HAPPCTRL hAC, LPGFA_APPCTRL_SYSMEM psm)
 	return false;
 }
 
+bool GfaIpcAppCtrlGetSysSPI(HAPPCTRL hAC, LPGFA_SYSINFO_SPI pspi)
+{
+	CAppCtrl *p = reinterpret_cast<CAppCtrl*>(hAC);
+	if(p)
+		return p->GetSysSPI(pspi);
+	return false;
+}
+
+bool GfaIpcAppCtrlGetBootFromEmmc(HAPPCTRL hAC, bool *pbBootFromEmmc)
+{
+	CAppCtrl *p = reinterpret_cast<CAppCtrl*>(hAC);
+	if(p)
+		return p->GetBootFromEmmc(pbBootFromEmmc);
+	return false;
+}
+
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////

+ 4 - 0
src/appctrl.h

@@ -54,6 +54,7 @@ typedef struct _APP_CTRL_SYSTEM
 	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;
 
@@ -151,6 +152,7 @@ public:
 	bool UpdateStorageDeviceMap(const GFA_SYSINFO_STORAGE_DEVICE_MAP &sdm);
 
 	bool GetSysMem(LPGFA_APPCTRL_SYSMEM psm);
+	bool GetSysSPI(LPGFA_SYSINFO_SPI pspi);
 
 	bool SubscribeSysEvents(sysevt_t nEvtMask);
 	bool UnsubscribeSysEvents(sysevt_t nEvtMask);
@@ -162,6 +164,8 @@ public:
 	int GetNextPartitionRemoved(LPGFA_SYSINFO_PARTITION pPart);
 	int GetNextMountAdded(LPGFA_SYSINFO_PARTITION pPart);
 	int GetNextMountRemoved(LPGFA_SYSINFO_PARTITION pPart);
+	
+	bool GetBootFromEmmc(bool *pbBootFromEmmc);
 
 private:
 	int SlotIndexFromAppID(appid_t nAppID);

+ 19 - 0
src/gfaipc.h

@@ -188,6 +188,7 @@ typedef enum
 	GIAS_Paused,
 	GIAS_Hanging, // pseudo state!
 	GIAS_Terminating,
+	GIAS_Zombie,
 	GIAS_Invalid
 }GfaIpcAppStates;
 
@@ -272,6 +273,21 @@ typedef struct _GFA_SYSINFO_DISK
 }GFA_SYSINFO_DISK, *LPGFA_SYSINFO_DISK;
 typedef const GFA_SYSINFO_DISK *LPCGFA_SYSINFO_DISK;
 
+/////////////////////////////////////////////////////////////////////////////
+
+typedef struct _GFA_SYSINFO_SPI
+{
+	float fVoltagePowerSupply;
+	float fVoltageBackupBattery;
+
+	float fVoltageSys;
+	float fVoltageBattery;
+
+	float fTemperatureBoard;
+	float fTemperatureTiva;
+}GFA_SYSINFO_SPI, *LPGFA_SYSINFO_SPI;
+typedef const GFA_SYSINFO_SPI *LPCGFA_SYSINFO_SPI;
+
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
 
@@ -303,6 +319,7 @@ bool			GfaIpcAppCtrlUnsubscribeSysEvents	(HAPPCTRL hAC, sysevt_t nEvtMask);
 sysevt_t		GfaIpcAppCtrlGetPendingSysEvents	(HAPPCTRL hAC);
 
 bool			GfaIpcAppCtrlGetSysMem				(HAPPCTRL hAC, LPGFA_APPCTRL_SYSMEM psm);
+bool			GfaIpcAppCtrlGetSysSPI				(HAPPCTRL hAC, LPGFA_SYSINFO_SPI pspi);
 
 int				GfaIpcAppCtrlGetNextDiskAdded		(HAPPCTRL hAC, LPGFA_SYSINFO_DISK pDisk);
 int				GfaIpcAppCtrlGetNextDiskRemoved		(HAPPCTRL hAC, LPGFA_SYSINFO_DISK pDisk);
@@ -311,6 +328,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			GfaIpcAppCtrlGetBootFromEmmc		(HAPPCTRL hAC, bool *pbBootFromEmmc);
+
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
 

+ 2 - 2
src/sysinfo.cpp

@@ -135,12 +135,12 @@ bool CSysInfo::GetBootInfo(bool &bootFromEMMC)
 			
 			if(!sPart.compare(_INTERNAL_EMMC_PART12) || sPart.compare(_INTERNAL_EMMC_PART11))
 			{
-				bootFromEMMC = true;
+				bootFromEMMC = false;
 				return true;
 			}
 			else if(!sPart.compare(_INTERNAL_EMMC_PART02) || sPart.compare(_INTERNAL_EMMC_PART01))
 			{
-				bootFromEMMC = false;
+				bootFromEMMC = true;
 				return true;
 			}
 		}