From: Bert Vermeulen Date: Thu, 6 May 2010 02:54:19 +0000 (-0700) Subject: allow devices without a plugin X-Git-Tag: libsigrok-0.1.0~524 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=873080cc03a7c7889ef775a4584d1036b1d1315f;p=libsigrok.git allow devices without a plugin this is needed to support file loading: we want a device struct so we can enumerate probes from the file, but there is no plugin since the data come in from a device. --- 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); diff --git a/sigrok.h b/sigrok.h index a8703a38..6525fa84 100644 --- a/sigrok.h +++ b/sigrok.h @@ -222,7 +222,7 @@ extern GSList *devices; void device_scan(void); void device_close_all(void); GSList *device_list(void); -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); void device_clear(struct device *device); void device_destroy(struct device *dev);