Skip to content

Commit

Permalink
Add -T|--transform-module and show transform modules in -V output.
Browse files Browse the repository at this point in the history
  • Loading branch information
uwehermann committed Feb 10, 2015
1 parent 198487f commit 6f7b4c5
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 0 deletions.
2 changes: 2 additions & 0 deletions main.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 4 additions & 0 deletions options.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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,
Expand Down
59 changes: 59 additions & 0 deletions show.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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");
Expand Down Expand Up @@ -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);
}
2 changes: 2 additions & 0 deletions sigrok-cli.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 6f7b4c5

Please sign in to comment.