003
17.06.2003, 12:13 Uhr
~Andrea Boeswett
Gast
|
Hi,
leider tut bei mir das Modem nichts, es meldet am Anfang immer einen Fehler, dannach aber OK. Aber bei ATD <Nummer> wählt es nichts, bringt nur die Meldung das alles OK ist.
Der Code:
#include <windows.h> #include <iostream.h> #include <stdio.h>
#define COMPORT "COM3" #define TEST "AT;" #define ANRUFEN "ATD <Nummer>;" //anzurufende Nummer #define AUFLEGEN "ATH;" #define ANNEHMEN "ATA;"
void main() { //Initialisieren der Schnittstelle HANDLE h_ComPort = CreateFile(COMPORT, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0 , NULL);
cout << "\nHandle auf Com-Port: " << PORT << " - " << h_ComPort << endl;
DCB dcb; COMMTIMEOUTS cto;
// Übertragungsparameter abrufen cout << "GetCommState: " << GetCommState(h_ComPort, &dcb) << endl;
//hier kannst du die Übertragunsparameter definieren diese 4 sollten die wichtigsten sein, an sonsten einfach mal die members von DCB anschauen dcb.BaudRate = CBR_9600; dcb.ByteSize = 8; dcb.Parity =NOPARITY; dcb.StopBits = ONE5STOPBITS; //ONESTOPBIT;
// Übertragungsparameter übernehmen cout << "SetCommState: " << SetCommState(h_ComPort, &dcb) << endl;
//TimeOut-Werte abrufen cout << "GetCommTimeouts: " << GetCommTimeouts(h_ComPort,&cto) << endl; //TimeOut für die COM-Schnittstelle definieren cto.ReadIntervalTimeout = 100; cto.ReadTotalTimeoutMultiplier = 0; cto.ReadTotalTimeoutConstant = 0; cto.WriteTotalTimeoutMultiplier = 0; cto.WriteTotalTimeoutConstant = 0;
//TimeOut-Werte setzen cout << "SetCommTimeouts: " << SetCommTimeouts(h_ComPort,&cto) << endl;
//lesen ist mit Readfile, schreiben analog mit Writefile int ErrorCode;
char szATCommand[1024];//[100]; DWORD nNumberOfBytesWritten;
char szModemAnswer[32]; DWORD nNumberOfBytesRead;
// Wiederholungsschleife char d; bool repeat = true; while ( repeat ) { // zurücksetzen for(int j=0, i=0; j<=sizeof(szModemAnswer), i<=sizeof(szATCommand); j++, i++) { szATCommand[i]=NULL; szModemAnswer[j]=NULL; }
printf("\n(T)est, (A)nrufen, A(u)flegen, A(n)nehmen, (c)hecken, (Q)uit ?"); cin >> d; switch(d){ case 't': strcpy(szATCommand, TEST); break; case 'a': strcpy(szATCommand, ANRUFEN); break; case 'u': strcpy(szATCommand, AUFLEGEN); break; case 'n': strcpy(szATCommand, ANNEHMEN); break; case 'c': while ( repeat ) { // zurücksetzen szATCommand[1024]=NULL; szModemAnswer[32]=NULL;
if(szModemAnswer!= "RING") { //Lesen ErrorCode = ReadFile(h_ComPort, szModemAnswer, sizeof(szModemAnswer), &nNumberOfBytesRead, NULL);
if(ErrorCode == 0) { cout << "Fehler bei ReadFile: " << ErrorCode << endl; } else { cout << "\nReadFile OK!\n" << "Rueckgabe vom Modem: " << szModemAnswer << endl; } } else { strcpy(szATCommand, ANNEHMEN); repeat = false; } } break; case 'q': strcpy(szATCommand, TEST); repeat = false; break; default: printf( "\nDiese Taste ist nicht belegt: %c", d); }
//Schreiben ErrorCode = WriteFile(h_ComPort, szATCommand, strlen(szATCommand), &nNumberOfBytesWritten, NULL);
if(ErrorCode == 0) { cout << "Fehler bei WriteFile: " << ErrorCode << endl; } else { cout << "\nWriteFile OK!\n" << "Geschrieben wurden: " << szATCommand << endl; }
//Lesen ErrorCode = ReadFile(h_ComPort, szModemAnswer, sizeof(szModemAnswer), &nNumberOfBytesRead, NULL);
if(ErrorCode == 0) { cout << "Fehler bei ReadFile: " << ErrorCode << endl; } else { cout << "\nReadFile OK!\n" << "Rueckgabe vom Modem: " << szModemAnswer << endl; }
}//while
//am ende schliessen nicht vergessen cout << "\nClose Handle: " << CloseHandle(h_ComPort) << endl; }
Weiß jemand was ich falsch mache? Ich verstehe das nicht, fehlen irgendwelche wichtigen Parameter. Unter HyperTerminal bekomme ich ein Verbindung, daher die Modems sind in Ordnung.
Gruß Andrea |