我在我的系统上使用 SocketCAN。有没有办法以编程方式而不是从命令行设置 CAN 接口比特率。一个例子会很有帮助。
谢谢你。
Qt (C++) 的一个小例子。比特率是通过 QProcess 设置的。必须停止 CAN 服务,然后才能配置比特率,然后必须启动 CAN 服务:
#include <QProcess>
#include <QString>
CO_set_bitrate(char const *can_device) //can_device for example "can0"
{
QProcess set_bitrate;
QStringList bitrate_args;
QStringList stop_args;
QStringList start_args;
char const *can_bitrate = "500000"; //Set Bitrate
stop_args.clear();
stop_args<<"stop"<<can_device<<".service";
start_args.clear();
start_args<<"start"<<can_device<<".service";
bitrate_args.clear();
bitrate_args<<"link"<<"set"<<can_device<<"up"<<"type"<<"can"<<"bitrate"<<can_bitrate;
//Stop the CAN-Service
set_bitrate.start("systemctl", stop_args, QIODevice::WriteOnly);
set_bitrate.waitForFinished(-1);
//Set Bitrate
set_bitrate.start( "ip", bitrate_args, QIODevice::WriteOnly); //Starts execution of command
set_bitrate.waitForFinished(-1);
//Restart CAN-Service
set_bitrate.start("systemctl", start_args, QIODevice::WriteOnly);
set_bitrate.waitForFinished(-1);
}
对的,这是可能的。使用 NETLINK 套接字,它是什么ip
用。
不幸的是,我不知道任何可用的简单示例,但您可以查看ip
.
或者,您可以使用libsocketcan,它是用于 CAN 的 netlink 套接字的一个很好的包装器。