ruby serialport gem, кто отвечает за проверку ошибок четности? - PullRequest
6 голосов
/ 26 февраля 2012

драгоценных камней

serialport (1.0.4)
Авторы: Гийом Пьерронне, Алан Стерн, Даниэль Э. Шиптон, Тобин
Ричард, Гектор Парра, Райан С. Пейн
Домашняя страница:http://github.com/hparra/ruby-serialport/
Библиотека для использования последовательных портов RS-232.

Я использую этот драгоценный камень, и характеристики моего устройства следующие:

  • 9600 бит / с
  • 7 бит
  • 1 стоп-бит
  • EVEN parity

Когда я получаю данные, как показано ниже, распакованные данные по-прежнему с битом четности.

sp = SerialPort.new("/dev/serial-device", 9600, 7, 1, SerialPort::EVEN)
data = sp.gets
data.chars.each do |char|
  puts char.unpack("B*")
end

ex.если sp получает a, распакованные данные будут 11100001 вместо 01100001, потому что это ПРАКТИЧЕСКИЙ ДАЖЕ.


Чтобы преобразовать байт обратно в то, что должно быть, мне нравитсяэто

data = sp.gets #gets 11100001 for 'a' (even parity)
data.bytes.to_a.each do |byte|
  puts (byte & 127).chr
end

сейчас, для меня, это путь низкого уровня.Я ожидал, что гем serialport должен был выполнить эту проверку на четность, но, поскольку я читаю его документ, он ничего не говорит о проверке на четность.

Я пропускаю метод, который уже реализован в геме, или моя работа вокруг выше необходима, потому что я обязан проверить паритет и найти ошибку?

1 Ответ

3 голосов
/ 07 июня 2013

SerialPort :: ODD, SerialPort :: MARK, SerialPort :: SPACE (MARK и SPACE не поддерживаются в Posix)

Выдает ошибку argError для неверного аргумента.

SerialPort :: new и SerialPort :: open без блока возвращают экземпляр SerialPort. SerialPort :: открыть с проходом блока SerialPort к блоку и закрывает его при выходе из блока (например, File :: open).

** Методы экземпляра **

  • modem_params () -> aHash
  • modem_params = (aHash) -> aHash
  • get_modem_params () -> aHash
  • set_modem_params (aHash) -> aHash
  • set_modem_params (скорость передачи [, биты данных [, стоп-биты [, четность]]])

Получить и установить параметры модема. Хеш-ключи - это «бод», «data_bits», "stop_bits" и "parity" (см. выше).

Параметры, отсутствующие в хэше или равные нулю, остаются без изменений. Значения параметров по умолчанию для метода set_modem_params: databits = 8, stopbits = 1, четность = (databits == 8? SerialPort :: NONE: SerialPort :: EVEN).

  • бод () -> anInteger
  • бод = (anInteger) -> anInteger
  • data_bits () -> 4, 5, 6, 7 или 8
  • data_bits = (anInteger) -> anInteger
  • stop_bits () -> 1 или 2
  • stop_bits = (anInteger) -> anInteger
  • parity () -> anInteger: SerialPort :: NONE, SerialPort :: EVEN, SerialPort :: ODD, SerialPort :: MARK или SerialPort :: SPACE
  • четность = (anInteger) -> anInteger

Получить и установить соответствующий параметр модема.

  • flow_control () -> anInteger
  • flow_control = (anInteger) -> anInteger

Получить и установить управление потоком: SerialPort :: NONE, SerialPort :: HARD, SerialPort :: SOFT или (SerialPort :: HARD | SerialPort :: SOFT).

Примечание. Режим SerialPort :: HARD поддерживается не на всех платформах. SerialPort :: HARD использует рукопожатие RTS / CTS; DSR / DTR не является поддерживается.

  • read_timeout () -> anInteger
  • read_timeout = (anInteger) -> anInteger
  • write_timeout () -> anInteger
  • write_timeout = (anInteger) -> anInteger

Получить и установить значения времени ожидания (в миллисекундах) для чтения и записи. Отрицательный таймаут чтения вернет все доступные данные без ожидание, тайм-аут нулевого чтения не вернется, пока хотя бы один байт доступен, и положительный тайм-аут чтения возвращается, когда запрашиваемое количество байтов доступно или интервал между поступление двух байтов превышает значение тайм-аута.

Примечание. Тайм-ауты чтения плохо сочетаются с многопоточностью.

Примечание: в Posix тайм-ауты записи не реализованы.

  • перерыв (время) -> ноль

Отправить перерыв на указанное время.

time -> anInteger: десятые доли секунды для перерыва. Примечание: в Posix это значение очень приблизительное.

  • сигналов () -> aHash

Возвращает хеш с состоянием каждого бита состояния строки. Ключи "rts", "dtr", "cts", "dsr", "dcd" и "ri".

Примечание. В Windows значения rts и dtr не включены.

  • ртс ()
  • DTR ()
  • каратов ()
  • DSR ()
  • DCD ()
  • ri () -> 0 или 1

  • rts = (0 или 1)

  • dtr = (0 или 1) -> 0 или 1

Получить и установить соответствующий бит состояния линии.

Примечание. В Windows функции rts () и dtr () не реализованы

...