Dear Tony,

On Wed, Apr 24, 2013 at 10:49:16AM -0400, Tony Cheneau wrote:
> Add a "baudrate" parameter on the CLI that enables the user to choose
> from different baudrates. If no parameter is passed, the baudrate is set
> to 115200 (retaining the previous behavior).
> 
> Signed-off-by: Tony Cheneau <tony.chen...@amnesiak.org>
> ---
>  src/serial.c | 103 
> +++++++++++++++++++++++++++++++++++++++++++++++------------
>  1 file changed, 82 insertions(+), 21 deletions(-)
> 
> diff --git a/src/serial.c b/src/serial.c
> index ab76aea..d42ea5b 100644
> --- a/src/serial.c
> +++ b/src/serial.c
> @@ -25,6 +25,7 @@
>  
>  #include <stdio.h>
>  #include <string.h>
> +#include <stdlib.h>
>  
>  #include <sys/types.h>
>  #include <sys/ioctl.h>
> @@ -32,33 +33,93 @@
>  #include <termios.h>
>  #include <unistd.h>
>  #include <errno.h>
> +#include <getopt.h>
>  
>  #include "ieee802154.h"
>  
> +#ifdef HAVE_GETOPT_LONG
> +static const struct option iz_long_opts[] = {
> +     { "baudrate", optional_argument, NULL, 'b' },
> +     { "help", no_argument, NULL, 'h' },
Maybe we should add "version" and 'v' here.
> +     { NULL, 0, NULL, 0 },
> +};
> +#endif
> +
> +void serial_help(const char * pname) {
> +     printf("Usage: %s [options] SERIAL_DEV\n", pname);
> +     printf("Attach serial devices via UART to IEEE 802.15.4/ZigBee 
> stack\n\n");
> +     printf("Options:\n");
> +     printf("  -b, --baudrate[=115200]        set the baudrate\n");
> +     printf("  -h, --help                     print help\n");
Same here.
> +     printf("  SERIAL_DEV                     this specifies the serial 
> device to attach.\n");
> +     printf("Report bugs to " PACKAGE_BUGREPORT "\n\n");
> +     printf(PACKAGE_NAME " homepage <" PACKAGE_URL ">\n");
> +}
> +
> +speed_t baudrate_to_speed(long baudrate) {
> +     switch(baudrate) {
> +             case 9600: return B9600;
> +             case 19200: return B19200;
> +             case 38400: return B38400;
> +             case 57600: return B57600;
> +             case 115200: return B115200;
> +             case 230400: return B230400;
> +             case 460800: return B460800;
> +             case 921600: return B921600;
Intend here like linux kernel?
it's

switch(foo) {
case bar:
...
}
> +             default:
> +                     printf("Unrecognized baudrate %ld\n", baudrate);
> +                     exit(EXIT_FAILURE);
> +    }
> +}
> +
>  int main(int argc, char **argv) {
> -     int fd, ret, s;
> -
> -     if (argc == 1 || !strcmp(argv[1], "--version")) {
> -             printf( "izattach " VERSION "\n"
> -                     "Copyright (C) 2008, 2009 by Siemens AG\n"
> -                     "License GPLv2 GNU GPL version 2 
> <http://gnu.org/licenses/gpl.html>.\n"
> -                     "This is free software: you are free to change and 
> redistribute it.\n"
> -                     "There is NO WARRANTY, to the extent permitted by 
> law.\n"
> -                     "\n"
> -                     "Written by Dmitry Eremin-Solenikov, Sergey Lapin and 
> Maxim Osipov\n");
> -             return 0;
> +     int fd, ret, s, c;
> +     long baudrate;
> +     char * endptr;
> +     speed_t speed = B115200;
> +
> +     /* Parse options */
> +     while (1) {
> +#ifdef HAVE_GETOPT_LONG
> +             int opt_idx = -1;
> +             c = getopt_long(argc, argv, "b:h", iz_long_opts, &opt_idx);
> +#else
> +             c = getopt(argc, argv, "b:h");
> +#endif
> +             if (c == -1)
> +                     break;
> +
> +             switch(c) {
> +                 case 'h':
> +                     serial_help(argv[0]);
> +                     return 0;
> +                 case 'b':
> +                     baudrate = strtol(optarg, &endptr, 10);
> +                     if (* endptr == '\0')
> +                         speed = baudrate_to_speed(baudrate);
> +                     break;
> +                 case 'v':
> +                     printf( "izattach " VERSION "\n"
> +                             "Copyright (C) 2008, 2009 by Siemens AG\n"
> +                             "License GPLv2 GNU GPL version 2 
> <http://gnu.org/licenses/gpl.html>.\n"
> +                             "This is free software: you are free to change 
> and redistribute it.\n"
> +                             "There is NO WARRANTY, to the extent permitted 
> by law.\n"
> +                             "\n"
> +                             "Written by Dmitry Eremin-Solenikov, Sergey 
> Lapin and Maxim Osipov\n");
> +                     return 0;
> +                 default:
> +                     serial_help(argv[0]);
> +                     return 1;
> +             }
>       }
>  
> -     if (argc != 2 || (argc >= 1 && !strcmp(argv[1], "--help"))) {
> -             printf("Usage: %s SERIAL_DEV\n", argv[0]);
> -             printf("Attach serial devices via UART to IEEE 802.15.4/ZigBee 
> stack\n\n");
> -             printf("  SERIAL_DEV  This specifies the serial device to 
> attach.\n");
> -             printf("Report bugs to " PACKAGE_BUGREPORT "\n\n");
> -             printf(PACKAGE_NAME " homepage <" PACKAGE_URL ">\n");
> -             return 1;
> +     if (argc <= optind) {
> +             printf("SERIAL_DEV argument is missing\n\n");
> +             serial_help(argv[0]);
> +             return 2;
Maybe we should only use return 1 for error and 0 for success. Maybe we should 
use the
standard EXIT_FAILURE and EXIT_SUCCESS defines for that.

Regards
Alex

------------------------------------------------------------------------------
Try New Relic Now & We'll Send You this Cool Shirt
New Relic is the only SaaS-based application performance monitoring service 
that delivers powerful full stack analytics. Optimize and monitor your
browser, app, & servers with just a few lines of code. Try New Relic
and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_apr
_______________________________________________
Linux-zigbee-devel mailing list
Linux-zigbee-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-zigbee-devel

Reply via email to