extern struct sr_hwcap_option sr_hwcap_options[];
-gboolean debug = 0;
-uint64_t limit_samples = 0;
-struct sr_output_format *output_format = NULL;
-int default_output_format = FALSE;
-char *output_format_param = NULL;
-char *input_format_param = NULL;
+static gboolean debug = 0;
+static uint64_t limit_samples = 0;
+static struct sr_output_format *output_format = NULL;
+static int default_output_format = FALSE;
+static char *output_format_param = NULL;
+static char *input_format_param = NULL;
static gboolean opt_version = FALSE;
static gint opt_loglevel = SR_LOG_WARN; /* Show errors+warnings per default. */
static void datafeed_in(struct sr_device *device, struct sr_datafeed_packet *packet)
{
static struct sr_output *o = NULL;
- static int probelist[65] = { 0 };
+ static int probelist[SR_MAX_NUM_PROBES] = { 0 };
static uint64_t received_samples = 0;
static int unitsize = 0;
static int triggered = 0;
}
}
if (opt_pds)
- srd_session_start(device->plugin->name, unitsize,
- time(NULL), header->samplerate);
+ srd_session_start(num_enabled_probes, unitsize,
+ header->samplerate);
break;
case SR_DF_END:
g_message("cli: Received SR_DF_END");
for (optok = optokens+1; *optok; optok++) {
char probe[strlen(*optok)];
int num;
- if(sscanf(*optok, "%[^=]=%d", probe, &num) == 2)
+ if (sscanf(*optok, "%[^=]=%d", probe, &num) == 2) {
+ printf("Setting probe '%s' to %d\n", probe, num);
srd_instance_set_probe(di, probe, num);
- /* TODO: else fail somehow */
+ } else {
+ fprintf(stderr, "Error: Couldn't parse decoder "
+ "options correctly! Aborting.\n");
+ /* FIXME: Better error handling. */
+ exit(EXIT_FAILURE);
+ }
}
g_strfreev(optokens);
return 0;
}
+void show_pd_annotation(struct srd_protocol_data *pdata)
+{
+ int i;
+ char **annotation;
+
+ annotation = pdata->data;
+ if (pdata->annotation_format != 0) {
+ /* CLI only shows the default annotation format */
+ return;
+ }
+
+ printf("%s: ", pdata->pdo->protocol_id);
+ for (i = 0; annotation[i]; i++)
+ printf("\"%s\" ", annotation[i]);
+ printf("\n");
+
+}
+
static int select_probes(struct sr_device *device)
{
struct sr_probe *probe;
return num_devices;
}
-int set_device_options(struct sr_device *device, GHashTable *args)
+static int set_device_options(struct sr_device *device, GHashTable *args)
{
GHashTableIter iter;
gpointer key, value;
return 1;
}
+ /* Set the loglevel (amount of messages to output) for libsigrokdecode. */
+ if (srd_set_loglevel(opt_loglevel) != SRD_OK) {
+ fprintf(stderr, "cli: %s: srd_set_loglevel(%d) failed\n",
+ __func__, opt_loglevel);
+ return 1;
+ }
+
if (sr_init() != SR_OK)
return 1;
if (opt_pds) {
- /* TODO: Error handling. */
- srd_init();
- register_pds(NULL, opt_pds);
+ if (srd_init() != SRD_OK) {
+ printf("Failed to initialize sigrokdecode\n");
+ return 1;
+ }
+ if (register_pds(NULL, opt_pds) != 0) {
+ printf("Failed to register protocol decoders\n");
+ return 1;
+ }
+ if (srd_register_callback(SRD_OUTPUT_ANNOTATION,
+ show_pd_annotation) != SRD_OK) {
+ printf("Failed to register protocol decoder callback\n");
+ return 1;
+ }
}
if (!opt_format) {