我在系统上使用socketcan。有没有办法以编程方式设置CAN接口比特率,而不是从命令行中设置。一个例子将有用。
谢谢。
是的。使用NetLink插座,这是ip
使用的。
不幸的是,我不知道有任何可行的示例,但是您可以检查ip
的源代码。
另外,您可以使用libocketcan,这是can Netlink插座的不错的包装器。
QT(C )的一个小示例。通过QPROCESS设置比特率。必须停止使用罐服务,然后可以配置比特率,而can-service必须启动agein:
#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);
}