{
GSList *plugins, *l;
struct device_plugin *plugin;
- int num_devices, i;
+ int num_devices, num_probes, i;
plugins = list_hwplugins();
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);
+ }
}
}
while (devices) {
device = devices->data;
- device->plugin->close(device->plugin_index);
+ if (device->plugin)
+ device->plugin->close(device->plugin_index);
device_destroy(device);
}
}
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));
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);
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);