lib/rubyserial/posix.rb in rubyserial-0.3.0 vs lib/rubyserial/posix.rb in rubyserial-0.4.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)
+ def initialize(address, baude_rate=9600, data_bits=8, parity=:none)
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::Exception, 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::Exception, RubySerial::Posix::ERROR_CODES[FFI.errno]
end
- @config = build_config(baude_rate, data_bits)
+ @config = build_config(baude_rate, data_bits, parity)
err = RubySerial::Posix.tcsetattr(@fd, RubySerial::Posix::TCSANOW, @config)
if err == -1
raise RubySerial::Exception, RubySerial::Posix::ERROR_CODES[FFI.errno]
end
@@ -106,19 +106,20 @@
end
bytes.map { |e| e.chr }.join
end
- def build_config(baude_rate, data_bits)
+ def build_config(baude_rate, data_bits, parity)
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::BAUDE_RATES[baude_rate] |
+ RubySerial::Posix::PARITY[parity]
config[:cc_c][RubySerial::Posix::VMIN] = 0
config
end