Um 'arquivo de dispositivo' é um nó especial no disco que se vincula ao código dentro do kernel. Este código é o driver do dispositivo. Quando o driver do dispositivo é carregado, você configura funções específicas a serem chamadas quando certas chamadas do sistema (abrir / ler / escrever / fechar / etc ...) são chamadas no 'arquivo'.
Assim, quando você chama 'ler', ele chama uma função específica no código do driver de dispositivo. Este código pode fazer praticamente qualquer coisa no modo kernel; nesse caso, faz sentido fazer uma leitura de hardware do joystick, converter os valores de tensão em números e deixá-lo ler () no arquivo do dispositivo.
Apenas adivinhando aleatoriamente, tenho certeza que os valores enviados são apenas leituras de posição do joystick X e Y (e Z?) e algumas configurações de botões. Ler como texto não funciona, você precisa de algo que faça spams hexadecimais e / ou numéricos. Conecte o joystick, leia os valores e mova o joystick ao redor dos botões e veja como os valores mudam.
O código-fonte pode ter comentários indicando o que os valores significam, embora o código real seja provavelmente ilegível para você (a menos que você saiba o que o hardware registra e o material do protocolo USB significa).