Quero criar um programa C que aceite entrada de um joypad ( /dev/input/js0
), processe-a e depois envie-a para um arquivo de dispositivo falso (caractereoubloco) rotulado como um teclado (ah, e o queéo arquivo de dispositivo para um teclado?. Gostaria de saber se é possível fazer isso e, em caso afirmativo, como.
Responder1
Observe atentamente um trecho de um ls -al /dev
comando em meu sistema:
brw-rw---- 1 root floppy 8, 0 Jun 7 19:55 sda
brw-rw---- 1 root floppy 8, 1 Jun 7 19:55 sda1
brw-rw---- 1 root floppy 8, 2 Jun 7 19:55 sda2
brw-rw---- 1 root floppy 8, 3 Jun 7 19:55 sda3
brw-rw---- 1 root floppy 8, 5 Jun 7 19:56 sda5
brw-rw---- 1 root floppy 8, 6 Jun 7 19:56 sda6
brw-rw---- 1 root floppy 8, 7 Jun 7 19:56 sda7
brw-rw---- 1 root floppy 8, 8 Jun 7 19:57 sda8
brw-rw---- 1 root floppy 8, 16 Jun 7 19:55 sdb
brw-rw---- 1 root floppy 8, 32 Jun 7 19:55 sdc
brw-rw---- 1 root floppy 8, 33 Jun 7 19:55 sdc1
brw-rw---- 1 root floppy 8, 34 Jun 11 10:39 sdc2
brw-rw---- 1 root floppy 8, 35 Jun 7 19:56 sdc3
Os dois números após o ID do grupo, mas antes da data, são os números maiores e menores do arquivo do dispositivo. Este é basicamente o “tipo” de dispositivo que é. 8 neste caso é uma unidade de disco SCSI (ou SCSI emulado).
http://lxr.linux.no/linux/Documentation/devices.txté uma lista um tanto não tão recente de todos os números maiores e menores. Não tenho certeza da localização oficial da versão mais recente da lista.
De qualquer forma, esses arquivos são criados com o mknod
comando ( mknod [OPTION]... NAME TYPE [MAJOR MINOR]
, alguns tipos são b
para bloco, c
para caractere). Há também uma mknod()
chamada de sistema. Não conheço totalmente as implicações se você criar outro arquivo com o mesmo maior/menor que um dispositivo existente.
uinput
conforme descrito nos comentários é provavelmente o que você está procurando, embora no hardware do PC exista um /dev/psaux
que lê/grava diretamente na porta PS/2 se o seu sistema tiver idade suficiente para ter uma. Não sabia nem por onde começar com teclados USB...
Se você deseja apenas um arquivo de dispositivo falso e não se importa com o que acontece com os dados que você envia para ele, sempre há arquivos /dev/zero
. Além disso, os links simbólicos podem ser uma solução realmente simples nesse caso.