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 <[email protected]>
> ---
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-zigbee-devel