4

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 を使用して対応する属性を読み取るにはどうすればよいですか? または、現在のビットレートを読み取る別の方法はありますか?

4

2 に答える 2

4

今のところ、 へのシステム コールの出力を解釈することにしましたip -det link show can0 | grep bitrate | awk '{print $2}'。これは見苦しいですが、機能します。

確かにもっとエレガントなソリューションはありますか?

于 2016-09-06T08:14:47.093 に答える
1

can_get_bittiming()を使用して、設定されたビットレートを取得できます。

于 2019-12-05T13:39:42.070 に答える