为什么SerialPort类没有RIHolding属性?

时间:2012-07-23 22:33:23

标签: .net serial-port api-design

简单的问题。 .NET SerialPort类具有以下用于获取串行输入行的属性:

  • CDHolding - 获取端口的Carrier Detect行的状态。
  • CtsHolding - 获取Clear-to-Send行的状态。
  • DsrHolding - 获取数据集就绪(DSR)信号的状态。

注意RIHolding缺失。

此外,它还有PinChanged个事件。这提供了SerialPinChange枚举值,其中包含以下成员,包含一个用于Ring:

  • CtsChanged - 清除发送(CTS)信号已更改状态...
  • DsrChanged - 数据集就绪(DSR)信号已更改状态...
  • CDChanged - 载波检测(CD)信号已更改状态...
  • Ring - 检测到响铃指示符。
  • Break - 输入时检测到中断。

所以我的问题是,为什么没有RIHolding属性?


如果我们查看内部SerialStream课程,我们会看到CDHoldingCtsHoldingDsrHolding都是通过调用Win32 {{3}来实现的。功能。他的lpModemStat输出值是以下之一:

  • MS_CTS_ON 0x0010 CTS(清除发送)信号已开启。
  • MS_DSR_ON 0x0020 DSR(数据集准备就绪)信号已开启。
  • MS_RING_ON 0x0040铃声指示灯亮起。
  • MS_RLSD_ON 0x0080 RLSD(接收线路信号检测)信号已开启。 (这映射到CDHolding

所以,似乎添加一个只看第6位的RIHolding属性是微不足道的。为什么会遗漏这个?

1 个答案:

答案 0 :(得分:3)

由于振铃信号的节奏,它本质上是一个瞬态信号。如果它打开那么它将不会持续很长时间。例如,在美国2秒,在英国400毫秒。因此,信号状态并不意味着很多,它取决于时间,更糟糕的是,当你真的不走运的时候,你总是会注意到它。当它打开时你最好抓住它,因此PinChanged会报告它。