X-Git-Url: https://sigrok.org/gitweb/?a=blobdiff_plain;f=device.c;h=9e922f050fe3df2195af7762abdb82b7e47dee55;hb=5a2326a71b3a7d3bc6b367a7a3dfa6f137f5f0ec;hp=0b59621ef08dc8876c24e3997c16d0c232023c0a;hpb=1b452b8510922bac08db87f8ea769515c795e22f;p=libsigrok.git diff --git a/device.c b/device.c index 0b59621e..9e922f05 100644 --- a/device.c +++ b/device.c @@ -21,15 +21,14 @@ #include #include -extern struct sigrok_global *global; +extern struct sr_global *global; GSList *devices = NULL; void device_scan(void) { GSList *plugins, *l; - struct device_plugin *plugin; - int num_devices, i; + struct sr_device_plugin *plugin; plugins = list_hwplugins(); @@ -40,42 +39,58 @@ void device_scan(void) */ for (l = plugins; l; l = l->next) { 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); + device_plugin_init(plugin); } + +} + +int device_plugin_init(struct sr_device_plugin *plugin) +{ + int num_devices, num_probes, i; + + g_message("initializing %s plugin", plugin->name); + num_devices = plugin->init(NULL); + for (i = 0; i < num_devices; i++) { + num_probes = (int)plugin->get_device_info(i, SR_DI_NUM_PROBES); + device_new(plugin, i, num_probes); + } + + return num_devices; } void device_close_all(void) { - struct device *device; + struct sr_device *device; while (devices) { device = devices->data; - device->plugin->close(device->plugin_index); + if (device->plugin) + device->plugin->close(device->plugin_index); device_destroy(device); } } GSList *device_list(void) { + + if (!devices) + device_scan(); + return devices; } -struct device *device_new(struct device_plugin *plugin, int plugin_index) +struct sr_device *device_new(struct sr_device_plugin *plugin, int plugin_index, + int num_probes) { - struct device *device; - int num_probes, i; + struct sr_device *device; + int i; char probename[16]; - device = g_malloc0(sizeof(struct device)); + device = g_malloc0(sizeof(struct sr_device)); device->plugin = plugin; 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); @@ -84,7 +99,7 @@ struct device *device_new(struct device_plugin *plugin, int plugin_index) return device; } -void device_clear(struct device *device) +void device_clear(struct sr_device *device) { unsigned int pnum; @@ -97,7 +112,7 @@ void device_clear(struct device *device) device_probe_clear(device, pnum); } -void device_destroy(struct device *device) +void device_destroy(struct sr_device *device) { unsigned int pnum; @@ -115,7 +130,7 @@ void device_destroy(struct device *device) g_free(device); } -void device_probe_clear(struct device *device, int probenum) +void device_probe_clear(struct sr_device *device, int probenum) { struct probe *p; @@ -134,7 +149,7 @@ void device_probe_clear(struct device *device, int probenum) } } -void device_probe_add(struct device *device, char *name) +void device_probe_add(struct sr_device *device, char *name) { struct probe *p; @@ -146,7 +161,7 @@ void device_probe_add(struct device *device, char *name) device->probes = g_slist_append(device->probes, p); } -struct probe *probe_find(struct device *device, int probenum) +struct probe *probe_find(struct sr_device *device, int probenum) { GSList *l; struct probe *p, *found_probe; @@ -163,7 +178,7 @@ struct probe *probe_find(struct device *device, int probenum) return found_probe; } -void device_probe_name(struct device *device, int probenum, char *name) +void device_probe_name(struct sr_device *device, int probenum, char *name) { struct probe *p; @@ -176,7 +191,7 @@ void device_probe_name(struct device *device, int probenum, char *name) p->name = g_strdup(name); } -void device_trigger_clear(struct device *device) +void device_trigger_clear(struct sr_device *device) { struct probe *p; unsigned int pnum; @@ -193,7 +208,7 @@ void device_trigger_clear(struct device *device) } } -void device_trigger_set(struct device *device, int probenum, char *trigger) +void device_trigger_set(struct sr_device *device, int probenum, char *trigger) { struct probe *p;