1// +build netbsd openbsd
2
3package term
4
5import (
6	"syscall"
7
8	"golang.org/x/sys/unix"
9)
10
11type attr unix.Termios
12
13func (a *attr) getSpeed() (int, error) {
14	// We generally only care about ospeed, since that's what would
15	// be used for padding characters, for example.
16
17	switch a.Ospeed {
18	case syscall.B50:
19		return 50, nil
20	case syscall.B75:
21		return 75, nil
22	case syscall.B110:
23		return 110, nil
24	case syscall.B134:
25		return 134, nil
26	case syscall.B150:
27		return 150, nil
28	case syscall.B200:
29		return 200, nil
30	case syscall.B300:
31		return 300, nil
32	case syscall.B600:
33		return 600, nil
34	case syscall.B1200:
35		return 1200, nil
36	case syscall.B1800:
37		return 1800, nil
38	case syscall.B2400:
39		return 2400, nil
40	case syscall.B4800:
41		return 4800, nil
42	case syscall.B9600:
43		return 9600, nil
44	case syscall.B19200:
45		return 19200, nil
46	case syscall.B38400:
47		return 38400, nil
48	case syscall.B57600:
49		return 57600, nil
50	case syscall.B115200:
51		return 115200, nil
52	case syscall.B230400:
53		return 230400, nil
54	default:
55		return 0, syscall.EINVAL
56	}
57}
58
59func (a *attr) setSpeed(baud int) error {
60	var rate int32
61	switch baud {
62	case 50:
63		rate = unix.B50
64	case 75:
65		rate = unix.B75
66	case 110:
67		rate = unix.B110
68	case 134:
69		rate = unix.B134
70	case 150:
71		rate = unix.B150
72	case 200:
73		rate = unix.B200
74	case 300:
75		rate = unix.B300
76	case 600:
77		rate = unix.B600
78	case 1200:
79		rate = unix.B1200
80	case 1800:
81		rate = unix.B1800
82	case 2400:
83		rate = unix.B2400
84	case 4800:
85		rate = unix.B4800
86	case 9600:
87		rate = unix.B9600
88	case 19200:
89		rate = unix.B19200
90	case 38400:
91		rate = unix.B38400
92	case 57600:
93		rate = unix.B57600
94	case 115200:
95		rate = unix.B115200
96	case 230400:
97		rate = unix.B230400
98	default:
99		return unix.EINVAL
100	}
101	(*unix.Termios)(a).Cflag = unix.CS8 | unix.CREAD | unix.CLOCAL | uint32(rate)
102	(*unix.Termios)(a).Ispeed = rate
103	(*unix.Termios)(a).Ospeed = rate
104	return nil
105}
106