ユーザーランドからアクセスする必要のある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")
して、データのストリーミングを開始できます。ただし、たとえば、データレートを変更するには、関連するsysfsディレクトリの_pollrate_ms
_属性に書き込む必要があります。 _ls /sys/class/input/
_は次のようになります。
_event0 event1 event2 input0 input1 input2
_
_pollrate_ms
_が_input0/device
_にあることを偶然知っていますが、特に将来の更新によりその番号が変更される可能性があるため、これをプログラムで把握する必要があります。
libudev
を使用して_/sys/class/input
_を列挙し、forループを使用して_pollrate_ms
_を含むディレクトリが見つかるまでこれらの各ディレクトリを探索できることを知っています。 udevルールを介してデバイスを明確に識別することがいかに簡単であったかと比較すると、それは多くの作業のように思えます。
私は簡単な方法で逃しているのですか、それとも私はそれを吸うべきですか?
プログラムでは、最初にstat("/dev/input/accelerometer0", &stat_struct)
して、メジャーデバイス番号とマイナーデバイス番号を見つけることができます。
次に、libudev
のudev_device_new_from_devnum()
を使用して加速度計の_struct udev_device
_を取得し、次にudev_device_get_syspath()
を使用してsysfsディレクトリのパス名を取得します。