Guten Abend, ich möchte eine Win32 Applikation in C++ schreiben. Zunächst sollen alle benötigten Funktionen in einer Klasse definiert und deklariert sein. In dieser Klasse soll auch ein eigener Thread für die serielle Kommunikation aufgesetzt bzw. gestartet werden. In diesem Thread soll dann wenn Daten von außen ankommen mit Hilfe eines Event reagiert und dann die Daten in einen Puffer abgelegt werden. Beim Senden soll es auch über einen Event realisiert werden. Welche Methoden sind dafür notwendig, damit man auf einen Event von der seriellen Schnittstelle reagieren kann ? Vielen Dank im Voraus für jegliche Hilfestellung.
Meinst Du mit C++ jetzt C++ oder die Microsoft-Perversion namens "C++/CLI", die das .Net-Geraffel nutzt? In ersterem Falle: Sieh Dir die Win32-API an, die für die Kommunikation mit seriellen Schnittstellen zu nutzen ist. Das wurde hier schon ad nauseam mit etlichen Beispielen diskutiert, die Du mit der Forensuche auch leicht finden können solltest. Das Warten auf ein Event kann z.B. mit den Win32-API-Funktionen WaitForSingleObject oder WaitForMultipleObjects erfolgen. Letzteres ist zu bevorzugen, weil da auch zusätzliche Events genutzt werden können, die z.B. zum sauberen Beenden Deines Threads genutzt werden können.
Hallo Rufus, recht herzlichen Dank für deinen Beitrag. Ich möchte natürlich nicht C++/CLI von .NET verwenden. Mit der Funktion CreateFile kann zum Beispiel auf einen serielle Schnittstelle zugreifen. Kann man mit dieser Funktion auch virtuelle COM Ports öffnen ? Zum Beispiel COm Port 14 ?
Also wie gesagt für Thread Synchronisierung bietet WaitForSingleObject oder WaitForMultipleObjects an. Für CreateFile macht es keinen Unterschied ob der COM Port virtuell oder nicht ist. Die winapi untersützt auch Asynchrone lese und schreib zugriff macht die sache meistens einfacher als Threads.
Wenn Du eine Schnittstelle mit einer zweistelligen Nummer ansprechen wikkst, musst Du eine etwas andere Syntax für den Dateinamen verwenden, also nicht
1 | hFile = CreateFile("COM10", etc. pp); |
sondern
1 | hFile = CreateFile("\\\\.\\COM10", etc. pp); |
Diese Syntax kannst Du auch bei COM1-9 verwenden. Das steht auch so in der Dokumentation von CreateFile beschrieben. http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858%28v=vs.85%29.aspx (dort nach "Communication Resources" suchen, etwa in der Mitte der Seite zu finden)
Tigger schrieb: > Kann man mit dieser Funktion auch virtuelle COM > Ports öffnen ? RFCOMM oder Bluetooth im Auge?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.