diff options
author | Andrzej Bieniek <andyhelp@gmail.com> | 2013-06-28 22:15:56 +0100 |
---|---|---|
committer | Jens Georg <mail@jensge.org> | 2013-10-16 14:50:43 +0200 |
commit | 1c11743df85824dac0cb38cf1655864a78df5586 (patch) | |
tree | e89fc70d510ac1e319aec41752386da896875555 /examples | |
parent | e914903d6d29043875f3bf24a6e2642629f79bbd (diff) | |
download | gupnp-1c11743df85824dac0cb38cf1655864a78df5586.tar.gz |
examples/light-client: add --quiet, --help and repeat options
Options added to help with library performance measurements.
To send 1000 toggle commands with 50ms delay run:
gupnp/examples$ ./light-client -q -c 1000 -d 50 toggle
For more options run:
gupnp/examples$ ./light-client --help
Usage:
lt-light-client [OPTION...] [on|off|toggle]
Help Options:
-h, --help Show help options
Application Options:
-q, --quiet Turn off output
-c, --repeat-counter=value Repeat counter
-d, --repeat-delay=value Delay in [ms] between each iteration
https://bugzilla.gnome.org/show_bug.cgi?id=708575
Diffstat (limited to 'examples')
-rw-r--r-- | examples/light-client.c | 65 |
1 files changed, 57 insertions, 8 deletions
diff --git a/examples/light-client.c b/examples/light-client.c index 60ce266..cdb9aab 100644 --- a/examples/light-client.c +++ b/examples/light-client.c @@ -20,9 +20,21 @@ static enum { TOGGLE } mode; +static gboolean quiet; +static gint repeat_counter = 1; +static gint repeat_delay; + +static GOptionEntry entries[] = +{ + { "quiet", 'q', 0, G_OPTION_ARG_NONE, &quiet, "Turn off output", NULL }, + { "repeat-counter", 'c', 0, G_OPTION_ARG_INT, &repeat_counter, "Repeat counter", "value" }, + { "repeat-delay", 'd', 0, G_OPTION_ARG_INT, &repeat_delay, "Delay in [ms] between each iteration", "value" }, + { NULL } +}; + + static void -service_proxy_available_cb (G_GNUC_UNUSED GUPnPControlPoint *cp, - GUPnPServiceProxy *proxy) +send_cmd (GUPnPServiceProxy *proxy) { GError *error = NULL; gboolean target; @@ -51,12 +63,16 @@ service_proxy_available_cb (G_GNUC_UNUSED GUPnPControlPoint *cp, NULL)) { goto error; } else { - g_print ("Set switch to %s.\n", target ? "on" : "off"); + if (!quiet) { + g_print ("Set switch to %s.\n", target ? "on" : "off"); + } } done: /* Only manipulate the first light switch that is found */ - g_main_loop_quit (main_loop); + if (--repeat_counter <= 0) { + g_main_loop_quit (main_loop); + } return; error: @@ -65,15 +81,41 @@ service_proxy_available_cb (G_GNUC_UNUSED GUPnPControlPoint *cp, goto done; } +static gboolean timeout_func (gpointer user_data) +{ + GUPnPServiceProxy *proxy = (GUPnPServiceProxy *) user_data; + + send_cmd (proxy); + return TRUE; +} + static void -usage (void) +service_proxy_available_cb (G_GNUC_UNUSED GUPnPControlPoint *cp, + GUPnPServiceProxy *proxy) { - g_printerr ("$ light-client [on|off|toggle]\n"); + if (repeat_counter>0) + { + send_cmd (proxy); + g_timeout_add (repeat_delay, timeout_func, proxy); + } else { + g_main_loop_quit (main_loop); + } +} + +static void +usage (GOptionContext *optionContext) +{ + gchar *help_text; + + help_text = g_option_context_get_help (optionContext, TRUE, NULL); + g_printerr ("%s", help_text); + g_free (help_text); } int main (int argc, char **argv) { + GOptionContext *optionContext; GError *error = NULL; GUPnPContext *context; GUPnPControlPoint *cp; @@ -82,10 +124,17 @@ main (int argc, char **argv) g_type_init (); #endif + optionContext = g_option_context_new ("[on|off|toggle]"); + g_option_context_add_main_entries (optionContext, entries, NULL); + if (!g_option_context_parse (optionContext, &argc, &argv, &error)) + { + g_print ("option parsing failed: %s\n", error->message); + exit (1); + } /* Check and parse command line arguments */ if (argc != 2) { - usage (); + usage (optionContext); return EXIT_FAILURE; } @@ -96,7 +145,7 @@ main (int argc, char **argv) } else if (g_str_equal (argv[1], "toggle")) { mode = TOGGLE; } else { - usage (); + usage (optionContext); return EXIT_FAILURE; } |