All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sascha Hauer <s.hauer@pengutronix.de>
To: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
Cc: barebox@lists.infradead.org
Subject: Re: [RFC PATCH] cammand/gpio: switch to getopt
Date: Fri, 10 Jun 2011 09:04:47 +0200	[thread overview]
Message-ID: <20110610070447.GP23771@pengutronix.de> (raw)
In-Reply-To: <1307642584-23695-1-git-send-email-plagnioj@jcrosoft.com>

On Thu, Jun 09, 2011 at 08:03:04PM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote:
> this will simplify the implementation and save 296 bytes

This is both true. Still I like the old syntax of the commands very
much. Actually the commands have the same name as in the kernel and
it feels just good to type.

Sascha

> 
> Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>
> ---
>  commands/gpio.c |  162 ++++++++++++++++++++++--------------------------------
>  1 files changed, 66 insertions(+), 96 deletions(-)
> 
> diff --git a/commands/gpio.c b/commands/gpio.c
> index 073c9d3..af1fd39 100644
> --- a/commands/gpio.c
> +++ b/commands/gpio.c
> @@ -19,113 +19,83 @@
>  #include <command.h>
>  #include <errno.h>
>  #include <gpio.h>
> +#include <getopt.h>
>  
> -static int do_gpio_get_value(struct command *cmdtp, int argc, char *argv[])
> +static int do_gpio(struct command *cmdtp, int argc, char *argv[])
>  {
> -	int gpio, value;
> +	int opt;
> +	int gpio = -1;
> +	int value = -1;
> +	int mode = -1;
> +	int ret = 0;
>  
> -	if (argc < 2)
> +	if (!argc)
>  		return COMMAND_ERROR_USAGE;
>  
> -	gpio = simple_strtoul(argv[1], NULL, 0);
> -
> -	value = gpio_get_value(gpio);
> -	if (value < 0)
> +	while((opt = getopt(argc, argv, "g:oiS:G")) > 0) {
> +		switch(opt) {
> +		case 'g':
> +			gpio = simple_strtoul(optarg, NULL, 0);
> +			break;
> +		case 'o':
> +			mode = 1;
> +			break;
> +		case 'i':
> +			mode = 2;
> +			break;
> +		case 'G':
> +			mode = 3;
> +			value = 0;
> +			break;
> +		case 'S':
> +			if (mode != 1)
> +				mode = 4;
> +			value = simple_strtoul(optarg, NULL, 0);
> +			break;
> +
> +		}
> +	}
> +
> +	if (gpio < 0 || mode < 0 || value < 0)
>  		return 1;
>  
> -	return value;
> -}
> -
> -BAREBOX_CMD_HELP_START(gpio_get_value)
> -BAREBOX_CMD_HELP_USAGE("gpio_get_value <gpio>\n")
> -BAREBOX_CMD_HELP_SHORT("get the value of an gpio input pin\n")
> -BAREBOX_CMD_HELP_END
> -
> -BAREBOX_CMD_START(gpio_get_value)
> -	.cmd		= do_gpio_get_value,
> -	.usage		= "return value of a gpio pin",
> -	BAREBOX_CMD_HELP(cmd_gpio_get_value_help)
> -BAREBOX_CMD_END
> -
> -static int do_gpio_set_value(struct command *cmdtp, int argc, char *argv[])
> -{
> -	int gpio, value;
> -
> -	if (argc < 3)
> -		return COMMAND_ERROR_USAGE;
> -
> -	gpio = simple_strtoul(argv[1], NULL, 0);
> -	value = simple_strtoul(argv[2], NULL, 0);
> -
> -	gpio_set_value(gpio, value);
> -
> -	return 0;
> -}
> -
> -BAREBOX_CMD_HELP_START(gpio_set_value)
> -BAREBOX_CMD_HELP_USAGE("gpio_set_value <gpio> <value>\n")
> -BAREBOX_CMD_HELP_SHORT("set the value of an gpio output pin\n")
> -BAREBOX_CMD_HELP_END
> -
> -BAREBOX_CMD_START(gpio_set_value)
> -	.cmd		= do_gpio_set_value,
> -	.usage		= "set a gpio's output value",
> -	BAREBOX_CMD_HELP(cmd_gpio_set_value_help)
> -BAREBOX_CMD_END
> -
> -static int do_gpio_direction_input(struct command *cmdtp, int argc, char *argv[])
> -{
> -	int gpio, ret;
> -
> -	if (argc < 2)
> -		return COMMAND_ERROR_USAGE;
> -
> -	gpio = simple_strtoul(argv[1], NULL, 0);
> -
> -	ret = gpio_direction_input(gpio);
> -	if (ret)
> -		return 1;
> -
> -	return 0;
> -}
> -
> -BAREBOX_CMD_HELP_START(gpio_direction_input)
> -BAREBOX_CMD_HELP_USAGE("gpio_direction_input <gpio>\n")
> -BAREBOX_CMD_HELP_SHORT("set direction of a gpio pin to input\n")
> -BAREBOX_CMD_HELP_END
> -
> -BAREBOX_CMD_START(gpio_direction_input)
> -	.cmd		= do_gpio_direction_input,
> -	.usage		= "set direction of a gpio pin to input",
> -	BAREBOX_CMD_HELP(cmd_gpio_direction_input_help)
> -BAREBOX_CMD_END
> -
> -static int do_gpio_direction_output(struct command *cmdtp, int argc, char *argv[])
> -{
> -	int gpio, value, ret;
> -
> -	if (argc < 3)
> -		return COMMAND_ERROR_USAGE;
> -
> -	gpio = simple_strtoul(argv[1], NULL, 0);
> -	value = simple_strtoul(argv[2], NULL, 0);
> +	switch (mode) {
> +	case 1:
> +		ret = gpio_direction_input(gpio);
> +		break;
> +	case 2:
> +		ret = gpio_direction_output(gpio, value);
> +		break;
> +	case 3:
> +		value = gpio_get_value(gpio);
> +		if (value < 0)
> +			return 1;
> +		return value;
> +	case 4:
> +		gpio_set_value(gpio, value);
> +		break;
> +	}
>  
> -	ret = gpio_direction_output(gpio, value);
>  	if (ret)
>  		return 1;
>  
>  	return 0;
>  }
>  
> -BAREBOX_CMD_HELP_START(gpio_direction_output)
> -BAREBOX_CMD_HELP_USAGE("gpio_direction_output <gpio> <value>\n")
> -BAREBOX_CMD_HELP_SHORT("set direction of a gpio pin to output\n")
> +BAREBOX_CMD_HELP_START(gpio)
> +BAREBOX_CMD_HELP_USAGE("gpio -g <gpio> [-o|-i] [-g|-s <value>]\n")
> +BAREBOX_CMD_HELP_SHORT("gpio management\n")
> +BAREBOX_CMD_HELP_OPT  ("-g <gpio>",	"gpio number\n")
> +BAREBOX_CMD_HELP_OPT  ("-o",		"output mode (you need to specify a value\n")
> +BAREBOX_CMD_HELP_OPT  ("-i",		"input mode\n")
> +BAREBOX_CMD_HELP_OPT  ("-G",		"get value\n")
> +BAREBOX_CMD_HELP_OPT  ("-S",		"set value\n")
>  BAREBOX_CMD_HELP_END
>  
> -BAREBOX_CMD_START(gpio_direction_output)
> -	.cmd		= do_gpio_direction_output,
> -	.usage		= "set direction of a gpio pin to output",
> -	BAREBOX_CMD_HELP(cmd_gpio_direction_output_help)
> +BAREBOX_CMD_START(gpio)
> +	.cmd		= do_gpio,
> +	.usage		= "gpio management",
> +	BAREBOX_CMD_HELP(cmd_gpio_help)
>  BAREBOX_CMD_END
>  
>  /**
> @@ -133,7 +103,7 @@ BAREBOX_CMD_END
>  
>  @section regular_gpio General usage information
>  
> -These commands are available if the symbol @b CONFIG_GENERIC_GPIO and @b
> +The gpio command are available if the symbol @b CONFIG_GENERIC_GPIO and @b
>  CONFIG_CMD_GPIO are enabled in Kconfig.
>  
>  @note All gpio related commands take a number to identify the pad. This
> @@ -143,7 +113,7 @@ between @b barebox releases.
>  
>  @section gpio_dir_out Use Pad as GPIO Output
>  @verbatim
> -# gpio_direction_output <gpio_no> <initial_value>
> +# gpio -g <gpio_no> -S <initial_value>
>  @endverbatim
>  - gpio_no: Architecture dependend GPIO number
>  - initial_value: Output value
> @@ -155,7 +125,7 @@ available), this command may silently fail. </p>
>  
>  @section gpio_dir_in Use Pad as GPIO Input
>  @verbatim
> -# gpio_direction_input <gpio_no>
> +# gpio -g <gpio_no> -i
>  @endverbatim
>  - gpio_no: Architecture dependent GPIO number
>  
> @@ -164,7 +134,7 @@ this command may silently fail. </p>
>  
>  @section gpio_get_value Read Input Value from GPIO Pin
>  @verbatim
> -# gpio_get_value <gpio_no>
> +# gpio -g <gpio_no> -G
>  @endverbatim
>  
>  <p> Reads the current value of a GPIO pin and return the value as a
> @@ -178,7 +148,7 @@ fail and return garbage. </p>
>  
>  @section gpio_set_value Set Output Value on GPIO Pin
>  @verbatim
> -# gpio_set_value <gpio_no> <value>
> +# gpio -g <gpio_no> -S <value>
>  @endverbatim
>  - gpio_no: Architecture dependent GPIO number
>  - value: Output value
> -- 
> 1.7.4.1
> 
> 
> _______________________________________________
> barebox mailing list
> barebox@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/barebox
> 

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

  reply	other threads:[~2011-06-10  7:04 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-06-09 18:03 [RFC PATCH] cammand/gpio: switch to getopt Jean-Christophe PLAGNIOL-VILLARD
2011-06-10  7:04 ` Sascha Hauer [this message]
2011-06-10  7:05   ` Jean-Christophe PLAGNIOL-VILLARD
2011-06-10  8:02     ` Sascha Hauer
2011-06-10 11:13       ` Jean-Christophe PLAGNIOL-VILLARD

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110610070447.GP23771@pengutronix.de \
    --to=s.hauer@pengutronix.de \
    --cc=barebox@lists.infradead.org \
    --cc=plagnioj@jcrosoft.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.