Skip to content

Commit

Permalink
Rename 'probe' to 'channel' (libsigrokdecode change).
Browse files Browse the repository at this point in the history
The -p|--probes option is renamed to -C|--channels.

Variables of type 'struct srd_channel *' are consistently named 'pdch' to
make them easily distinguishable from libsigrok's 'struct sr_channel *'
variables that are consistently named 'ch'.
  • Loading branch information
uwehermann committed Apr 14, 2014
1 parent 8b65cdc commit 3dfbfbc
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 65 deletions.
88 changes: 45 additions & 43 deletions decode.c
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
static GHashTable *pd_ann_visible = NULL;
static GHashTable *pd_meta_visible = NULL;
static GHashTable *pd_binary_visible = NULL;
static GHashTable *pd_probe_maps = NULL;
static GHashTable *pd_channel_maps = NULL;

extern struct srd_session *srd_sess;
extern gint opt_loglevel;
Expand Down Expand Up @@ -88,25 +88,25 @@ static int move_hash_element(GHashTable *src, GHashTable *dest, void *key)
return TRUE;
}

static GHashTable *extract_probe_map(struct srd_decoder *dec, GHashTable *hash)
static GHashTable *extract_channel_map(struct srd_decoder *dec, GHashTable *hash)
{
GHashTable *probe_map;
struct srd_probe *p;
GHashTable *channel_map;
struct srd_channel *pdch;
GSList *l;

probe_map = g_hash_table_new_full(g_str_hash, g_str_equal,
channel_map = g_hash_table_new_full(g_str_hash, g_str_equal,
g_free, g_free);

for (l = dec->probes; l; l = l->next) {
p = l->data;
move_hash_element(hash, probe_map, p->id);
for (l = dec->channels; l; l = l->next) {
pdch = l->data;
move_hash_element(hash, channel_map, pdch->id);
}
for (l = dec->opt_probes; l; l = l->next) {
p = l->data;
move_hash_element(hash, probe_map, p->id);
for (l = dec->opt_channels; l; l = l->next) {
pdch = l->data;
move_hash_element(hash, channel_map, pdch->id);
}

return probe_map;
return channel_map;
}

/* Register the given PDs for this session.
Expand All @@ -117,7 +117,7 @@ static GHashTable *extract_probe_map(struct srd_decoder *dec, GHashTable *hash)
int register_pds(const char *opt_pds, char *opt_pd_annotations)
{
struct srd_decoder *dec;
GHashTable *pd_opthash, *options, *probes;
GHashTable *pd_opthash, *options, *channels;
GList *leftover, *l;
struct srd_decoder_inst *di;
int ret;
Expand All @@ -127,7 +127,7 @@ int register_pds(const char *opt_pds, char *opt_pd_annotations)
g_free, NULL);
ret = 0;
pd_name = NULL;
pd_opthash = options = probes = pd_probe_maps = NULL;
pd_opthash = options = channels = pd_channel_maps = NULL;
pdtokens = g_strsplit(opt_pds, ",", 0);
for (pdtok = pdtokens; *pdtok; pdtok++) {
if (!(pd_opthash = parse_generic_arg(*pdtok, TRUE))) {
Expand All @@ -144,17 +144,17 @@ int register_pds(const char *opt_pds, char *opt_pd_annotations)
}
dec = srd_decoder_get_by_id(pd_name);

/* Convert decoder option and probe values to GVariant. */
/* Convert decoder option and channel values to GVariant. */
if (!opts_to_gvar(dec, pd_opthash, &options)) {
ret = 1;
break;
}
probes = extract_probe_map(dec, pd_opthash);
channels = extract_channel_map(dec, pd_opthash);

if (g_hash_table_size(pd_opthash) > 0) {
leftover = g_hash_table_get_keys(pd_opthash);
for (l = leftover; l; l = l->next)
g_critical("Unknown option or probe '%s'", (char *)l->data);
g_critical("Unknown option or channel '%s'", (char *)l->data);
g_list_free(leftover);
break;
}
Expand All @@ -166,12 +166,14 @@ int register_pds(const char *opt_pds, char *opt_pd_annotations)
}

if (pdtok == pdtokens) {
/* Save the probe setup for later, but only on the first
* decoder -- stacked decoders don't get probes. */
pd_probe_maps = g_hash_table_new_full(g_str_hash,
/*
* Save the channel setup for later, but only on the
* first decoder (stacked decoders don't get channels).
*/
pd_channel_maps = g_hash_table_new_full(g_str_hash,
g_str_equal, g_free, (GDestroyNotify)g_hash_table_destroy);
g_hash_table_insert(pd_probe_maps, g_strdup(di->inst_id), probes);
probes = NULL;
g_hash_table_insert(pd_channel_maps, g_strdup(di->inst_id), channels);
channels = NULL;
}

/* If no annotation list was specified, add them all in now.
Expand All @@ -188,42 +190,42 @@ int register_pds(const char *opt_pds, char *opt_pd_annotations)
g_hash_table_destroy(pd_opthash);
if (options)
g_hash_table_destroy(options);
if (probes)
g_hash_table_destroy(probes);
if (channels)
g_hash_table_destroy(channels);
if (pd_name)
g_free(pd_name);

return ret;
}

static void map_pd_inst_probes(void *key, void *value, void *user_data)
static void map_pd_inst_channels(void *key, void *value, void *user_data)
{
GHashTable *probe_map;
GHashTable *probe_indices;
GSList *probe_list;
GHashTable *channel_map;
GHashTable *channel_indices;
GSList *channel_list;
struct srd_decoder_inst *di;
GVariant *var;
void *probe_id;
void *channel_id;
void *channel_target;
struct sr_channel *ch;
GHashTableIter iter;
int num_channels;

probe_map = value;
probe_list = user_data;
channel_map = value;
channel_list = user_data;

di = srd_inst_find_by_id(srd_sess, key);
if (!di) {
g_critical("Protocol decoder instance \"%s\" not found.",
(char *)key);
return;
}
probe_indices = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
channel_indices = g_hash_table_new_full(g_str_hash, g_str_equal, g_free,
(GDestroyNotify)g_variant_unref);

g_hash_table_iter_init(&iter, probe_map);
while (g_hash_table_iter_next(&iter, &probe_id, &channel_target)) {
ch = find_channel(probe_list, channel_target);
g_hash_table_iter_init(&iter, channel_map);
while (g_hash_table_iter_next(&iter, &channel_id, &channel_target)) {
ch = find_channel(channel_list, channel_target);
if (!ch) {
g_printerr("cli: No channel with name \"%s\" found.\n",
(char *)channel_target);
Expand All @@ -235,20 +237,20 @@ static void map_pd_inst_probes(void *key, void *value, void *user_data)

var = g_variant_new_int32(ch->index);
g_variant_ref_sink(var);
g_hash_table_insert(probe_indices, g_strdup(probe_id), var);
g_hash_table_insert(channel_indices, g_strdup(channel_id), var);
}

num_channels = g_slist_length(probe_list);
srd_inst_probe_set_all(di, probe_indices, (num_channels + 7) / 8);
num_channels = g_slist_length(channel_list);
srd_inst_channel_set_all(di, channel_indices, (num_channels + 7) / 8);
}

void map_pd_probes(struct sr_dev_inst *sdi)
void map_pd_channels(struct sr_dev_inst *sdi)
{
if (pd_probe_maps) {
g_hash_table_foreach(pd_probe_maps, &map_pd_inst_probes,
if (pd_channel_maps) {
g_hash_table_foreach(pd_channel_maps, &map_pd_inst_channels,
sdi->channels);
g_hash_table_destroy(pd_probe_maps);
pd_probe_maps = NULL;
g_hash_table_destroy(pd_channel_maps);
pd_channel_maps = NULL;
}
}

Expand Down
6 changes: 3 additions & 3 deletions doc/sigrok-cli.1
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ like this:
0:11111111 11111111 11111111 11111111 [...]
1:11111111 00000000 11111111 00000000 [...]
.TP
.BR "\-p, \-\-probes " <probelist>
.BR "\-C, \-\-channels " <channellist>
A comma-separated list of channels to be used in the session.
.sp
Note that sigrok always names the channels according to how they're shown on
Expand All @@ -145,7 +145,7 @@ Example:
.sp
.RB " $ " "sigrok\-cli \-\-driver fx2lafw \-\-samples 100"
.br
.B " \-\-probes 1=CLK,2\-4,7"
.B " \-\-channels 1=CLK,2\-4,7"
.br
CLK:11111111 11111111 11111111 11111111 [...]
2:11111111 11111111 11111111 11111111 [...]
Expand Down Expand Up @@ -436,7 +436,7 @@ To capture data from the first 4 channels using the Openbench Logic Sniffer last
.TP
.nf
\fBsigrok\-cli \-\-driver ols:conn=/dev/ttyACM0 \-\-config samplerate=10m \\\fP
\fB\-\-output\-format bits \-\-probes 0\-3 \-\-wait\-trigger \\\fP
\fB\-\-output\-format bits \-\-channels 0\-3 \-\-wait\-trigger \\\fP
\fB\-\-triggers 0=1,1=r,2=0,3=1 \-\-time 100\fP
.TP
To turn on internal logging on a Lascar EL-USB series device:
Expand Down
2 changes: 1 addition & 1 deletion input.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@

extern gchar *opt_input_file;
extern gchar *opt_input_format;
extern gchar *opt_probes;
extern gchar *opt_channels;


/**
Expand Down
12 changes: 6 additions & 6 deletions main.c
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ gchar *opt_input_file = NULL;
gchar *opt_output_file = NULL;
gchar *opt_drv = NULL;
gchar *opt_config = NULL;
static gchar *opt_probes = NULL;
static gchar *opt_channels = NULL;
gchar *opt_channel_group = NULL;
gchar *opt_triggers = NULL;
gchar *opt_pds = NULL;
Expand Down Expand Up @@ -71,8 +71,8 @@ static GOptionEntry optargs[] = {
"Save output to file", NULL},
{"output-format", 'O', 0, G_OPTION_ARG_STRING, &opt_output_format,
"Output format", NULL},
{"probes", 'p', 0, G_OPTION_ARG_STRING, &opt_probes,
"Probes to use", NULL},
{"channels", 'C', 0, G_OPTION_ARG_STRING, &opt_channels,
"Channels to use", NULL},
{"channel-group", 'g', 0, G_OPTION_ARG_STRING, &opt_channel_group,
"Channel groups", NULL},
{"triggers", 't', 0, G_OPTION_ARG_STRING, &opt_triggers,
Expand Down Expand Up @@ -134,8 +134,8 @@ int select_channels(struct sr_dev_inst *sdi)
struct sr_channel *ch;
GSList *selected_channels, *l;

if (opt_probes) {
if (!(selected_channels = parse_channelstring(sdi, opt_probes)))
if (opt_channels) {
if (!(selected_channels = parse_channelstring(sdi, opt_channels)))
return SR_ERR;

for (l = sdi->channels; l; l = l->next) {
Expand All @@ -148,7 +148,7 @@ int select_channels(struct sr_dev_inst *sdi)
g_slist_free(selected_channels);
}
#ifdef HAVE_SRD
map_pd_probes(sdi);
map_pd_channels(sdi);
#endif
return SR_OK;
}
Expand Down
22 changes: 11 additions & 11 deletions show.c
Original file line number Diff line number Diff line change
Expand Up @@ -529,7 +529,7 @@ void show_pd_detail(void)
struct srd_decoder *dec;
struct srd_decoder_option *o;
char **pdtokens, **pdtok, *optsep, **ann, *val, *doc;
struct srd_probe *p;
struct srd_channel *pdch;
struct srd_decoder_annotation_row *r;

pdtokens = g_strsplit(opt_pds, ",", -1);
Expand Down Expand Up @@ -565,22 +565,22 @@ void show_pd_detail(void)
} else {
printf("None.\n");
}
printf("Required probes:\n");
if (dec->probes) {
for (l = dec->probes; l; l = l->next) {
p = l->data;
printf("Required channels:\n");
if (dec->channels) {
for (l = dec->channels; l; l = l->next) {
pdch = l->data;
printf("- %s (%s): %s\n",
p->id, p->name, p->desc);
pdch->id, pdch->name, pdch->desc);
}
} else {
printf("None.\n");
}
printf("Optional probes:\n");
if (dec->opt_probes) {
for (l = dec->opt_probes; l; l = l->next) {
p = l->data;
printf("Optional channels:\n");
if (dec->opt_channels) {
for (l = dec->opt_channels; l; l = l->next) {
pdch = l->data;
printf("- %s (%s): %s\n",
p->id, p->name, p->desc);
pdch->id, pdch->name, pdch->desc);
}
} else {
printf("None.\n");
Expand Down
2 changes: 1 addition & 1 deletion sigrok-cli.h
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ int setup_pd_binary(char *opt_pd_binary);
void show_pd_annotations(struct srd_proto_data *pdata, void *cb_data);
void show_pd_meta(struct srd_proto_data *pdata, void *cb_data);
void show_pd_binary(struct srd_proto_data *pdata, void *cb_data);
void map_pd_probes(struct sr_dev_inst *sdi);
void map_pd_channels(struct sr_dev_inst *sdi);
#endif

/* parsers.c */
Expand Down

0 comments on commit 3dfbfbc

Please sign in to comment.