FT232 mit D2xx Treiber unter Visual C++



  • Hey, wie aus dem Titel lesbar ist, verwende ich einen FT232 mit dem D2xx Treiber.
    Meine Anwendung untersteht dem MFC. Das ganze läuft als MDI Projekt, in dem unter anderem 2 Formviews vorhanden sind.

    SendeView: Kann mit Befehlen gefüllt werden, welche dann über RS232 verschickt werden.

    EmpfangsView: Soll die über RS232 empfangenen Daten darstellen.

    Beide sind mit einem Document verknüpft, welches Listen zum Verwalten der Befehle bereitstellt.

    Mein Problem liegt nun beim Empfangen der Daten, die Liste sollte ja meinst auf dem aktuellen Stand sein. Also benötige ich entweder einen Tread, der in regelmäßigen Abständen die RS232 überprüft ob Daten vorhanden sind oder eine Windows Message, die gesendet wird wenn Daten vorliegen.
    Gibt es eine solche Message? Wenn ja, wie heißt sie und was benötige ich um diese zu implementieren.

    Hab das Empfangen zu Testzwecken gerade in der Klasse CTestApp unter OnIdle drin. Also funktionieren tuts. Geht also nur um die Aktualisierung meines Views.



  • Du könntest Windows Messages im User Bereich benutzen (WM_USER + xxx).
    Ich nehme an, dass die CSerial Klasse von Codeproject nicht direkt in Frage kommt, da es sich bei deinem Projekt um die FTxxx Treiber handelt.

    Ev. könntest Du jedoch diese als Vorlage (zum abschauen) benutzen, denn dort gibt es genau die Möglichkeit empfangene Daten via Windows Message bekannt zu machen.

    http://www.codeproject.com/KB/system/serial.aspx

    Grüsse Simon



  • Yupp die CSerial kommt eigetnlcih nicht in Frage.

    In die Klasse stellt ja die Windows Messages

    ON_WM_SERIAL

    zur Verfügung. Welche wie folgt defined wird

    #define ON_WM_SERIAL(memberFxn)	\
    	ON_REGISTERED_MESSAGE(CSerialMFC::mg_nDefaultComMsg,memberFxn)
    

    nun macht mir CSerialMFC::mg_nDefaultComMsg Probleme, diese wird ja wie folgt registriert

    const UINT CSerialWnd::mg_nDefaultComMsg = ::RegisterWindowMessage(_T("CSerialWnd_DefaultComMsg"));
    

    Leider kann ich damit nicht viel anfangen, da VC++ noch Neuland für mich ist.



  • Hi Sebastian,

    bist Du Dir sicher, daß Du den D2xx Direct Driver von FTDIchip verwenden musst?

    Ich meine, nur für die ganz "normale" RS232-Kommunikation reicht Dir der VCP-Treiber (VCP=Virtual COM Port) von FTDIchip vollkommen aus.
    Und damit kannst Du die ganz normalen Win32-API Funktionen oder eben die Klassen wie CSerial nutzen, als ob Du eine echte Hardware-RS232-Schnittstelle bedienen würdest.
    Damit habe ich in meinen Applikationen bisher keine Probleme.

    Übrigens, die aktuellen Treiber von FTDIchip sind CDM-Treiber (CDM=Combined Driver Model), d.h. sowohl D2XX als auch VCP sind miteinander zu einem einzigen Treiber "verschmolzen". Allerdings darfst Du trotzdem nur eine der beiden Teile zur gleichen Zeit nutzen.

    Für Win-OS (2000, XP, Vista) ist Version 2.04.06 aktuell.

    Martin



  • Es ist nicht unbedingt nötig den D2xx Treiber zu verwenden.
    Kenn mich damit nur nicht so aus und hab halt den ersten genommen, für den ich ein gutes Beispiel gefunden hab^^

    Werde es mal mit dem anderen Treiber versuchen.


Anmelden zum Antworten