X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=device.c;h=6b56da3a7ad7a727ef0fe56a5defb2caf4458e61;hb=7e41e319d9a76da527eaa6e2708e4909ffd0d971;hp=24ec602f90a21686bb42da96d712af4df36b73c3;hpb=c09f0b578c0e9c03590cb814f66004bb3f6815ff;p=libsigrok.git diff --git a/device.c b/device.c index 24ec602f..6b56da3a 100644 --- a/device.c +++ b/device.c @@ -55,17 +55,17 @@ static GSList *devs = NULL; * TODO: Error checks? * TODO: Option to only scan for specific devices or device classes. * - * @return SR_OK upon success, SR_ERR upon errors. + * @return SR_OK upon success, SR_ERR_BUG upon internal errors. */ SR_API int sr_dev_scan(void) { int i; struct sr_dev_driver **drivers; - drivers = sr_hw_list(); + drivers = sr_driver_list(); if (!drivers[0]) { sr_err("dev: %s: no supported hardware drivers", __func__); - return SR_ERR; /* TODO: More specific error? */ + return SR_ERR_BUG; } /* @@ -74,7 +74,7 @@ SR_API int sr_dev_scan(void) * of these out of the way first. */ for (i = 0; drivers[i]; i++) - sr_hw_init(drivers[i]); + sr_driver_init(drivers[i]); return SR_OK; } @@ -238,8 +238,6 @@ SR_API struct sr_probe *sr_dev_probe_find(const struct sr_dev *dev, * If the probe already has a different name assigned to it, it will be * removed, and the new name will be saved instead. * - * TODO: Rename to sr_dev_probe_name_set(). - * * @param dev TODO * @param probenum The number of the probe whose name to set. * Note that the probe numbers start at 1 (not 0!). @@ -249,8 +247,8 @@ SR_API struct sr_probe *sr_dev_probe_find(const struct sr_dev *dev, * upon other errors. * If something other than SR_OK is returned, 'dev' is unchanged. */ -SR_API int sr_dev_probe_name(struct sr_dev *dev, int probenum, - const char *name) +SR_API int sr_dev_probe_name_set(struct sr_dev *dev, int probenum, + const char *name) { struct sr_probe *p; @@ -285,7 +283,7 @@ SR_API int sr_dev_probe_name(struct sr_dev *dev, int probenum, * @return SR_OK upon success, SR_ERR_ARG upon invalid arguments. * If something other than SR_OK is returned, 'dev' is unchanged. */ -SR_API int sr_dev_trigger_clear(struct sr_dev *dev) +SR_API int sr_dev_trigger_remove_all(struct sr_dev *dev) { struct sr_probe *p; unsigned int pnum; /* TODO: uint16_t? */ @@ -313,7 +311,10 @@ SR_API int sr_dev_trigger_clear(struct sr_dev *dev) } /** - * Add a trigger to the specified device. + * Add a trigger to the specified device (and the specified probe). + * + * If the specified probe of this device already has a trigger, it will + * be silently replaced. * * TODO: Better description. * TODO: Describe valid format of the 'trigger' string. @@ -352,6 +353,8 @@ SR_API int sr_dev_trigger_set(struct sr_dev *dev, int probenum, 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; } @@ -359,10 +362,10 @@ SR_API int sr_dev_trigger_set(struct sr_dev *dev, int probenum, /** * Determine whether the specified device has the specified capability. * - * TODO: Should return int? - * * @param dev Pointer to the device to be checked. Must not be NULL. - * The device's 'driver' field must not be NULL either. + * If the device's 'driver' field is NULL (virtual device), this + * function will always return FALSE (virtual devices don't have + * a hardware capabilities list). * @param hwcap The capability that should be checked (whether it's supported * by the specified device). * @@ -374,21 +377,28 @@ SR_API gboolean sr_dev_has_hwcap(const struct sr_dev *dev, int hwcap) { int *hwcaps, i; + sr_spew("dev: %s: requesting hwcap %d", __func__, hwcap); + if (!dev) { sr_err("dev: %s: dev was NULL", __func__); - return FALSE; /* TODO: SR_ERR_ARG. */ + return FALSE; } + /* + * Virtual devices (which have dev->driver set to NULL) always say that + * they don't have the capability (they can't call hwcap_get_all()). + */ if (!dev->driver) { - sr_err("dev: %s: dev->driver was NULL", __func__); - return FALSE; /* TODO: SR_ERR_ARG. */ + sr_dbg("dev: %s: dev->driver was NULL, this seems to be " + "a virtual device without capabilities", __func__); + return FALSE; } /* TODO: Sanity check on 'hwcap'. */ if (!(hwcaps = dev->driver->hwcap_get_all())) { sr_err("dev: %s: dev has no capabilities", __func__); - return FALSE; /* TODO: SR_ERR*. */ + return FALSE; } for (i = 0; hwcaps[i]; i++) {