硬件流控制位不适用于ruby-serialport gem

我试图使用USB串行端口适配器的控制位作为通用I / O. 这个简单的例子应该将DTR线切换为高,然后是低。

require 'serialport' DataBits = 8 StopBits = 1 Parity = SerialPort::NONE Baud = 38400 port = '/dev/tty.usbserial-A100KXWU' serial = SerialPort.new(port, 'baud' => Baud, 'data_bits' => DataBits, 'stop_bits' => StopBits, 'parity' => Parity) serial.flow_control = SerialPort::HARD loop do p serial.signals sleep(1) serial.dtr = (serial.dtr + 1) % 2 end 

并输出:

 {"rts"=>1, "dtr"=>1, "cts"=>1, "dsr"=>0, "dcd"=>0, "ri"=>0} {"rts"=>1, "dtr"=>0, "cts"=>1, "dsr"=>0, "dcd"=>0, "ri"=>0} {"rts"=>1, "dtr"=>1, "cts"=>1, "dsr"=>0, "dcd"=>0, "ri"=>0} {"rts"=>1, "dtr"=>0, "cts"=>1, "dsr"=>0, "dcd"=>0, "ri"=>0} 

就Ruby而言, serial.dtr正在发生变化,但DTR引脚的输出电压没有变化。 它是一个恒定的+ 7V。

此外, serial实例无法读取应用于来自其他硬件设备的CTS,DSR或DCD的任何更改。

它正在使用sudo权限运行,因此它不是权限问题。 这是在OS X 10.10 Yosemite上。

根据http://www.rubydoc.info/gems/serialport/SerialPort:flow_control=

注意:SerialPort :: HARD使用RTS / CTS握手。 不支持DSR / DTR。

我正在回答我自己的问题。 事实certificate,Apple提供的FTDI驱动程序是错误的。 它们不提供对控制信号的任何访问。

我安装了官方FTDI VCP驱动程序 (此时编写的2.3版本),重新启动,现在我可以完全控制。