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