mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [RFC PATCH] cammand/gpio: switch to getopt
@ 2011-06-09 18:03 Jean-Christophe PLAGNIOL-VILLARD
  2011-06-10  7:04 ` Sascha Hauer
  0 siblings, 1 reply; 5+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2011-06-09 18:03 UTC (permalink / raw)
  To: barebox

this will simplify the implementation and save 296 bytes

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

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC PATCH] cammand/gpio: switch to getopt
  2011-06-09 18:03 [RFC PATCH] cammand/gpio: switch to getopt Jean-Christophe PLAGNIOL-VILLARD
@ 2011-06-10  7:04 ` Sascha Hauer
  2011-06-10  7:05   ` Jean-Christophe PLAGNIOL-VILLARD
  0 siblings, 1 reply; 5+ messages in thread
From: Sascha Hauer @ 2011-06-10  7:04 UTC (permalink / raw)
  To: Jean-Christophe PLAGNIOL-VILLARD; +Cc: barebox

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

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC PATCH] cammand/gpio: switch to getopt
  2011-06-10  7:04 ` Sascha Hauer
@ 2011-06-10  7:05   ` Jean-Christophe PLAGNIOL-VILLARD
  2011-06-10  8:02     ` Sascha Hauer
  0 siblings, 1 reply; 5+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2011-06-10  7:05 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

On 09:04 Fri 10 Jun     , Sascha Hauer wrote:
> 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.
maybe we can drop the command
and add a devfs entry

Best Regards,
J.

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

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC PATCH] cammand/gpio: switch to getopt
  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
  0 siblings, 1 reply; 5+ messages in thread
From: Sascha Hauer @ 2011-06-10  8:02 UTC (permalink / raw)
  To: Jean-Christophe PLAGNIOL-VILLARD; +Cc: barebox

On Fri, Jun 10, 2011 at 09:05:07AM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote:
> On 09:04 Fri 10 Jun     , Sascha Hauer wrote:
> > 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.
> maybe we can drop the command
> and add a devfs entry

How? With the gpio commands you have to specify two parameters at once.
I can't see how to archieve this with device parameters.

Sascha

-- 
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

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [RFC PATCH] cammand/gpio: switch to getopt
  2011-06-10  8:02     ` Sascha Hauer
@ 2011-06-10 11:13       ` Jean-Christophe PLAGNIOL-VILLARD
  0 siblings, 0 replies; 5+ messages in thread
From: Jean-Christophe PLAGNIOL-VILLARD @ 2011-06-10 11:13 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

On 10:02 Fri 10 Jun     , Sascha Hauer wrote:
> On Fri, Jun 10, 2011 at 09:05:07AM +0200, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > On 09:04 Fri 10 Jun     , Sascha Hauer wrote:
> > > 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.
> > maybe we can drop the command
> > and add a devfs entry
> 
> How? With the gpio commands you have to specify two parameters at once.
> I can't see how to archieve this with device parameters.
> 
via params

param mode will specify inpout or out
then read or write will set or get the value

Best Regards,
J.

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

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2011-06-11 12:26 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-06-09 18:03 [RFC PATCH] cammand/gpio: switch to getopt Jean-Christophe PLAGNIOL-VILLARD
2011-06-10  7:04 ` Sascha Hauer
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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox