Eu tenho um dispositivo de classe de entrada (acelerômetro) vinculado a um driver que expõe os atributos sysfs que preciso acessar do userland. Usando uma regra udev, forneci um alias que identifica inequivocamente meu dispositivo, ou seja, ll /dev/input
produz:
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
Até agora, tudo bem: posso open("/dev/input/accelerometer0")
no meu código de usuário e começar a transmitir os dados. Mas para, por exemplo, alterar a taxa de dados, preciso gravar no pollrate_ms
atributo no diretório sysfs relacionado. Um ls /sys/class/input/
rendimento:
event0 event1 event2 input0 input1 input2
Acontece que sei que pollrate_ms
reside em input0/device
, mas preciso descobrir isso programaticamente, especialmente porque atualizações futuras podem fazer com que essa numeração mude.
Eu sei que posso usar libudev
para enumerar /sys/class/input
e depois usar um loop for para explorar cada um desses diretórios até encontrar aquele que contém pollrate_ms
. Parece que isso é muito trabalhoso em comparação com a facilidade de identificar o dispositivo de forma inequívoca por meio de uma regra udev.
Estou perdendo uma maneira fácil ou devo apenas engolir?