summaryrefslogtreecommitdiff
path: root/src/device.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/device.c')
-rw-r--r--src/device.c33
1 files changed, 26 insertions, 7 deletions
diff --git a/src/device.c b/src/device.c
index 09a94e3..6189de1 100644
--- a/src/device.c
+++ b/src/device.c
@@ -23,9 +23,11 @@
#include "device.h"
#include "moticam.h"
+#include "dummy.h"
static const struct device_driver *drivers[] = {
&moticam_device_driver,
+ &dummy_device_driver,
NULL
};
@@ -59,11 +61,13 @@ device_open(libusb_context *usb, GError **error)
} else {
for (const struct device_driver **dd = drivers;
!found_usb_device && *dd; dd++) {
- char *device_name = (*dd)->usb_poll(&desc);
- if (device_name) {
- found_usb_device = usb_device;
- found_device_name = device_name;
- found_device_driver = *dd;
+ if ((*dd)->usb_poll) {
+ char *device_name = (*dd)->usb_poll(&desc);
+ if (device_name) {
+ found_usb_device = usb_device;
+ found_device_name = device_name;
+ found_device_driver = *dd;
+ }
}
}
}
@@ -73,8 +77,23 @@ device_open(libusb_context *usb, GError **error)
g_free(found_device_name);
device = found_device_driver->usb_open(usb, found_usb_device, error);
} else {
- g_set_error(error, DEVICE_ERROR, DEVICE_ERROR_LIST,
- "no device found");
+ for (const struct device_driver **dd = drivers;
+ !found_device_name && *dd; dd++) {
+ if ((*dd)->poll) {
+ char *device_name = (*dd)->poll();
+ if (device_name) {
+ found_device_name = device_name;
+ found_device_driver = *dd;
+ }
+ }
+ }
+ if (found_device_name) {
+ g_free(found_device_name);
+ device = found_device_driver->open(error);
+ } else {
+ g_set_error(error, DEVICE_ERROR, DEVICE_ERROR_LIST,
+ "no device found");
+ }
}
libusb_free_device_list(list, 1);
return device;