]> sigrok.org Git - libsigrok.git/blobdiff - device.c
sr: Make wrappers honor return values.
[libsigrok.git] / device.c
index c4ff6ebe4f0d92ab0e47ee5f9949c77527fbc64f..99e9c378977fbca73d1674e53fafc443149ecb0f 100644 (file)
--- a/device.c
+++ b/device.c
@@ -55,7 +55,7 @@ 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)
 {
@@ -65,7 +65,7 @@ SR_API int sr_dev_scan(void)
        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;
        }
 
        /*
@@ -357,10 +357,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).
  *
@@ -372,21 +372,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++) {