diff --git a/serial.go b/serial.go index 6fb2ef2..96a9b09 100644 --- a/serial.go +++ b/serial.go @@ -94,6 +94,8 @@ const ( InvalidSpeed // InvalidDataBits the number of data bits is not valid or not supported InvalidDataBits + // InvalidParity the selected parity is not valid or not supported + InvalidParity // ErrorEnumeratingPorts an error occurred while listing serial port ErrorEnumeratingPorts ) @@ -113,6 +115,8 @@ func (e PortError) EncodedErrorString() string { return "Invalid port speed" case InvalidDataBits: return "Invalid port data bits" + case InvalidParity: + return "Port parity invalid or not supported" case ErrorEnumeratingPorts: return "Could not enumerate serial ports" default: diff --git a/serial_unix.go b/serial_unix.go index b5cf703..5c20b68 100644 --- a/serial_unix.go +++ b/serial_unix.go @@ -176,15 +176,23 @@ func setTermSettingsParity(parity Parity, settings *syscall.Termios) error { settings.Cflag &^= tcCMSPAR settings.Iflag |= syscall.INPCK case MarkParity: + if tcCMSPAR == 0 { + return &PortError{code: InvalidParity} + } settings.Cflag |= syscall.PARENB settings.Cflag |= syscall.PARODD settings.Cflag |= tcCMSPAR settings.Iflag |= syscall.INPCK case SpaceParity: + if tcCMSPAR == 0 { + return &PortError{code: InvalidParity} + } settings.Cflag |= syscall.PARENB settings.Cflag &^= syscall.PARODD settings.Cflag |= tcCMSPAR settings.Iflag |= syscall.INPCK + default: + return &PortError{code: InvalidParity} } return nil }