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