diff --git a/serial_linux.go b/serial_linux.go index 55ffbf8..dda39b7 100644 --- a/serial_linux.go +++ b/serial_linux.go @@ -191,8 +191,16 @@ func (port *linuxSerialPort) SetSpeed(speed int) error { if err != nil { return err } - C.cfsetispeed(settings, baudrate) - C.cfsetospeed(settings, baudrate) + // revert old baudrate + var BAUDMASK uint32 = 0 + for _, rate := range baudrateMap { + BAUDMASK |= rate + } + settings.Cflag &= ^uint32(BAUDMASK) + // set new baudrate + settings.Cflag |= baudrate + settings.Ispeed = baudrate + settings.Ospeed = baudrate return setTermSettings(port.Handle, settings) }