Estou trabalhando com um dispositivo incorporado que possui um monitor com tela sensível ao toque, mas até esse momento não há teclado. Há um console acessível por meio de um conector que não é acessível ao usuário. O dispositivo também tem uma porta USB à qual eu conectei um scanner de código de barras que enumera como um dispositivo de classe CDC / ACM, criando / dev / ttyACM0. No console, posso 'cat ttyACM0', digitalizar um código de barras e ver o resultado impresso no console. É claro que o código real da aplicação é um pouco mais complexo, mas o essencial é o mesmo: abra / dev / ttyACM0, leia-o, passe os dados para a interface do usuário.
Agora eu tenho um leitor de cartão magnético que enumera com bastante sucesso como um teclado USB HID. Se estiver conectado ao Windows, posso abrir o Bloco de Notas, passar um cartão e ver os dados aparecerem como se eu tivesse digitado no meu teclado. Até este ponto, porém, não consegui encontrar uma maneira tão simples como o meu scanner de código de barras para ver os dados do teclado.
Eu vejo / dev / input / event1 aparecer quando o leitor de cartão enumera. Se eu cat-lo (na verdade od -x ele), vejo os eventos que eu esperava e poderia escrever um intérprete. O código drivers / tty / vt / keyboard.c também vê esses eventos desde que eu pude escrever um módulo que fez um register_keyboard_notifier (). Meu retorno de chamada é invocado e recebo mensagens KBD_KEYSYM nas quais as teclas SHIFT são manipuladas e os scancodes foram interpretados e transformados em caracteres ASCII. Eu poderia melhorar ainda mais meu módulo para criar minha própria entrada "/ dev / keyboard" etc. Mas eu continuo sentindo que eu não deveria ter que fazer nada disso e que há algo simples e direto que eu poderia fazer no meu código veja esses pressionamentos de tecla ASCII da mesma maneira que o meu código de usuário abre e depois lê / dev / ttyACM0 para ver a saída do scanner de código de barras.
ATUALIZAÇÃO: "O tempo e a maré não esperam por ninguém", nem o meu gerente de programa. Essencialmente esta mesma pergunta foi feita por outros em vários outros fóruns sem resposta, então talvez não haja nenhum? De qualquer forma, eu simplesmente fui em frente e escrevi um driver, então agora há um / dev / magcard que eu posso ler muito bem.