System.IO.Ports.SerialPorts
我一直在尝试通过编写一个小型 Windows 窗体应用程序从旧的外部调制解调器收集调用方显示数据来了解 .Net (3.5) 如何通过类与串行端口交互。
我已经测试过调制解调器支持来电显示;使用 Putty 或 Hyperterminal,我可以配置调制解调器以收集来电显示数据(使用命令AT#CID=1
,我在此处找到),当电话响起时,显示数据。在终端窗口中,它看起来像这样:
RING
DATE = 0308
TIME = 2045
NMBR = 01234567890
RING
我的 C# 应用程序似乎成功配置了调制解调器,并RING
在电话响铃时显示一条消息;但是,它从不显示来电显示数据。
为了理解为什么会这样,我使用 Sysinternals Portmon比较了不同客户端所采取的操作。
主要区别在于连接配置;我的 C# 应用程序包含以下行,而 Putty 和 Hyperterminal 没有;
0.00000307 callerID.exe IOCTL_SERIAL_SET_WAIT_MASK Serial0 SUCCESS Mask: RXCHAR RXFLAG CTS DSR RLSD BRK ERR RING
据我了解,IOCTL_SERIAL_SET_WAIT_MASK
是要过滤的消息类型的包含列表。
所以,三个问题:
来电显示信息是否可能被 抑制IOCTL_SERIAL_SET_WAIT_MASK
?
如果是这样,我该如何配置它以显示来电显示信息?它似乎无法从类属性中访问。
如果我不能配置它,我唯一的选择是解决这个问题,将我自己的包装器编写到控制串行端口的低级系统功能?
我对串口通信的理解非常基础,所以我希望我的诊断还很遥远。感激地接受任何指导。