diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index ff195d1..94707b7 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -46,6 +46,7 @@ jobs: - "openbsd amd64" - "openbsd 386" - "openbsd arm" + - "linux ppc64le" runs-on: "ubuntu-latest" diff --git a/serial_linux.go b/serial_linux.go index eab3803..1a447d8 100644 --- a/serial_linux.go +++ b/serial_linux.go @@ -83,15 +83,3 @@ func setTermSettingsBaudrate(speed int, settings *unix.Termios) (error, bool) { settings.Ospeed = toTermiosSpeedType(baudrate) return nil, false } - -func (port *unixPort) setSpecialBaudrate(speed uint32) error { - settings, err := unix.IoctlGetTermios(port.handle, unix.TCGETS2) - if err != nil { - return err - } - settings.Cflag &^= unix.CBAUD - settings.Cflag |= unix.BOTHER - settings.Ispeed = speed - settings.Ospeed = speed - return unix.IoctlSetTermios(port.handle, unix.TCSETS2, settings) -} diff --git a/serial_specialbaudrate_linux.go b/serial_specialbaudrate_linux.go new file mode 100644 index 0000000..d6baffb --- /dev/null +++ b/serial_specialbaudrate_linux.go @@ -0,0 +1,24 @@ +// +build linux +// +build !ppc64le + +// +// Copyright 2014-2021 Cristian Maglie. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +// + +package serial + +import "golang.org/x/sys/unix" + +func (port *unixPort) setSpecialBaudrate(speed uint32) error { + settings, err := unix.IoctlGetTermios(port.handle, unix.TCGETS2) + if err != nil { + return err + } + settings.Cflag &^= unix.CBAUD + settings.Cflag |= unix.BOTHER + settings.Ispeed = speed + settings.Ospeed = speed + return unix.IoctlSetTermios(port.handle, unix.TCSETS2, settings) +} diff --git a/serial_specialbaudrate_linux_ppc64le.go b/serial_specialbaudrate_linux_ppc64le.go new file mode 100644 index 0000000..4db8cc7 --- /dev/null +++ b/serial_specialbaudrate_linux_ppc64le.go @@ -0,0 +1,12 @@ +// +// Copyright 2014-2021 Cristian Maglie. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. +// + +package serial + +func (port *unixPort) setSpecialBaudrate(speed uint32) error { + // TODO: unimplemented + return &PortError{code: InvalidSpeed} +}