mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-17 09:25:07 +03:00
libcamera: camera_sensor: Generate a sensor ID
The ID is generated from information in the firmware description of the sensor if available or from module and model information if the sensor is virtual (for example VIMC). Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
parent
1869d1b312
commit
f23e6127ad
2 changed files with 34 additions and 0 deletions
|
@ -67,11 +67,14 @@ protected:
|
|||
std::string logPrefix() const override;
|
||||
|
||||
private:
|
||||
int generateId();
|
||||
|
||||
const MediaEntity *entity_;
|
||||
std::unique_ptr<V4L2Subdevice> subdev_;
|
||||
unsigned int pad_;
|
||||
|
||||
std::string model_;
|
||||
std::string id_;
|
||||
|
||||
V4L2Subdevice::Formats formats_;
|
||||
Size resolution_;
|
||||
|
|
|
@ -13,10 +13,12 @@
|
|||
#include <limits.h>
|
||||
#include <math.h>
|
||||
#include <regex>
|
||||
#include <string.h>
|
||||
|
||||
#include <libcamera/property_ids.h>
|
||||
|
||||
#include "libcamera/internal/formats.h"
|
||||
#include "libcamera/internal/sysfs.h"
|
||||
#include "libcamera/internal/utils.h"
|
||||
|
||||
/**
|
||||
|
@ -204,6 +206,11 @@ int CameraSensor::init()
|
|||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
/* Generate a unique ID for the sensor. */
|
||||
ret = generateId();
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* Retrieve and store the camera sensor properties. */
|
||||
const ControlInfoMap &controls = subdev_->controls();
|
||||
int32_t propertyValue;
|
||||
|
@ -541,4 +548,28 @@ std::string CameraSensor::logPrefix() const
|
|||
return "'" + entity_->name() + "'";
|
||||
}
|
||||
|
||||
int CameraSensor::generateId()
|
||||
{
|
||||
const std::string devPath = subdev_->devicePath();
|
||||
|
||||
/* Try to get ID from firmware description. */
|
||||
id_ = sysfs::firmwareNodePath(devPath);
|
||||
if (!id_.empty())
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* Virtual sensors not described in firmware
|
||||
*
|
||||
* Verify it's a platform device and construct ID from the deive path
|
||||
* and model of sensor.
|
||||
*/
|
||||
if (devPath.find("/sys/devices/platform/", 0) == 0) {
|
||||
id_ = devPath.substr(strlen("/sys/devices/")) + " " + model();
|
||||
return 0;
|
||||
}
|
||||
|
||||
LOG(CameraSensor, Error) << "Can't generate sensor ID";
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
} /* namespace libcamera */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue