Hallo Leute,
zur Zeit sitze ich an einem kleinen Projekt, bei dem ich über sogenannte AT-Befehle mein Handy über die serielle Schnittstelle steuern kann.
Allerdings läuft das im Moment nur über Hyperterminal und manuelle Eingabe der Befehle.
Ich würde das Ganze aber gerne in C++ automatisieren.
Nun zu meinem Problem:
Wie steuer ich die serielle Schnittstelle in C++ richtig an und wie kann ich einen Befehl ("z.B.: atdHandynummer) abschicken.
Ich hab schon den ganzen Nachmittag danach gesucht, nur finde ich nichts. Bis jetzt bin ich soweit gekommen:
meine cpp-Datei:
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main (){
DCB sDcb;
HANDLE hFile;
COMMTIMEOUTS sTo;
hFile=CreateFile("\\\\.\\COM1",GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if(hFile==INVALID_HANDLE_VALUE)return 0;
memset(&sDcb,0,sizeof(sDcb));
sDcb.DCBlength = sizeof(sDcb);
sDcb.BaudRate = 9600; // Baudrate
sDcb.fParity = FALSE;
sDcb.fBinary = TRUE;
sDcb.Parity = NOPARITY;// Kein Paritybit
sDcb.StopBits = ONESTOPBIT;
sDcb.fOutxCtsFlow = FALSE;
sDcb.fOutxDsrFlow = FALSE;
sDcb.fDtrControl = DTR_CONTROL_ENABLE;
sDcb.fRtsControl = RTS_CONTROL_ENABLE;
sDcb.fDsrSensitivity = FALSE;
sDcb.fAbortOnError = FALSE;
sDcb.ByteSize = 8; // 8 Datenbits
if(!SetCommState(hFile,&sDcb))
{
CloseHandle(hFile);
return 0;
}
sTo.ReadIntervalTimeout = MAXDWORD; // 0 ms Read-Tomeout
sTo.ReadTotalTimeoutMultiplier = 0;
sTo.ReadTotalTimeoutConstant = 0;
sTo.WriteTotalTimeoutMultiplier= 1; // 1*2 ms Write Timeout
sTo.WriteTotalTimeoutConstant = 2;
if(!SetCommTimeouts((HANDLE)hFile,&sTo))
{
CloseHandle(hFile);
return 0;
}
DWORD dwCount;
char cData[16]="atdHandynummer"; //für Handynummer müsste da jetzt ne Nummer hin.
ReadFile (hFile,cData,16,&dwCount,0);
WriteFile(hFile,cData,16,&dwCount,0);
system("pause");
}
Der obere Kram ist zum Öffnen der Schnittstelle (ich hoffe, dass das alles so richtig ist).
Nur bei den letzten beiden Absätzen tut sich nichts (normalerweise müsste das Handy daraufhin die Nummer wählen).
Ich hoffe hier kann mir jemand weiterhelfen .....
zur Zeit sitze ich an einem kleinen Projekt, bei dem ich über sogenannte AT-Befehle mein Handy über die serielle Schnittstelle steuern kann.
Allerdings läuft das im Moment nur über Hyperterminal und manuelle Eingabe der Befehle.
Ich würde das Ganze aber gerne in C++ automatisieren.
Nun zu meinem Problem:
Wie steuer ich die serielle Schnittstelle in C++ richtig an und wie kann ich einen Befehl ("z.B.: atdHandynummer) abschicken.
Ich hab schon den ganzen Nachmittag danach gesucht, nur finde ich nichts. Bis jetzt bin ich soweit gekommen:
meine cpp-Datei:
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main (){
DCB sDcb;
HANDLE hFile;
COMMTIMEOUTS sTo;
hFile=CreateFile("\\\\.\\COM1",GENERIC_READ|GENERIC_WRITE,0,0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
if(hFile==INVALID_HANDLE_VALUE)return 0;
memset(&sDcb,0,sizeof(sDcb));
sDcb.DCBlength = sizeof(sDcb);
sDcb.BaudRate = 9600; // Baudrate
sDcb.fParity = FALSE;
sDcb.fBinary = TRUE;
sDcb.Parity = NOPARITY;// Kein Paritybit
sDcb.StopBits = ONESTOPBIT;
sDcb.fOutxCtsFlow = FALSE;
sDcb.fOutxDsrFlow = FALSE;
sDcb.fDtrControl = DTR_CONTROL_ENABLE;
sDcb.fRtsControl = RTS_CONTROL_ENABLE;
sDcb.fDsrSensitivity = FALSE;
sDcb.fAbortOnError = FALSE;
sDcb.ByteSize = 8; // 8 Datenbits
if(!SetCommState(hFile,&sDcb))
{
CloseHandle(hFile);
return 0;
}
sTo.ReadIntervalTimeout = MAXDWORD; // 0 ms Read-Tomeout
sTo.ReadTotalTimeoutMultiplier = 0;
sTo.ReadTotalTimeoutConstant = 0;
sTo.WriteTotalTimeoutMultiplier= 1; // 1*2 ms Write Timeout
sTo.WriteTotalTimeoutConstant = 2;
if(!SetCommTimeouts((HANDLE)hFile,&sTo))
{
CloseHandle(hFile);
return 0;
}
DWORD dwCount;
char cData[16]="atdHandynummer"; //für Handynummer müsste da jetzt ne Nummer hin.
ReadFile (hFile,cData,16,&dwCount,0);
WriteFile(hFile,cData,16,&dwCount,0);
system("pause");
}
Der obere Kram ist zum Öffnen der Schnittstelle (ich hoffe, dass das alles so richtig ist).
Nur bei den letzten beiden Absätzen tut sich nichts (normalerweise müsste das Handy daraufhin die Nummer wählen).
Ich hoffe hier kann mir jemand weiterhelfen .....