summaryrefslogtreecommitdiffstats
path: root/usr.sbin/digictl/digictl.c
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 /usr.sbin/digictl/digictl.c
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.
Diffstat (limited to 'usr.sbin/digictl/digictl.c')
-rw-r--r--usr.sbin/digictl/digictl.c70
1 files changed, 61 insertions, 9 deletions
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