Hi,

Thanks Alan. I'll correct the spacing issue and split the patch in two: 
one for getopt, and one for the baudrate setting.

Regards,
Tony

Le 2013-04-19 15:03, Alan Ott a écrit :
> On 04/17/2013 05:23 PM, 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>
>> ---
>
> It looks like your editor is indenting 4 spaces instead of a tab.
>
>
>>  src/serial.c | 109 
>> ++++++++++++++++++++++++++++++++++++++++++++++-------------
>>  1 file changed, 85 insertions(+), 24 deletions(-)
>>
>> diff --git a/src/serial.c b/src/serial.c
>> index 252f3d9..2dd2228 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' },
>> +    { 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");
>> +    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;
>> +    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;
>> +    }
>>
>> -    fd = open(argv[1], O_RDWR | O_NOCTTY);
>> +    fd = open(argv[optind], O_RDWR | O_NOCTTY);
>>      if (fd < 0) {
>>              perror("open");
>>              return 2;
>> @@ -76,8 +137,8 @@ int main(int argc, char **argv) {
>>      tbuf.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG);
>>      tbuf.c_iflag &= ~(INPCK | ISTRIP);
>>      tbuf.c_oflag &= ~OPOST;
>> -    tbuf.c_cc[VTIME] = 5;
>> -
>> +    tbuf.c_cc[VTIME] = 5;
>> +
>
> I'd be better to make a separate patch for this one.
>
>>      /*
>>      tbuf.c_cflag |= CLOCAL;
>>      tbuf.c_lflag = 0;
>> @@ -91,8 +152,8 @@ int main(int argc, char **argv) {
>>      tbuf.c_cc[7] = 0;
>>      tbuf.c_cc[VMIN] = 1;
>>      */
>> -    cfsetospeed(&tbuf, B115200);
>> -    cfsetispeed(&tbuf, B115200);
>> +    cfsetospeed(&tbuf, speed);
>> +    cfsetispeed(&tbuf, speed);
>>
>>      if (tcsetattr(fd, TCSANOW, &tbuf) < 0) {
>>              perror("tcsetattr");
>
>
> The basic idea looks good. getopt() is definitely an improvement.
>
> Alan.

------------------------------------------------------------------------------
Precog is a next-generation analytics platform capable of advanced
analytics on semi-structured data. The platform includes APIs for building
apps and a phenomenal toolset for data science. Developers can use
our toolset for easy data analysis & visualization. Get a free account!
http://www2.precog.com/precogplatform/slashdotnewsletter
_______________________________________________
Linux-zigbee-devel mailing list
Linux-zigbee-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-zigbee-devel

Reply via email to