From 5a547e5348035695ec969016fcfdb68156ce1da9 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Mon, 15 Dec 2014 18:09:15 +0100 Subject: [PATCH] linux: implemented cfset{i|o}speed without C function call --- serial_linux.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) 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) }