diff --git a/serial_freebsd.go b/serial_freebsd.go index a56a4bf..b648b52 100644 --- a/serial_freebsd.go +++ b/serial_freebsd.go @@ -60,3 +60,26 @@ const ioctlTcflsh = unix.TIOCFLUSH func toTermiosSpeedType(speed uint32) uint32 { return speed } + +func setTermSettingsBaudrate(speed int, settings *unix.Termios) (error, bool) { + baudrate, ok := baudrateMap[speed] + if !ok { + return nil, true + } + // XXX: Is Cflag really needed + // revert old baudrate + for _, rate := range baudrateMap { + settings.Cflag &^= rate + } + // set new baudrate + settings.Cflag |= baudrate + + settings.Ispeed = toTermiosSpeedType(baudrate) + settings.Ospeed = toTermiosSpeedType(baudrate) + return nil, false +} + +func (port *unixPort) setSpecialBaudrate(speed uint32) error { + // TODO: unimplemented + return &PortError{code: InvalidSpeed} +} diff --git a/serial_openbsd.go b/serial_openbsd.go index 5f626f3..ad68957 100644 --- a/serial_openbsd.go +++ b/serial_openbsd.go @@ -60,3 +60,26 @@ const ioctlTcflsh = unix.TIOCFLUSH func toTermiosSpeedType(speed uint32) int32 { return int32(speed) } + +func setTermSettingsBaudrate(speed int, settings *unix.Termios) (error, bool) { + baudrate, ok := baudrateMap[speed] + if !ok { + return nil, true + } + // XXX: Is Cflag really needed + // revert old baudrate + for _, rate := range baudrateMap { + settings.Cflag &^= rate + } + // set new baudrate + settings.Cflag |= baudrate + + settings.Ispeed = toTermiosSpeedType(baudrate) + settings.Ospeed = toTermiosSpeedType(baudrate) + return nil, false +} + +func (port *unixPort) setSpecialBaudrate(speed uint32) error { + // TODO: unimplemented + return &PortError{code: InvalidSpeed} +}