]> sigrok.org Git - libsigrok.git/commitdiff
sr: add probe list to device instance
authorBert Vermeulen <redacted>
Sun, 8 Jul 2012 14:37:39 +0000 (16:37 +0200)
committerBert Vermeulen <redacted>
Fri, 3 Aug 2012 08:27:37 +0000 (10:27 +0200)
There is no point in libsigrok copying probe lists around. The driver now
builds a list of probes according to the model device it found, and will
make that available to a frontend. The frontend thus has a reference of
what the driver has, including default names, and doesn't need libsigrok
to provide an unnecessary level of abstraction.

The sr_probe_new() library-private function is a helper for drivers.

hwdriver.c
libsigrok-internal.h
libsigrok.h

index 91b0e6d9d0813cdfeb0c3f27889f8660fde301f7..f74d47f05264b4dbd809ebc862ffbca326417371 100644 (file)
@@ -193,6 +193,7 @@ SR_PRIV struct sr_dev_inst *sr_dev_inst_new(int index, int status,
        sdi->vendor = vendor ? g_strdup(vendor) : NULL;
        sdi->model = model ? g_strdup(model) : NULL;
        sdi->version = version ? g_strdup(version) : NULL;
+       sdi->probes = NULL;
        sdi->priv = NULL;
 
        return sdi;
@@ -222,6 +223,25 @@ SR_PRIV void sr_dev_inst_free(struct sr_dev_inst *sdi)
        g_free(sdi);
 }
 
+SR_PRIV struct sr_probe *sr_probe_new(int index, int type,
+               gboolean enabled, const char *name)
+{
+       struct sr_probe *probe;
+
+       if (!(probe = g_try_malloc0(sizeof(struct sr_probe)))) {
+               sr_err("hwdriver: probe malloc failed");
+               return NULL;
+       }
+
+       probe->index = index;
+       probe->type = type;
+       probe->enabled = enabled;
+       if (name)
+               probe->name = g_strdup(name);
+
+       return probe;
+}
+
 #ifdef HAVE_LIBUSB_1_0
 
 SR_PRIV struct sr_usb_dev_inst *sr_usb_dev_inst_new(uint8_t bus,
index 94ca2bc90a94bd08be177075471795335b6ff344..393e668f89d98adafc70f6c3858900203bd20f06 100644 (file)
@@ -91,6 +91,8 @@ SR_PRIV struct sr_dev_inst *sr_dev_inst_new(int index, int status,
                const char *vendor, const char *model, const char *version);
 SR_PRIV struct sr_dev_inst *sr_dev_inst_get(GSList *dev_insts, int dev_index);
 SR_PRIV void sr_dev_inst_free(struct sr_dev_inst *sdi);
+SR_PRIV struct sr_probe *sr_probe_new(int index, int type,
+               gboolean enabled, const char *name);
 
 SR_PRIV int sr_source_remove(int fd);
 SR_PRIV int sr_source_add(int fd, int events, int timeout,
index bedfbdb75d5de21cb0da1e189b84a583a1fa83af..42406d5419b568ca3077452e08be4a261000924f 100644 (file)
@@ -250,7 +250,7 @@ struct sr_dev {
 };
 
 enum {
-       SR_PROBE_TYPE_LOGIC,
+       SR_PROBE_LOGIC,
 };
 
 struct sr_probe {
@@ -402,6 +402,7 @@ struct sr_dev_inst {
        char *vendor;
        char *model;
        char *version;
+       GSList *probes;
        void *priv;
 };