Qt读写sysfs

本文介绍Qt读写sysfs。

在嵌入式Linux系统上开发Qt应用程序,经常会涉及到外设的控制,比如GPIO,PWM的控制,Linux环境下可以像操作文件一样操作它们,这通常会涉及到sysfs的读写。本文以读写GPIO为例,简要介绍下如何使用Qt读写sysfs。

1.配置

Linux命令行指令(这里导出gpio5):

echo 5 > /sys/class/gpio/export

在Qt应用程序中,可以启动一个进程来执行上述指令,参考代码如下:

void exportIo(int pinNumber) 
{
    QProcess process;

    process.start("/bin/sh", QStringList() << "./export_io.sh" << QString::number(pinNumber));
    process.waitForFinished();

    process.close();
}

void unexportIo(int pinNumber) 
{
    QProcess process;

    process.start("/bin/sh", QStringList() << "./unexport_io.sh" << QString::number(pinNumber));
    process.waitForFinished();

    process.close();
}

对应脚本:

export_io.sh:

#!/bin/sh
echo $1 > /sys/class/gpio/export

unexport_io.sh:

#!/bin/sh
echo $1 > /sys/class/gpio/unexport

2.写sysfs

Linux命令行指令(这里对gpio5写1):

echo 1 > /sys/class/gpio/gpio5/value

参考代码如下:

void writeIo(int pinNumber, int value)
{
    QProcess process;

    process.start("/bin/sh", QStringList() << "./write_io.sh" << QString::number(pinNumber) << QString::number(value));
    process.waitForFinished();

    process.close();
}

对应脚本:

write_io.sh:

#!/bin/sh
echo $2 > /sys/class/gpio/gpio$1/value

3.读sysfs

Linux命令行指令:

cat /sys/class/gpio/gpio5/value

参考代码如下:

int readIo(int pinNumber)
{
    QProcess process;
    int value = 0;

    process.start("/bin/sh", QStringList() << "./read_io.sh" << QString::number(pinNumber));
    process.waitForFinished();

    value = process.readAll().trimmed().toInt();

    process.close();

    return value;
}

对应脚本:

read_io.sh:

#!/bin/sh

cat /sys/class/gpio/gpio$1/value

这里是阻塞的方式执行的。如果读时间较长,也可以绑定finish信号,参考代码如下:

QProcess *process = new QProcess(this);  
connect(process, &QProcess::finished, this, &MainWindow::read);

void MainWindow::read(int exitCode, QProcess::ExitStatus exitStatus)
{

}

注意

不同的嵌入式Linux环境下外设的sysfs的路径和操作方法可能不一样,需根据实际情况修改。

总结,本文介绍了Qt读写sysfs。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值