Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Serielle Schnittstelle Sniffer

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
21.01.2005, 21:07 Uhr
ManniMammut



Hallo Leutz!
Diesmal habe ich kleine Schwierigkeiten die Serielle Schnittstelle abzufragen. Das ist zwar eigentlich so kein Problem, mit

C++:
ReadFile(h_com, &inbuffer, 100, &nBytesRead, NULL);


, aber ich möchte praktisch ein Programm, das die ganze Zeit die serielle Schnittstelle überwacht und mir wenn was ankommt das ganze in einer MessageBox oder Ähnlichem ausgibt. Das wird also wahrscheinlich in einer Endlosschleife ablaufen müssen, wobei sich das Programm aber möglichst nicht selbst aufhängen sollte. Ich nehme mal an, dass das Einlesen Bit-weise am schnellsten gehen müsste, weil man da nicht so lange Timeouts abwarten muss, oder?
Das Öffnen von dem COM-Port ist ja gar kein Problem, Schreiben auch nicht, aber "ständiges Lesen" halt irgendwie schon...

Ich hoffe, dass ihr mir helfen könnt,

euer Manni
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
23.01.2005, 22:48 Uhr
ManniMammut



Ich hab jetzt eine Möglichkeit gefunden, aber in dieser Endlos-For-Schleife hängt sich das Programm (verständlicherweise) auf:


C++:
    unsigned long nBytesRead;
    char inbuffer[2];
    inbuffer[1] = 0;

    for(;;)
        {
            while(ReadFile(h_com, &inbuffer, 1, &nBytesRead, NULL) != 1); // gesendeter String wird bit-weise eingelesen und ausgegeben
            Application->MessageBox(inbuffer, "Ausgabe", 0);"
        }



Das funktioniert auch wunderbar, aber hängt halt sofort...

Hat vielleicht sonst noch jemand eine andere Idee? Oder eine sich-nicht-aufhängende Lösung?

mfG, ManniMammut
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.01.2005, 23:37 Uhr
mmc20
puss in boots


hi, sowas lässt sich eigentlich nur mit einem 2.thread lösen, wobei ich keine endlosschleife nehmen würde, sondern events... eventuell solltest du die COM overlapped öffnen damit du gleichzeitig lesen & schreiben kannst

C++:
// com öffnen
HANDLE hCOMport = CreateFile("\\\\.\\COM1", GENERIC_READ|GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0);
// wenn du wirklich gleichzeitig lesen/schreiben musst, musst du ein
// overlapped-struct mit übergeben
...
// dies sollte dann in dem "horcher"-thread stehen
// nicht im hauptprogramm/dialog, da dieser sonst blockiert
DWORD dwData=0;
SetCommMask(hCOMport, EV_DSR); // oder EV_RXCHAR für ein empfangenes zeichen
WaitCommEvent(hCOMport, &dwData, 0); // hier wird gewartet bis sich an der com was tut
AfxMessageBox("EV_DSR empfangen.");


von diesen events gibts noch andere, such dir halt den passenden raus bzw kombinier sie
( EV_RXCHAR|EV_DSR )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
12.02.2005, 12:38 Uhr
ManniMammut



Danke für alles!

Ich habs jetzt noch alles rausgefunden, dank dieser Website hier:

www.traverse.com/people/poinsett/bcbcomm.html
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: