System.IO.Ports.SerialPort - kann IOCTL_SERIAL_SET_WAIT_MASK konfiguriert werden?

StackOverflow https://stackoverflow.com/questions/628161

  •  06-07-2019
  •  | 
  •  

Frage

Ich habe versucht, etwas darüber zu erfahren, wie .Net (3.5) interagiert mit dem seriell Port durch die System.IO.Ports.SerialPorts Klasse durch eine kleinen Windows-Forms-Anwendung zu schreiben Anrufer Anzeigedaten von einem alten externen Modem zu sammeln.

Ich habe getestet, dass das Modem Anrufer-Display unterstützt; mit Putty oder Hyper Ich kann das Modem so konfiguriert, dass Anrufer-Anzeigedaten (mit dem Befehl AT#CID=1 zu sammeln, die ich hier ), und wenn das Telefon klingelt, werden die Daten angezeigt. Im Terminal-Fenster, sieht es wie folgt aus:

RING

DATE = 0308
TIME = 2045
NMBR = 01234567890

RING

Meine C # Anwendung erscheint erfolgreich das Modem zu konfigurieren und zeigt einen RING Meldung, wenn das Telefon klingelt; aber es nie zeigt die Anrufer-ID-Daten.

In dem Bemühen, zu verstehen, warum dies so ist, ich vergleichen die von den verschiedenen Kunden ergriffenen Maßnahmen Sysinternals Portmon .

Der primäre Unterschied erscheint in der Verbindungskonfiguration; meine C # Anwendung enthält die folgende Zeile, die Putty und Hyperterminal nicht;

0.00000307  callerID.exe    IOCTL_SERIAL_SET_WAIT_MASK  Serial0 SUCCESS Mask: RXCHAR RXFLAG CTS DSR RLSD BRK ERR RING   

Wie ich es verstehe, IOCTL_SERIAL_SET_WAIT_MASK ist eine abschließende Liste von Nachrichtentypen filtern für.

So, drei Fragen:

Ist es möglich, dass die Anrufer-ID-Informationen von IOCTL_SERIAL_SET_WAIT_MASK unterdrückt werden?

Wenn ja, wie kann ich es konfigurieren, dass die Anrufer-ID-Informationen zu zeigen? Es scheint nicht von den Klasseneigenschaften zugänglich zu sein.

Wenn ich es nicht konfigurieren kann, ist meine einzige Möglichkeit, dies zu umgehen, meine eigenen Wrapper zu den untergeordneten Systemfunktionen schreiben die serielle Schnittstelle steuern?

Mein Verständnis von serieller Port-Kommunikation ist sehr einfach, so dass ich erwarte ich bin weg in meiner Diagnose. Jede Führung dankbar angenommen.

War es hilfreich?

Lösung

Ich war weg mit meiner Diagnose.

Es scheint, dass die WriteLine Verfahren beendet nicht die Befehle mit dem Leitungsabschluss sendet das Modem erwartet.

Alles, was ich tun musste, war ein Wagenrücklauf auf die Befehle hinzufügen, ich sende, und schicken sie die Write Methode.

Wir entschuldigen uns für jemandes Zeit zu verschwenden.

Andere Tipps

fand ich diese auf MSDN, die wie ein anständiges Beispiel sieht wie über P / Invoke die serielle Schnittstelle für den Zugriff auf das System dLL.

Ich würde noch gerne wissen, ob ich um meine Probleme mit der .NET-Klasse erhalten kann.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top