Page MenuHomeFreeBSD

D5201.id13054.diff
No OneTemporary

D5201.id13054.diff

Index: usr.sbin/gpioctl/gpioctl.8
===================================================================
--- usr.sbin/gpioctl/gpioctl.8
+++ usr.sbin/gpioctl/gpioctl.8
@@ -41,11 +41,11 @@
.Nm
.Op Fl f Ar ctldev
.Cm -t
-.Ar pin
+.Ar <pin | -N pinname>
.Nm
.Op Fl f Ar ctldev
.Cm -c
-.Ar pin
+.Ar <pin | -N pinname>
.Ar flag
.Op flag ...
.Nm
@@ -55,7 +55,7 @@
.Ar pin-name
.Nm
.Op Cm -f Ar ctldev
-.Ar pin
+.Ar <pin | -N pinname>
.Ar [0|1]
.Sh DESCRIPTION
The
@@ -99,6 +99,8 @@
toggle value of provided pin number
.It Fl v
be verbose: for each listed pin print current configuration
+.It Fl N
+Use the pin name instead of the pin number
.El
.Sh EXAMPLES
.Bl -bullet
@@ -114,6 +116,14 @@
Configure pin 12 to be input pin
.Pp
gpioctl -f /dev/gpioc0 -c 12 IN
+.It
+Set the name of pin 12 to test
+.Pp
+gpioctl -f /dev/gpioc0 -n 12 test
+.It
+Toggle the value the pin named test
+.Pp
+gpioctl -f /dev/gpioc0 -t -N test
.El
.Sh SEE ALSO
.Xr gpio 4 ,
Index: usr.sbin/gpioctl/gpioctl.c
===================================================================
--- usr.sbin/gpioctl/gpioctl.c
+++ usr.sbin/gpioctl/gpioctl.c
@@ -1,6 +1,7 @@
/*-
* Copyright (c) 2009, Oleksandr Tymoshenko <gonzo@FreeBSD.org>
* Copyright (c) 2014, Rui Paulo <rpaulo@FreeBSD.org>
+ * Copyright (c) 2015, Emmanuel Vadot <manu@bidouilliste.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -66,10 +67,10 @@
{
fprintf(stderr, "Usage:\n");
fprintf(stderr, "\tgpioctl [-f ctldev] -l [-v]\n");
- fprintf(stderr, "\tgpioctl [-f ctldev] -t pin\n");
- fprintf(stderr, "\tgpioctl [-f ctldev] -c pin flag ...\n");
+ fprintf(stderr, "\tgpioctl [-f ctldev] -t <pin | -N pinname>\n");
+ fprintf(stderr, "\tgpioctl [-f ctldev] -c <pin | -N pinname> flag ...\n");
fprintf(stderr, "\tgpioctl [-f ctldev] -n pin pin-name\n");
- fprintf(stderr, "\tgpioctl [-f ctldev] pin [0|1]\n");
+ fprintf(stderr, "\tgpioctl [-f ctldev] <pin | -N pinname> [0|1]\n");
exit(1);
}
@@ -163,6 +164,32 @@
free(cfgs);
}
+static int
+get_pinnum_by_name(gpio_handle_t handle, const char *name) {
+ int i, maxpin, pinn;
+ gpio_config_t *cfgs;
+ gpio_config_t *pin;
+
+ pinn = -1;
+ maxpin = gpio_pin_list(handle, &cfgs);
+ if (maxpin < 0) {
+ perror("gpio_pin_list");
+ exit(1);
+ }
+
+ for (i = 0; i <= maxpin; i++) {
+ pin = cfgs + i;
+ gpio_pin_get(handle, pin->g_pin);
+ if (!strcmp(name, pin->g_name)) {
+ pinn = i;
+ break;
+ }
+ }
+ free(cfgs);
+
+ return pinn;
+}
+
static void
fail(const char *fmt, ...)
{
@@ -181,19 +208,16 @@
gpio_config_t pin;
gpio_handle_t handle;
char *ctlfile = NULL;
- int pinn, pinv, ch;
+ int pinn, pinv, byname, ch;
int flags, flag, ok;
int config, list, name, toggle, verbose;
- config = toggle = verbose = list = name = pinn = 0;
+ config = toggle = verbose = list = name = byname = 0;
- while ((ch = getopt(argc, argv, "c:f:ln:t:v")) != -1) {
+ while ((ch = getopt(argc, argv, "cf:ln:tvN")) != -1) {
switch (ch) {
case 'c':
config = 1;
- pinn = str2int(optarg, &ok);
- if (!ok)
- fail("Invalid pin number: %s\n", optarg);
break;
case 'f':
ctlfile = optarg;
@@ -207,11 +231,11 @@
if (!ok)
fail("Invalid pin number: %s\n", optarg);
break;
+ case 'N':
+ byname = 1;
+ break;
case 't':
toggle = 1;
- pinn = str2int(optarg, &ok);
- if (!ok)
- fail("Invalid pin number: %s\n", optarg);
break;
case 'v':
verbose = 1;
@@ -234,10 +258,8 @@
/* Set the pin name. */
if (name) {
- if (argc == 0) {
+ if (argc == 0)
usage();
- exit(1);
- }
if (gpio_pin_set_name(handle, pinn, argv[0]) < 0) {
perror("gpio_pin_set_name");
exit(1);
@@ -251,14 +273,27 @@
exit(0);
}
+ if (argc == 0)
+ usage();
+
+ /* Find the pin number by the name */
+ if (byname) {
+ if ((pinn = get_pinnum_by_name(handle, argv[0])) == -1) {
+ fprintf(stderr, "Can't find pin named \"%s\"\n", argv[0]);
+ exit(1);
+ }
+ } else {
+ pinn = str2int(argv[0], &ok);
+ if (!ok)
+ fail("Invalid pin number: %s\n", argv[0]);
+ }
+
if (toggle) {
/*
- * -t pin assumes no additional arguments
- */
- if (argc > 0) {
+ * -t pin assumes no additional arguments
+ */
+ if (argc > 1)
usage();
- exit(1);
- }
if (gpio_pin_toggle(handle, pinn) < 0) {
perror("gpio_pin_toggle");
exit(1);
@@ -269,7 +304,7 @@
if (config) {
flags = 0;
- for (i = 0; i < argc; i++) {
+ for (i = 1; i < argc; i++) {
flag = str2cap(argv[i]);
if (flag < 0)
fail("Invalid flag: %s\n", argv[i]);
@@ -287,14 +322,8 @@
/*
* Last two cases - set value or print value
*/
- if ((argc == 0) || (argc > 2)) {
+ if ((argc == 0) || (argc > 2))
usage();
- exit(1);
- }
-
- pinn = str2int(argv[0], &ok);
- if (!ok)
- fail("Invalid pin number: %s\n", argv[0]);
/*
* Read pin value

File Metadata

Mime Type
text/plain
Expires
Thu, Feb 27, 3:20 PM (20 h, 6 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16870577
Default Alt Text
D5201.id13054.diff (4 KB)

Event Timeline