Create a single structure for powerdebug options. Signed-off-by: Daniel Lezcano <daniel.lezc...@free.fr> --- powerdebug.c | 173 +++++++++++++++++++++++++++++++++------------------------- 1 files changed, 98 insertions(+), 75 deletions(-)
diff --git a/powerdebug.c b/powerdebug.c index 3f4d60c..efdb1a2 100644 --- a/powerdebug.c +++ b/powerdebug.c @@ -19,7 +19,6 @@ int dump; int highlighted_row; int selectedwindow = -1; -double ticktime = 10.0; /* in seconds */ char *win_names[TOTAL_FEATURE_WINS] = { "Clocks", @@ -45,119 +44,143 @@ void usage(void) " -s)\n"); printf(" -V, --version Show Version\n"); printf(" -h, --help Help\n"); - - exit(0); } void version() { printf("powerdebug version %s\n", VERSION); - exit(0); } -int main(int argc, char **argv) -{ - int c, i; - int firsttime[TOTAL_FEATURE_WINS]; - int enter_hit = 0, verbose = 0, findparent_ncurses = 0, refreshwin = 0; - int regulators = 0, sensors = 0, clocks = 0, findparent = 0; - char clkarg[64], clkname_str[64]; +/* + * Options: + * -r, --regulator : regulator + * -s, --sensor : sensors + * -c, --clock : clocks + * -p, --findparents : clockname whose parents have to be found + * -t, --time : ticktime + * -d, --dump : dump + * -v, --verbose : verbose + * -V, --version : version + * -h, --help : help + * no option / default : show usage! + */ + +static struct option long_options[] = { + { "regulator", 0, 0, 'r' }, + { "sensor", 0, 0, 's' }, + { "clock", 0, 0, 'c' }, + { "findparents", 1, 0, 'p' }, + { "time", 1, 0, 't' }, + { "dump", 0, 0, 'd' }, + { "verbose", 0, 0, 'v' }, + { "version", 0, 0, 'V' }, + { "help", 0, 0, 'h' }, + { 0, 0, 0, 0 } +}; - for (i = 0; i < TOTAL_FEATURE_WINS; i++) - firsttime[i] = 1; +struct powerdebug_options { + int findparent; + int verbose; + int regulators; + int sensors; + int clocks; + int ticktime; + char clkarg[64]; +}; + +int getoptions(int argc, char *argv[], struct powerdebug_options *options) +{ + int c; - /* - * Options: - * -r, --regulator : regulator - * -s, --sensor : sensors - * -c, --clock : clocks - * -p, --findparents : clockname whose parents have to be found - * -t, --time : ticktime - * -d, --dump : dump - * -v, --verbose : verbose - * -V, --version : version - * -h, --help : help - * no option / default : show usage! - */ + memset(options, 0, sizeof(*options)); + options->ticktime = 10; while (1) { int optindex = 0; - static struct option long_options[] = { - {"regulator", 0, 0, 'r'}, - {"sensor", 0, 0, 's'}, - {"clock", 0, 0, 'c'}, - {"findparents", 1, 0, 'p'}, - {"time", 1, 0, 't'}, - {"dump", 0, 0, 'd'}, - {"verbose", 0, 0, 'v'}, - {"version", 0, 0, 'V'}, - {"help", 0, 0, 'h'}, - {0, 0, 0, 0} - }; - - c = getopt_long(argc, argv, "rscp:t:dvVh", long_options, &optindex); + + c = getopt_long(argc, argv, "rscp:t:dvVh", + long_options, &optindex); if (c == -1) break; switch (c) { case 'r': - regulators = 1; + options->regulators = 1; selectedwindow = REGULATOR; break; case 's': - sensors = 1; + options->sensors = 1; selectedwindow = SENSOR; break; case 'c': - clocks = 1; + options->clocks = 1; selectedwindow = CLOCK; break; case 'p': - findparent = 1; - strcpy(clkarg, optarg); + options->findparent = 1; + strcpy(options->clkarg, optarg); break; case 't': - ticktime = strtod(optarg, NULL); + options->ticktime = strtod(optarg, NULL); break; case 'd': dump = 1; break; case 'v': - verbose = 1; + options->verbose = 1; break; case 'V': version(); break; - case 'h': - usage(); - break; case '?': - fprintf (stderr, "%s: Unknown option %c'.\n", + fprintf(stderr, "%s: Unknown option %c'.\n", argv[0], optopt); - exit(1); default: - usage(); - break; + return -1; } } - if (dump && !(regulators || clocks || sensors)) { - //fprintf(stderr, "Dump mode (-d) supported only with -c, -r " - // "or -s ..\n"); - //usage(); - // By Default lets show everything we have! - regulators = clocks = sensors = 1; + if (dump && !(options->regulators || + options->clocks || options->sensors)) { + /* By Default lets show everything we have */ + options->regulators = options->clocks = options->sensors = 1; } - if (findparent && (!clocks || !dump)) { + if (options->findparent && (!options->clocks || !dump)) { fprintf(stderr, "-p option passed without -c and -d." " Exiting...\n"); - usage(); + return -1; } if (!dump && selectedwindow == -1) selectedwindow = CLOCK; + return 0; +} + +int main(int argc, char **argv) +{ + int i; + int findparent_ncurses = 0, refreshwin = 0; + int enter_hit = 0; + int firsttime[TOTAL_FEATURE_WINS]; + char clkname_str[64]; + struct powerdebug_options *options; + + for (i = 0; i < TOTAL_FEATURE_WINS; i++) + firsttime[i] = 1; + + options = malloc(sizeof(*options)); + if (!options) { + fprintf(stderr, "failed to allocated memory\n"); + return -1; + } + + if (getoptions(argc, argv, options)) { + usage(); + return 1; + } + init_regulator_ds(); while (1) { @@ -172,17 +195,17 @@ int main(int argc, char **argv) show_header(); } - if (regulators || selectedwindow == REGULATOR) { + if (options->regulators || selectedwindow == REGULATOR) { read_regulator_info(); if (!dump) { create_selectedwindow(); - show_regulator_info(verbose); + show_regulator_info(options->verbose); } else - print_regulator_info(verbose); + print_regulator_info(options->verbose); } - if (clocks || selectedwindow == CLOCK) { + if (options->clocks || selectedwindow == CLOCK) { int ret = 0; if (firsttime[CLOCK]) { ret = init_clock_details(); @@ -202,7 +225,7 @@ int main(int argc, char **argv) if (refreshwin) command = REFRESH_WINDOW; hrow = read_and_print_clock_info( - verbose, + options->verbose, highlighted_row, command); highlighted_row = hrow; @@ -212,19 +235,19 @@ int main(int argc, char **argv) enter_hit); } if (!ret && dump) { - if (findparent) - read_and_dump_clock_info_one(clkarg); + if (options->findparent) + read_and_dump_clock_info_one(options->clkarg); else - read_and_dump_clock_info(verbose); + read_and_dump_clock_info(options->verbose); } } - if (sensors || selectedwindow == SENSOR) { + if (options->sensors || selectedwindow == SENSOR) { if (!dump) { create_selectedwindow(); print_sensor_header(); } else - read_and_print_sensor_info(verbose); + read_and_print_sensor_info(options->verbose); } if (dump) @@ -232,8 +255,8 @@ int main(int argc, char **argv) FD_ZERO(&readfds); FD_SET(0, &readfds); - tval.tv_sec = ticktime; - tval.tv_usec = (ticktime - tval.tv_sec) * 1000000; + tval.tv_sec = options->ticktime; + tval.tv_usec = (options->ticktime - tval.tv_sec) * 1000000; key = select(1, &readfds, NULL, NULL, &tval); @@ -308,7 +331,7 @@ int main(int argc, char **argv) exit(0); if (keychar == 'R') { refreshwin = 1; - ticktime = 3; + options->ticktime = 3; } else refreshwin = 0; } -- 1.7.1 _______________________________________________ linaro-dev mailing list linaro-dev@lists.linaro.org http://lists.linaro.org/mailman/listinfo/linaro-dev