]> sigrok.org Git - libsigrok.git/blobdiff - hwplugin.c
Move most contrib/ stuff to libsigrok.
[libsigrok.git] / hwplugin.c
index 0ffd6f2eeae77e17bbf0d86046b42771917d6a30..6b5cd7af6027e16eeb4e0a7da3c6fa8ea162f819 100644 (file)
@@ -24,8 +24,8 @@
 #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. */
 static GSList *plugins;
@@ -108,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)