ユーザー領域からアクセスする必要があるsysfsプロパティを公開するドライバにバインドされた入力クラスデバイス(加速度計)があります。 udevルールを使用して自分のデバイスを明確に識別するエイリアスを提供しますll /dev/input
。
lrwxrwxrwx 1 root root 6 May 18 13:47 accelerometer0 -> event0
drwxr-xr-x 2 root root 60 May 18 13:47 by-path
crw-rw---- 1 root input 13, 64 May 18 13:47 event0
crw-rw---- 1 root input 13, 65 May 18 13:47 event1
crw-rw---- 1 root input 13, 66 May 18 13:47 event2
これまではとても素晴らしかったです。open("/dev/input/accelerometer0")
ユーザーエリアコードからデータ転送を開始できます。ただし、たとえばデータレートを変更するには、pollrate_ms
関連するsysfsディレクトリのプロパティに書き込む必要があります。生産するls /sys/class/input/
:
event0 event1 event2 input0 input1 input2
pollrate_ms
にあることはわかっていますが、input0/device
特に今後の更新によって番号付けが変更される可能性があるため、プログラムでこの問題を修正する必要があります。
libudev
列挙型を使用して/sys/class/input
からforループを使用して、含まれているディレクトリが見つかるまで各ディレクトリを参照できることを知っていますpollrate_ms
。
私は簡単な方法を見逃しているのですか、それとも受け入れるべきですか?
ベストアンサー1
プログラミングを行うと、まずstat("/dev/input/accelerometer0", &stat_struct)
メジャーとマイナーのデバイス番号を見つけることができます。
次にlibudev
s を使用して加速度計の a をudev_device_new_from_devnum()
取得し、その sysfs ディレクトリのパス名を取得します。struct udev_device
udev_device_get_syspath()