我想在我的代码中监视HDMI电缆状态。有一个文件在电缆连接和断开时会发生变化。
$cat /sys/devices/soc0/soc/20e0000.hdmi_video/cable_state
plugin
$cat /sys/devices/soc0/soc/20e0000.hdmi_video/cable_state
plugout
我使用QFileSystemWatcher来监视此文件,但它不起作用。
QFileSystemWatcher watcher;
watcher.addPath("/sys/devices/soc0/soc/20e0000.hdmi_video/cable_state");
QObject::connect(&watcher, &QFileSystemWatcher::fileChanged,
[this]( const QString& path ) {
qDebug() << path;
QFile file(path);
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
return;
auto line = file.readLine();
qDebug() << line;
});
我认为它不起作用,因为这个文件属于sysfs,而不是一个普通的文件。有没有办法访问一个平台设备属性,并得到通知,没有文件监控,用代码?
在内核中定义cable_state属性的部分代码:
static ssize_t mxc_hdmi_show_state(struct device *dev,
struct device_attribute *attr, char *buf)
{
struct mxc_hdmi *hdmi = dev_get_drvdata(dev);
if (hdmi->cable_plugin == false)
strcpy(buf, "plugout\n");
else
strcpy(buf, "plugin\n");
return strlen(buf);
}
static DEVICE_ATTR(cable_state, S_IRUGO, mxc_hdmi_show_state, NULL);
1条答案
按热度按时间of1yzvn41#
您是正确的:sys中的文件不是普通的文件。2它们的内容是在你真正读它们的时候被内核艾德出来的。
您将不得不转而求助于轮询: