]> sigrok.org Git - libsigrok.git/blobdiff - hwplugin.c
Move most contrib/ stuff to libsigrok.
[libsigrok.git] / hwplugin.c
index 43e6ef7912cf5be03df2eb505a4be41244f6cee9..6b5cd7af6027e16eeb4e0a7da3c6fa8ea162f819 100644 (file)
 #include <dirent.h>
 #include <string.h>
 #include <glib.h>
-#include <sigrok.h>
-#include <sigrok-internal.h>
+#include "sigrok.h"
+#include "sigrok-internal.h"
 
 /* The list of loaded plugins lives here. */
-GSList *plugins;
+static GSList *plugins;
 
 /*
  * This enumerates which plugin capabilities correspond to user-settable
@@ -68,7 +68,6 @@ extern struct sr_device_plugin link_mso19_plugin_info;
 extern struct sr_device_plugin alsa_plugin_info;
 #endif
 
-
 /* TODO: No linked list needed, this can be a simple array. */
 int load_hwplugins(void)
 {
@@ -99,7 +98,6 @@ int load_hwplugins(void)
        plugins = g_slist_append(plugins, (gpointer *)&alsa_plugin_info);
 #endif
 
-
        return SR_OK;
 }
 
@@ -110,17 +108,32 @@ GSList *sr_list_hwplugins(void)
 
 int sr_init_hwplugins(struct sr_device_plugin *plugin)
 {
-       int num_devices, num_probes, i;
+       int num_devices, num_probes, i, j;
+       int num_initialized_devices = 0;
+       struct sr_device *device;
+       char **probe_names;
 
        g_message("initializing %s plugin", plugin->name);
        num_devices = plugin->init(NULL);
        for (i = 0; i < num_devices; i++) {
                num_probes = GPOINTER_TO_INT(
                                plugin->get_device_info(i, SR_DI_NUM_PROBES));
-               sr_device_new(plugin, i, num_probes);
+               probe_names = (char **)plugin->get_device_info(i,
+                                                       SR_DI_PROBE_NAMES);
+
+               if (!probe_names) {
+                       sr_warn("hwplugin: %s: plugin %s does not return a "
+                               "list of probe names", __func__, plugin->name);
+                       continue;
+               }
+
+               device = sr_device_new(plugin, i);
+               for (j = 0; j < num_probes; j++)
+                       sr_device_probe_add(device, probe_names[j]);
+               num_initialized_devices++;
        }
 
-       return num_devices;
+       return num_initialized_devices;
 }
 
 void sr_cleanup_hwplugins(void)
@@ -133,7 +146,6 @@ void sr_cleanup_hwplugins(void)
                if (plugin->cleanup)
                        plugin->cleanup();
        }
-
 }
 
 struct sr_device_instance *sr_device_instance_new(int index, int status,
@@ -195,7 +207,6 @@ void sr_device_instance_free(struct sr_device_instance *sdi)
        g_free(sdi->model);
        g_free(sdi->version);
        g_free(sdi);
-
 }
 
 #ifdef HAVE_LIBUSB_1_0
@@ -218,7 +229,7 @@ struct sr_usb_device_instance *sr_usb_device_instance_new(uint8_t bus,
 void sr_usb_device_instance_free(struct sr_usb_device_instance *usb)
 {
        /* Avoid compiler warnings. */
-       usb = usb;
+       (void)usb;
 
        /* Nothing to do for this device instance type. */
 }