M
Hi nochmal an alle!
Also, ich bin jetzt schon ein gehöriges Stück weiter, das Anmeldeskript steht und im Prinzip läuft auch alles, bis auf folgendes:
Wenn das Programm zum ersten Mal nach dem Hochfahren aufgerufen wird, spuckt es anstelle des in szBefehl gespeicherten Befehls einfach eine leere Zeile aus und es passiert nichts. Ruft man dann das HyperTerminal auf und verbindet sich nur kurz mit dem Modem, legt wieder auf und geht wieder raus, dann funktioniert das Programm meistens, bis man runterfährt, manchmal kommt zwischendurch auch nochmal eine leere Zeile anstatt dem Befehl, woran kann das liegen? Habe ich beim öffnen/schliessen des Handles irgendeinen Fehler gemacht oder muss die Schnittstelle noch irgendwie initialisiert werden?
Skript sieht jetzt so aus:
void auflegen(HANDLE comm);
//Parameter dieser Funktion sind das Passwort und die Nummer sowie die
//Länge des Passworts (sizeof(szPass))
int check(char *szNummer, char *szPass, int nLength)
{
//Variablendefinition
char szPrint[160]=""; char szBefehl[]="AT\r";
unsigned long NumBytesWritten; unsigned long NumberOfBytesRead;
//COM Port über die Windows API öffnen
HANDLE comm=CreateFile("COM2",GENERIC_WRITE|GENERIC_READ,0,0,OPEN_EXISTING,0,0);
//Struktur für Timeoutzeiten
typedef struct _COMMTIMEOUTS // ctmo
{
DWORD ReadIntervalTimeout;
DWORD ReadTotalTimeoutMultiplier;
DWORD ReadTotalTimeoutConstant;
DWORD WriteTotalTimeoutMultiplier;
DWORD WriteTotalTimeoutConstant;
} COMMTIMEOUTS,*LPCOMMTIMEOUTS;
COMMTIMEOUTS timeout;
//Timeouts werden so gesetzt, damit falls das Modem nicht zurückruft, das
//Programm nicht abstürzt
timeout.ReadIntervalTimeout=0;
timeout.ReadTotalTimeoutMultiplier=0;
timeout.ReadTotalTimeoutConstant=1000;
timeout.WriteTotalTimeoutMultiplier=0;
timeout.WriteTotalTimeoutConstant=1000;
strset(szPrint,'\0');
if (comm==INVALID_HANDLE_VALUE) //Ist der Port korrekt geöffnet?
{
fprintf(stderr, "Schnittstelle belegt!");
CloseHandle(comm);
exit (1);
}
SetCommTimeouts(comm,&timeout); //obige Struktur findet Anwendung
//Evtl. verbleibende Zeichen im Modem Puffer löschen
ReadFile(comm, &szPrint, 159, &NumberOfBytesRead, NULL);
strset(szPrint,'\0');
//Modem mit "AT" initialisieren
WriteFile(comm, &szBefehl, sizeof(szBefehl), &NumBytesWritten, NULL);
if(NumBytesWritten==0)
{
fprintf(stderr, "Es ist ein Fehler aufgetreten.\nBitte "
"pr\201fen Sie, ob das Modem angeschlossen und eingeschaltet "
"ist!");
CloseHandle(comm);
exit (2);
}
ReadFile(comm, &szPrint, 159, &NumberOfBytesRead, NULL);
printf("%s\n",szPrint);
...
void auflegen(HANDLE comm)
{
char szAuflegen[]="ATH0\r"; unsigned long bla;
char szPrint[160]="";
strset(szPrint,'\0');
//Verbindung trennen, Handle schliessen
WriteFile(comm, &szAuflegen, sizeof(szAuflegen), &bla, NULL);
/*ReadFile(comm, &szPrint, 159, &NumberOfBytesRead, NULL);*/
printf("%s\n",szPrint);
strset(szPrint,'\0');
CloseHandle(comm);
}
Wäre nett, wenn mir nochmal jemand helfen könnte