Ich passe eine einfache Linux-Serienbibliothek an, die ich für plattformübergreifende Kompatibilität geschrieben habe. Die meisten Dinge werden übertragen (obwohl Microsoft darauf besteht, alles umzubenennen), aber es gibt ein paar Funktionen, die ich nicht finden konnte.Verwenden von VMIN und VTIME mit Windows
Mein aktuelles Problem ist die Verwendung von VMIN und VTIME (in struct termios
). Unter Linux benutze ich sie, um Lesevorgänge zu erzwingen, die für eine bestimmte Anzahl von Zeichen blockiert werden. Wenn sie jedoch nicht empfangen werden, tritt ein Timeout mit einem Fehler auf. Windows empfiehlt jedoch, die BuildCommDCB
-Funktion zu verwenden, anstatt Parameter für seine Struktur DCB
(Gerätesteuerungsblock) direkt festzulegen. Diese Funktion unterstützt nichts, was VMIN oder VTIME ähnelt, und die Struktur DCB
ist nicht viel besser.
Gibt es eine Möglichkeit, diese Funktionalität in Windows zu erhalten, ohne es selbst zu implementieren? Ich würde mich lieber nicht damit beschäftigen, serielle Interrupts und Callbacks für nur eine Plattform in meiner Bibliothek zu verwalten, wenn es überhaupt vermeidbar ist.
EDIT: Die SetCommTimeouts
Funktion scheint die Funktionen von VTIME zu emulieren, aber ich habe immer noch nichts für VMIN gefunden.
VMIN ist minimale Anzahl von Zeichen, der Parameter für die Leselänge ist maximal! Es gibt keine Entsprechung auf Windows afaik. Und für nonblocking lesen müssen Sie "einen Wert von MAXDWORD, kombiniert mit Nullwerten für die ReadTotalTimeoutConstant und ReadTotalTimeoutMultiplier Mitglieder". – Trass3r