Como atribuir nomes a devices HidRaw (parte 3)

Este artigo conclui o tema sobre a atribuição de nomes a devices, referidos na parte 1 e parte 2, quando os fabricantes não atribuiem um número de série e 2 ou mais dispositivos parecem-nos iguais e impossíveis de identificar…
Os dispositivos HidRaw permitem aceder a interfaces USB e bluetooth sem alteração de dados ou protocolo. Significa em inglês original - Raw Access to USB and Bluetooth Human Interface Devices.

Por vezes os nossos projectos necessitam de chamar estes devices para comunicarem… dou como exemplo a utilização do controlo de PTT pelas placas de som CM108 e CM119, descrito no artigo packet/APRS iGate, BBS, node e DX cluster com Raspberry Pi (parte 2), onde o direwolf usa o pino 13 do GPIO para pôr o rádio em transmissão, através do comando "PTT CM108 3 /dev/hidraw3".

Como consegue imaginar, ao reiniciar o sistema operativo, estes devices mudam a ordem à medida que o kernel as lê e lhes atribui um número… este é o problema que aqui resolvo, a atribuição de um nome ou symlink a um device hidraw para que, independentemente da ordem atribuída pelo kernel, saibamos sempre como comunicar com ele!
Note, este procedimento só é válido (à semelhança dos procedimentos descritos nos artigos anteriores) se e só se o nosso device USB se encontrar sempre ligado à mesma porta USB, seja directamente à board ou através de um HUB USB!

Identificar o device

Antes de ligar o seu dispositivo USB, execute o comando,

e obtém, por exemplo

crw------- 1 root root 243, 3 Mar 14 22:44 /dev/hidraw0
crw------- 1 root root 243, 4 Mar 15 09:25 /dev/hidraw1
crw-rw---- 1 root audio 243, 5 Mar 14 22:44 /dev/hidraw2

Agora ligue o seu dispositivo e execute o comando novamente… apareceu um novo device. Este é o nosso device, aquele que vamos configurar,

crw------- 1 root root 243, 3 Mar 14 22:44 /dev/hidraw0
crw------- 1 root root 243, 4 Mar 15 09:25 /dev/hidraw1
crw-rw---- 1 root audio 243, 5 Mar 14 22:44 /dev/hidraw2
crw-rw---- 1 root audio 243, 5 Mar 14 22:44 /dev/hidraw3

Agora que sabemos que ao nosso device lhe foi atribuido o número 3, como /dev/hidraw3, fazemos

de modo a obtermos toda a informação deste device,

De onde retiramos algumas das variáveis que nos permitem agora identificar o nosso dispositivo, uma vez mais, sempre que este se encontre ligado à mesma porta USB.

Criar o nome ou symlink

Escrevemos ACTION=="add", pois só queremos adicionar este dispositivo quando ele é ligado.
Apenas queremos identificar dispositivos hidraw, então escrevemos SUBSYSTEM=="hidraw", ver linha 9.
Se tiver vários dispositivos iguais repare na linha 32 que identifica pelo kernel a porta USB a que este dispositivo está ligado como, KERNELS=="1-1.2.1.1"
Comum aos nossos vários dispositivos, se existirem 2 ou mais, é o id do fabricante e o id do producto, respectivamente verificados nas linhas 38, ATTRS{idVendor}=="0d8c" e 57, ATTRS{idProduct}=="0012"
Agora é só atribuir-lhe um nome alternativo, com a instrução SYMLINK+="", que no meu caso se trata de uma placa de som CM108 que pretendo, como disse, controlar o PTT através do GPIO…

Construímos a linha a colocar no nosso ficheiro udev rules descrito nos artigos anteriores em /etc/udev/rules.d/99-hamlib.rules, na continuação das instruções que já escrevi…

Na janela terminal escreva, como sudo ou root,

Avance até à última linha, substitua as variáveis ao seu dispositivo e escreva, neste meu exemplo, e para cada uma das suas placas de som onde pretende controlar o PTT,

ACTION=="add", SUBSYSTEM=="hidraw", KERNELS=="1-1.2.1.1", ATTRS{idVendor}=="0d8c", ATTRS{idProduct}=="0012", SYMLINK+="hidHFpacket"

Cada vez que escreve no ficheiro rules aplique as configurações, com sudo ou root, o comando,

Agora, no direwolf o comando passará a ser,

PTT CM108 3 /dev/hidHFpacket

O nosso dispositivo é agora reconhecido pelo nome "hidHFpacket". Verifique, escrevendo no terminal,

crw------- 1 root root 243, 3 Mar 14 22:44 /dev/hidraw0
crw------- 1 root root 243, 4 Mar 15 09:25 /dev/hidraw1
crw-rw---- 1 root audio 243, 5 Mar 14 22:44 /dev/hidraw2
crw-rw---- 1 root audio 243, 5 Mar 14 22:44 /dev/hidraw3
lrwxrwxrwx 1 root root       7 Mar 14 22:44 /dev/hidHFpacket -> hidraw3

Quer ver agora todos os symlinks criados nestes artigos? Substitua as palavras de acordo com o nome que atribuiu e escreva,

Referências:
https://docs.kernel.org/hid/hidraw.html
https://github.com/nasa/IDF/wiki/Differentiating-Identical-Devices
http://reactivated.net/writing_udev_rules.html
https://github.com/nasa/IDF/wiki/Device-Permissions