426 lines
15 KiB
Plaintext
Executable File
426 lines
15 KiB
Plaintext
Executable File
//**********************************************************************
|
|
//*
|
|
//* Nacharbeitssource für INPA
|
|
//*
|
|
//* Sourcedatei AUTOINPA.SRC
|
|
//*
|
|
//* ACHTUNG: neue MOSTCAN-Gateway müssen hier eingetragen werden!!
|
|
//*
|
|
//**********************************************************************
|
|
//* History :
|
|
//* 02.12.2007 fw V1.00 Ergänzung MOSTCAN-Gateway
|
|
//* 25.01.2007 fw V1.01 Korrektur Fehler bei CHAMP und MASK2
|
|
//**********************************************************************
|
|
#include "inpa.h"
|
|
#include "BMW_STD.H"
|
|
|
|
// Titel, Version, Verantwortung, Steuergerät
|
|
string titel ="Skriptselektor"; // Titel Nacharbeitsprogramm
|
|
string version="1.01"; // Version Nacharbeitsprogramm
|
|
string origin ="BMW TI-431 Weber"; // Verantwortung Nacharbeitsprogramm
|
|
|
|
// Alle möglichen Steuergerät
|
|
string sgbd ="ZGW_01,MC_GW,RAD2_GW,CCCG60,MASK2_GW,MCGW60,CHAMP_GW,CICR_GW";
|
|
|
|
string gruppe ="G_ZGW,D_MOSTGW"; // zu durchsuchende Gruppendatei
|
|
|
|
string speicher_lesen_parameter="LAR;FLASH;UIFM;-ROMI;-ROMX;-RAMIS;-RAMIL;-RAMXX;-NVRAM";
|
|
// Moegliche Speicher-Parameter: "LAR;FLASH;UIFM;ROMI;ROMX;RAMIS;RAMIL;RAMXX;NVRAM";
|
|
// Bei Leerstring erfolgt kein Menüpunkt Speicher Lesen
|
|
|
|
// allgemeine globale Variable
|
|
string text_var;
|
|
real zahlen_var;
|
|
int ganz_zahl;
|
|
bool logik_var;
|
|
string job_state; // JOB_STATUS Variable
|
|
int input_state; // Eingabestatus
|
|
int input_ok=0; // Eingabe mit OK beendet
|
|
|
|
bool gefunden=FALSE;
|
|
string skriptname;
|
|
|
|
|
|
// ****************************************************
|
|
// *** Initialisierungsfunktion ***
|
|
// ****************************************************
|
|
ScriptInit()
|
|
{
|
|
|
|
settitle(titel+" Version "+version);
|
|
}
|
|
|
|
// ****************************************************
|
|
// *** M e n ü a u f b a u ***
|
|
// ****************************************************
|
|
|
|
|
|
|
|
//**********************************************************************
|
|
//*
|
|
//* SgbdInpaCheck
|
|
//*
|
|
//* Überprüfung ob SGBD zu INPA passt
|
|
//*
|
|
//**********************************************************************
|
|
SgbdInpaCheck()
|
|
{
|
|
string sgbd_version; // für Versionskontrolle
|
|
string inpa_version; // für Versionskontrolle
|
|
string inpa_sprache="deutsch"; // für Sprachvariante
|
|
string variante="???"; // für Variantenkontrolle
|
|
string err_text; // Fehlertext
|
|
int errorcode; // Errorcode
|
|
bool fehlerflag; // Fehlerflag
|
|
string temp;
|
|
string temp1;
|
|
string temp2;
|
|
int i;
|
|
int k;
|
|
int kk; // für neue VersionsnummernKontrolle
|
|
int ii;
|
|
int a;
|
|
int aa;
|
|
int i1;
|
|
int i2;
|
|
int i3; // für neue VersionsnummernKontrolle
|
|
string sgbd_String_Lang;
|
|
string sgbd_von_inpa_version;
|
|
string ver_temp;
|
|
string ver_temp1;
|
|
string ver_temp2;
|
|
string ver_temp3="--";
|
|
real Version_SGBD;
|
|
real Version_INPA;
|
|
string CurDir; // Zur Prüfung ob Gruppendatei exisiert
|
|
int ret_int;
|
|
int Size;
|
|
int filecheck;
|
|
string hinweis_text;
|
|
int group_number;
|
|
string ediabas_dir1;
|
|
string ediabas_dir2;
|
|
string ediabas_sim;
|
|
string ediabas_ecu;
|
|
string BS;
|
|
|
|
chr( 9 , HT );
|
|
chr( 10, LF );
|
|
chr( 13, CR );
|
|
chr( 92, BS );
|
|
CRLF = CR + LF;
|
|
|
|
settitle(titel+" Version "+version);
|
|
a=0;
|
|
ii=0;
|
|
i3=0;
|
|
kk=0;
|
|
aa=0;
|
|
i=0;
|
|
k=0;
|
|
fehlerflag=FALSE;
|
|
temp1="";
|
|
temp2="";
|
|
group_number = 0;
|
|
ediabas_dir1 = "\ediabas";
|
|
ediabas_dir2 = "\ec-apps\ediabas";
|
|
ediabas_sim = "sim";
|
|
ediabas_ecu = "ecu";
|
|
|
|
// waiting dialogue
|
|
userboxopen(0,7,15,5,50,"Skriptselektor","");
|
|
userboxftextout(0,"Steuergeräte Identifizierung läuft! ... bitte warten",1,3,0,0);
|
|
|
|
// get current dir
|
|
Size=256;
|
|
space(CurDir,Size);
|
|
GetCurrentDirectory(256, CurDir, ret_int);
|
|
|
|
//start checking groups
|
|
instr(i,k,","+gruppe+",",",");
|
|
while ((i >= 0) && (fehlerflag == FALSE))
|
|
{
|
|
k=i+1;
|
|
instr(i,k,","+gruppe+",",",");
|
|
if (i >= 0)
|
|
{
|
|
// cut out group
|
|
midstr(temp,","+gruppe+",",k,i-k);
|
|
|
|
//check if group file is present
|
|
SetCurrentDirectory(ediabas_dir1+"\\"+ediabas_ecu, ret_int);
|
|
fileexist(temp+".GRP",filecheck);
|
|
SetCurrentDirectory(CurDir, ret_int);
|
|
if (filecheck == 0) group_number = group_number+1;
|
|
else
|
|
{
|
|
SetCurrentDirectory(ediabas_dir2+"\\"+ediabas_ecu, ret_int);
|
|
fileexist(temp+".GRP",filecheck);
|
|
SetCurrentDirectory(CurDir, ret_int);
|
|
if (filecheck == 0) group_number = group_number+1;
|
|
}
|
|
|
|
// get variant via init
|
|
INPAapiJob(temp,"INITIALISIERUNG","","");
|
|
INP1apiResultText(fehlerflag,variante,"VARIANTE",0,"");
|
|
if (fehlerflag == TRUE) gruppe=temp;
|
|
else
|
|
{
|
|
INP1apiErrorCode(errorcode);
|
|
if (errorcode == 36)//Fehlende oder fehlerhafte Simulationsdatei
|
|
{
|
|
SetCurrentDirectory(ediabas_dir1+ediabas_sim, ret_int);
|
|
fileexist(temp+".SIM",filecheck);
|
|
SetCurrentDirectory(CurDir, ret_int);
|
|
if (filecheck == 0)
|
|
{
|
|
temp1= temp1+", "+temp+".SIM";//Fehlerhafte Simulationsdatei
|
|
}
|
|
else
|
|
{
|
|
//check also new ediabas directory
|
|
SetCurrentDirectory(ediabas_dir2+ediabas_sim, ret_int);
|
|
fileexist(temp+".SIM",filecheck);
|
|
SetCurrentDirectory(CurDir, ret_int);
|
|
if (filecheck == 0)
|
|
{
|
|
temp1= temp1+", "+temp+".SIM";//Fehlerhafte Simulationsdatei
|
|
}
|
|
else
|
|
{
|
|
temp2= temp2+", "+temp+".SIM";//Fehlende Simulationsdatei
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
instr(i,0,gruppe,"d");//erstes Zeichen ein 'd'?
|
|
instr(k,0,gruppe,"D");//erstes Zeichen ein 'D'?
|
|
if ((i == 0) || (k == 0))
|
|
hinweis_text= "das Steuergerät liefert einen falschen Varianten- und / oder Diagnose-Index.";// bis F01: Gruppendateien fangen mit D_... an
|
|
else hinweis_text= "das Steuergerät liefert einen falschen SGBD-Index.";//gilt ab F01, Gruppendateien fangen mit G_... an
|
|
|
|
if (fehlerflag == FALSE)
|
|
{
|
|
//Fehlende oder fehlerhafte Gruppen-Simulationsdatei
|
|
if (errorcode == 36)
|
|
{
|
|
//Fehlerhafte Simulationsdatei
|
|
if (temp1 != "")
|
|
{
|
|
strlen(k,temp1);
|
|
instr(i,k,temp1+",",",");//letztes Zeichen ein ','?
|
|
if (i != -1) k= k-1; //Zeichenlänge um 1 kürzen
|
|
instr(i,0,temp1+",",",");//erstes Zeichen ein ','?
|
|
if (i == 0) midstr(temp1,temp1,1,k);//Kommata vor und hinter temp1 ausschneiden
|
|
temp1= "Fehlerhafte Simulationsdatei: "+temp1;
|
|
}
|
|
//Fehlende Simulationsdatei
|
|
if (temp2 != "")
|
|
{
|
|
strlen(k,temp2);
|
|
instr(i,k,temp2+",",",");//letztes Zeichen ein ','?
|
|
if (i != -1) k= k-1; //Zeichenlänge um 1 kürzen
|
|
instr(i,0,temp2+",",",");//erstes Zeichen ein ','?
|
|
if (i == 0) midstr(temp2,temp2,1,k);//Kommata vor und hinter temp2 ausschneiden
|
|
temp2= "Fehlende Simulationsdatei : "+temp2;
|
|
}
|
|
|
|
userboxclose(0);
|
|
messagebox("Variantenkontrolle",
|
|
"Fehler!"+
|
|
temp1+//Fehlerfafte Gruppen-Simulationsdateien
|
|
temp2+//Fehlende -//-
|
|
CRLF+CRLF+
|
|
". Das Programm wird abgebrochen!");
|
|
exit();
|
|
}
|
|
|
|
// keine einzige Gruppendatei gefunden
|
|
if (group_number == 0)
|
|
{
|
|
userboxclose(0);
|
|
messagebox("Variantenkontrolle",
|
|
"Fehler! Keine der Gruppendatein : "+gruppe+
|
|
" (.GRP) existieren im Verzeichnis "+CRLF+
|
|
ediabas_dir1+BS+ediabas_ecu+" oder "+ediabas_dir2+BS+ediabas_ecu+
|
|
"."+CRLF+
|
|
CRLF+
|
|
"Aktualisieren Sie SGBDen, Gruppendateien und INPA Skripte regelmäßig!"+CRLF+CRLF+
|
|
"Das Programm wird abgebrochen!");
|
|
}
|
|
else
|
|
{
|
|
instr(i,0,gruppe,",");
|
|
if (i>=-1)
|
|
{
|
|
userboxclose(0);
|
|
messagebox("Variantenkontrolle",
|
|
"Fehler! Keine Rückmeldung bei Aufruf über Gruppendatei : "+gruppe+" (.GRP)."+CRLF+CRLF+
|
|
"Steuergerät nicht verbaut oder Kommunikationsstörung. "+CRLF+CRLF+
|
|
"Das Programm wird abgebrochen!");
|
|
}
|
|
else
|
|
{
|
|
//Gruppendatei vorhanden?
|
|
SetCurrentDirectory(ediabas_dir1+"\\"+ediabas_ecu, ret_int);
|
|
fileexist(gruppe+".GRP",filecheck);
|
|
SetCurrentDirectory(CurDir, ret_int);
|
|
// check second ediabas directory
|
|
if (filecheck != 0)
|
|
{
|
|
SetCurrentDirectory(ediabas_dir2+"\\"+ediabas_ecu, ret_int);
|
|
fileexist(gruppe+".GRP",filecheck);
|
|
SetCurrentDirectory(CurDir, ret_int);
|
|
}
|
|
if (filecheck == 0)//Gruppendatei vorhanden, SGBD-, Kommunikationsfehler hier ausgeben
|
|
{
|
|
INP1apiErrorText(err_text);//Fehler beim Aufruf der VARIANTE?
|
|
if (errorcode == 92)//92=SYS-0002: SG-Variantenbeschreibungsdatei (SGBD) nicht gefunden
|
|
{
|
|
//T_GRTB.PRG vorhanden?
|
|
SetCurrentDirectory(ediabas_dir1+"\\"+ediabas_ecu, ret_int);
|
|
fileexist("T_GRTB.PRG",filecheck);
|
|
SetCurrentDirectory(CurDir, ret_int);
|
|
// check second ediabas directory
|
|
if (filecheck != 0)
|
|
{
|
|
SetCurrentDirectory(ediabas_dir2+"\\"+ediabas_ecu, ret_int);
|
|
fileexist("T_GRTB.PRG",filecheck);
|
|
SetCurrentDirectory(CurDir, ret_int);
|
|
}
|
|
if (filecheck == 0)//T_GRTB.PRG ist vorhanden, somit fehlt die SGBD.
|
|
{
|
|
userboxclose(0);
|
|
messagebox("Variantenkontrolle",
|
|
"Fehler!"+
|
|
err_text+"."+CRLF+CRLF+
|
|
"Das Steuergerät läßt sich zwar über die Gruppendatei: "+gruppe+".GRP"+" ansprechen,"+
|
|
"aber zur Diagnose fehlt eine entsprechende SGBD (*.PRG) im Verzeichnis "+CRLF+
|
|
ediabas_dir1+BS+ediabas_ecu+" oder "+ediabas_dir2+BS+ediabas_ecu+
|
|
"."+CRLF+CRLF+
|
|
"Aktualisieren Sie SGBDen, Gruppendateien und INPA Skripte regelmäßig!"
|
|
+CRLF+CRLF+
|
|
"Das Programm wird abgebrochen!");
|
|
}
|
|
else//T_GRT.PRG fehlt
|
|
{
|
|
userboxclose(0);
|
|
messagebox("Variantenkontrolle",
|
|
"Fehler!"+
|
|
err_text+"."+CRLF+CRLF+
|
|
"Die Datei T_GRTB.PRG fehlt im Verzeichnis "+CRLF
|
|
+ediabas_dir1+BS+ediabas_ecu+" oder "+ediabas_dir2+BS+ediabas_ecu+
|
|
"."+CRLF+CRLF+
|
|
"Aktualisieren Sie SGBDen, Gruppendateien und INPA Skripte regelmäßig!"
|
|
+CRLF+CRLF+
|
|
"Das Programm wird abgebrochen!");
|
|
}
|
|
}
|
|
else if (errorcode == 102)//102= Identification error
|
|
{
|
|
instr(i,0,gruppe,"d");//erstes Zeichen ein 'd'?
|
|
instr(k,0,gruppe,"D");//erstes Zeichen ein 'D'?
|
|
if ((i == 0) || (k == 0))
|
|
temp1= "das Steuergerät liefert einen falschen Varianten- und / oder Diagnose-Index.";// bis F01: Gruppendateien fangen mit D_... an
|
|
else temp1= "das Steuergerät liefert einen falschen SGBD-Index.";//gilt ab F01, Gruppendateien fangen mit G_... an
|
|
userboxclose(0);
|
|
messagebox("Variantenkontrolle",
|
|
"Fehler! Aufruf über Gruppendatei : "+gruppe+".GRP."+CRLF+
|
|
err_text+". "+CRLF+CRLF+
|
|
"Sie besitzen entweder eine veraltete T_GRTB.PRG Datei im Verzeichnis "+CRLF+
|
|
ediabas_dir1+BS+ediabas_ecu+" oder "+ediabas_dir2+BS+ediabas_ecu+CRLF+
|
|
", und / oder"+
|
|
hinweis_text+CRLF+CRLF+
|
|
"Das Programm wird abgebrochen!");
|
|
}
|
|
else //alle anderen Fehler
|
|
{
|
|
userboxclose(0);
|
|
messagebox("Variantenkontrolle",
|
|
"Fehler! Aufruf über Gruppendatei : "+gruppe+".GRP."+CRLF+CRLF+
|
|
err_text+"."+CRLF+CRLF+
|
|
"Das Programm wird abgebrochen!");
|
|
}
|
|
}
|
|
else//Gruppendatei nicht vorhanden
|
|
{
|
|
userboxclose(0);
|
|
messagebox("Variantenkontrolle",
|
|
"Fehler! Gruppendatei : "+gruppe+".GRP "+
|
|
"existiert nicht im Verzeichnis "+CRLF+
|
|
ediabas_dir1+BS+ediabas_ecu+" oder "+ediabas_dir2+BS+ediabas_ecu+CRLF+CRLF+
|
|
"Aktualisieren Sie SGBDen, Gruppendateien und INPA Skripte regelmäßig!"+CRLF+CRLF+
|
|
"Das Programm wird abgebrochen!");
|
|
}
|
|
}
|
|
}
|
|
exit();
|
|
}
|
|
|
|
// INPA Tabelle um Variante zu finden
|
|
|
|
if( variante == "ZGW_01") { gefunden = TRUE; skriptname="ZGW_01"; }
|
|
if( variante == "MC_GW") { gefunden = TRUE; skriptname="MC_GW"; }
|
|
if( variante == "MASK2GW") { gefunden = TRUE; skriptname="MASK2_GW"; }
|
|
if( variante == "MCGW60") { gefunden = TRUE; skriptname="MCGW60"; }
|
|
if( variante == "RAD2_GW") { gefunden = TRUE; skriptname="RAD2_GW"; }
|
|
if( variante == "CCCG60") { gefunden = TRUE; skriptname="CCCG60"; }
|
|
if( variante == "CHAMPGW") { gefunden = TRUE; skriptname="CHAMP_GW"; }
|
|
if( variante == "CICR_GW") { gefunden = TRUE; skriptname="CICR_GW"; }
|
|
|
|
/* Muster
|
|
if( variante == "sgbd") { gefunden = TRUE; skriptname="inpa"; }
|
|
*/
|
|
|
|
if( gefunden ) { scriptchange(skriptname); }
|
|
else
|
|
{
|
|
userboxclose(0);
|
|
messagebox("Skriptselektor",
|
|
"Skript "+ variante+ " aus Gruppe "+gruppe+" gefunden."+CRLF+CRLF+
|
|
"Aber kein passendes INPA Skript bisher zugeordnet."+CRLF+CRLF+
|
|
"Bitte Rückmeldung an den Autor: "+origin);
|
|
exit();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
// **************************
|
|
// *** inpainit, inpaexit ***
|
|
// **************************
|
|
inpainit()
|
|
{
|
|
string s1;
|
|
|
|
INPAapiInit();
|
|
//sg_adr=0x12;
|
|
settitle(titel+" Version "+version);
|
|
//aktivierungsbedingung(ab_0000,ab_0001,ab_0002,ab_0004,ab_0008,ab_0010,ab_0020,ab_0040,ab_0080,ab_0200,ab_0400,ab_0800);
|
|
//zyklusbeschreibung(st01,st02,st03,st04,st05,x001,x002,x003,x004,x005,x101,x102,x103,x104,x105,t01,t02,t03,t04,t05,tv);
|
|
SgbdInpaCheck();
|
|
|
|
/* Über Identifikation wird der Programmstand abgefragt */
|
|
|
|
//stop();
|
|
|
|
|
|
|
|
|
|
ScriptInit();
|
|
}
|
|
|
|
inpaexit()
|
|
{
|
|
INPAapiEnd();
|
|
|
|
|
|
}
|
|
|
|
|
|
// -- EOF --
|