libcamera: sysfs: Add helper to lookup sysfs path of a character device
Add a helper function to lookup the sysfs path of a character device. Store the function in a new libcamera::sysfs namespace as there is not class to host it. Suggested-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Signed-off-by: Niklas Söderlund <niklas.soderlund@ragnatech.se> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Jacopo Mondi <jacopo@jmondi.org>
This commit is contained in:
@@ -25,6 +25,7 @@ libcamera_internal_headers = files([
|
||||
'process.h',
|
||||
'pub_key.h',
|
||||
'semaphore.h',
|
||||
'sysfs.h',
|
||||
'thread.h',
|
||||
'utils.h',
|
||||
'v4l2_controls.h',
|
||||
|
||||
22
include/libcamera/internal/sysfs.h
Normal file
22
include/libcamera/internal/sysfs.h
Normal file
@@ -0,0 +1,22 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
/*
|
||||
* Copyright (C) 2020, Google Inc.
|
||||
*
|
||||
* sysfs.h - Miscellaneous utility functions to access sysfs
|
||||
*/
|
||||
#ifndef __LIBCAMERA_INTERNAL_SYSFS_H__
|
||||
#define __LIBCAMERA_INTERNAL_SYSFS_H__
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace libcamera {
|
||||
|
||||
namespace sysfs {
|
||||
|
||||
std::string charDevPath(const std::string &deviceNode);
|
||||
|
||||
} /* namespace sysfs */
|
||||
|
||||
} /* namespace libcamera */
|
||||
|
||||
#endif /* __LIBCAMERA_INTERNAL_SYSFS_H__ */
|
||||
@@ -41,6 +41,7 @@ libcamera_sources = files([
|
||||
'semaphore.cpp',
|
||||
'signal.cpp',
|
||||
'stream.cpp',
|
||||
'sysfs.cpp',
|
||||
'thread.cpp',
|
||||
'timer.cpp',
|
||||
'utils.cpp',
|
||||
|
||||
52
src/libcamera/sysfs.cpp
Normal file
52
src/libcamera/sysfs.cpp
Normal file
@@ -0,0 +1,52 @@
|
||||
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
||||
/*
|
||||
* Copyright (C) 2020, Google Inc.
|
||||
*
|
||||
* sysfs.cpp - Miscellaneous utility functions to access sysfs
|
||||
*/
|
||||
|
||||
#include "libcamera/internal/sysfs.h"
|
||||
|
||||
#include <sstream>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/sysmacros.h>
|
||||
|
||||
#include "libcamera/internal/log.h"
|
||||
|
||||
/**
|
||||
* \file sysfs.h
|
||||
* \brief Miscellaneous utility functions to access sysfs
|
||||
*/
|
||||
|
||||
namespace libcamera {
|
||||
|
||||
LOG_DEFINE_CATEGORY(SysFs);
|
||||
|
||||
namespace sysfs {
|
||||
|
||||
/**
|
||||
* \brief Retrieve the sysfs path for a character device
|
||||
* \param[in] deviceNode Path to character device node
|
||||
* \return The sysfs path on success or an empty string on failure
|
||||
*/
|
||||
std::string charDevPath(const std::string &deviceNode)
|
||||
{
|
||||
struct stat st;
|
||||
int ret = stat(deviceNode.c_str(), &st);
|
||||
if (ret < 0) {
|
||||
ret = -errno;
|
||||
LOG(SysFs, Error)
|
||||
<< "Unable to stat '" << deviceNode << "': "
|
||||
<< strerror(-ret);
|
||||
return {};
|
||||
}
|
||||
|
||||
std::ostringstream dev("/sys/dev/char/", std::ios_base::ate);
|
||||
dev << major(st.st_rdev) << ":" << minor(st.st_rdev);
|
||||
|
||||
return dev.str();
|
||||
}
|
||||
|
||||
} /* namespace sysfs */
|
||||
|
||||
} /* namespace libcamera */
|
||||
Reference in New Issue
Block a user