[libcamera-devel,RFC,7/9] libcamera: device_enumerator: Search for USB devices
diff mbox series

Message ID 20230808125228.29043-8-jacopo.mondi@ideasonboard.com
State New
Headers show
Series
  • libcamera: Generalize device match and support USB devices
Related show

Commit Message

Jacopo Mondi Aug. 8, 2023, 12:52 p.m. UTC
Add support for searching a USBDevice by providing a USBDeviceMatch
to the device enumerator.

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

Patch
diff mbox series

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 */