System.IO.Ports.SerialPort - IOCTL_SERIAL_SET_WAIT_MASK peut-il être configuré?

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

  •  06-07-2019
  •  | 
  •  

Question

J'ai essayé de comprendre comment .Net (3.5) interagit avec le port série via la classe System.IO.Ports.SerialPorts en écrivant une petite application Windows Forms pour rassembler l’appelant affiche les données d’un ancien modem externe.

J'ai vérifié que le modem prend en charge l'affichage de l'appelant. en utilisant Putty ou Hyperterminal, je peux configurer le modem pour qu'il collecte les données d'affichage de l'appelant (à l'aide de la commande AT # CID = 1 , que j'ai trouvé ici ), et lorsque le téléphone sonne, les données sont affichées. Dans la fenêtre du terminal, cela ressemble à ceci:

RING

DATE = 0308
TIME = 2045
NMBR = 01234567890

RING

Mon application C # semble configurer correctement le modem et affiche un RING . message quand le téléphone sonne; Cependant, il n’affiche jamais les données d'identification de l'appelant.

Pour tenter de comprendre pourquoi, nous avons comparé les actions entreprises par les différents clients utilisant Sysinternals Portmon .

La différence principale apparaît dans la configuration de la connexion; mon application C # comprend la ligne suivante, ce que Putty et Hyperterminal ne font pas;

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

Si je comprends bien, IOCTL_SERIAL_SET_WAIT_MASK est une liste exhaustive des types de message à filtrer.

Donc, trois questions:

Est-il possible que les informations d'identification de l'appelant soient supprimées par IOCTL_SERIAL_SET_WAIT_MASK ?

Si tel est le cas, comment puis-je le configurer pour afficher les informations d'identification de l'appelant? Il ne semble pas être accessible depuis les propriétés de la classe.

Si je ne parviens pas à le configurer, puis-je contourner ce problème pour écrire mon propre wrapper dans les fonctions système de niveau inférieur contrôlant le port série?

Ma compréhension des communications par port série est très élémentaire. Je m'attends donc à un diagnostic éloigné. Toute orientation reçue avec gratitude.

Était-ce utile?

La solution

J'étais loin du diagnostic.

Il semble que la méthode WriteLine ne termine pas les commandes qu'elle envoie avec la terminaison de ligne attendue par mon modem.

Tout ce que j'avais à faire, c'était d'ajouter un retour à la ligne aux commandes que j'envoie et de les envoyer à l'aide de la méthode Write .

Toutes mes excuses pour avoir gaspillé le temps de quiconque.

Autres conseils

J'ai trouvé ceci sur MSDN, qui ressemble à un bon exemple. de comment accéder au port série via P / Invoke sur les dll du système.

J'aimerais toujours savoir si je peux résoudre mes problèmes avec la classe .Net.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top