summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbrian <brian@FreeBSD.org>2001-06-20 14:52:20 +0000
committerbrian <brian@FreeBSD.org>2001-06-20 14:52:20 +0000
commit034c038b4342655df117ef29e7b4f269ee16715f (patch)
tree8b0631cf3418020a4cb1a73376e69487be7c91ca
parentf1ae94cd5c8a240b33b2df0f489e143061e3fb99 (diff)
downloadFreeBSD-src-034c038b4342655df117ef29e7b4f269ee16715f.zip
FreeBSD-src-034c038b4342655df117ef29e7b4f269ee16715f.tar.gz
o Add a -a flag for changing/getting the ALTPIN setting for a digi port.
o For the -i switch, only show the device if more than one is given on the command line.
-rw-r--r--usr.sbin/digictl/digictl.848
-rw-r--r--usr.sbin/digictl/digictl.c70
2 files changed, 99 insertions, 19 deletions
diff --git a/usr.sbin/digictl/digictl.8 b/usr.sbin/digictl/digictl.8
index 25f6407..dd55dce 100644
--- a/usr.sbin/digictl/digictl.8
+++ b/usr.sbin/digictl/digictl.8
@@ -1,5 +1,5 @@
.\" $FreeBSD$
-.Dd May 1, 2001
+.Dd June 20, 2001
.Dt DIGICTL 8
.Os
.Sh NAME
@@ -9,27 +9,55 @@
devices
.Sh SYNOPSIS
.Nm
+.Fl a
+disable|enable|query
+.Ar device ...
+.Nm
.Op Fl d Ar debug
.Op Fl ir
-.Ar device ...
+.Ar ctrl-device ...
.Sh DESCRIPTION
The
.Nm
program provides control of the
.Tn Digiboard
-installed with the given control
-.Ar device
-name.
-A digiboard control
+installed with the given
+.Ar ctrl-device
+name and provides control of individual digiboard
+.Ar device Ns No s.
+A digiboard
+.Ar ctrl-device
+is usually of the form
+.Pa /dev/digi Ns Sy N Ns Pa .ctl
+where
+.Sy N
+is the card number and starts at
+.Dq 0
+for the first attached card.
+A digiboard
.Ar device
is usually of the form
-.Pa /dev/digi Ns Ar N Ns Pa .ctl
+.Pa /dev/cua Ns Oo Pa \&il Oc Ns Pa D Ns Sy N Ns . Ns Sy D
+or
+.Pa /dev/tty Ns Oo Pa \&il Oc Ns Pa D Ns Sy N Ns . Ns Sy D
where
-.Ar N
-is the card number and starts at 0 for the first attached card.
+.Sy N
+is the card number and
+.Sy D
+is the port number.
.Pp
The following flags are recognized:
-.Bl -tag -xwidth ".Fl d Ar debug"
+.Bl -tag
+.It Fl a No disable|enable|query
+Disable, enable or query the
+.Em ALTPIN
+settings for the given port(s).
+.Pp
+When ALTPIN is enabled, the CD and DSR lines are logically reversed.
+This is useful when wiring serial ports to an 8 way RJ45 cable (full
+10 way RJ45 cables are quite rare).
+.Pp
+A single ALTPIN setting applies to both of the callout and callin devices.
.It Fl d Ar debug
If the driver has been compiled with
.Dv DEBUG
diff --git a/usr.sbin/digictl/digictl.c b/usr.sbin/digictl/digictl.c
index 49d48df..dbcdb93 100644
--- a/usr.sbin/digictl/digictl.c
+++ b/usr.sbin/digictl/digictl.c
@@ -36,10 +36,13 @@
#include <sys/ioctl.h>
#include <unistd.h>
+enum aflag { NO_AFLAG, ALTPIN_DISABLE, ALTPIN_ENABLE, ALTPIN_QUERY };
+
static int
usage(const char *prog)
{
- fprintf(stderr, "Usage: %s [-d debug] [-ir] device...\n", prog);
+ fprintf(stderr, "Usage: %s -a disable|enable|query device\n", prog);
+ fprintf(stderr, " %s [-d debug] [-ir] ctrl-device...\n", prog);
return (EX_USAGE);
}
@@ -49,35 +52,56 @@ main(int argc, char **argv)
char namedata[256], *name = namedata;
const char *prog;
enum digi_model model;
- int ch, debug, fd, i, res;
+ int altpin, ch, debug, fd, i, res;
int dflag, iflag, rflag;
+ enum aflag aflag;
if ((prog = strrchr(argv[0], '/')) == NULL)
prog = argv[0];
else
prog++;
+ aflag = NO_AFLAG;
dflag = iflag = rflag = 0;
- while ((ch = getopt(argc, argv, "d:ir")) != -1)
+ while ((ch = getopt(argc, argv, "a:d:ir")) != -1)
switch (ch) {
+ case 'a':
+ if (strcasecmp(optarg, "disable") == 0)
+ aflag = ALTPIN_DISABLE;
+ else if (strcasecmp(optarg, "enable") == 0)
+ aflag = ALTPIN_ENABLE;
+ else if (strcasecmp(optarg, "query") == 0)
+ aflag = ALTPIN_QUERY;
+ else
+ return (usage(prog));
+ break;
+
case 'd':
dflag = 1;
debug = atoi(optarg);
break;
+
case 'i':
iflag = 1;
break;
+
case 'r':
rflag = 1;
break;
+
default:
- return usage(prog);
+ return (usage(prog));
}
- if (argc < optind)
- return usage(prog);
+ if ((dflag || iflag || rflag) && aflag != NO_AFLAG)
+ return (usage(prog));
+
+ if (argc <= optind)
+ return (usage(prog));
+ altpin = (aflag == ALTPIN_ENABLE);
res = 0;
+
for (i = optind; i < argc; i++) {
if ((fd = open(argv[i], O_RDONLY)) == -1) {
fprintf(stderr, "%s: %s: open: %s\n", prog, argv[i],
@@ -86,6 +110,32 @@ main(int argc, char **argv)
continue;
}
+ switch (aflag) {
+ case NO_AFLAG:
+ break;
+
+ case ALTPIN_ENABLE:
+ case ALTPIN_DISABLE:
+ if (ioctl(fd, DIGIIO_SETALTPIN, &altpin) != 0) {
+ fprintf(stderr, "%s: %s: set altpin: %s\n",
+ prog, argv[i], strerror(errno));
+ res++;
+ }
+ break;
+
+ case ALTPIN_QUERY:
+ if (ioctl(fd, DIGIIO_GETALTPIN, &altpin) != 0) {
+ fprintf(stderr, "%s: %s: get altpin: %s\n",
+ prog, argv[i], strerror(errno));
+ res++;
+ } else {
+ if (argc > optind + 1)
+ printf("%s: ", argv[i]);
+ puts(altpin ? "enabled" : "disabled");
+ }
+ break;
+ }
+
if (dflag && ioctl(fd, DIGIIO_DEBUG, &debug) != 0) {
fprintf(stderr, "%s: %s: debug: %s\n",
prog, argv[i], strerror(errno));
@@ -101,9 +151,11 @@ main(int argc, char **argv)
fprintf(stderr, "%s: %s: ident: %s\n",
prog, argv[i], strerror(errno));
res++;
- } else
- printf("%s: %s (type %d)\n",
- argv[i], name, (int)model);
+ } else {
+ if (argc > optind + 1)
+ printf("%s: ", argv[i]);
+ printf("%s (type %d)\n", name, (int)model);
+ }
}
if (rflag && ioctl(fd, DIGIIO_REINIT) != 0) {
OpenPOWER on IntegriCloud