X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=device.c;h=84cf6d1f87c48c8cfd96d839c5e9a55cb6f5a009;hb=576790ff7b7e888eeefa79239ffed6d8550c1160;hp=0b59621ef08dc8876c24e3997c16d0c232023c0a;hpb=1b452b8510922bac08db87f8ea769515c795e22f;p=libsigrok.git diff --git a/device.c b/device.c index 0b59621e..84cf6d1f 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,12 @@ 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)(unsigned long)plugin->get_device_info(i, + DI_NUM_PROBES); + device_new(plugin, i, num_probes); + } } } @@ -53,7 +57,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 +68,11 @@ 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 +80,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);