System.IO.Ports.SerialPort - 可以配置 IOCTL_SERIAL_SET_WAIT_MASK 吗?
-
06-07-2019 - |
题
我一直在尝试了解 .Net (3.5) 如何通过 System.IO.Ports.SerialPorts
通过编写一个小型 Windows 窗体应用程序来从旧的外部调制解调器收集呼叫者显示数据。
我测试过调制解调器支持来电显示;使用 Putty 或超级终端,我可以配置调制解调器来收集呼叫者显示数据(使用命令 AT#CID=1
, ,我发现 这里),当电话响起时,就会显示数据。在终端窗口中,它看起来像这样:
RING
DATE = 0308
TIME = 2045
NMBR = 01234567890
RING
我的 C# 应用程序似乎已成功配置调制解调器并显示 RING
电话铃声响起时发送消息;但是,它从不显示来电显示数据。
为了理解其中的原因,我使用 Sysinternals 比较了不同客户端所采取的操作 波特蒙.
主要区别在于连接配置;我的 C# 应用程序包含以下行,而 Putty 和超级终端则没有;
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
?
如果是这样,我该如何配置它以显示来电显示信息?它似乎无法从类属性访问。
如果我无法配置它,我唯一的选择是解决这个问题,将我自己的包装器写入控制串行端口的较低级别系统功能吗?
我对串行端口通信的理解非常基础,所以我希望我的诊断还很遥远。非常感谢任何指导。
解决方案
我的诊断结果还差得很远。
看来 WriteLine
方法不会终止它使用调制解调器期望的行终止符发送的命令。
我所需要做的就是在我发送的命令中添加一个回车符,然后使用 Write
方法。
为浪费任何人的时间而道歉。
其他提示
我发现 这 在 MSDN 上,它看起来像是一个很好的示例,说明如何通过系统 dll 上的 P/Invoke 访问串行端口。
我仍然想知道是否可以解决 .Net 类的问题。