获取CAN比特率

问题描述 投票:0回答:3

我想用C++读取我的socketcan套接字当前配置的CAN比特率。

我可以通过

ip -det link show can0
看到比特率:

9: can0: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP mode DEFAULT group default qlen 10
    link/can  promiscuity 0 
    can state ERROR-ACTIVE restart-ms 100 
    bitrate 1000000 sample-point 0.750 
    tq 125 prop-seg 2 phase-seg1 3 phase-seg2 2 sjw 1
    pcan_usb: tseg1 1..16 tseg2 1..8 sjw 1..4 brp 1..64 brp-inc 1
    clock 8000000

比特率是通过

/etc/network/interfaces
设置的,但用户可以手动更改它。

libsocketcan 好像只支持设置码率,不支持读取码率。

产生上述输出

代码
iproute2使用rtnetlink。

如何使用libnetlink读取相应的属性?或者还有其他读取当前比特率的方法吗?

c++ c++11 can-bus netlink socketcan
3个回答
4
投票

现在,我解释了系统调用的输出到

ip -det link show can0 | grep bitrate | awk '{print $2}'
,这很丑陋但有效。

肯定有更优雅的解决方案吗?


1
投票

您可以使用 can_get_bittiming() 来获取设置的比特率。


0
投票

对于到达这里的任何人,

ip
命令支持带有
-j
-json
选项参数的json输出。在某些情况下,它应该可以更轻松地解析系统调用返回的信息。在我的带有虚拟罐的计算机上,这就是返回的内容:

ip -det -j link show vcan0
[{"ifindex":3,"ifname":"vcan0","flags":["NOARP","UP","LOWER_UP"],"mtu":72,"qdisc":"noqueue","operstate":"UNKNOWN","linkmode":"DEFAULT","group":"default","txqlen":1000,"link_type":"can","promiscuity":0,"min_mtu":0,"max_mtu":0,"linkinfo":{"info_kind":"vcan"},"num_tx_queues":1,"num_rx_queues":1,"gso_max_size":65536,"gso_max_segs":65535}]
© www.soinside.com 2019 - 2024. All rights reserved.