summaryrefslogtreecommitdiffstats
path: root/usbhid-dump/src/dev.c
diff options
context:
space:
mode:
Diffstat (limited to 'usbhid-dump/src/dev.c')
-rw-r--r--usbhid-dump/src/dev.c72
1 files changed, 72 insertions, 0 deletions
diff --git a/usbhid-dump/src/dev.c b/usbhid-dump/src/dev.c
new file mode 100644
index 0000000..1978496
--- /dev/null
+++ b/usbhid-dump/src/dev.c
@@ -0,0 +1,72 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * usbhid-dump - device
+ *
+ * Copyright (C) 2010 Nikolai Kondrashov <spbnick@gmail.com>
+ */
+
+#include "config.h"
+
+#include "dev.h"
+#include <assert.h>
+#include <stdlib.h>
+
+bool
+uhd_dev_valid(const uhd_dev *dev)
+{
+ return dev != NULL &&
+ dev->handle != NULL;
+}
+
+
+enum libusb_error
+uhd_dev_open(libusb_device *lusb_dev,
+ uhd_dev **pdev)
+{
+ enum libusb_error err;
+ uhd_dev *dev;
+
+ assert(lusb_dev != NULL);
+
+ dev = malloc(sizeof(*dev));
+ if (dev == NULL)
+ return LIBUSB_ERROR_NO_MEM;
+
+ dev->next = NULL;
+
+ err = libusb_open(lusb_dev, &dev->handle);
+ if (err != LIBUSB_SUCCESS)
+ {
+ free(dev);
+ return err;
+ }
+
+ assert(uhd_dev_valid(dev));
+
+ if (pdev != NULL)
+ *pdev = dev;
+ else
+ {
+ libusb_close(dev->handle);
+ free(dev);
+ }
+
+ return LIBUSB_SUCCESS;
+}
+
+
+void
+uhd_dev_close(uhd_dev *dev)
+{
+ if (dev == NULL)
+ return;
+
+ assert(uhd_dev_valid(dev));
+
+ libusb_close(dev->handle);
+ dev->handle = NULL;
+
+ free(dev);
+}
+
+