J'ai essayé d'apprendre un peu 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 les données d'affichage de l'appelant à partir d'un ancien modem externe.System.IO.Ports.SerialPort - est-il possible de configurer IOCTL_SERIAL_SET_WAIT_MASK?
J'ai testé que le modem prend en charge l'affichage de l'appelant; en utilisant Putty ou Hyperterminal Je peux configurer le modem pour collecter des données d'affichage appelant (en utilisant la commande AT#CID=1
, que j'ai trouvé here), et quand le téléphone sonne, les données sont affichées. Dans la fenêtre de terminal, il ressemble à ceci:
RING
DATE = 0308
TIME = 2045
NMBR =
RING
Mon application C# semble configurer correctement le modem et affiche un message lorsque RING
le téléphone sonne; cependant, il n'affiche jamais les données d'identification de l'appelant. Dans un effort pour comprendre pourquoi, j'ai comparé les actions prises par les différents clients en utilisant Sysinternals Portmon.
La différence principale apparaît dans la configuration de connexion; mon application C# comprend la ligne suivante, 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 messages pour filtrer.
Ainsi, trois questions:
Est-il possible que l'information d'identification est supprimée par IOCTL_SERIAL_SET_WAIT_MASK
?
Si oui, comment puis-je le configurer pour afficher les informations d'identification de l'appelant? Il ne semble pas être accessible à partir des propriétés de classe.
Si je ne peux pas le configurer, est-ce que ma seule option est de contourner ceci pour écrire mon propre wrapper aux fonctions du système de bas niveau contrôlant le port série?
Ma compréhension des communications par port série est très basique, donc je m'attends à ce que je sois dans mon diagnostic. Toute directive reçue avec gratitude.
Vous avez fait un très bon travail en gardant cela à jour tout en répondant à votre propre question! :-D – yeyeyerman