From: Bert Vermeulen Date: Sun, 8 Jul 2012 14:37:39 +0000 (+0200) Subject: sr: add probe list to device instance X-Git-Tag: dsupstream~843 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=47211d65b4fdaca58694a51cdbf1ba8ee4270ee9;p=libsigrok.git sr: add probe list to device instance 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. --- diff --git a/hwdriver.c b/hwdriver.c index 91b0e6d9..f74d47f0 100644 --- a/hwdriver.c +++ b/hwdriver.c @@ -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, diff --git a/libsigrok-internal.h b/libsigrok-internal.h index 94ca2bc9..393e668f 100644 --- a/libsigrok-internal.h +++ b/libsigrok-internal.h @@ -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, diff --git a/libsigrok.h b/libsigrok.h index bedfbdb7..42406d54 100644 --- a/libsigrok.h +++ b/libsigrok.h @@ -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; };