tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
3660
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Myslee Myslee ist offline Grünschnabel
    Registriert seit
    Feb 2008
    Beiträge
    2
    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 .....
     

  2. #2
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    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.
     

  3. #3
    Myslee Myslee ist offline Grünschnabel
    Registriert seit
    Feb 2008
    Beiträge
    2
    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
     

  4. #4
    Chriss612 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

  1. Antworten: 1
    Letzter Beitrag: 20.09.10, 16:38
  2. Daten über serielle Schnittstelle (com1) senden?
    Von Dojo im Forum VisualStudio & MFC
    Antworten: 3
    Letzter Beitrag: 28.07.07, 09:16
  3. Senden via Serielle Schnittstelle?
    Von paddz im Forum CGI, Perl, Python, Ruby, Power Shell
    Antworten: 2
    Letzter Beitrag: 11.04.06, 19:54
  4. Antworten: 19
    Letzter Beitrag: 29.04.05, 10:06
  5. Terminal über Serielle Schnittstelle
    Von knackpunkt83 im Forum Linux & Unix
    Antworten: 2
    Letzter Beitrag: 05.01.05, 21:16