From b376f85fb06829cdbecb41abb70097be9d6db710 Mon Sep 17 00:00:00 2001 From: achronop Date: Sun, 7 Dec 2014 21:33:53 +0200 Subject: [PATCH] Add MARK/SPACE parity bit option --- include/serial/serial.h | 4 +++- src/impl/unix.cc | 5 +++++ src/impl/win.cc | 4 ++++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/include/serial/serial.h b/include/serial/serial.h index 852ca29..61432d6 100644 --- a/include/serial/serial.h +++ b/include/serial/serial.h @@ -66,7 +66,9 @@ typedef enum { typedef enum { parity_none = 0, parity_odd = 1, - parity_even = 2 + parity_even = 2, + parity_mark = 3, + parity_space = 4 } parity_t; /*! diff --git a/src/impl/unix.cc b/src/impl/unix.cc index 3cfb077..e1465a4 100755 --- a/src/impl/unix.cc +++ b/src/impl/unix.cc @@ -369,6 +369,11 @@ Serial::SerialImpl::reconfigurePort () options.c_cflag |= (PARENB); } else if (parity_ == parity_odd) { options.c_cflag |= (PARENB | PARODD); + } else if (parity_ == parity_mark) { + options.c_cflag |= (PARENB | CMSPAR | PARODD); + } else if (parity_ == parity_space) { + options.c_cflag |= (PARENB | CMSPAR); + options.c_cflag &= (tcflag_t) ~(PARODD); } else { throw invalid_argument ("invalid parity"); } diff --git a/src/impl/win.cc b/src/impl/win.cc index 48bd699..545a773 100644 --- a/src/impl/win.cc +++ b/src/impl/win.cc @@ -216,6 +216,10 @@ Serial::SerialImpl::reconfigurePort () dcbSerialParams.Parity = EVENPARITY; } else if (parity_ == parity_odd) { dcbSerialParams.Parity = ODDPARITY; + } else if (parity_ == parity_mark) { + dcbSerialParams.Parity = MARKPARITY; + } else if (parity_ == parity_space) { + dcbSerialParams.Parity = SPACEPARITY; } else { throw invalid_argument ("invalid parity"); }