1 /*****************************************************************************/
4 * stlstty.c -- stallion intelligent multiport special options.
6 * Copyright (c) 1996-1998 Greg Ungerer (gerg@stallion.oz.au).
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
17 * 3. All advertising materials mentioning features or use of this software
18 * must display the following acknowledgement:
19 * This product includes software developed by Greg Ungerer.
20 * 4. Neither the name of the author nor the names of any co-contributors
21 * may be used to endorse or promote products derived from this software
22 * without specific prior written permission.
24 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
25 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36 * $FreeBSD: src/usr.sbin/stallion/stlstty/stlstty.c,v 1.1.2.1 2001/08/30 12:29:56 murray Exp $
37 * $DragonFly: src/usr.sbin/stallion/stlstty/stlstty.c,v 1.4 2007/11/25 01:28:24 swildner Exp $
40 /*****************************************************************************/
47 #include <sys/ioctl.h>
49 #include <machine/cdk.h>
51 /*****************************************************************************/
53 char *version
= "2.0.0";
56 * Define some marker flags (to append to pflag values).
58 #define PFLAG_ON 0x40000000
59 #define PFLAG_OFF 0x80000000
62 * List of all options used. Use the option structure even though we
72 * List of all options used. Use the option structure even though we
75 struct stloption longops
[] = {
81 { "maprts", (PFLAG_ON
| P_MAPRTS
) },
82 { "-maprts", (PFLAG_OFF
| P_MAPRTS
) },
83 { "mapcts", (PFLAG_ON
| P_MAPCTS
) },
84 { "-mapcts", (PFLAG_OFF
| P_MAPCTS
) },
85 { "rtslock", (PFLAG_ON
| P_RTSLOCK
) },
86 { "-rtslock", (PFLAG_OFF
| P_RTSLOCK
) },
87 { "ctslock", (PFLAG_ON
| P_CTSLOCK
) },
88 { "-ctslock", (PFLAG_OFF
| P_CTSLOCK
) },
89 { "loopback", (PFLAG_ON
| P_LOOPBACK
) },
90 { "-loopback", (PFLAG_OFF
| P_LOOPBACK
) },
91 { "fakedcd", (PFLAG_ON
| P_FAKEDCD
) },
92 { "-fakedcd", (PFLAG_OFF
| P_FAKEDCD
) },
93 { "dtrfollow", (PFLAG_ON
| P_DTRFOLLOW
) },
94 { "-dtrfollow", (PFLAG_OFF
| P_DTRFOLLOW
) },
95 { "rximin", (PFLAG_ON
| P_RXIMIN
) },
96 { "-rximin", (PFLAG_OFF
| P_RXIMIN
) },
97 { "rxitime", (PFLAG_ON
| P_RXITIME
) },
98 { "-rxitime", (PFLAG_OFF
| P_RXITIME
) },
99 { "rxthold", (PFLAG_ON
| P_RXTHOLD
) },
100 { "-rxthold", (PFLAG_OFF
| P_RXTHOLD
) },
104 /*****************************************************************************/
107 * Declare internal function prototypes here.
109 static void usage(void);
111 /*****************************************************************************/
116 fprintf(stderr
, "Usage: stlstty [OPTION] [ARGS]\n\n");
117 fprintf(stderr
, " -h, --help print this information\n");
118 fprintf(stderr
, " -V, --version show version information "
120 fprintf(stderr
, " maprts, -maprts set RTS mapping to DTR "
122 fprintf(stderr
, " mapcts, -mapcts set CTS mapping to DCD "
124 fprintf(stderr
, " rtslock, -rtslock set RTS hardware flow "
126 fprintf(stderr
, " ctslock, -ctslock set CTS hardware flow "
128 fprintf(stderr
, " fakedcd, -fakedcd set fake DCD on or off\n");
129 fprintf(stderr
, " dtrfollow, -dtrfollow set DTR data follow "
131 fprintf(stderr
, " loopback, -loopback set port internal loop back "
133 fprintf(stderr
, " rximin, -rximin set RX buffer minimum "
134 "count on or off\n");
135 fprintf(stderr
, " rxitime, -rxitime set RX buffer minimum "
137 fprintf(stderr
, " rxthold, -rxthold set RX FIFO minimum "
138 "count on or off\n");
142 /*****************************************************************************/
147 unsigned long pflags
;
149 if (ioctl(0, STL_GETPFLAG
, &pflags
) < 0)
150 errx(1, "stdin not a Stallion serial port\n");
152 if (pflags
& P_MAPRTS
)
156 if (pflags
& P_MAPCTS
)
161 if (pflags
& P_RTSLOCK
)
165 if (pflags
& P_CTSLOCK
)
170 if (pflags
& P_FAKEDCD
)
174 if (pflags
& P_DTRFOLLOW
)
175 printf("dtrfollow ");
177 printf("-dtrfollow ");
178 if (pflags
& P_LOOPBACK
)
181 printf("-loopback ");
184 if (pflags
& P_RXIMIN
)
188 if (pflags
& P_RXITIME
)
192 if (pflags
& P_RXTHOLD
)
199 /*****************************************************************************/
202 setpflags(unsigned long pflagin
, unsigned long pflagout
)
204 unsigned long pflags
;
206 if (ioctl(0, STL_GETPFLAG
, &pflags
) < 0)
207 errx(1, "stdin not a Stallion serial port\n");
210 pflags
&= ~(pflagout
& ~PFLAG_OFF
);
211 pflags
|= (pflagin
& ~PFLAG_ON
);
213 if (ioctl(0, STL_SETPFLAG
, &pflags
) < 0)
214 err(1, "ioctl(SET_SETPFLAGS) failed");
217 /*****************************************************************************/
220 main(int argc
, char *argv
[])
222 unsigned long pflagin
, pflagout
;
223 int optind
, optfound
;
229 for (optind
= 1; (optind
< argc
); optind
++) {
231 for (i
= 0; (longops
[i
].name
[0] != 0) ; i
++) {
232 if (strcmp(argv
[optind
], &(longops
[i
].name
[0])) == 0) {
233 val
= longops
[i
].val
;
239 errx(1, "invalid option '%s'\n", argv
[optind
]);
243 printf("stlstats version %s\n", version
);
250 if (val
& PFLAG_ON
) {
252 } else if (val
& PFLAG_OFF
) {
255 errx(1, "unknown option found, val=%x!\n", val
);
260 if (pflagin
| pflagout
)
261 setpflags(pflagin
, pflagout
);
268 /*****************************************************************************/