1

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

如果是这样,我该如何配置它以显示来电显示信息?它似乎无法从类属性中访问。

如果我不能配置它,我唯一的选择是解决这个问题,将我自己的包装器编写到控制串行端口的低级系统功能?

我对串口通信的理解非常基础,所以我希望我的诊断还很遥远。感激地接受任何指导。

4

2 回答 2

1

我的诊断离我很远。

似乎该WriteLine方法不会终止它使用我的调制解调器所期望的行终止符发送的命令。

我需要做的就是在我发送的命令中添加一个回车,然后使用该Write方法发送它们。

为浪费任何人的时间而道歉。

于 2009-03-10T18:49:24.433 回答
0

我在 MSDN 上找到了这个,它看起来像是一个不错的示例,说明如何通过系统 dll 上的 P/Invoke 访问串行端口。

我仍然想知道是否可以解决 .Net 类的问题。

于 2009-03-10T10:46:49.197 回答