diff --git a/examples/cli/README.md b/examples/cli/README.md index 2087b33ba..2e9cdf2f1 100644 --- a/examples/cli/README.md +++ b/examples/cli/README.md @@ -20,7 +20,7 @@ Spawn the process: ```bash $ cd openthread/examples/cli -$ ./soc --nodeid=1 -S +$ ./soc 1 ``` Start OpenThread: @@ -55,7 +55,7 @@ Spawn the process: ```bash $ cd openthread/examples/cli -$ ./soc --nodeid=2 -S +$ ./soc 2 ``` Start OpenThread: diff --git a/examples/cli/main.cpp b/examples/cli/main.cpp index e0a815e2f..0442d4970 100644 --- a/examples/cli/main.cpp +++ b/examples/cli/main.cpp @@ -28,14 +28,10 @@ #include -#include - #include #include #include -struct gengetopt_args_info args_info; - Thread::Cli::Serial sCliServer; void otSignalTaskletPending(void) @@ -44,11 +40,13 @@ void otSignalTaskletPending(void) int main(int argc, char *argv[]) { - if (cmdline_parser(argc, argv, &args_info) != 0) + if (argc != 2) { exit(1); } + NODE_ID = atoi(argv[1]); + PlatformInit(); otInit(); sCliServer.Start(); diff --git a/examples/ncp/main.cpp b/examples/ncp/main.cpp index 583c9f5e9..9da3aa18a 100644 --- a/examples/ncp/main.cpp +++ b/examples/ncp/main.cpp @@ -27,13 +27,9 @@ #include -#include - #include #include -struct gengetopt_args_info args_info; - Thread::Ncp sNcp; void otSignalTaskletPending(void) @@ -42,11 +38,12 @@ void otSignalTaskletPending(void) int main(int argc, char *argv[]) { - if (cmdline_parser(argc, argv, &args_info) != 0) + if (argc != 2) { exit(1); } + NODE_ID = atoi(argv[1]); PlatformInit(); otInit(); diff --git a/examples/platform/posix/Makefile.am b/examples/platform/posix/Makefile.am index d2dfef911..05d043657 100644 --- a/examples/platform/posix/Makefile.am +++ b/examples/platform/posix/Makefile.am @@ -52,7 +52,6 @@ libopenthread_posix_a_CXXFLAGS = \ libopenthread_posix_a_SOURCES = \ alarm.c \ - cmdline.c \ logging.c \ platform.c \ radio.cpp \ @@ -61,7 +60,6 @@ libopenthread_posix_a_SOURCES = \ $(NULL) include_HEADERS = \ - cmdline.h \ platform.h \ $(NULL) diff --git a/examples/platform/posix/cmdline.c b/examples/platform/posix/cmdline.c deleted file mode 100644 index eaf3bfbc1..000000000 --- a/examples/platform/posix/cmdline.c +++ /dev/null @@ -1,666 +0,0 @@ -/* - * Copyright (c) 2016, Nest Labs, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the copyright holder nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -/* - File autogenerated by gengetopt version 2.22.6 - generated with the following command: - gengetopt -i cmdline.ggo - - The developers of gengetopt consider the fixed text that goes in all - gengetopt output files to be in the public domain: - we make no copyright claims on it. -*/ - -#include -#include -#include - -#ifndef FIX_UNUSED -#define FIX_UNUSED(X) (void) (X) /* avoid warnings for unused params */ -#endif - -#include - -#include "cmdline.h" - -const char *gengetopt_args_info_purpose = ""; - -const char *gengetopt_args_info_usage = "Usage: thread [OPTIONS]..."; - -const char *gengetopt_args_info_versiontext = ""; - -const char *gengetopt_args_info_description = ""; - -const char *gengetopt_args_info_help[] = -{ - " -h, --help Print help and exit", - " -V, --version Print version and exit", - " --nodeid=INT Node ID", - " -S, --stdserial Use stdin/stdout for serial (default=on)", - 0 -}; - -typedef enum {ARG_NO -, ARG_FLAG -, ARG_INT - } cmdline_parser_arg_type; - -static -void clear_given(struct gengetopt_args_info *args_info); -static -void clear_args(struct gengetopt_args_info *args_info); - -static int -cmdline_parser_internal(int argc, char **argv, struct gengetopt_args_info *args_info, - struct cmdline_parser_params *params, const char *additional_error); - -static int -cmdline_parser_required2(struct gengetopt_args_info *args_info, const char *prog_name, const char *additional_error); - -static char * -gengetopt_strdup(const char *s); - -static -void clear_given(struct gengetopt_args_info *args_info) -{ - args_info->help_given = 0 ; - args_info->version_given = 0 ; - args_info->nodeid_given = 0 ; - args_info->stdserial_given = 0 ; -} - -static -void clear_args(struct gengetopt_args_info *args_info) -{ - FIX_UNUSED(args_info); - args_info->nodeid_orig = NULL; - args_info->stdserial_flag = 1; - -} - -static -void init_args_info(struct gengetopt_args_info *args_info) -{ - - - args_info->help_help = gengetopt_args_info_help[0] ; - args_info->version_help = gengetopt_args_info_help[1] ; - args_info->nodeid_help = gengetopt_args_info_help[2] ; - args_info->stdserial_help = gengetopt_args_info_help[3] ; - -} - -void -cmdline_parser_print_version(void) -{ - printf("%s %s\n", - (strlen(CMDLINE_PARSER_PACKAGE_NAME) ? CMDLINE_PARSER_PACKAGE_NAME : CMDLINE_PARSER_PACKAGE), - CMDLINE_PARSER_VERSION); - - if (strlen(gengetopt_args_info_versiontext) > 0) - { - printf("\n%s\n", gengetopt_args_info_versiontext); - } -} - -static void print_help_common(void) -{ - cmdline_parser_print_version(); - - if (strlen(gengetopt_args_info_purpose) > 0) - { - printf("\n%s\n", gengetopt_args_info_purpose); - } - - if (strlen(gengetopt_args_info_usage) > 0) - { - printf("\n%s\n", gengetopt_args_info_usage); - } - - printf("\n"); - - if (strlen(gengetopt_args_info_description) > 0) - { - printf("%s\n\n", gengetopt_args_info_description); - } -} - -void -cmdline_parser_print_help(void) -{ - int i = 0; - print_help_common(); - - while (gengetopt_args_info_help[i]) - { - printf("%s\n", gengetopt_args_info_help[i++]); - } -} - -void -cmdline_parser_init(struct gengetopt_args_info *args_info) -{ - clear_given(args_info); - clear_args(args_info); - init_args_info(args_info); -} - -void -cmdline_parser_params_init(struct cmdline_parser_params *params) -{ - if (params) - { - params->override = 0; - params->initialize = 1; - params->check_required = 1; - params->check_ambiguity = 0; - params->print_errors = 1; - } -} - -struct cmdline_parser_params * -cmdline_parser_params_create(void) -{ - struct cmdline_parser_params *params = - (struct cmdline_parser_params *)malloc(sizeof(struct cmdline_parser_params)); - cmdline_parser_params_init(params); - return params; -} - -static void -free_string_field(char **s) -{ - if (*s) - { - free(*s); - *s = 0; - } -} - - -static void -cmdline_parser_release(struct gengetopt_args_info *args_info) -{ - - free_string_field(&(args_info->nodeid_orig)); - - - - clear_given(args_info); -} - - -static void -write_into_file(FILE *outfile, const char *opt, const char *arg, const char *values[]) -{ - FIX_UNUSED(values); - - if (arg) - { - fprintf(outfile, "%s=\"%s\"\n", opt, arg); - } - else - { - fprintf(outfile, "%s\n", opt); - } -} - - -int -cmdline_parser_dump(FILE *outfile, struct gengetopt_args_info *args_info) -{ - int i = 0; - - if (!outfile) - { - fprintf(stderr, "%s: cannot dump options to stream\n", CMDLINE_PARSER_PACKAGE); - return EXIT_FAILURE; - } - - if (args_info->help_given) - { - write_into_file(outfile, "help", 0, 0); - } - - if (args_info->version_given) - { - write_into_file(outfile, "version", 0, 0); - } - - if (args_info->nodeid_given) - { - write_into_file(outfile, "nodeid", args_info->nodeid_orig, 0); - } - - if (args_info->stdserial_given) - { - write_into_file(outfile, "stdserial", 0, 0); - } - - - i = EXIT_SUCCESS; - return i; -} - -int -cmdline_parser_file_save(const char *filename, struct gengetopt_args_info *args_info) -{ - FILE *outfile; - int i = 0; - - outfile = fopen(filename, "w"); - - if (!outfile) - { - fprintf(stderr, "%s: cannot open file for writing: %s\n", CMDLINE_PARSER_PACKAGE, filename); - return EXIT_FAILURE; - } - - i = cmdline_parser_dump(outfile, args_info); - fclose(outfile); - - return i; -} - -void -cmdline_parser_free(struct gengetopt_args_info *args_info) -{ - cmdline_parser_release(args_info); -} - -/** @brief replacement of strdup, which is not standard */ -char * -gengetopt_strdup(const char *s) -{ - char *result = 0; - - if (!s) - { - return result; - } - - result = (char *)malloc(strlen(s) + 1); - - if (result == (char *)0) - { - return (char *)0; - } - - strcpy(result, s); - return result; -} - -int -cmdline_parser(int argc, char **argv, struct gengetopt_args_info *args_info) -{ - return cmdline_parser2(argc, argv, args_info, 0, 1, 1); -} - -int -cmdline_parser_ext(int argc, char **argv, struct gengetopt_args_info *args_info, - struct cmdline_parser_params *params) -{ - int result; - result = cmdline_parser_internal(argc, argv, args_info, params, 0); - - if (result == EXIT_FAILURE) - { - cmdline_parser_free(args_info); - exit(EXIT_FAILURE); - } - - return result; -} - -int -cmdline_parser2(int argc, char **argv, struct gengetopt_args_info *args_info, int override, int initialize, - int check_required) -{ - int result; - struct cmdline_parser_params params; - - params.override = override; - params.initialize = initialize; - params.check_required = check_required; - params.check_ambiguity = 0; - params.print_errors = 1; - - result = cmdline_parser_internal(argc, argv, args_info, ¶ms, 0); - - if (result == EXIT_FAILURE) - { - cmdline_parser_free(args_info); - exit(EXIT_FAILURE); - } - - return result; -} - -int -cmdline_parser_required(struct gengetopt_args_info *args_info, const char *prog_name) -{ - int result = EXIT_SUCCESS; - - if (cmdline_parser_required2(args_info, prog_name, 0) > 0) - { - result = EXIT_FAILURE; - } - - if (result == EXIT_FAILURE) - { - cmdline_parser_free(args_info); - exit(EXIT_FAILURE); - } - - return result; -} - -int -cmdline_parser_required2(struct gengetopt_args_info *args_info, const char *prog_name, const char *additional_error) -{ - int error_occurred = 0; - FIX_UNUSED(additional_error); - - /* checks for required options */ - if (! args_info->nodeid_given) - { - fprintf(stderr, "%s: '--nodeid' option required%s\n", prog_name, (additional_error ? additional_error : "")); - error_occurred = 1; - } - - - /* checks for dependences among options */ - - return error_occurred; -} - - -static char *package_name = 0; - -/** - * @brief updates an option - * @param field the generic pointer to the field to update - * @param orig_field the pointer to the orig field - * @param field_given the pointer to the number of occurrence of this option - * @param prev_given the pointer to the number of occurrence already seen - * @param value the argument for this option (if null no arg was specified) - * @param possible_values the possible values for this option (if specified) - * @param default_value the default value (in case the option only accepts fixed values) - * @param arg_type the type of this option - * @param check_ambiguity @see cmdline_parser_params.check_ambiguity - * @param override @see cmdline_parser_params.override - * @param no_free whether to free a possible previous value - * @param multiple_option whether this is a multiple option - * @param long_opt the corresponding long option - * @param short_opt the corresponding short option (or '-' if none) - * @param additional_error possible further error specification - */ -static -int update_arg(void *field, char **orig_field, - unsigned int *field_given, unsigned int *prev_given, - char *value, const char *possible_values[], - const char *default_value, - cmdline_parser_arg_type arg_type, - int check_ambiguity, int override, - int no_free, int multiple_option, - const char *long_opt, char short_opt, - const char *additional_error) -{ - char *stop_char = 0; - const char *val = value; - int found; - FIX_UNUSED(field); - - stop_char = 0; - found = 0; - - if (!multiple_option && prev_given && (*prev_given || (check_ambiguity && *field_given))) - { - if (short_opt != '-') - fprintf(stderr, "%s: `--%s' (`-%c') option given more than once%s\n", - package_name, long_opt, short_opt, - (additional_error ? additional_error : "")); - else - fprintf(stderr, "%s: `--%s' option given more than once%s\n", - package_name, long_opt, - (additional_error ? additional_error : "")); - - return 1; /* failure */ - } - - FIX_UNUSED(default_value); - - if (field_given && *field_given && ! override) - { - return 0; - } - - if (prev_given) - { - (*prev_given)++; - } - - if (field_given) - { - (*field_given)++; - } - - if (possible_values) - { - val = possible_values[found]; - } - - switch (arg_type) - { - case ARG_FLAG: - *((int *)field) = !*((int *)field); - break; - - case ARG_INT: - if (val) { *((int *)field) = strtol(val, &stop_char, 0); } - - break; - - default: - break; - }; - - /* check numeric conversion */ - switch (arg_type) - { - case ARG_INT: - if (val && !(stop_char && *stop_char == '\0')) - { - fprintf(stderr, "%s: invalid numeric value: %s\n", package_name, val); - return 1; /* failure */ - } - - break; - - default: - ; - }; - - /* store the original value */ - switch (arg_type) - { - case ARG_NO: - case ARG_FLAG: - break; - - default: - if (value && orig_field) - { - if (no_free) - { - *orig_field = value; - } - else - { - if (*orig_field) - { - free(*orig_field); /* free previous string */ - } - - *orig_field = gengetopt_strdup(value); - } - } - }; - - return 0; /* OK */ -} - - -int -cmdline_parser_internal( - int argc, char **argv, struct gengetopt_args_info *args_info, - struct cmdline_parser_params *params, const char *additional_error) -{ - int c; /* Character of the parsed option. */ - - int error_occurred = 0; - struct gengetopt_args_info local_args_info; - - int override; - int initialize; - int check_required; - int check_ambiguity; - - package_name = argv[0]; - - override = params->override; - initialize = params->initialize; - check_required = params->check_required; - check_ambiguity = params->check_ambiguity; - - if (initialize) - { - cmdline_parser_init(args_info); - } - - cmdline_parser_init(&local_args_info); - - optarg = 0; - optind = 0; - opterr = params->print_errors; - optopt = '?'; - - while (1) - { - int option_index = 0; - - static struct option long_options[] = - { - { "help", 0, NULL, 'h' }, - { "version", 0, NULL, 'V' }, - { "nodeid", 1, NULL, 0 }, - { "stdserial", 0, NULL, 'S' }, - { 0, 0, 0, 0 } - }; - - c = getopt_long(argc, argv, "hVS", long_options, &option_index); - - if (c == -1) { break; } /* Exit from `while (1)' loop. */ - - switch (c) - { - case 'h': /* Print help and exit. */ - cmdline_parser_print_help(); - cmdline_parser_free(&local_args_info); - exit(EXIT_SUCCESS); - - case 'V': /* Print version and exit. */ - cmdline_parser_print_version(); - cmdline_parser_free(&local_args_info); - exit(EXIT_SUCCESS); - - case 'S': /* Use stdin/stdout for serial. */ - - - if (update_arg((void *) & (args_info->stdserial_flag), 0, &(args_info->stdserial_given), - &(local_args_info.stdserial_given), optarg, 0, 0, ARG_FLAG, - check_ambiguity, override, 1, 0, "stdserial", 'S', - additional_error)) - { - goto failure; - } - - break; - - case 0: /* Long option with no short option */ - - /* Node ID. */ - if (strcmp(long_options[option_index].name, "nodeid") == 0) - { - - - if (update_arg((void *) & (args_info->nodeid_arg), - &(args_info->nodeid_orig), &(args_info->nodeid_given), - &(local_args_info.nodeid_given), optarg, 0, 0, ARG_INT, - check_ambiguity, override, 0, 0, - "nodeid", '-', - additional_error)) - { - goto failure; - } - - } - - break; - - case '?': /* Invalid option. */ - /* `getopt_long' already printed an error message. */ - goto failure; - - default: /* bug: option not considered. */ - fprintf(stderr, "%s: option unknown: %c%s\n", CMDLINE_PARSER_PACKAGE, c, (additional_error ? additional_error : "")); - abort(); - } /* switch */ - } /* while */ - - - - if (check_required) - { - error_occurred += cmdline_parser_required2(args_info, argv[0], additional_error); - } - - cmdline_parser_release(&local_args_info); - - if (error_occurred) - { - return (EXIT_FAILURE); - } - - return 0; - -failure: - - cmdline_parser_release(&local_args_info); - return (EXIT_FAILURE); -} diff --git a/examples/platform/posix/cmdline.ggo b/examples/platform/posix/cmdline.ggo deleted file mode 100755 index 75c040783..000000000 --- a/examples/platform/posix/cmdline.ggo +++ /dev/null @@ -1,34 +0,0 @@ -# -# Copyright (c) 2016, Nest Labs, Inc. -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# 3. Neither the name of the copyright holder nor the -# names of its contributors may be used to endorse or promote products -# derived from this software without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. -# - -package "thread" -version "0.1" -purpose "" - -option "nodeid" - "Node ID" int yes -option "stdserial" S "Use stdin/stdout for serial" flag on diff --git a/examples/platform/posix/cmdline.h b/examples/platform/posix/cmdline.h deleted file mode 100644 index e5017188e..000000000 --- a/examples/platform/posix/cmdline.h +++ /dev/null @@ -1,203 +0,0 @@ -/* - * Copyright (c) 2016, Nest Labs, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the copyright holder nor the - * names of its contributors may be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ - -/** @file cmdline.h - * @brief The header file for the command line option parser - * generated by GNU Gengetopt version 2.22.6 - * http://www.gnu.org/software/gengetopt. - * DO NOT modify this file, since it can be overwritten - * @author GNU Gengetopt by Lorenzo Bettini */ - -#ifndef CMDLINE_H -#define CMDLINE_H - -#include /* for FILE */ - -#ifdef __cplusplus -extern "C" { -#endif /* __cplusplus */ - -#ifndef CMDLINE_PARSER_PACKAGE -/** @brief the program name (used for printing errors) */ -#define CMDLINE_PARSER_PACKAGE "thread" -#endif - -#ifndef CMDLINE_PARSER_PACKAGE_NAME -/** @brief the complete program name (used for help and version) */ -#define CMDLINE_PARSER_PACKAGE_NAME "thread" -#endif - -#ifndef CMDLINE_PARSER_VERSION -/** @brief the program version */ -#define CMDLINE_PARSER_VERSION "0.1" -#endif - -/** @brief Where the command line options are stored */ -struct gengetopt_args_info -{ - const char *help_help; /**< @brief Print help and exit help description. */ - const char *version_help; /**< @brief Print version and exit help description. */ - int nodeid_arg; /**< @brief Node ID. */ - char *nodeid_orig; /**< @brief Node ID original value given at command line. */ - const char *nodeid_help; /**< @brief Node ID help description. */ - int stdserial_flag; /**< @brief Use stdin/stdout for serial (default=on). */ - const char *stdserial_help; /**< @brief Use stdin/stdout for serial help description. */ - - unsigned int help_given ; /**< @brief Whether help was given. */ - unsigned int version_given ; /**< @brief Whether version was given. */ - unsigned int nodeid_given ; /**< @brief Whether nodeid was given. */ - unsigned int stdserial_given ; /**< @brief Whether stdserial was given. */ - -} ; - -/** @brief The additional parameters to pass to parser functions */ -struct cmdline_parser_params -{ - int override; /**< @brief whether to override possibly already present options (default 0) */ - int initialize; /**< @brief whether to initialize the option structure gengetopt_args_info (default 1) */ - int check_required; /**< @brief whether to check that all required options were provided (default 1) */ - int check_ambiguity; /**< @brief whether to check for options already specified in the option structure gengetopt_args_info (default 0) */ - int print_errors; /**< @brief whether getopt_long should print an error message for a bad option (default 1) */ -} ; - -/** @brief the purpose string of the program */ -extern const char *gengetopt_args_info_purpose; -/** @brief the usage string of the program */ -extern const char *gengetopt_args_info_usage; -/** @brief the description string of the program */ -extern const char *gengetopt_args_info_description; -/** @brief all the lines making the help output */ -extern const char *gengetopt_args_info_help[]; - -/** - * The command line parser - * @param argc the number of command line options - * @param argv the command line options - * @param args_info the structure where option information will be stored - * @return 0 if everything went fine, NON 0 if an error took place - */ -int cmdline_parser(int argc, char **argv, - struct gengetopt_args_info *args_info); - -/** - * The command line parser (version with additional parameters - deprecated) - * @param argc the number of command line options - * @param argv the command line options - * @param args_info the structure where option information will be stored - * @param override whether to override possibly already present options - * @param initialize whether to initialize the option structure my_args_info - * @param check_required whether to check that all required options were provided - * @return 0 if everything went fine, NON 0 if an error took place - * @deprecated use cmdline_parser_ext() instead - */ -int cmdline_parser2(int argc, char **argv, - struct gengetopt_args_info *args_info, - int override, int initialize, int check_required); - -/** - * The command line parser (version with additional parameters) - * @param argc the number of command line options - * @param argv the command line options - * @param args_info the structure where option information will be stored - * @param params additional parameters for the parser - * @return 0 if everything went fine, NON 0 if an error took place - */ -int cmdline_parser_ext(int argc, char **argv, - struct gengetopt_args_info *args_info, - struct cmdline_parser_params *params); - -/** - * Save the contents of the option struct into an already open FILE stream. - * @param outfile the stream where to dump options - * @param args_info the option struct to dump - * @return 0 if everything went fine, NON 0 if an error took place - */ -int cmdline_parser_dump(FILE *outfile, - struct gengetopt_args_info *args_info); - -/** - * Save the contents of the option struct into a (text) file. - * This file can be read by the config file parser (if generated by gengetopt) - * @param filename the file where to save - * @param args_info the option struct to save - * @return 0 if everything went fine, NON 0 if an error took place - */ -int cmdline_parser_file_save(const char *filename, - struct gengetopt_args_info *args_info); - -/** - * Print the help - */ -void cmdline_parser_print_help(void); -/** - * Print the version - */ -void cmdline_parser_print_version(void); - -/** - * Initializes all the fields a cmdline_parser_params structure - * to their default values - * @param params the structure to initialize - */ -void cmdline_parser_params_init(struct cmdline_parser_params *params); - -/** - * Allocates dynamically a cmdline_parser_params structure and initializes - * all its fields to their default values - * @return the created and initialized cmdline_parser_params structure - */ -struct cmdline_parser_params *cmdline_parser_params_create(void); - -/** - * Initializes the passed gengetopt_args_info structure's fields - * (also set default values for options that have a default) - * @param args_info the structure to initialize - */ -void cmdline_parser_init(struct gengetopt_args_info *args_info); -/** - * Deallocates the string fields of the gengetopt_args_info structure - * (but does not deallocate the structure itself) - * @param args_info the structure to deallocate - */ -void cmdline_parser_free(struct gengetopt_args_info *args_info); - -/** - * Checks that all the required options were specified - * @param args_info the structure to check - * @param prog_name the name of the program that will be used to print - * possible errors - * @return - */ -int cmdline_parser_required(struct gengetopt_args_info *args_info, - const char *prog_name); - - -#ifdef __cplusplus -} -#endif /* __cplusplus */ -#endif /* CMDLINE_H */ diff --git a/examples/platform/posix/platform.c b/examples/platform/posix/platform.c index dcb235733..7dc8a8362 100644 --- a/examples/platform/posix/platform.c +++ b/examples/platform/posix/platform.c @@ -40,8 +40,11 @@ #include #include + #include "platform.h" +uint32_t NODE_ID = 1; + void PlatformInit(void) { PlatformAlarmInit(); @@ -74,3 +77,4 @@ void PlatformProcessDrivers(void) PlatformRadioProcess(); PlatformAlarmProcess(); } + diff --git a/examples/platform/posix/platform.h b/examples/platform/posix/platform.h index 72ccf9f40..32d125fd6 100644 --- a/examples/platform/posix/platform.h +++ b/examples/platform/posix/platform.h @@ -43,6 +43,12 @@ extern "C" { #endif +/** + * Unique ID used by a simulated node. + * + */ +extern uint32_t NODE_ID; + /** * This method performs all platform-specific initialization. * diff --git a/examples/platform/posix/radio.cpp b/examples/platform/posix/radio.cpp index 23bcac9b0..1552cedc2 100644 --- a/examples/platform/posix/radio.cpp +++ b/examples/platform/posix/radio.cpp @@ -38,19 +38,17 @@ #include #include -#include - #include #include #include #include +#include "platform.h" + #ifdef __cplusplus extern "C" { #endif -extern struct gengetopt_args_info args_info; - namespace Thread { enum PhyState @@ -112,7 +110,7 @@ void PlatformRadioInit(void) struct sockaddr_in sockaddr; memset(&sockaddr, 0, sizeof(sockaddr)); sockaddr.sin_family = AF_INET; - sockaddr.sin_port = htons(9000 + args_info.nodeid_arg); + sockaddr.sin_port = htons(9000 + NODE_ID); sockaddr.sin_addr.s_addr = INADDR_ANY; s_sockfd = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); @@ -306,7 +304,7 @@ int radioTransmit(void) { struct sockaddr_in sockaddr; RadioMessage message; - int rval; + int rval = 0; memset(&sockaddr, 0, sizeof(sockaddr)); sockaddr.sin_family = AF_INET; @@ -315,9 +313,9 @@ int radioTransmit(void) message.mChannel = s_transmit_frame->mChannel; memcpy(message.mPsdu, s_transmit_frame->mPsdu, s_transmit_frame->mLength); - for (int i = 1; i < 34; i++) + for (unsigned i = 1; i < 34; i++) { - if (args_info.nodeid_arg == i) + if (NODE_ID == i) { continue; } @@ -365,7 +363,7 @@ void PlatformRadioUpdateFdSet(fd_set *aReadFdSet, fd_set *aWriteFdSet, int *aMax } } -int PlatformRadioProcess(void) +void PlatformRadioProcess(void) { const int flags = POLLRDNORM | POLLERR | POLLNVAL | POLLHUP; struct pollfd pollfd = { s_sockfd, flags, 0 }; @@ -379,8 +377,6 @@ int PlatformRadioProcess(void) { radioTransmit(); } - - return 0; } void radioSendAck(void) @@ -403,9 +399,9 @@ void radioSendAck(void) message.mChannel = s_receive_frame->mChannel; memcpy(message.mPsdu, m_ack_packet.mPsdu, m_ack_packet.mLength); - for (int i = 1; i < 34; i++) + for (unsigned i = 1; i < 34; i++) { - if (args_info.nodeid_arg == i) + if (NODE_ID == i) { continue; } diff --git a/examples/platform/posix/random.c b/examples/platform/posix/random.c index efae3b3b8..69816e006 100644 --- a/examples/platform/posix/random.c +++ b/examples/platform/posix/random.c @@ -35,15 +35,13 @@ */ #include -#include - -extern struct gengetopt_args_info args_info; +#include "platform.h" static uint32_t s_state = 1; void PlatformRandomInit(void) { - s_state = args_info.nodeid_arg; + s_state = NODE_ID; } uint32_t otPlatRandomGet(void) diff --git a/examples/platform/posix/serial.c b/examples/platform/posix/serial.c index bea8312da..632616c24 100644 --- a/examples/platform/posix/serial.c +++ b/examples/platform/posix/serial.c @@ -34,8 +34,8 @@ #include #include -#include #include +#include "platform.h" #ifdef OPENTHREAD_TARGET_LINUX int posix_openpt(int oflag); @@ -44,8 +44,6 @@ int unlockpt(int fd); char *ptsname(int fd); #endif // OPENTHREAD_TARGET_LINUX -extern struct gengetopt_args_info args_info; - static uint8_t s_receive_buffer[128]; static const uint8_t *s_write_buffer; static uint16_t s_write_length; @@ -69,56 +67,21 @@ ThreadError otPlatSerialEnable(void) { ThreadError error = kThreadError_None; struct termios termios; - char *path; - if (args_info.stdserial_given == 1) + s_in_fd = dup(STDIN_FILENO); + s_out_fd = dup(STDOUT_FILENO); + dup2(STDERR_FILENO, STDOUT_FILENO); + + if (isatty(s_in_fd)) { - s_in_fd = dup(STDIN_FILENO); - s_out_fd = dup(STDOUT_FILENO); - dup2(STDERR_FILENO, STDOUT_FILENO); - - if (isatty(s_in_fd)) - { - tcgetattr(s_in_fd, &original_stdin_termios); - atexit(&restore_stdin_termios); - } - - if (isatty(s_out_fd)) - { - tcgetattr(s_out_fd, &original_stdin_termios); - atexit(&restore_stdout_termios); - } + tcgetattr(s_in_fd, &original_stdin_termios); + atexit(&restore_stdin_termios); } - else + + if (isatty(s_out_fd)) { - // open file -#ifdef OPENTHREAD_TARGET_DARWIN - - asprintf(&path, "/dev/ptyp%d", args_info.nodeid_arg); - VerifyOrExit((s_in_fd = open(path, O_RDWR | O_NOCTTY)) >= 0, perror("posix_openpt"); error = kThreadError_Error); - free(path); - - // print pty path - printf("/dev/ttyp%d\n", args_info.nodeid_arg); - -#elif defined(OPENTHREAD_TARGET_LINUX) - - VerifyOrExit((s_in_fd = posix_openpt(O_RDWR | O_NOCTTY)) >= 0, perror("posix_openpt"); error = kThreadError_Error); - VerifyOrExit(grantpt(s_in_fd) == 0, perror("grantpt"); error = kThreadError_Error); - VerifyOrExit(unlockpt(s_in_fd) == 0, perror("unlockpt"); error = kThreadError_Error); - - // print pty path - VerifyOrExit((path = ptsname(s_in_fd)) != NULL, perror("ptsname"); error = kThreadError_Error); - printf("%s\n", path); - -#else -#error "Unknown platform." -#endif - - // check if file descriptor is pointing to a TTY device - VerifyOrExit(isatty(s_in_fd), error = kThreadError_Error); - - s_out_fd = dup(s_in_fd); + tcgetattr(s_out_fd, &original_stdin_termios); + atexit(&restore_stdout_termios); } if (isatty(s_in_fd)) diff --git a/tests/scripts/thread-cert/node.py b/tests/scripts/thread-cert/node.py index ae587d666..5386c47b6 100755 --- a/tests/scripts/thread-cert/node.py +++ b/tests/scripts/thread-cert/node.py @@ -57,7 +57,7 @@ class Node: cmd = '%s/examples/cli/soc' % srcdir else: cmd = './soc' - cmd += ' --nodeid=%d -S' % nodeid + cmd += ' %d' % nodeid print cmd self.pexpect = pexpect.spawn(cmd, timeout=2)