X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=device.c;h=be647fb248e7be173810a439fe543d41fb10d59a;hb=be5bf44d281cc0a85992666803afdd7dafcefaf9;hp=15809e17e9625e6fbffd6a115a6c7212dd71b93d;hpb=915f7cc87a8dce688ab99fc67005ef77e0d028a2;p=libsigrok.git diff --git a/device.c b/device.c index 15809e17..be647fb2 100644 --- a/device.c +++ b/device.c @@ -19,8 +19,8 @@ #include #include -#include "sigrok.h" -#include "sigrok-internal.h" +#include "libsigrok.h" +#include "libsigrok-internal.h" static GSList *devs = NULL; @@ -273,6 +273,38 @@ SR_API int sr_dev_probe_name_set(struct sr_dev *dev, int probenum, return SR_OK; } +/** + * Enable or disable a probe on the specified device. + * + * @param sdi The device instance the probe is connected to. + * @param probenum The probe number, starting from 0. + * @param state TRUE to enable the probe, FALSE to disable. + * + * @return SR_OK on success, or SR_ERR_ARG on invalid arguments. + */ +SR_API int sr_dev_probe_enable(const struct sr_dev_inst *sdi, int probenum, + gboolean state) +{ + GSList *l; + struct sr_probe *probe; + int ret; + + if (!sdi) + return SR_ERR_ARG; + + ret = SR_ERR_ARG; + for (l = sdi->probes; l; l = l->next) { + probe = l->data; + if (probe->index == probenum) { + probe->enabled = state; + ret = SR_OK; + break; + } + } + + return ret; +} + /** * Remove all triggers set up for the specified device. * @@ -329,34 +361,29 @@ SR_API int sr_dev_trigger_remove_all(struct sr_dev *dev) * upon other errors. * If something other than SR_OK is returned, 'dev' is unchanged. */ -SR_API int sr_dev_trigger_set(struct sr_dev *dev, int probenum, - const char *trigger) +SR_API int sr_dev_trigger_set(const struct sr_dev_inst *sdi, int probenum, + const char *trigger) { - struct sr_probe *p; + GSList *l; + struct sr_probe *probe; + int ret; - if (!dev) { - sr_err("dev: %s: dev was NULL", __func__); + if (!sdi) return SR_ERR_ARG; - } - /* TODO: Sanity check on 'probenum'. */ - - /* TODO: Sanity check on 'trigger'. */ - - p = sr_dev_probe_find(dev, probenum); - if (!p) { - sr_err("dev: %s: probe %d not found", __func__, probenum); - return SR_ERR; /* TODO: More specific error? */ + ret = SR_ERR_ARG; + for (l = sdi->probes; l; l = l->next) { + probe = l->data; + if (probe->index == probenum) { + /* If the probe already has a trigger, kill it first. */ + g_free(probe->trigger); + probe->trigger = g_strdup(trigger); + ret = SR_OK; + break; + } } - /* If the probe already has a trigger, kill it first. */ - g_free(p->trigger); - - p->trigger = g_strdup(trigger); - sr_dbg("dev: %s: Setting '%s' trigger for probe %d.", __func__, - p->trigger, probenum); - - return SR_OK; + return ret; } /** @@ -397,7 +424,8 @@ SR_API gboolean sr_dev_has_hwcap(const struct sr_dev *dev, int hwcap) /* TODO: Sanity check on 'hwcap'. */ - if (!(hwcaps = dev->driver->hwcap_get_all())) { + if (dev->driver->info_get(SR_DI_HWCAPS, + (const void **)&hwcaps, NULL) != SR_OK) { sr_err("dev: %s: dev has no capabilities", __func__); return FALSE; }