summaryrefslogtreecommitdiffstats
path: root/etc/rc.d/serial
blob: d569a0b41be9dfb407d0d8eff006801d353c597f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#!/bin/sh
#
# Copyright (c) 1996  Andrey A. Chernov
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# $FreeBSD$
#

# PROVIDE: serial
# REQUIRE: root
# KEYWORD: nojail

# Change some defaults for serial devices.
# Standard defaults are:
#	dtrwait 300 drainwait `sysctl -n kern.drainwait`
#	initial cflag from <sys/ttydefaults.h> = cread cs8 hupcl
#	initial iflag, lflag and oflag all 0
#	speed 9600
#	special chars from <sys/ttydefaults.h>
#	nothing locked
# except for serial consoles the initial iflag, lflag and oflag are from
# <sys/ttydefaults.h> and clocal is locked on.

default() {
	# Reset everything changed by the other functions to initial defaults.

	dc=$1; shift	# device name character
	drainwait=`sysctl -n kern.drainwait`

	for i in $*
	do
		comcontrol /dev/tty${dc}${i} dtrwait 300 drainwait $drainwait
		stty < /dev/tty${dc}${i}.init -clocal crtscts hupcl 9600 reprint ^R
		stty < /dev/tty${dc}${i}.lock -clocal -crtscts -hupcl 0
		stty < /dev/cua${dc}${i}.init -clocal crtscts hupcl 9600 reprint ^R
		stty < /dev/cua${dc}${i}.lock -clocal -crtscts -hupcl 0
	done
}

maybe() {
	# Special settings.

	dc=$1; shift

	for i in $*
	do
		# Don't use ^R; it breaks bash's ^R when typed ahead.
		stty < /dev/tty${dc}${i}.init reprint undef
		stty < /dev/cua${dc}${i}.init reprint undef
		# Lock clocal off on dialin device for security.
		stty < /dev/tty${dc}${i}.lock clocal
		# Lock the speeds to use old binaries that don't support them.
		# Any legal speed works to lock the initial speed.
		stty < /dev/tty${dc}${i}.lock 300
		stty < /dev/cua${dc}${i}.lock 300
	done
}

modem() {
	# Modem that supports CTS and perhaps RTS handshaking.

	dc=$1; shift

	for i in $*
	do
		# may depend on modem
		comcontrol /dev/tty${dc}${i} dtrwait 100 drainwait 180
		# Lock crtscts on.
		# Speed reasonable for V42bis.
		stty < /dev/tty${dc}${i}.init crtscts 115200
		stty < /dev/tty${dc}${i}.lock crtscts
		stty < /dev/cua${dc}${i}.init crtscts 115200
		stty < /dev/cua${dc}${i}.lock crtscts
	done
}

mouse() {
	# Mouse on either callin or callout port.

	dc=$1; shift

	for i in $*
	do
		# Lock clocal on, hupcl off.
		# Standard speed for Microsoft mouse.
		stty < /dev/tty${dc}${i}.init clocal -hupcl 1200
		stty < /dev/tty${dc}${i}.lock clocal  hupcl
		stty < /dev/cua${dc}${i}.init clocal -hupcl 1200
		stty < /dev/cua${dc}${i}.lock clocal  hupcl
	done
}

terminal() {
	# Terminal that supports CTS and perhaps RTS handshaking
	# with the cable or terminal arranged so that DCD is on
	# at least while the terminal is on.
	# Also works for bidirectional communications to another pc
	# provided at most one side runs getty.
	# Same as modem() except we want a faster speed and no dtrwait.

	dc=$1; shift

	modem ${dc} $*
	for i in $*
	do
		comcontrol /dev/tty${dc}${i} dtrwait 0
		stty < /dev/tty${dc}${i}.init 115200
		stty < /dev/cua${dc}${i}.init 115200
	done
}

3wire() {
	# 3-wire serial terminals.  These don't supply carrier, so
	# clocal needs to be set, and crtscts needs to be unset.

	dc=$1; shift

	terminal ${dc} $*
	for i in $*
	do
		stty < /dev/tty${dc}${i}.init clocal -crtscts
		stty < /dev/cua${dc}${i}.init clocal -crtscts
	done
}

# Don't use anything from this file unless you have some buggy programs
# that require it.

# Edit the functions and the examples to suit your system.
# $1 is the device identifier, and the remainder of the line
# lists the device numbers.

# Initialize assorted 8250-16550 (uart) ports.
# maybe    u  0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v
# mouse    u      2
# modem    u    1
# terminal u  0
# 3wire    u  0

# Initialize all ports on a Cyclades-8yo.
# modem    c  00 01 02 03 04 05 06 07

# Initialize all ports on a Cyclades-16ye.
# modem    c  00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f

# Initialize all ports on a Digiboard 8.
# modem    D  00 01 02 03 04 05 06 07
OpenPOWER on IntegriCloud