Test

Dependencies:   mbed-dev-OS5_10_4

Revision:
0:014fad4dfb9d
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/MySources/OpenIni.cpp	Fri Aug 07 07:24:21 2020 +0000
@@ -0,0 +1,493 @@
+/*
+-------------------------------------------------------------------------------
+Programm Name: OpenIni.CPP
+Version:       1.0
+Sprache:       C
+Compiler:      MBED
+Autor:         PS
+Copyright:     PS
+               
+
+Funktion:      Oeffnen die zusätzliche Ini-Datei. Falls nicht vorhanden,
+               Basisinitialisierung.
+-------------------------------------------------------------------------------
+*/
+/*
+-------------------------------------------------------------------------------
+Zuordnung der Konfigurationsvariablen. Folgende Informationen sollten verarbeitet
+werden: 08.01.2008
+Diese Ini-Datei soll so gestaltet sein, daß Zeilen angehängt werden können.
+Zunächst sollen folgende Inhalte aufgenommen werden:
+1. Seriennummer des Potentiostaten
+2. Lizenznummer der Software
+3. Revisionsnummer der Software
+4. Offsetkorrekturwert für die Analogausgabe
+5. Netzwerkadresse  z.B. 192.168.2.99
+
+
+-------------------------------------------------------------------------------
+*/
+/*-------------------------------------------------------------------------------
+-------------------------------------------------------------------------------*/
+#include "Headers.h"
+
+/*-------------------------------------------------------------------------------
+Variablen für die Ini-Datei
+-------------------------------------------------------------------------------*/
+
+                // 0         1           2       3       4           5           6           7           8           9               10          11
+/*char *Key[34] = {"DEV_TYP", "POT_CODE", "SER_NR", "LZ_NR", "REV_NR", "IP_ADR",  "SUB_NET", "GATEWAY", "HOST_IP", "PORT_NO", \
+"EXT_START", "SEXT_CHN_NR", "RPM_OFFSET", "RPM_SCALE", "AO_SCALE", "AO_OFFSET", "RE_INIT", "NR_OFF",
+"A0_OFFSET", "A1_OFFSET", "A2_OFFSET", "A3_OFFSET", "A4_OFFSET", "A5_OFFSET", "A6_OFFSET", "A7_OFFSET",
+"A0_SCALE", "A1_SCALE", "A2_SCALE", "A3_SCALE", "A4_SCALE", "A5_SCALE", "A6_SCALE", "A7_SCALE"
+};    // bis hier 93
+*/
+// Zeile = 50, Spalte = 16
+char IniKey[50][16];
+
+
+int posKey, posEqual, posValueEnd;
+
+int (*KeyPtr[])(char *) =  {DecDevTyp, DecPotCode, DecSerNr, DecLzNr,DecRevNr, DecIpAddr, DecSubNet, DecGateway, DecHostIp, DecPortNo, \
+                            DecExtStart, DecSextChnNr, DecRpmOffset, DecRpmScale, DecAoScale, DecAoOffset,DecReInit, DecNrOff,
+                            DecU0Offset, DecU1Offset, DecU2Offset, DecU3Offset, DecU4Offset, DecU5Offset, DecU6Offset, DecU7Offset, 
+                            DecU0Scale, DecU1Scale, DecU2Scale, DecU3Scale, DecU4Scale, DecU5Scale, DecU6Scale, DecU7Scale 
+                             };
+
+
+/*-------------------------------------------------------------------------------
+SetIniKey: Beschreiben der Felder mit den INiKeys
+-------------------------------------------------------------------------------*/
+void SetIniKey()
+{
+	int i;
+	
+	i = 0;
+	strcpy(IniKey[i++], "DEV_TYP");
+	strcpy(IniKey[i++], "POT_CODE");
+	strcpy(IniKey[i++], "SER_NR");
+	strcpy(IniKey[i++], "LZ_NR");
+	strcpy(IniKey[i++], "REV_NR");
+	strcpy(IniKey[i++], "IP_ADR");
+	strcpy(IniKey[i++],  "SUB_NET");
+	strcpy(IniKey[i++], "GATEWAY");
+	strcpy(IniKey[i++], "HOST_IP");
+	strcpy(IniKey[i++], "PORT_NO");
+	
+	strcpy(IniKey[i++], "EXT_START");
+	strcpy(IniKey[i++], "SEXT_CHN_NR");
+	strcpy(IniKey[i++], "RPM_OFFSET");
+	strcpy(IniKey[i++], "RPM_SCALE");
+	strcpy(IniKey[i++], "AO_SCALE");
+	strcpy(IniKey[i++], "AO_OFFSET");
+	strcpy(IniKey[i++], "RE_INIT");
+	strcpy(IniKey[i++], "NR_OFF");
+	strcpy(IniKey[i++], "A0_OFFSET");
+	strcpy(IniKey[i++], "A1_OFFSET");
+	strcpy(IniKey[i++], "A2_OFFSET");
+	strcpy(IniKey[i++], "A3_OFFSET");
+	strcpy(IniKey[i++], "A4_OFFSET");
+	strcpy(IniKey[i++], "A5_OFFSET");
+	strcpy(IniKey[i++], "A6_OFFSET");
+	strcpy(IniKey[i++], "A7_OFFSET");
+	strcpy(IniKey[i++], "A0_SCALE");
+	strcpy(IniKey[i++], "A1_SCALE");
+	strcpy(IniKey[i++], "A2_SCALE");
+	strcpy(IniKey[i++], "A3_SCALE");
+	strcpy(IniKey[i++], "A4_SCALE");
+	strcpy(IniKey[i++], "A5_SCALE");
+	strcpy(IniKey[i++], "A6_SCALE");
+	strcpy(IniKey[i++], "A7_SCALE");
+}
+
+/*-------------------------------------------------------------------------------
+Datei öffnen
+-------------------------------------------------------------------------------*/
+int OpenIni()
+{
+    int i,j,Ret;
+    char strKeyCode[64];
+    char strValue[128];
+    
+    
+    InitDefault();      // vor den Lesen defautl initialisieren
+#ifdef SINGLE_DEBUG        
+        printf("Nach InitDfault\n");
+#endif        
+        
+    if(g_SdInitSuccess == false)    // wenn SD Karte nicht vorhanden, retour
+    {
+#ifdef SINGLE_DEBUG        
+        printf("SD Card not present\n");
+#endif        
+    }
+    
+    Ret = clSdCard.OpenFile(FileNames.IniFileName, FileNames.FileReadMode);
+    
+    if(Ret == false)
+    {
+        WriteIni();     // Default erzeugen
+        return(false);  // öffnen der Inidatei hat nicht geklappt
+    }
+        
+    do
+    {
+        Ret = clSdCard.ReadLine(strFileRwBuf, FILE_RW_BUF_LEN);
+        if(Ret > 0) // es sind Zeichen im Puffer
+        {
+#ifdef SINGLE_DEBUG        
+//             printf("Buf:  %s\n",strFileRwBuf);
+#endif        
+            for(i=0;i<Ret;i++)
+            {
+                if( (strFileRwBuf[i] == 0x0A) || (strFileRwBuf[i] == 0x0D))
+                {
+                    strFileRwBuf[i] = 0x00;
+                    i = Ret;
+                }
+                else if(strFileRwBuf[i] == 0x2C)    // Komma
+                    strFileRwBuf[i] = 0x2E; // in Punkt 
+            }
+            i = 0;
+            while( (i < 64) && (strFileRwBuf[i] != '=') )
+            {
+                strKeyCode[i] = strFileRwBuf[i];
+                i++;
+            }
+            strKeyCode[i] = 0x00;
+            i++;
+            while( (strFileRwBuf[i] == ' ') && (i < 100) )
+                i++;
+            strcpy(strValue,&strFileRwBuf[i]);
+            
+            //printf("KeyCode: %s   Value: %s\n", strKeyCode, strValue);
+            for(j = 0;j< ANZ_KEY;j++)
+            {
+                if(strcmp(strKeyCode, IniKey[j]) == 0) // die Strings stimmen überein
+                {
+                     (*KeyPtr[j])((char *)(strValue));  
+                     j = ANZ_KEY;  
+                }    
+            }
+        } 
+    }        
+    while(Ret > 0);
+    clSdCard.CloseFile();
+    EcmIni.fCfgExists = true;
+    if(EcmIni.nReInit == 1)
+    {
+        EcmIni.nReInit = 0;
+        InitDefault();
+        WriteIni();     // Default erzeugen
+    }
+    
+    
+    return(true);
+}
+    
+/*-------------------------------------------------------------------------------
+Defaultwerte für die Inivariablen setzten
+-------------------------------------------------------------------------------*/
+int InitDefault()
+{
+    int i;
+    
+    strcpy(EcmIni.DevTyp,"RPA-Device");    // Gerätetyp des Gerätes
+    strcpy(EcmIni.DevSio,"200_xxx");    // Seriennummer des Gerätes
+    strcpy(EcmIni.SwLizenz,"20000_xxx");  // Lizenznummer der Software
+    strcpy(EcmIni.SwRev,SW_REV);     // Revisionsnummer der Software
+    strcpy(EcmIni.IpAddress,"192.168.2.1"); // meine IP-Adresse für Netzwerkbetrieb
+    strcpy(EcmIni.SubNet,"255.255.255.0"); // IP-Adresse für Netzwerkbetrieb
+    strcpy(EcmIni.Gateway,"0.0.0.0"); // IP-Adresse für Netzwerkbetrieb
+    strcpy(EcmIni.HostIp,"192.168.2.8"); // IP-Adresse für Netzwerkbetrieb
+    
+    EcmIni.nPotCode = 1;       // default PGU, Jaissle ist 0x00, 71 ist PGU-Stack
+    EcmIni.nExtStart = 0;      // default kein externen Start
+    EcmIni.nSExtChnNr = 0x00;  // default Kanalnummer 0 für externen Start
+    EcmIni.nPortNr = 4000;  // Default 4000
+    EcmIni.dbRpmOffset = 0.0;        // Offsetkorrektur für die Anzeige Drehzahl
+    EcmIni.dbRpmScale = 1.0;        // Skalierungswert fuer die Anzeige Drehzahl
+    EcmIni.dbAoScale = 13.107;      // Skalierungswert fuer den Analogausgang
+    EcmIni.dbAoOffset = 0.0;       // Offset fuer den Analogausgang
+    EcmIni.nReInit = 0;         // Flag für Reinitialisierung
+    EcmIni.nNrOff = 0;          // Ausschalten der Drehzahlnachführung
+    for(i=0;i<8;i++)
+    {
+        EcmIni.dbUOffset[i] = 0.0;
+        EcmIni.dbUScale[i] = 1.0;
+    }
+    return(true);
+}
+
+/*-------------------------------------------------------------------------------
+Datei speichern
+-------------------------------------------------------------------------------*/
+int WriteIni()
+{
+    int Ret,i, j;
+
+    
+    if(g_SdInitSuccess == false)    // wenn SD Karte nicht vorhanden, retour
+    {
+#ifdef TFT_DEBUG            
+//        printf("SD Card not present\n");
+#endif        
+        return(false);
+    }
+    
+    Ret = clSdCard.OpenFile(FileNames.IniFileName, FileNames.FileWriteMode);
+    
+    if(Ret == false)
+        return(false);  // öffnen der Datei hat nicht geklappt
+
+    i= 0;    
+    // Methode CI
+    
+    
+    
+    sprintf(clSdCard.cSdLine, "%s=%s\r\n", IniKey[i],EcmIni.DevTyp);       clSdCard.WriteLine();   i++;        // DEV_TYP
+    sprintf(clSdCard.cSdLine, "%s=%d\r\n", IniKey[i],EcmIni.nPotCode);     clSdCard.WriteLine();   i++;      // POT_CODE
+    sprintf(clSdCard.cSdLine, "%s=%s\r\n", IniKey[i],EcmIni.DevSio);       clSdCard.WriteLine();   i++;        // SER_NR
+    sprintf(clSdCard.cSdLine, "%s=%s\r\n", IniKey[i],EcmIni.SwLizenz);     clSdCard.WriteLine();   i++;      // LZ_NR
+    sprintf(clSdCard.cSdLine, "%s=%s\r\n", IniKey[i],EcmIni.SwRev);        clSdCard.WriteLine();   i++;         // REV_NR
+    sprintf(clSdCard.cSdLine, "%s=%s\r\n", IniKey[i],EcmIni.IpAddress);    clSdCard.WriteLine();   i++;     // IP_ADR
+    sprintf(clSdCard.cSdLine, "%s=%s\r\n", IniKey[i],EcmIni.SubNet);       clSdCard.WriteLine();   i++;        // SUB_NET
+    sprintf(clSdCard.cSdLine, "%s=%s\r\n", IniKey[i],EcmIni.Gateway);      clSdCard.WriteLine();   i++;       // GATEWAY
+    sprintf(clSdCard.cSdLine, "%s=%s\r\n", IniKey[i],EcmIni.HostIp);       clSdCard.WriteLine();   i++;        // HOST_IP
+    sprintf(clSdCard.cSdLine, "%s=%d\r\n", IniKey[i],EcmIni.nPortNr);      clSdCard.WriteLine();   i++;       // PORT_NO
+    sprintf(clSdCard.cSdLine, "%s=%d\r\n", IniKey[i],EcmIni.nExtStart);    clSdCard.WriteLine();   i++;     // "EXT_START 
+    sprintf(clSdCard.cSdLine, "%s=%d\r\n", IniKey[i],EcmIni.nSExtChnNr);   clSdCard.WriteLine();   i++;    // "SEXT_CHN_NR
+    sprintf(clSdCard.cSdLine, "%s=%f\r\n", IniKey[i],EcmIni.dbRpmOffset);  clSdCard.WriteLine();   i++;    // 
+    sprintf(clSdCard.cSdLine, "%s=%f\r\n", IniKey[i],EcmIni.dbRpmScale);   clSdCard.WriteLine();   i++;
+    sprintf(clSdCard.cSdLine, "%s=%f\r\n", IniKey[i],EcmIni.dbAoScale);    clSdCard.WriteLine();   i++;
+    sprintf(clSdCard.cSdLine, "%s=%f\r\n", IniKey[i],EcmIni.dbAoOffset);   clSdCard.WriteLine();   i++;
+    sprintf(clSdCard.cSdLine, "%s=%d\r\n", IniKey[i],EcmIni.nReInit);      clSdCard.WriteLine();   i++;
+    sprintf(clSdCard.cSdLine, "%s=%d\r\n", IniKey[i],EcmIni.nNrOff);       clSdCard.WriteLine();   i++;
+
+    for(i=0, j=18;i<8;i++, j++)
+        sprintf(clSdCard.cSdLine, "%s=%f\r\n", IniKey[j],EcmIni.dbUOffset[i]);    clSdCard.WriteLine();   i++;
+    for(i=0, j=26;i<8;i++, j++)
+        sprintf(clSdCard.cSdLine, "%s=%f\r\n", IniKey[j],EcmIni.dbUScale[i]);    clSdCard.WriteLine();   i++;
+
+    clSdCard.CloseFile();
+    return(true);
+
+}
+
+
+//--------------------------------------------------------------------------
+// DecDevTyp: Decodieren des Gerätetyps
+//--------------------------------------------------------------------------
+int DecDevTyp(char *Line)
+{   
+    strcpy(EcmIni.DevTyp,Line);     
+#ifdef TFT_DEBUG        
+        printf("DevTyp: %s\n", EcmIni.DevTyp);
+#endif        
+    return(true);   
+}
+//--------------------------------------------------------------------------
+// DecPotCode: Decodieren 
+//--------------------------------------------------------------------------
+int DecPotCode(char *Line)
+{   EcmIni.nPotCode = atoi(Line);   return(true);   }
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecSerNr(char *Line)
+{   strcpy(EcmIni.DevSio,Line); return(true);   }
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecLzNr(char *Line)
+{   strcpy(EcmIni.SwLizenz,Line);   return(true);   }
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecRevNr(char *Line)
+{   strcpy(EcmIni.SwRev,Line);   return(true);   }
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecIpAddr(char *Line)
+{   strcpy(EcmIni.IpAddress,Line);   return(true);   }
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecSubNet(char *Line)
+{   strcpy(EcmIni.SubNet,Line);   return(true);   }
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecGateway(char *Line)
+{   strcpy(EcmIni.Gateway,Line);   return(true);   }
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecHostIp(char *Line)
+{   strcpy(EcmIni.HostIp,Line);   return(true);   }
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecPortNo(char *Line)
+{   EcmIni.nPortNr = atoi(Line);   return(true);   }
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecExtStart(char *Line)
+{   EcmIni.nExtStart = atoi(Line);   return(true);   }
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecSextChnNr(char *Line)
+{   EcmIni.nSExtChnNr = atoi(Line);   return(true);   }
+
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecRpmOffset(char *Line)
+{   EcmIni.dbRpmOffset = atof(Line);   return(true);   }
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecRpmScale(char *Line)
+{   EcmIni.dbRpmScale = atof(Line);   return(true);   }
+
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecAoScale(char *Line)
+{   EcmIni.dbAoScale = atof(Line);   return(true);   }
+
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecReInit(char *Line)
+{   EcmIni.nReInit = atoi(Line);   return(true);   }
+
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecNrOff(char *Line)
+{   EcmIni.nNrOff = atoi(Line);   return(true);   }
+
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecAoOffset(char *Line)
+{   EcmIni.dbAoOffset = atof(Line);   
+    return(true);   
+}
+
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecU0Offset(char *Line)
+{   EcmIni.dbUOffset[0] = atof(Line);   
+    EcmIni.dbUOffset[0] *= 838860.;
+    return(true);   
+}
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecU1Offset(char *Line)
+{   EcmIni.dbUOffset[1] = atof(Line);   
+    EcmIni.dbUOffset[1] *= 838860.;
+    return(true);   
+}
+ 
+ 
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecU2Offset(char *Line)
+{   EcmIni.dbUOffset[2] = atof(Line);   
+    EcmIni.dbUOffset[2] *= 838860.;
+    return(true);   
+}
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecU3Offset(char *Line)
+{   EcmIni.dbUOffset[3] = atof(Line);   
+    EcmIni.dbUOffset[3] *= 838860.;
+    return(true);   
+}
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecU4Offset(char *Line)
+{   EcmIni.dbUOffset[4] = atof(Line);   
+    EcmIni.dbUOffset[4] *= 838860.;
+    return(true);   
+}
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecU5Offset(char *Line)
+{   EcmIni.dbUOffset[5] = atof(Line);   
+    EcmIni.dbUOffset[5] *= 838860.;
+    return(true);   
+}
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecU6Offset(char *Line)
+{   EcmIni.dbUOffset[6] = atof(Line);   
+    EcmIni.dbUOffset[6] *= 838860.;
+    return(true);   
+}
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecU7Offset(char *Line)
+{   EcmIni.dbUOffset[7] = atof(Line);   
+    EcmIni.dbUOffset[7] *= 838860.;
+    return(true);  
+}
+
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecU0Scale(char *Line)
+{   EcmIni.dbUScale[0] = atof(Line);   return(true);   }
+ 
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecU1Scale(char *Line)
+{   EcmIni.dbUScale[1] = atof(Line);   return(true);   }
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecU2Scale(char *Line)
+{   EcmIni.dbUScale[2] = atof(Line);   return(true);   }
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecU3Scale(char *Line)
+{   EcmIni.dbUScale[3] = atof(Line);   return(true);   }
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecU4Scale(char *Line)
+{   EcmIni.dbUScale[4] = atof(Line);   return(true);   }
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecU5Scale(char *Line)
+{   EcmIni.dbUScale[5] = atof(Line);   return(true);   }
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecU6Scale(char *Line)
+{   EcmIni.dbUScale[6] = atof(Line);   return(true);   }
+//--------------------------------------------------------------------------
+// Dec
+//--------------------------------------------------------------------------
+int DecU7Scale(char *Line)
+{   EcmIni.dbUScale[7] = atof(Line);   return(true);   }
+ 
+ 
+ 
+ 
\ No newline at end of file