]> sigrok.org Git - sigrok-cli.git/blobdiff - sigrok-cli.c
GPL headers: Use correct project name.
[sigrok-cli.git] / sigrok-cli.c
index 8cfdb8e97ee4a7e0c63464c2df3ad6e791cc93af..a37b19d515890f4fd94b81d60e00ed4dba7dbd8a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * This file is part of the sigrok project.
+ * This file is part of the sigrok-cli project.
  *
  * Copyright (C) 2012 Bert Vermeulen <bert@biot.com>
  *
@@ -271,26 +271,39 @@ static void print_dev_line(const struct sr_dev_inst *sdi)
 {
        struct sr_probe *probe;
        GSList *l;
+       GString *s;
+       GVariant *gvar;
 
+       s = g_string_sized_new(128);
+       g_string_assign(s, sdi->driver->name);
+       if (sr_config_get(sdi->driver, SR_CONF_CONN, &gvar, sdi) == SR_OK) {
+               g_string_append(s, ":conn=");
+               g_string_append(s, g_variant_get_string(gvar, NULL));
+               g_variant_unref(gvar);
+       }
+       g_string_append(s, " - ");
        if (sdi->vendor && sdi->vendor[0])
-               printf("%s ", sdi->vendor);
+               g_string_append_printf(s, "%s ", sdi->vendor);
        if (sdi->model && sdi->model[0])
-               printf("%s ", sdi->model);
+               g_string_append_printf(s, "%s ", sdi->model);
        if (sdi->version && sdi->version[0])
-               printf("%s ", sdi->version);
+               g_string_append_printf(s, "%s ", sdi->version);
        if (sdi->probes) {
                if (g_slist_length(sdi->probes) == 1) {
                        probe = sdi->probes->data;
-                       printf("with 1 probe: %s", probe->name);
+                       g_string_append_printf(s, "with 1 probe: %s", probe->name);
                } else {
-                       printf("with %d probes:", g_slist_length(sdi->probes));
+                       g_string_append_printf(s, "with %d probes:", g_slist_length(sdi->probes));
                        for (l = sdi->probes; l; l = l->next) {
                                probe = l->data;
-                               printf(" %s", probe->name);
+                               g_string_append_printf(s, " %s", probe->name);
                        }
                }
        }
-       printf("\n");
+       g_string_append_printf(s, "\n");
+       printf("%s", s->str);
+       g_string_free(s, TRUE);
+
 }
 
 static void show_dev_list(void)
@@ -317,8 +330,8 @@ static void show_dev_detail(void)
        GSList *devices;
        GVariant *gvar_opts, *gvar_dict, *gvar_list, *gvar;
        gsize num_opts, num_elements;
-       const uint64_t *int64;
-       const int32_t *opts, *int32;
+       const uint64_t *uint64, p, q;
+       const int32_t *opts;
        unsigned int num_devices, tmp_bool, o, i;
        char *s;
        const char *charopts, **stropts;
@@ -409,27 +422,27 @@ static void show_dev_detail(void)
                        }
                        if ((gvar_list = g_variant_lookup_value(gvar_dict,
                                        "samplerates", G_VARIANT_TYPE("at")))) {
-                               int64 = g_variant_get_fixed_array(gvar_list,
+                               uint64 = g_variant_get_fixed_array(gvar_list,
                                                &num_elements, sizeof(uint64_t));
                                printf(" - supported samplerates:\n");
                                for (i = 0; i < num_elements; i++)
-                                       printf("      %s\n", sr_samplerate_string(int64[i]));
+                                       printf("      %s\n", sr_samplerate_string(uint64[i]));
                        } if ((gvar_list = g_variant_lookup_value(gvar_dict,
                                        "samplerate-steps", G_VARIANT_TYPE("at")))) {
-                               int64 = g_variant_get_fixed_array(gvar_list,
+                               uint64 = g_variant_get_fixed_array(gvar_list,
                                                &num_elements, sizeof(uint64_t));
                                /* low */
-                               if (!(s = sr_samplerate_string(int64[0])))
+                               if (!(s = sr_samplerate_string(uint64[0])))
                                        continue;
                                printf(" (%s", s);
                                g_free(s);
                                /* high */
-                               if (!(s = sr_samplerate_string(int64[1])))
+                               if (!(s = sr_samplerate_string(uint64[1])))
                                        continue;
                                printf(" - %s", s);
                                g_free(s);
                                /* step */
-                               if (!(s = sr_samplerate_string(int64[2])))
+                               if (!(s = sr_samplerate_string(uint64[2])))
                                        continue;
                                printf(" in steps of %s)\n", s);
                                g_free(s);
@@ -445,11 +458,11 @@ static void show_dev_detail(void)
                                printf("\n");
                                continue;
                        }
-                       int64 = g_variant_get_fixed_array(gvar_list,
+                       uint64 = g_variant_get_fixed_array(gvar_list,
                                        &num_elements, sizeof(uint64_t));
                        printf(" - supported buffer sizes:\n");
                        for (i = 0; i < num_elements; i++)
-                               printf("      %"PRIu64"\n", int64[i]);
+                               printf("      %"PRIu64"\n", uint64[i]);
                        g_variant_unref(gvar_list);
 
                } else if (srci->key == SR_CONF_TIMEBASE) {
@@ -461,11 +474,14 @@ static void show_dev_detail(void)
                                continue;
                        }
                        printf(" - supported time bases:\n");
-                       int32 = g_variant_get_fixed_array(gvar_list,
-                                       &num_elements, sizeof(int32_t));
-                       for (i = 0; i < num_elements / 2; i++)
-                               printf("      %s\n", sr_period_string(
-                                               int32[i * 2] * int32[i * 2 + 1]));
+                       num_elements = g_variant_n_children(gvar_list);
+                       for (i = 0; i < num_elements; i++) {
+                               gvar = g_variant_get_child_value(gvar_list, i);
+                               g_variant_get(gvar, "(tt)", &p, &q);
+                               s = sr_period_string(p * q);
+                               printf("      %s\n", s);
+                               g_free(s);
+                       }
                        g_variant_unref(gvar_list);
 
                } else if (srci->key == SR_CONF_TRIGGER_SOURCE) {
@@ -505,11 +521,14 @@ static void show_dev_detail(void)
                                continue;
                        }
                        printf(" - supported volts/div:\n");
-                       int32 = g_variant_get_fixed_array(gvar_list,
-                                       &num_elements, sizeof(int32_t));
-                       for (i = 0; i < num_elements / 2; i++)
-                               printf("      %s\n", sr_period_string(
-                                               int32[i * 2] * int32[i * 2 + 1]));
+                       num_elements = g_variant_n_children(gvar_list);
+                       for (i = 0; i < num_elements; i++) {
+                               gvar = g_variant_get_child_value(gvar_list, i);
+                               g_variant_get(gvar, "(tt)", &p, &q);
+                               s = sr_voltage_string(p, q);
+                               printf("      %s\n", s);
+                               g_free(s);
+                       }
                        g_variant_unref(gvar_list);
 
                } else if (srci->key == SR_CONF_COUPLING) {
@@ -638,7 +657,7 @@ static GArray *get_enabled_logic_probes(const struct sr_dev_inst *sdi)
 }
 
 static void datafeed_in(const struct sr_dev_inst *sdi,
-               const struct sr_datafeed_packet *packet)
+               const struct sr_datafeed_packet *packet, void *cb_data)
 {
        const struct sr_datafeed_meta *meta;
        const struct sr_datafeed_logic *logic;
@@ -657,6 +676,8 @@ static void datafeed_in(const struct sr_dev_inst *sdi,
        uint64_t samplerate, output_len, filter_out_len;
        uint8_t *output_buf, *filter_out;
 
+       (void) cb_data;
+
        /* If the first packet to come in isn't a header, don't even try. */
        if (packet->type != SR_DF_HEADER && o == NULL)
                return;
@@ -1386,7 +1407,7 @@ static void load_input_file_format(void)
                return;
 
        sr_session_new();
-       sr_session_datafeed_callback_add(datafeed_in);
+       sr_session_datafeed_callback_add(datafeed_in, NULL);
        if (sr_session_dev_add(in->sdi) != SR_OK) {
                g_critical("Failed to use device.");
                sr_session_destroy();
@@ -1406,7 +1427,7 @@ static void load_input_file(void)
 
        if (sr_session_load(opt_input_file) == SR_OK) {
                /* sigrok session file */
-               sr_session_datafeed_callback_add(datafeed_in);
+               sr_session_datafeed_callback_add(datafeed_in, NULL);
                sr_session_start();
                sr_session_run();
                sr_session_stop();
@@ -1423,11 +1444,10 @@ static int set_dev_options(struct sr_dev_inst *sdi, GHashTable *args)
        GHashTableIter iter;
        gpointer key, value;
        int ret;
-       float tmp_float;
-       uint64_t tmp_u64;
-       struct sr_rational tmp_rat;
+       double tmp_double;
+       uint64_t tmp_u64, p, q;
        gboolean tmp_bool;
-       void *val;
+       GVariant *val, *rational[2];
 
        g_hash_table_iter_init(&iter, args);
        while (g_hash_table_iter_next(&iter, &key, &value)) {
@@ -1447,31 +1467,35 @@ static int set_dev_options(struct sr_dev_inst *sdi, GHashTable *args)
                        ret = sr_parse_sizestring(value, &tmp_u64);
                        if (ret != SR_OK)
                                break;
-                       val = &tmp_u64;
+                       val = g_variant_new_uint64(tmp_u64);
                        break;
                case SR_T_CHAR:
-                       val = value;
+                       val = g_variant_new_string(value);
                        break;
                case SR_T_BOOL:
                        if (!value)
                                tmp_bool = TRUE;
                        else
                                tmp_bool = sr_parse_boolstring(value);
-                       val = &tmp_bool;
+                       val = g_variant_new_boolean(tmp_bool);
                        break;
                case SR_T_FLOAT:
-                       tmp_float = strtof(value, NULL);
-                       val = &tmp_float;
+                       tmp_double = strtof(value, NULL);
+                       val = g_variant_new_double(tmp_double);
                        break;
                case SR_T_RATIONAL_PERIOD:
-                       if ((ret = sr_parse_period(value, &tmp_rat)) != SR_OK)
+                       if ((ret = sr_parse_period(value, &p, &q)) != SR_OK)
                                break;
-                       val = &tmp_rat;
+                       rational[0] = g_variant_new_uint64(p);
+                       rational[1] = g_variant_new_uint64(q);
+                       val = g_variant_new_tuple(rational, 2);
                        break;
                case SR_T_RATIONAL_VOLT:
-                       if ((ret = sr_parse_voltage(value, &tmp_rat)) != SR_OK)
+                       if ((ret = sr_parse_voltage(value, &p, &q)) != SR_OK)
                                break;
-                       val = &tmp_rat;
+                       rational[0] = g_variant_new_uint64(p);
+                       rational[1] = g_variant_new_uint64(q);
+                       val = g_variant_new_tuple(rational, 2);
                        break;
                default:
                        ret = SR_ERR;
@@ -1582,7 +1606,7 @@ static void run_session(void)
        sdi = devices->data;
 
        sr_session_new();
-       sr_session_datafeed_callback_add(datafeed_in);
+       sr_session_datafeed_callback_add(datafeed_in, NULL);
 
        if (sr_session_dev_add(sdi) != SR_OK) {
                g_critical("Failed to use device.");
@@ -1654,6 +1678,7 @@ static void run_session(void)
                        sr_session_destroy();
                        return;
                }
+               gvar = g_variant_new_uint64(limit_frames);
                if (sr_config_set(sdi, SR_CONF_LIMIT_FRAMES, gvar) != SR_OK) {
                        g_critical("Failed to configure frame limit.");
                        sr_session_destroy();