ソースを参照

TIVA-Erkennung implementiert

Rind 3 年 前
コミット
ae680c457a
4 ファイル変更71 行追加14 行削除
  1. 0 13
      README.md
  2. 9 1
      src/gfaipc.h
  3. 60 0
      src/sysinfo.cpp
  4. 2 0
      src/sysinfo.h

+ 0 - 13
README.md

@@ -48,16 +48,3 @@ gfa/shm.h, gfa/mutex.h, gfa/sema.h, gfa/procmem.h, gfa/thread.h
 
 * **1.4.0**<br>
 	App-Control-Funktion Ermittlung von Tiva-Informationen über SysFs hinzugefügt. Benötigt gfaspi.ko.
-
----
-
-## gfasysinfo
-
-Prozess zur Bereitstellung von Systeminformationen. Arbeitet eng mit ***libgfaipc*** zusammen.  
-Versorgt die Bibliothek mit Informationen über CPU-Auslastung, Speichernutzung, Hotplug-Events u. ä., die von anderen Prozessen mittels Bibliothek genutzt werden können.
-
-***Abhängikeiten:***  
-* libgfaipc
-* libgfasitarautils
-* libudev
-* gfaspi.ko (Tiva-Info)

+ 9 - 1
src/gfaipc.h

@@ -30,7 +30,6 @@ void	GfaIpcLockSHM		(HSHM hShm);
 void	GfaIpcUnlockSHM		(HSHM hShm);
 int		GfaIpcLockSHMAndSigBlock	(HSHM hShm, sigset_t *pss);
 int		GfaIpcUnlockSHMAndSigUnblock(HSHM hShm, sigset_t *pss);
-
 void	GfaIpcDumpSHMROT	(void);
 
 long	GfaIpcInterlockedIncrement(HSHM hShm, volatile long *pl);
@@ -39,6 +38,15 @@ long	GfaIpcInterlockedCompare(HSHM hShm, volatile long *pl, long comparand);
 long	GfaIpcInterlockedSet(HSHM hShm, volatile long *pl, long val);
 long	GfaIpcInterlockedClear(HSHM hShm, volatile long *pl);
 
+typedef enum
+{
+	GTT_NoGfATarget,
+	GTT_GfATargetNoTiva,
+	GTT_GfATargetWithTiva
+}GfATargetTypes;
+
+GfATargetTypes GfAIpcGetTargetType(char *pszTargetType, size_t nCChTargetType);
+
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////

+ 60 - 0
src/sysinfo.cpp

@@ -39,6 +39,9 @@
 #define _INTERNAL_EMMC_PART01				"mmcblk0p1"
 #define _INTERNAL_EMMC_PART02				"mmcblk0p2"
 
+#define _BASEBOARD_PATH						"/tmp/BASEBOARD"
+#define _DISPLAY_SIG_TIVA					"DISPLAY001"
+
 /////////////////////////////////////////////////////////////////////////////
 
 static char* _GetNextLine(char *psz, const char **ppszKey, const char **ppszValue)
@@ -149,6 +152,53 @@ bool CSysInfo::GetBootInfo(bool &bootFromEMMC)
 	return false;
 }
 
+/////////////////////////////////////////////////////////////////////////////
+// 
+// tmp/BASEBOARD		TIVA	Sonstiges
+// DISPLAY001			Ja		Standarddisplays
+// DISPLAY002_DI4		Nein	Display mit 4 D/I
+// DISPLAY002_RS485		Nein	Display mir RS485
+// GFA_RF_CAPE			Nein	Transponder
+//
+
+GfATargetTypes CSysInfo::GetTargetType(char *pszTargetType, size_t nCChTargetType)
+{
+	GfATargetTypes tt = GTT_NoGfATarget;
+	int nLenSig = strlen(_DISPLAY_SIG_TIVA);
+	int fd = open(_BASEBOARD_PATH, O_RDONLY);
+
+	if(pszTargetType && (nCChTargetType > 0))
+		*pszTargetType = '\0';
+	
+	if(fd >= 0)
+	{
+		char szDisp[256];
+		memset(szDisp, 0, sizeof(szDisp));
+		int ret = read(fd, szDisp, sizeof(szDisp) - 1);
+
+		if(ret > 0)
+		{
+			char *pzzEnd = &szDisp[ret - 1];
+
+			while((ret > 0) && isspace((uint8_t)*pzzEnd))
+			{
+				*pzzEnd-- = '\0';
+				--ret;
+			}
+
+			if((ret == nLenSig) && !strcmp(szDisp, _DISPLAY_SIG_TIVA))
+				tt = GTT_GfATargetWithTiva;
+			else
+				tt = GTT_GfATargetNoTiva;
+
+			if(pszTargetType && (nCChTargetType > (size_t)ret))
+				strcpy(pszTargetType, szDisp);
+		}
+	}
+
+	return tt;
+}
+
 /////////////////////////////////////////////////////////////////////////////
 // https://github.com/torvalds/linux/blob/master/Documentation/filesystems/proc.rst
 
@@ -217,3 +267,13 @@ bool CSysInfo::Update(void)
 
 	return false;
 }
+
+/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
+/////////////////////////////////////////////////////////////////////////////
+//
+
+extern "C" GfATargetTypes GfAIpcGetTargetType(char *pszTargetType, size_t nCChTargetType)
+{
+	return CSysInfo::GetTargetType(pszTargetType, nCChTargetType);
+}

+ 2 - 0
src/sysinfo.h

@@ -5,6 +5,7 @@
 #define AGD_SYSINFO_H__2BA1C607_39A9_4627_8B42_DD0B57F6106D__INCLUDED_
 
 #include <string>
+#include "gfaipc.h"
 
 #ifdef __cplusplus
 
@@ -39,6 +40,7 @@ public:
 	
 	bool GetBootInfo(bool &bootFromEMMC);
 	bool Update(void);
+	static GfATargetTypes GetTargetType(char *pszTargetType, size_t nCChTargetType);
 
 	const SI_VAL& MemTotal(void) const {
 		return m_memInfo.MemTotal;