lib/rubyserial/posix.rb in rubyserial-0.5.0 vs lib/rubyserial/posix.rb in rubyserial-0.6.0

- old
+ new

@@ -1,9 +1,9 @@ # Copyright (c) 2014-2016 The Hybrid Group class Serial - def initialize(address, baude_rate=9600, data_bits=8, parity=:none) + def initialize(address, baude_rate=9600, data_bits=8, parity=:none, stop_bits=1) file_opts = RubySerial::Posix::O_RDWR | RubySerial::Posix::O_NOCTTY | RubySerial::Posix::O_NONBLOCK @fd = RubySerial::Posix.open(address, file_opts) if @fd == -1 raise RubySerial::Error, RubySerial::Posix::ERROR_CODES[FFI.errno] @@ -19,11 +19,11 @@ err = RubySerial::Posix.fcntl(@fd, RubySerial::Posix::F_SETFL, :int, ~RubySerial::Posix::O_NONBLOCK & fl) if err == -1 raise RubySerial::Error, RubySerial::Posix::ERROR_CODES[FFI.errno] end - @config = build_config(baude_rate, data_bits, parity) + @config = build_config(baude_rate, data_bits, parity, stop_bits) err = RubySerial::Posix.tcsetattr(@fd, RubySerial::Posix::TCSANOW, @config) if err == -1 raise RubySerial::Error, RubySerial::Posix::ERROR_CODES[FFI.errno] end @@ -106,20 +106,25 @@ end bytes.map { |e| e.chr }.join end - def build_config(baude_rate, data_bits, parity) + def build_config(baude_rate, data_bits, parity, stop_bits) config = RubySerial::Posix::Termios.new config[:c_iflag] = RubySerial::Posix::IGNPAR config[:c_ispeed] = RubySerial::Posix::BAUDE_RATES[baude_rate] config[:c_ospeed] = RubySerial::Posix::BAUDE_RATES[baude_rate] config[:c_cflag] = RubySerial::Posix::DATA_BITS[data_bits] | RubySerial::Posix::CREAD | RubySerial::Posix::CLOCAL | - RubySerial::Posix::BAUDE_RATES[baude_rate] | - RubySerial::Posix::PARITY[parity] + RubySerial::Posix::PARITY[parity] | + RubySerial::Posix::STOPBITS[stop_bits] + + # Masking in baud rate on OS X would corrupt the settings. + if RubySerial::ON_LINUX + config[:c_cflag] = config[:c_cflag] | RubySerial::Posix::BAUDE_RATES[baude_rate] + end config[:cc_c][RubySerial::Posix::VMIN] = 0 config end