From 034c038b4342655df117ef29e7b4f269ee16715f Mon Sep 17 00:00:00 2001 From: brian Date: Wed, 20 Jun 2001 14:52:20 +0000 Subject: 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. --- usr.sbin/digictl/digictl.8 | 48 ++++++++++++++++++++++++------- usr.sbin/digictl/digictl.c | 70 ++++++++++++++++++++++++++++++++++++++++------ 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 #include +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) { -- cgit v1.1