X-Git-Url: http://sigrok.org/gitweb/?a=blobdiff_plain;f=device.c;h=5290e0eb4ee3d9939c12921324c16bfebfe56d70;hb=873080cc03a7c7889ef775a4584d1036b1d1315f;hp=0b59621ef08dc8876c24e3997c16d0c232023c0a;hpb=1b452b8510922bac08db87f8ea769515c795e22f;p=libsigrok.git diff --git a/device.c b/device.c index 0b59621e..5290e0eb 100644 --- a/device.c +++ b/device.c @@ -29,7 +29,7 @@ void device_scan(void) { GSList *plugins, *l; struct device_plugin *plugin; - int num_devices, i; + int num_devices, num_probes, i; plugins = list_hwplugins(); @@ -42,8 +42,10 @@ void device_scan(void) plugin = l->data; g_message("initializing %s plugin", plugin->name); num_devices = plugin->init(NULL); - for (i = 0; i < num_devices; i++) - device_new(plugin, i); + for (i = 0; i < num_devices; i++) { + num_probes = (int)plugin->get_device_info(i, DI_NUM_PROBES); + device_new(plugin, i, num_probes); + } } } @@ -53,7 +55,8 @@ void device_close_all(void) while (devices) { device = devices->data; - device->plugin->close(device->plugin_index); + if (device->plugin) + device->plugin->close(device->plugin_index); device_destroy(device); } } @@ -63,10 +66,10 @@ GSList *device_list(void) return devices; } -struct device *device_new(struct device_plugin *plugin, int plugin_index) +struct device *device_new(struct device_plugin *plugin, int plugin_index, int num_probes) { struct device *device; - int num_probes, i; + int i; char probename[16]; device = g_malloc0(sizeof(struct device)); @@ -74,8 +77,6 @@ struct device *device_new(struct device_plugin *plugin, int plugin_index) device->plugin_index = plugin_index; devices = g_slist_append(devices, device); - num_probes = (int)device->plugin->get_device_info(device->plugin_index, - DI_NUM_PROBES); for (i = 0; i < num_probes; i++) { snprintf(probename, 16, "%d", i + 1); device_probe_add(device, probename);