#include #include #include #include #include "options.h" #include "debug.h" static void set_default_options(struct plotter_options *opts) { bzero(opts, sizeof(*opts)); opts->baud_rate = 128000; opts->device_path = "/dev/ttyUSB0"; } int read_args(int argc, char *argv[], struct plotter_options *opts) { int option_index = 0, c; static struct option long_options[] = { { .val = 'd', .name = "device", .has_arg = 1, }, { .val = 'o', .name = "output", .has_arg = 1 }, { .val = 'b', .name = "baud", .has_arg = 1 }, { .val = 'v', .name = "verbose", .has_arg = 2 }, { .val = 'q', .name = "quiet", }, }; char short_options[] = "d:o:b:vq"; set_default_options(opts); while (1) { c = getopt_long(argc, argv, short_options, long_options, &option_index); if (c == -1) break; switch (c) { case 'd': opts->device_path = optarg; break; case 'o': opts->output_path = optarg; break; case 'b': opts->baud_rate = atoi(optarg); break; case 'v': trace_level++; pr_debug("Increased trace level to %d\n", trace_level); break; case 'q': trace_level--; pr_debug("Degreased trace level to %d\n", trace_level); break; case '?': return -1; } } while (optind < argc) { /* The rest of the options, ignored */ optind++; } return 0; }