Test

Dependencies:   mbed-dev-OS5_10_4

MySources/OpenDevId.cpp

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

File content as of revision 0:014fad4dfb9d:

/*
-------------------------------------------------------------------------------
Programm Name: OpenDevId.CPP
Version:       1.0
Sprache:       C
Compiler:      MBED
Autor:         PS
Copyright:     PS
               

Funktion:      Liest die ID-Datei und überträft diese an EcmWin. Damit kann 
                EcmWin den Gerätetyp eintragen. Wenn nicht vorhanden, dann kommt
                ein NAK
-------------------------------------------------------------------------------
*/
/*
-------------------------------------------------------------------------------

-------------------------------------------------------------------------------
*/
/*-------------------------------------------------------------------------------
-------------------------------------------------------------------------------*/
#include "Headers.h"

const char *DevIdKey[] = {"DEV_INDEX",    "POT_REV",      "POT_VAR",      "SCAN_VAR",     "POT_CHN",      "CURR_CHN",     "AMP_CHN",      "AMP_ACTIVE", "SW_IZ",      "SW_PG", \
                    "POT_INVERTED", "O_POT_INV",    "O_GAL_INV",    "GAL_VAR_VAL",  "U_N_CHN",      "I_N_CHN",      "I_N_ACTIVE",   "LPC_CAL_C0", "LPC_CAL_C1", "LPC_CAL_C2",\
                    "LPC_CAL_C3",   "LPC_CAL_C4",   "LPC_CAL_C5",   "LPC_CAL_C6",   "LPC_CAL_C7",   "INST_BOARD",   "S_RATE_ID",    "AV_VALUE" };


DEV_INI DevIni;

int (*DevKeyPtr[])(char *) =  {DecDevIndex, DecPotRev, DecPotVar, DecScanVar,DecPotChn, DecCurrChn, DecAmpChn, DecAmpActive, DecSwIz, DecSwPg, \
                            DecPotInverted, DecOPotInv, DecOGalInv,DecGalVarVal, DecUnChn, DecInChn, DecInActive, DecLpcCalC0, DecLpcCalC1, \
                            DecLpcCalC2, DecLpcCalC3, DecLpcCalC4,DecLpcCalC5, DecLpcCalC6, DecLpcCalC7, DecInstBoard, DecSRateId, DecAvValue };



/*-------------------------------------------------------------------------------
SetIniKey: Beschreiben der Felder mit den INiKeys
-------------------------------------------------------------------------------*/
void SetDevIdKey()
{
    int i;
    
    i = 0;

}

/*-------------------------------------------------------------------------------
Datei öffnen
-------------------------------------------------------------------------------*/
int OpenDevIni()
{
    int i,j, Ret;
    char strKeyCode[64];
    char strValue[64];

    InitDevIni();        
        
//    return;

    if(g_SdInitSuccess == false)    // wenn SD Karte nicht vorhanden, retour
    {
        sprintf(HostIf.strErrorBuf,"%c#ER#SD-Card is not acessable. %c\r\n", STX, ETX); // 
        HostIf.fSendError = true;
        if(g_fOnDuringInit)
            printf("%s",HostIf.strErrorBuf); 

        return(false);
    }
    
    Ret = clSdCard.OpenFile(FileNames.DevIdFileName, FileNames.FileReadMode);
    
    if(Ret == false)
    {
        WriteDevFile(); // Defaultdatei erzeugen
        sprintf(HostIf.strErrorBuf,"%c#ER#Error on open IniFile. Default created. %c\r\n", STX, ETX); // 
        HostIf.fSendError = true;
        if(g_fOnDuringInit)
            printf("%s",HostIf.strErrorBuf); 
        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
        {
            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_DEV_KEY;j++)
            {
                if(strcmp(strKeyCode, DevIdKey[j]) == 0) // die Strings stimmen überein
                {
                     (*DevKeyPtr[j])((char *)(strValue));  
                     j = ANZ_DEV_KEY;  
                }    
            }
        } 
    }        
    while(Ret > 0);
    clSdCard.CloseFile();
    EcmIni.fCfgExists = true;
//    EcmIni.fCalRange = true;

    return(true);
}

//--------------------------------------------------------------------------
// DecDevIndex: Decodieren 
//--------------------------------------------------------------------------
int DecDevIndex(char *Line)
{   DevIni.nDevIndex = atoi(Line);   return(true);   }
//--------------------------------------------------------------------------
// DecPotRev: Decodieren 
//--------------------------------------------------------------------------
int DecPotRev(char *Line)
{   DevIni.nPotRev = atoi(Line);   return(true);   }
//--------------------------------------------------------------------------
// DecPotVar: Decodieren 
//--------------------------------------------------------------------------
int DecPotVar(char *Line)
{   DevIni.dbPotVar = atof(Line);   return(true);   }
//--------------------------------------------------------------------------
// DecScanVar: Decodieren 
//--------------------------------------------------------------------------
int DecScanVar(char *Line)
{   DevIni.dbScanVar = atof(Line);   return(true);   }
//--------------------------------------------------------------------------
// DecPotChn: Decodieren 
//--------------------------------------------------------------------------
int DecPotChn(char *Line)
{   DevIni.nPotChn = atoi(Line);   return(true);   }
//--------------------------------------------------------------------------
// DecCurrChn: Decodieren 
//--------------------------------------------------------------------------
int DecCurrChn(char *Line)
{   DevIni.nCurrChn = atoi(Line);   return(true);   }
//--------------------------------------------------------------------------
// DecAmpChn: Decodieren 
//--------------------------------------------------------------------------
int DecAmpChn(char *Line)
{   DevIni.nAmpChn = atoi(Line);   return(true);   }
//--------------------------------------------------------------------------
// DecAmpActive: Decodieren 
//--------------------------------------------------------------------------
int DecAmpActive(char *Line)
{   DevIni.nAmpActive = atoi(Line);   return(true);   }
//--------------------------------------------------------------------------
// DecSwIz: Decodieren 
//--------------------------------------------------------------------------
int DecSwIz(char *Line)
{   DevIni.nSwIz = atoi(Line);   return(true);   }
//--------------------------------------------------------------------------
// DecSwPg: Decodieren 
//--------------------------------------------------------------------------
int DecSwPg(char *Line)
{   DevIni.nSwPotGal = atoi(Line);   return(true);   }

//--------------------------------------------------------------------------
// DecPotInverted: Decodieren 
//--------------------------------------------------------------------------
int DecPotInverted(char *Line)
{   DevIni.nPotInverted = atoi(Line);   return(true);   }

//--------------------------------------------------------------------------
// DecOPotInv: Decodieren 
//--------------------------------------------------------------------------
int DecOPotInv(char *Line)
{   DevIni.nOPotInv = atoi(Line);   return(true);   }

//--------------------------------------------------------------------------
// DecOGalInv: Decodieren 
//--------------------------------------------------------------------------
int DecOGalInv(char *Line)
{   DevIni.nOGalInv = atof(Line);   return(true);   }

//--------------------------------------------------------------------------
// DecGalVarVal: Decodieren 
//--------------------------------------------------------------------------
int DecGalVarVal(char *Line)
{   DevIni.dbGalVar = atof(Line);   return(true);   }

//--------------------------------------------------------------------------
// DecUnChn: Decodieren 
//--------------------------------------------------------------------------
int DecUnChn(char *Line)
{   DevIni.nUnChn = atoi(Line);   return(true);   }

//--------------------------------------------------------------------------
// DecInChn: Decodieren 
//--------------------------------------------------------------------------
int DecInChn(char *Line)
{   DevIni.nInChn  = atoi(Line);   return(true);   }

//--------------------------------------------------------------------------
// DecInActive: Decodieren 
//--------------------------------------------------------------------------
int DecInActive(char *Line)
{   DevIni.nNoiseActive = atoi(Line);   return(true);   }

//--------------------------------------------------------------------------
// DecLpcCalC0: Decodieren 
//--------------------------------------------------------------------------
int DecLpcCalC0(char *Line)
{   DevIni.dbLpcCal0 = atof(Line);   return(true);   }

//--------------------------------------------------------------------------
// DecLpcCalC1: Decodieren 
//--------------------------------------------------------------------------
int DecLpcCalC1(char *Line)
{   DevIni.dbLpcCal1 = atoi(Line);   return(true);   }

//--------------------------------------------------------------------------
// DecLpcCalC2: Decodieren 
//--------------------------------------------------------------------------
int DecLpcCalC2(char *Line)
{   DevIni.dbLpcCal2 = atof(Line);   return(true);   }

//--------------------------------------------------------------------------
// DecLpcCalC3: Decodieren 
//--------------------------------------------------------------------------
int DecLpcCalC3(char *Line)
{   DevIni.dbLpcCal3 = atof(Line);   return(true);   }

//--------------------------------------------------------------------------
// DecLpcCalC4: Decodieren 
//--------------------------------------------------------------------------
int DecLpcCalC4(char *Line)
{   DevIni.dbLpcCal4 = atof(Line);   return(true);   }

//--------------------------------------------------------------------------
// DecLpcCalC5: Decodieren 
//--------------------------------------------------------------------------
int DecLpcCalC5(char *Line)
{   DevIni.dbLpcCal5 = atof(Line);   return(true);   }

//--------------------------------------------------------------------------
// DecLpcCalC6: Decodieren 
//--------------------------------------------------------------------------
int DecLpcCalC6(char *Line)
{   DevIni.dbLpcCal6 = atof(Line);   return(true);   }

//--------------------------------------------------------------------------
// DecLpcCalC7: Decodieren 
//--------------------------------------------------------------------------
int DecLpcCalC7(char *Line)
{   DevIni.dbLpcCal7 = atof(Line);   return(true);   }

//--------------------------------------------------------------------------
// DecInstBoard: Decodieren 
//--------------------------------------------------------------------------
int DecInstBoard(char *Line)
{   DevIni.nInstBoard = atoi(Line);   return(true);   }

//--------------------------------------------------------------------------
// DecSRateId: Decodieren 
//--------------------------------------------------------------------------
int DecSRateId(char *Line)
{   DevIni.nSRateIndex = atoi(Line);   return(true);   }

//--------------------------------------------------------------------------
// DecAvValue: Decodieren 
//--------------------------------------------------------------------------
int DecAvValue(char *Line)
{   DevIni.nAvValue = atoi(Line);   return(true);   }

/*-------------------------------------------------------------------------------
Struktur Initialisieren
-------------------------------------------------------------------------------*/
void InitDevIni()
{
    
    DevIni.nDevIndex = 50;        // Geräteindex
    DevIni.nPotRev = 1;           // Hardware Rev
    DevIni.dbPotVar = 1.0;        // Variabler Faktor für das Anzeigepotential
    DevIni.dbScanVar = 1.0;       // Variabler Faktor für das Scannerpotential
    DevIni.nPotChn = 0;           // Messkanal Potential
    DevIni.nCurrChn = 1;          // Messkanal Strom
    DevIni.nAmpChn = 3;           // Messkanal Verstärker
    DevIni.nAmpActive = 0;        // Stromverstärker aktiv
    DevIni.nSwIz = 4;             // Schalter OCP/Izelle
    DevIni.nSwPotGal = 5;         // Schalter Pot/Gal
    DevIni.nPotInverted = 1;      // Potentialanzeige invertiert
    DevIni.nOPotInv = 1;          // Scanner Potential invertiert
    DevIni.nOGalInv = 1;          // Scanner Galvanostat invertiert
    DevIni.dbGalVar = 1.0;        // Variabler Faktor für Galvanostat
    DevIni.nUnChn = 4;            // Messkanal UNoise
    DevIni.nInChn = 5;            // Messkanal INoise
    DevIni.nNoiseActive = 0;      // Noisemessung aktiv
    DevIni.dbLpcCal0 = 1.0;       // 1. Faktor für LpcKalibrierung
    DevIni.dbLpcCal1 = 1.0;       // 2. Faktor für LpcKalibrierung
    DevIni.dbLpcCal2 = 1.0;       // 3. Faktor für LpcKalibrierung
    DevIni.dbLpcCal3 = 1.0;       // 4. Faktor für LpcKalibrierung
    DevIni.dbLpcCal4 = 1.0;       // 5. Faktor für LpcKalibrierung
    DevIni.dbLpcCal5 = 1.0;       // 6. Faktor für LpcKalibrierung
    DevIni.dbLpcCal6 = 1.0;       // 7. Faktor für LpcKalibrierung
    DevIni.dbLpcCal7 = 1.0;       // 8. Faktor für LpcKalibrierung
    DevIni.nInstBoard = 4;        // Installierte Messkarte
    DevIni.nSRateIndex = 3;       // Index Samplerate
    DevIni.nAvValue = 5;          // Average Value    
    
}

//--------------------------------------------------------------------------
//  #DI#  DevID-Request, Host fragt die Geräteeinstellungen ab
//--------------------------------------------------------------------------
int SendDevFile(char *Line)
{

    OpenDevIni();                  
   
    
    sprintf(HostIf.strTempBuf, "%c#DI#%s=%d#",STX, DevIdKey[0],DevIni.nDevIndex);
    sprintf(STemp, "%s=%d#", DevIdKey[1],DevIni.nPotRev);
    strcat(HostIf.strTempBuf, STemp);
    
    sprintf(STemp, "%s=%f#", DevIdKey[2],DevIni.dbPotVar);
    strcat(HostIf.strTempBuf, STemp);
    sprintf(STemp, "%s=%f#", DevIdKey[3],DevIni.dbScanVar);
    strcat(HostIf.strTempBuf, STemp);
    
    sprintf(STemp, "%s=%d#", DevIdKey[4],DevIni.nPotChn);
    strcat(HostIf.strTempBuf, STemp);
    sprintf(STemp, "%s=%d#", DevIdKey[5],DevIni.nCurrChn);
    strcat(HostIf.strTempBuf, STemp);
    sprintf(STemp, "%s=%d#", DevIdKey[6],DevIni.nAmpChn);
    strcat(HostIf.strTempBuf, STemp);
    sprintf(STemp, "%s=%d#", DevIdKey[7],DevIni.nAmpActive);
    strcat(HostIf.strTempBuf, STemp);
    sprintf(STemp, "%s=%d#", DevIdKey[8],DevIni.nSwIz);
    strcat(HostIf.strTempBuf, STemp);
    sprintf(STemp, "%s=%d#", DevIdKey[9],DevIni.nSwPotGal);
    strcat(HostIf.strTempBuf, STemp);
    sprintf(STemp, "%s=%d#", DevIdKey[10],DevIni.nPotInverted);
    strcat(HostIf.strTempBuf, STemp);
    sprintf(STemp, "%s=%d#", DevIdKey[11],DevIni.nOPotInv);
    strcat(HostIf.strTempBuf, STemp);
    sprintf(STemp, "%s=%d#", DevIdKey[12],DevIni.nOGalInv);
    strcat(HostIf.strTempBuf, STemp);
    sprintf(STemp, "%s=%f#", DevIdKey[13],DevIni.dbGalVar);
    strcat(HostIf.strTempBuf, STemp);
    sprintf(STemp, "%s=%d#", DevIdKey[14],DevIni.nUnChn);
    strcat(HostIf.strTempBuf, STemp);
    sprintf(STemp, "%s=%d#", DevIdKey[15],DevIni.nInChn);
    strcat(HostIf.strTempBuf, STemp);
    sprintf(STemp, "%s=%d#", DevIdKey[16],DevIni.nNoiseActive);
    strcat(HostIf.strTempBuf, STemp);

    sprintf(STemp, "%s=%f#", DevIdKey[17],DevIni.dbLpcCal0);
    strcat(HostIf.strTempBuf, STemp);
    sprintf(STemp, "%s=%f#", DevIdKey[18],DevIni.dbLpcCal1);
    strcat(HostIf.strTempBuf, STemp);
    sprintf(STemp, "%s=%f#", DevIdKey[19],DevIni.dbLpcCal2);
    strcat(HostIf.strTempBuf, STemp);
    sprintf(STemp, "%s=%f#", DevIdKey[20],DevIni.dbLpcCal3);
    strcat(HostIf.strTempBuf, STemp);
    sprintf(STemp, "%s=%f#", DevIdKey[21],DevIni.dbLpcCal4);
    strcat(HostIf.strTempBuf, STemp);
    sprintf(STemp, "%s=%f#", DevIdKey[22],DevIni.dbLpcCal5);
    strcat(HostIf.strTempBuf, STemp);
    sprintf(STemp, "%s=%f#", DevIdKey[23],DevIni.dbLpcCal6);
    strcat(HostIf.strTempBuf, STemp);
    sprintf(STemp, "%s=%f#", DevIdKey[24],DevIni.dbLpcCal7);
    strcat(HostIf.strTempBuf, STemp);

    sprintf(STemp, "%s=%d#", DevIdKey[25],DevIni.nInstBoard);
    strcat(HostIf.strTempBuf, STemp);
    sprintf(STemp, "%s=%d#", DevIdKey[26],DevIni.nSRateIndex);
    strcat(HostIf.strTempBuf, STemp);
    sprintf(STemp, "%s=%d#%c\r\n", DevIdKey[27],DevIni.nAvValue, ETX);
    strcat(HostIf.strTempBuf, STemp);

    SendIdTel();

    return(true);
}

//--------------------------------------------------------------------------
//  #GD#  DevID-Request, Host sendet die Geräteeinstellungen 
//--------------------------------------------------------------------------
int GetDevFile(char *Line)
{

    clSdCard.WriteFile(FileNames.DevIdFileName, Line);
    OpenDevIni();
    return(true);

}
/*-------------------------------------------------------------------------------
Parameter Schreiben
-------------------------------------------------------------------------------*/
int WriteDevFile()
{
    int Ret,i;

    if(g_SdInitSuccess == false)    // wenn SD Karte nicht vorhanden, retour
    {
        return(false);
    }
    
    Ret = clSdCard.OpenFile(FileNames.DevIdFileName, FileNames.FileWriteMode);
    
    if(Ret == false)
        return(false);  // öffnen der Datei hat nicht geklappt


    i = 0;
    sprintf(clSdCard.cSdLine, "%s=%d\r\n",DevIdKey[i],DevIni.nDevIndex);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%d\r\n",DevIdKey[i],DevIni.nPotRev);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%f\r\n",DevIdKey[i],DevIni.dbPotVar);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%f\r\n",DevIdKey[i],DevIni.dbScanVar);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%d\r\n",DevIdKey[i],DevIni.nPotChn);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%d\r\n",DevIdKey[i],DevIni.nCurrChn);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%d\r\n",DevIdKey[i],DevIni.nAmpChn);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%d\r\n",DevIdKey[i],DevIni.nAmpActive);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%d\r\n",DevIdKey[i],DevIni.nSwIz);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%d\r\n",DevIdKey[i],DevIni.nSwPotGal);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%d\r\n",DevIdKey[i],DevIni.nPotInverted);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%d\r\n",DevIdKey[i],DevIni.nOPotInv);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%d\r\n",DevIdKey[i],DevIni.nOGalInv);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%f\r\n",DevIdKey[i],DevIni.dbGalVar);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%d\r\n",DevIdKey[i],DevIni.nUnChn);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%d\r\n",DevIdKey[i],DevIni.nInChn);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%d\r\n",DevIdKey[i],DevIni.nNoiseActive);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%f\r\n",DevIdKey[i],DevIni.dbLpcCal0);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%f\r\n",DevIdKey[i],DevIni.dbLpcCal1);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%f\r\n",DevIdKey[i],DevIni.dbLpcCal2);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%f\r\n",DevIdKey[i],DevIni.dbLpcCal3);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%f\r\n",DevIdKey[i],DevIni.dbLpcCal4);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%f\r\n",DevIdKey[i],DevIni.dbLpcCal5);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%f\r\n",DevIdKey[i],DevIni.dbLpcCal6);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%f\r\n",DevIdKey[i],DevIni.dbLpcCal7);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%d\r\n",DevIdKey[i],DevIni.nInstBoard);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%d\r\n",DevIdKey[i],DevIni.nSRateIndex);
    clSdCard.WriteLine();
    i++;
    sprintf(clSdCard.cSdLine, "%s=%d\r\n",DevIdKey[i],DevIni.nAvValue);
    clSdCard.WriteLine();
    i++;

    clSdCard.CloseFile();
    return(true);
}