summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-09-09 13:26:37 +0300
committerLaurent Pinchart <laurent.pinchart@ideasonboard.com>2019-09-13 20:13:16 +0300
commitb3cdccbff9fb8e4da6eab06f2fe3e1f02aa29939 (patch)
tree32aa51f3254ccf6c43a73fefaa92df4a2866e9f1 /src
parentedd60994e813723c8e4fb362ce1d5f5a4675a565 (diff)
libcamera: device_enumerator: Move lookupDeviceNode() to child classes
The lookupDeviceNode() method is declared as pure virtual in the base DeviceEnumerator class, but is only called by derived classes. Move it to the DeviceEnumeratorSysfs and DeviceEnumeratorUdev. This allows changing the udev version to take a dev_t instead of separate major/minor, as that's what both the caller and the callee end up using. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Kieran Bingham <kieran.bingham@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Diffstat (limited to 'src')
-rw-r--r--src/libcamera/device_enumerator.cpp13
-rw-r--r--src/libcamera/device_enumerator_sysfs.cpp11
-rw-r--r--src/libcamera/device_enumerator_udev.cpp19
-rw-r--r--src/libcamera/include/device_enumerator.h2
-rw-r--r--src/libcamera/include/device_enumerator_sysfs.h2
-rw-r--r--src/libcamera/include/device_enumerator_udev.h2
6 files changed, 25 insertions, 24 deletions
diff --git a/src/libcamera/device_enumerator.cpp b/src/libcamera/device_enumerator.cpp
index e76438af..0b596bce 100644
--- a/src/libcamera/device_enumerator.cpp
+++ b/src/libcamera/device_enumerator.cpp
@@ -306,17 +306,4 @@ std::shared_ptr<MediaDevice> DeviceEnumerator::search(const DeviceMatch &dm)
return nullptr;
}
-/**
- * \fn DeviceEnumerator::lookupDeviceNode(int major, int minor)
- * \brief Lookup device node path from device number
- * \param[in] major The device major number
- * \param[in] minor The device minor number
- *
- * Translate a device number given as \a major and \a minor to a device node
- * path.
- *
- * \return the device node path on success, or an empty string if the lookup
- * fails
- */
-
} /* namespace libcamera */
diff --git a/src/libcamera/device_enumerator_sysfs.cpp b/src/libcamera/device_enumerator_sysfs.cpp
index 78a7da8d..ad26affb 100644
--- a/src/libcamera/device_enumerator_sysfs.cpp
+++ b/src/libcamera/device_enumerator_sysfs.cpp
@@ -112,6 +112,17 @@ int DeviceEnumeratorSysfs::populateMediaDevice(const std::shared_ptr<MediaDevice
return 0;
}
+/**
+ * \brief Lookup device node path from device number
+ * \param[in] major The device major number
+ * \param[in] minor The device minor number
+ *
+ * Translate a device number given as \a major and \a minor to a device node
+ * path.
+ *
+ * \return The device node path on success, or an empty string if the lookup
+ * fails
+ */
std::string DeviceEnumeratorSysfs::lookupDeviceNode(int major, int minor)
{
std::string deviceNode;
diff --git a/src/libcamera/device_enumerator_udev.cpp b/src/libcamera/device_enumerator_udev.cpp
index 40853e77..e0c646c9 100644
--- a/src/libcamera/device_enumerator_udev.cpp
+++ b/src/libcamera/device_enumerator_udev.cpp
@@ -178,10 +178,9 @@ int DeviceEnumeratorUdev::populateMediaDevice(const std::shared_ptr<MediaDevice>
if (entity->deviceMajor() == 0 && entity->deviceMinor() == 0)
continue;
- std::string deviceNode = lookupDeviceNode(entity->deviceMajor(),
- entity->deviceMinor());
dev_t devnum = makedev(entity->deviceMajor(),
entity->deviceMinor());
+ std::string deviceNode = lookupDeviceNode(devnum);
/* Take device from orphan list first, if it is in the list. */
if (std::find(orphans_.begin(), orphans_.end(), devnum) != orphans_.end()) {
@@ -205,14 +204,21 @@ int DeviceEnumeratorUdev::populateMediaDevice(const std::shared_ptr<MediaDevice>
return pendingNodes;
}
-std::string DeviceEnumeratorUdev::lookupDeviceNode(int major, int minor)
+/**
+ * \brief Lookup device node path from device number
+ * \param[in] devnum The device number
+ *
+ * Translate a device number given as \a devnum to a device node path.
+ *
+ * \return The device node path on success, or an empty string if the lookup
+ * fails
+ */
+std::string DeviceEnumeratorUdev::lookupDeviceNode(dev_t devnum)
{
struct udev_device *device;
const char *name;
- dev_t devnum;
std::string deviceNode = std::string();
- devnum = makedev(major, minor);
device = udev_device_new_from_devnum(udev_, 'c', devnum);
if (!device)
return std::string();
@@ -246,8 +252,7 @@ int DeviceEnumeratorUdev::addV4L2Device(dev_t devnum)
return 0;
}
- std::string deviceNode = lookupDeviceNode(entity->deviceMajor(),
- entity->deviceMinor());
+ std::string deviceNode = lookupDeviceNode(devnum);
if (deviceNode.empty())
return -EINVAL;
diff --git a/src/libcamera/include/device_enumerator.h b/src/libcamera/include/device_enumerator.h
index c5d26f1a..770f4277 100644
--- a/src/libcamera/include/device_enumerator.h
+++ b/src/libcamera/include/device_enumerator.h
@@ -50,8 +50,6 @@ protected:
private:
std::vector<std::shared_ptr<MediaDevice>> devices_;
-
- virtual std::string lookupDeviceNode(int major, int minor) = 0;
};
} /* namespace libcamera */
diff --git a/src/libcamera/include/device_enumerator_sysfs.h b/src/libcamera/include/device_enumerator_sysfs.h
index 242b22b2..9063f6a7 100644
--- a/src/libcamera/include/device_enumerator_sysfs.h
+++ b/src/libcamera/include/device_enumerator_sysfs.h
@@ -24,7 +24,7 @@ public:
private:
int populateMediaDevice(const std::shared_ptr<MediaDevice> &media);
- std::string lookupDeviceNode(int major, int minor) final;
+ std::string lookupDeviceNode(int major, int minor);
};
} /* namespace libcamera */
diff --git a/src/libcamera/include/device_enumerator_udev.h b/src/libcamera/include/device_enumerator_udev.h
index 5bdcdea6..fb7cac80 100644
--- a/src/libcamera/include/device_enumerator_udev.h
+++ b/src/libcamera/include/device_enumerator_udev.h
@@ -47,7 +47,7 @@ private:
int addUdevDevice(struct udev_device *dev);
int populateMediaDevice(const std::shared_ptr<MediaDevice> &media);
- std::string lookupDeviceNode(int major, int minor) final;
+ std::string lookupDeviceNode(dev_t devnum);
int addV4L2Device(dev_t devnum);
void udevNotify(EventNotifier *notifier);