aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/tarm/serial
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/tarm/serial')
-rw-r--r--vendor/github.com/tarm/serial/.travis.yml8
-rw-r--r--vendor/github.com/tarm/serial/basic_test.go69
-rw-r--r--vendor/github.com/tarm/serial/serial_linux.go119
-rw-r--r--vendor/github.com/tarm/serial/serial_posix.go3
-rw-r--r--vendor/github.com/tarm/serial/serial_windows.go2
5 files changed, 72 insertions, 129 deletions
diff --git a/vendor/github.com/tarm/serial/.travis.yml b/vendor/github.com/tarm/serial/.travis.yml
index 1759ba5..28d22ca 100644
--- a/vendor/github.com/tarm/serial/.travis.yml
+++ b/vendor/github.com/tarm/serial/.travis.yml
@@ -1,10 +1,14 @@
sudo: false
language: go
go:
- - 1.4
- - 1.6
+ - "1.9"
+ - "1.10"
+ - "1.11"
- tip
env:
- GOOS=linux CGO=1
- GOOS=linux CGO=0
+ - GOOS=linux GOARCH=arm
+ - GOOS=linux GOARCH=mips
+ - GOOS=linux GOARCH=mipsle
- GOOS=windows GOARCH=386
diff --git a/vendor/github.com/tarm/serial/basic_test.go b/vendor/github.com/tarm/serial/basic_test.go
deleted file mode 100644
index 7b9af3e..0000000
--- a/vendor/github.com/tarm/serial/basic_test.go
+++ /dev/null
@@ -1,69 +0,0 @@
-// +build linux
-
-package serial
-
-import (
- "os"
- "testing"
- "time"
-)
-
-func TestConnection(t *testing.T) {
- port0 := os.Getenv("PORT0")
- port1 := os.Getenv("PORT1")
- if port0 == "" || port1 == "" {
- t.Skip("Skipping test because PORT0 or PORT1 environment variable is not set")
- }
- c0 := &Config{Name: port0, Baud: 115200}
- c1 := &Config{Name: port1, Baud: 115200}
-
- s1, err := OpenPort(c0)
- if err != nil {
- t.Fatal(err)
- }
-
- s2, err := OpenPort(c1)
- if err != nil {
- t.Fatal(err)
- }
-
- ch := make(chan int, 1)
- go func() {
- buf := make([]byte, 128)
- var readCount int
- for {
- n, err := s2.Read(buf)
- if err != nil {
- t.Fatal(err)
- }
- readCount++
- t.Logf("Read %v %v bytes: % 02x %s", readCount, n, buf[:n], buf[:n])
- select {
- case <-ch:
- ch <- readCount
- close(ch)
- default:
- }
- }
- }()
-
- if _, err = s1.Write([]byte("hello")); err != nil {
- t.Fatal(err)
- }
- if _, err = s1.Write([]byte(" ")); err != nil {
- t.Fatal(err)
- }
- time.Sleep(time.Second)
- if _, err = s1.Write([]byte("world")); err != nil {
- t.Fatal(err)
- }
- time.Sleep(time.Second / 10)
-
- ch <- 0
- s1.Write([]byte(" ")) // We could be blocked in the read without this
- c := <-ch
- exp := 5
- if c >= exp {
- t.Fatalf("Expected less than %v read, got %v", exp, c)
- }
-}
diff --git a/vendor/github.com/tarm/serial/serial_linux.go b/vendor/github.com/tarm/serial/serial_linux.go
index adf18c6..65420f3 100644
--- a/vendor/github.com/tarm/serial/serial_linux.go
+++ b/vendor/github.com/tarm/serial/serial_linux.go
@@ -1,55 +1,57 @@
-// +build linux,!cgo
+// +build linux
package serial
import (
+ "fmt"
"os"
- "syscall"
"time"
"unsafe"
+
+ "golang.org/x/sys/unix"
)
func openPort(name string, baud int, databits byte, parity Parity, stopbits StopBits, readTimeout time.Duration) (p *Port, err error) {
var bauds = map[int]uint32{
- 50: syscall.B50,
- 75: syscall.B75,
- 110: syscall.B110,
- 134: syscall.B134,
- 150: syscall.B150,
- 200: syscall.B200,
- 300: syscall.B300,
- 600: syscall.B600,
- 1200: syscall.B1200,
- 1800: syscall.B1800,
- 2400: syscall.B2400,
- 4800: syscall.B4800,
- 9600: syscall.B9600,
- 19200: syscall.B19200,
- 38400: syscall.B38400,
- 57600: syscall.B57600,
- 115200: syscall.B115200,
- 230400: syscall.B230400,
- 460800: syscall.B460800,
- 500000: syscall.B500000,
- 576000: syscall.B576000,
- 921600: syscall.B921600,
- 1000000: syscall.B1000000,
- 1152000: syscall.B1152000,
- 1500000: syscall.B1500000,
- 2000000: syscall.B2000000,
- 2500000: syscall.B2500000,
- 3000000: syscall.B3000000,
- 3500000: syscall.B3500000,
- 4000000: syscall.B4000000,
+ 50: unix.B50,
+ 75: unix.B75,
+ 110: unix.B110,
+ 134: unix.B134,
+ 150: unix.B150,
+ 200: unix.B200,
+ 300: unix.B300,
+ 600: unix.B600,
+ 1200: unix.B1200,
+ 1800: unix.B1800,
+ 2400: unix.B2400,
+ 4800: unix.B4800,
+ 9600: unix.B9600,
+ 19200: unix.B19200,
+ 38400: unix.B38400,
+ 57600: unix.B57600,
+ 115200: unix.B115200,
+ 230400: unix.B230400,
+ 460800: unix.B460800,
+ 500000: unix.B500000,
+ 576000: unix.B576000,
+ 921600: unix.B921600,
+ 1000000: unix.B1000000,
+ 1152000: unix.B1152000,
+ 1500000: unix.B1500000,
+ 2000000: unix.B2000000,
+ 2500000: unix.B2500000,
+ 3000000: unix.B3000000,
+ 3500000: unix.B3500000,
+ 4000000: unix.B4000000,
}
- rate := bauds[baud]
+ rate, ok := bauds[baud]
- if rate == 0 {
- return
+ if !ok {
+ return nil, fmt.Errorf("Unrecognized baud rate")
}
- f, err := os.OpenFile(name, syscall.O_RDWR|syscall.O_NOCTTY|syscall.O_NONBLOCK, 0666)
+ f, err := os.OpenFile(name, unix.O_RDWR|unix.O_NOCTTY|unix.O_NONBLOCK, 0666)
if err != nil {
return nil, err
}
@@ -61,16 +63,16 @@ func openPort(name string, baud int, databits byte, parity Parity, stopbits Stop
}()
// Base settings
- cflagToUse := syscall.CREAD | syscall.CLOCAL | rate
+ cflagToUse := unix.CREAD | unix.CLOCAL | rate
switch databits {
case 5:
- cflagToUse |= syscall.CS5
+ cflagToUse |= unix.CS5
case 6:
- cflagToUse |= syscall.CS6
+ cflagToUse |= unix.CS6
case 7:
- cflagToUse |= syscall.CS7
+ cflagToUse |= unix.CS7
case 8:
- cflagToUse |= syscall.CS8
+ cflagToUse |= unix.CS8
default:
return nil, ErrBadSize
}
@@ -79,7 +81,7 @@ func openPort(name string, baud int, databits byte, parity Parity, stopbits Stop
case Stop1:
// default is 1 stop bit
case Stop2:
- cflagToUse |= syscall.CSTOPB
+ cflagToUse |= unix.CSTOPB
default:
// Don't know how to set 1.5
return nil, ErrBadStopBits
@@ -89,27 +91,28 @@ func openPort(name string, baud int, databits byte, parity Parity, stopbits Stop
case ParityNone:
// default is no parity
case ParityOdd:
- cflagToUse |= syscall.PARENB
- cflagToUse |= syscall.PARODD
+ cflagToUse |= unix.PARENB
+ cflagToUse |= unix.PARODD
case ParityEven:
- cflagToUse |= syscall.PARENB
+ cflagToUse |= unix.PARENB
default:
return nil, ErrBadParity
}
fd := f.Fd()
vmin, vtime := posixTimeoutValues(readTimeout)
- t := syscall.Termios{
- Iflag: syscall.IGNPAR,
+ t := unix.Termios{
+ Iflag: unix.IGNPAR,
Cflag: cflagToUse,
- Cc: [32]uint8{syscall.VMIN: vmin, syscall.VTIME: vtime},
Ispeed: rate,
Ospeed: rate,
}
+ t.Cc[unix.VMIN] = vmin
+ t.Cc[unix.VTIME] = vtime
- if _, _, errno := syscall.Syscall6(
- syscall.SYS_IOCTL,
+ if _, _, errno := unix.Syscall6(
+ unix.SYS_IOCTL,
uintptr(fd),
- uintptr(syscall.TCSETS),
+ uintptr(unix.TCSETS),
uintptr(unsafe.Pointer(&t)),
0,
0,
@@ -118,7 +121,7 @@ func openPort(name string, baud int, databits byte, parity Parity, stopbits Stop
return nil, errno
}
- if err = syscall.SetNonblock(int(fd), false); err != nil {
+ if err = unix.SetNonblock(int(fd), false); err != nil {
return
}
@@ -143,13 +146,17 @@ func (p *Port) Write(b []byte) (n int, err error) {
// or data received but not read
func (p *Port) Flush() error {
const TCFLSH = 0x540B
- _, _, err := syscall.Syscall(
- syscall.SYS_IOCTL,
+ _, _, errno := unix.Syscall(
+ unix.SYS_IOCTL,
uintptr(p.f.Fd()),
uintptr(TCFLSH),
- uintptr(syscall.TCIOFLUSH),
+ uintptr(unix.TCIOFLUSH),
)
- return err
+
+ if errno == 0 {
+ return nil
+ }
+ return errno
}
func (p *Port) Close() (err error) {
diff --git a/vendor/github.com/tarm/serial/serial_posix.go b/vendor/github.com/tarm/serial/serial_posix.go
index 3e8bc7c..d733f0f 100644
--- a/vendor/github.com/tarm/serial/serial_posix.go
+++ b/vendor/github.com/tarm/serial/serial_posix.go
@@ -1,4 +1,4 @@
-// +build !windows,cgo
+// +build !windows,!linux,cgo
package serial
@@ -113,6 +113,7 @@ func openPort(name string, baud int, databits byte, parity Parity, stopbits Stop
st.c_cflag |= C.PARODD
case ParityEven:
st.c_cflag |= C.PARENB
+ st.c_cflag &= ^C.tcflag_t(C.PARODD)
default:
return nil, ErrBadParity
}
diff --git a/vendor/github.com/tarm/serial/serial_windows.go b/vendor/github.com/tarm/serial/serial_windows.go
index a41bf4f..2a9c004 100644
--- a/vendor/github.com/tarm/serial/serial_windows.go
+++ b/vendor/github.com/tarm/serial/serial_windows.go
@@ -110,7 +110,7 @@ func (p *Port) Write(buf []byte) (int, error) {
func (p *Port) Read(buf []byte) (int, error) {
if p == nil || p.f == nil {
- return 0, fmt.Errorf("Invalid port on read %v %v", p, p.f)
+ return 0, fmt.Errorf("Invalid port on read")
}
p.rl.Lock()