From: Uwe Hermann Date: Tue, 10 Feb 2015 19:01:07 +0000 (+0100) Subject: Add -T|--transform-module and show transform modules in -V output. X-Git-Tag: sigrok-cli-0.6.0~44 X-Git-Url: https://sigrok.org/gitweb/?p=sigrok-cli.git;a=commitdiff_plain;h=6f7b4c5d7eb49642f8221a85ee6987751fcd81ce;hp=198487f611d8a7be4fa15017c22fa01a56551ca6 Add -T|--transform-module and show transform modules in -V output. --- diff --git a/main.c b/main.c index 1b17c52..1d3b33d 100644 --- a/main.c +++ b/main.c @@ -269,6 +269,8 @@ int main(int argc, char **argv) show_input(); else if (opt_output_format && opt_show) show_output(); + else if (opt_transform_module && opt_show) + show_transform(); else if (opt_scan_devs) show_dev_list(); #ifdef HAVE_SRD diff --git a/options.c b/options.c index 179d892..9a0bce6 100644 --- a/options.c +++ b/options.c @@ -40,6 +40,7 @@ gchar *opt_pd_binary = NULL; #endif gchar *opt_input_format = NULL; gchar *opt_output_format = NULL; +gchar *opt_transform_module = NULL; gchar *opt_show = NULL; gchar *opt_time = NULL; gchar *opt_samples = NULL; @@ -73,6 +74,7 @@ CHECK_ONCE(opt_drv) CHECK_ONCE(opt_config) CHECK_ONCE(opt_input_format) CHECK_ONCE(opt_output_format) +CHECK_ONCE(opt_transform_module) CHECK_ONCE(opt_channels) CHECK_ONCE(opt_channel_group) CHECK_ONCE(opt_triggers) @@ -110,6 +112,8 @@ static const GOptionEntry optargs[] = { "Save output to file", NULL}, {"output-format", 'O', 0, G_OPTION_ARG_CALLBACK, &check_opt_output_format, "Output format", NULL}, + {"transform-module", 'T', 0, G_OPTION_ARG_CALLBACK, &check_opt_transform_module, + "Transform module", NULL}, {"channels", 'C', 0, G_OPTION_ARG_CALLBACK, &check_opt_channels, "Channels to use", NULL}, {"channel-group", 'g', 0, G_OPTION_ARG_CALLBACK, &check_opt_channel_group, diff --git a/show.c b/show.c index 8ee99da..a5999a2 100644 --- a/show.c +++ b/show.c @@ -33,6 +33,12 @@ static gint sort_outputs(gconstpointer a, gconstpointer b) sr_output_id_get((struct sr_output_module *)b)); } +static gint sort_transforms(gconstpointer a, gconstpointer b) +{ + return strcmp(sr_transform_id_get((struct sr_transform_module *)a), + sr_transform_id_get((struct sr_transform_module *)b)); +} + static gint sort_drivers(gconstpointer a, gconstpointer b) { const struct sr_dev_driver *sdda = a, *sddb = b; @@ -54,6 +60,7 @@ void show_version(void) struct sr_dev_driver **drivers, *driver; const struct sr_input_module **inputs, *input; const struct sr_output_module **outputs, *output; + const struct sr_transform_module **transforms, *transform; const GSList *l; GSList *sl; int i; @@ -108,6 +115,19 @@ void show_version(void) printf("\n"); g_slist_free(sl); + printf("Supported transform modules:\n"); + transforms = sr_transform_list(); + for (sl = NULL, i = 0; transforms[i]; i++) + sl = g_slist_append(sl, (gpointer)transforms[i]); + sl = g_slist_sort(sl, sort_transforms); + for (l = sl; l; l = l->next) { + transform = l->data; + printf(" %-20s %s\n", sr_transform_id_get(transform), + sr_transform_description_get(transform)); + } + printf("\n"); + g_slist_free(sl); + #ifdef HAVE_SRD if (srd_init(NULL) == SRD_OK) { printf("Supported protocol decoders:\n"); @@ -790,3 +810,42 @@ void show_output(void) g_strfreev(tok); } +void show_transform(void) +{ + const struct sr_transform_module *tmod; + const struct sr_option **opts; + GSList *l; + int i; + char *s, **tok; + + tok = g_strsplit(opt_transform_module, ":", 0); + if (!tok[0] || !(tmod = sr_transform_find(tok[0]))) + g_critical("Transform module '%s' not found.", opt_transform_module); + + printf("ID: %s\nName: %s\n", sr_transform_id_get(tmod), + sr_transform_name_get(tmod)); + printf("Description: %s\n", sr_transform_description_get(tmod)); + if ((opts = sr_transform_options_get(tmod))) { + printf("Options:\n"); + for (i = 0; opts[i]; i++) { + printf(" %s: %s", opts[i]->id, opts[i]->desc); + if (opts[i]->def) { + s = g_variant_print(opts[i]->def, FALSE); + printf(" (default %s", s); + g_free(s); + if (opts[i]->values) { + printf(", possible values "); + for (l = opts[i]->values; l; l = l->next) { + s = g_variant_print((GVariant *)l->data, FALSE); + printf("%s%s", s, l->next ? ", " : ""); + g_free(s); + } + } + printf(")"); + } + printf("\n"); + } + sr_transform_options_free(opts); + } + g_strfreev(tok); +} diff --git a/sigrok-cli.h b/sigrok-cli.h index c07d6cb..897d5b4 100644 --- a/sigrok-cli.h +++ b/sigrok-cli.h @@ -52,6 +52,7 @@ void show_dev_detail(void); void show_pd_detail(void); void show_input(void); void show_output(void); +void show_transform(void); /* device.c */ GSList *device_scan(void); @@ -117,6 +118,7 @@ extern gchar *opt_pd_binary; #endif extern gchar *opt_input_format; extern gchar *opt_output_format; +extern gchar *opt_transform_module; extern gchar *opt_show; extern gchar *opt_time; extern gchar *opt_samples;