Test

Dependencies:   mbed-dev-OS5_10_4

MySources/OpenIni.cpp

Committer:
kevman
Date:
2020-08-07
Revision:
0:014fad4dfb9d

File content as of revision 0:014fad4dfb9d:

/*
-------------------------------------------------------------------------------
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);   }