我一直在尝试了解 .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 类的问题。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top