[libcamera-devel] [RFC 7/9] libcamera: device_enumerator: Search for USB devices

Jacopo Mondi jacopo.mondi at ideasonboard.com
Tue Aug 8 14:52:26 CEST 2023


Add support for searching a USBDevice by providing a USBDeviceMatch
to the device enumerator.

Signed-off-by: Jacopo Mondi <jacopo.mondi at ideasonboard.com>
---
 include/libcamera/internal/device_enumerator.h |  1 +
 src/libcamera/device_enumerator.cpp            | 14 ++++++++++++++
 2 files changed, 15 insertions(+)

diff --git a/include/libcamera/internal/device_enumerator.h b/include/libcamera/internal/device_enumerator.h
index 1d6dbcb104b8..f4ee349906f2 100644
--- a/include/libcamera/internal/device_enumerator.h
+++ b/include/libcamera/internal/device_enumerator.h
@@ -31,6 +31,7 @@ public:
 	virtual int enumerate() = 0;
 
 	std::shared_ptr<MediaDevice> search(const MediaDeviceMatch &dm);
+	std::shared_ptr<USBDevice> search(const USBDeviceMatch &dm);
 
 	Signal<> devicesAdded;
 
diff --git a/src/libcamera/device_enumerator.cpp b/src/libcamera/device_enumerator.cpp
index 1fde7367cfa8..0d983032e2c6 100644
--- a/src/libcamera/device_enumerator.cpp
+++ b/src/libcamera/device_enumerator.cpp
@@ -271,4 +271,18 @@ std::shared_ptr<MediaDevice> DeviceEnumerator::search(const MediaDeviceMatch &dm
 	return nullptr;
 }
 
+std::shared_ptr<USBDevice> DeviceEnumerator::search(const USBDeviceMatch &dm)
+{
+	for (std::shared_ptr<USBDevice> &usb : usbDevices_) {
+		if (dm.match(usb.get())) {
+			LOG(DeviceEnumerator, Debug)
+				<< "Successful match for USB device "
+				<< usb->vid() << "-" << usb->pid();
+			return usb;
+		}
+	}
+
+	return nullptr;
+}
+
 } /* namespace libcamera */
-- 
2.40.1



More information about the libcamera-devel mailing list