我一直试图通过编写一个小的Windows窗体应用程序来收集来自旧外部调制解调器的调用者显示数据,以了解.Net(3.5)如何通过System.IO.Ports.SerialPorts
类与串口进行交互。
我测试过调制解调器支持来电显示;使用Putty或Hyperterminal我可以配置调制解调器以收集呼叫者显示数据(使用命令AT#CID=1
,我发现here),当电话响铃时,显示数据。在终端窗口中,它看起来像这样:
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
是否可能抑制来电显示信息?
如果是这样,我如何配置它以显示来电显示信息?它似乎无法从类属性中访问。
如果我无法配置它,我唯一的办法是绕过这个来编写我自己的包装器来控制串口的低级系统功能吗?
我对串口通信的理解非常基础,所以我希望我的诊断能够完全消失。感激地收到任何指导。
答案 0 :(得分:1)
我的诊断结束了。
似乎WriteLine
方法不会终止它使用我的调制解调器所期望的行终止符发送的命令。
我需要做的就是为我发送的命令添加回车符,并使用Write
方法发送它们。
为浪费任何人的时间道歉。
答案 1 :(得分:0)
我在MSDN上找到this,它看起来像是如何通过系统dll上的P / Invoke访问串口的一个很好的例子。
我仍然想知道我是否可以解决.Net类的问题。