ERLEDIGT
NEIN
NEIN
ANTWORTEN
3
3
ZUGRIFFE
3660
3660
EMPFEHLEN
-
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 .....
-
Sieht so weit eigentlich ok aus.
Was soll das ReadFile denn da vorne? Schickt das Handy dauernd etwas? Sonst bleibt das Programm nämlich bei ReadFile stehen und wartet, bis 16 Bytes angekommen sind.
-
Das weiß ich eben nicht so genau ...
Ich hab den Code zum Senden im Internet gefunden, mit dem Kommentar, dass man so etwas senden kann ...
Das Programm bleibt dort aber auch nicht stehen .... das "rauscht" so durch und landet beim "Pause"-Befehl.
In Hyperterminal ist es ja so, dass jede Eingabe erst zu sehen ist, wenn das Handy das Echo dazu gesendet hat (die Verbindung also ok ist).
Kann es also sein, dass ich immer erst ein Zeichen senden muss und dann auf die Antwort des Handys warte bis ich das nächste Zeichen senden kann
-
19.04.10 14:07 #4Chriss612 Tutorials.de Gastzugang
schon uralt ich weiß aber falls jmd auch sowas sucht und nich weiß wieso die nummer nicht gewählt wird:
DWORD dwCount;
char cData[16]="atdHandynummer\r"; //für Handynummer müsste da jetzt ne Nummer hin.
WriteFile(hFile,cData,16,&dwCount,0);
system("pause");
dann gehts =)
Ähnliche Themen
-
[c++/c#] Kommunikation über Serielle Schnittstelle/PCI Einsteckkarte
Von Matthias Hembrock im Forum C/C++Antworten: 1Letzter Beitrag: 20.09.10, 16:38 -
Daten über serielle Schnittstelle (com1) senden?
Von Dojo im Forum VisualStudio & MFCAntworten: 3Letzter Beitrag: 28.07.07, 09:16 -
Senden via Serielle Schnittstelle?
Von paddz im Forum CGI, Perl, Python, Ruby, Power ShellAntworten: 2Letzter Beitrag: 11.04.06, 19:54 -
hex Steuerbefehle an serielle Schnittstelle senden
Von jower im Forum C/C++Antworten: 19Letzter Beitrag: 29.04.05, 10:06 -
Terminal über Serielle Schnittstelle
Von knackpunkt83 im Forum Linux & UnixAntworten: 2Letzter Beitrag: 05.01.05, 21:16





Zitieren
Login






