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