- Rotary Phone Dial Linux Kernel Driver é um módulo de kernel que converte telefones antigos de disco em dispositivos de entrada evdev no Linux
- O projeto também fornece um driver de exemplo simples e um ambiente de desenvolvimento baseado em máquina virtual, sendo muito útil para fins educacionais e de teste
- É possível desenvolver e testar mesmo sem hardware real, com suporte a simulação de GPIO
- Suporta praticamente qualquer configuração de mapeamento de teclas e também diferentes esquemas de codificação por pulsos de vários países
- Como é um módulo de kernel padrão, pode ser facilmente expandido e integrado a sistemas Linux
Visão geral do Rotary Phone Dial Linux Kernel Driver
- Este projeto é um módulo de kernel que transforma o disco de um telefone rotativo antigo em um dispositivo de entrada padrão do Linux (por exemplo, um teclado numérico)
- Pode valer a pena para pessoas como:
- quem quer inserir números por meio de uma discagem lenta
- usuários que querem trazer um telefone analógico antigo para a era digital
- educadores que precisam de um driver de kernel de exemplo e de um ambiente virtual de desenvolvimento/teste sem hardware real
- outros experimentos criativos
Como fazer a ligação do circuito
- O disco rotativo é basicamente composto por dois interruptores: BUSY (estado aberto) e PULSE (estado fechado)
- Esses dois interruptores são conectados aos pinos GPIO de um sistema com Linux embarcado, junto com resistores de pull-up
- Ao girar o disco, o interruptor BUSY muda para o estado fechado, e enquanto o disco retorna à posição original, o interruptor PULSE repete aberturas e fechamentos
- Como a conexão e o pinout variam conforme o país ou fabricante, recomenda-se testar a resposta dos interruptores com um multímetro
- O duty cycle do sinal de pulso (tempo aberto/fechado) e o método de decodificação também variam conforme o país e o fabricante
- Ex.: na Alemanha, são 62 ms abertos e 38 ms fechados por pulso
- Em geral, de um a nove pulsos correspondem a 1–9, e dez pulsos correspondem a 0 (há exceções, como a Suécia)
- Em caso de dúvida, é preciso verificar o rótulo do disco ou fazer testes
Como usar
- Este driver é um módulo de kernel externo padrão (out-of-tree kernel module)
- Em resumo, os passos são:
- adicionar o nó
rotary-dial à device tree e mapear pulse-gpios e busy-gpios para os pinos reais
- se necessário, alterar o mapa de keycodes com a propriedade
linux,keycodes
- definir o caminho do código-fonte do kernel (
KDIR) como variável de ambiente, depois compilar, instalar e carregar o módulo
- Quando o módulo de kernel é carregado, um dispositivo de entrada é criado e passa a funcionar como teclado numérico
- É possível monitorar as propriedades do dispositivo de entrada e os eventos do disco com a ferramenta evemu
Máquina virtual (VM) para desenvolvimento e testes
- O projeto fornece um ambiente de máquina virtual para desenvolvimento do driver e testes end-to-end
- Essa VM aplica na devicetree GPIOs busy/pulse simulados com gpio-sim
- É possível controlar os GPIOs no espaço de usuário para implementar cenários de teste
- A VM pode ser compilada e executada após ativar o gerenciador de pacotes Nix e o recurso flakes
- Dentro da VM, o login já entra diretamente em um shell de desenvolvimento
- Depois de compilar o driver, também há suporte para carregar/descarregar o módulo
- Com a ferramenta
rotary_dialer, é possível simular uma quantidade específica de pulsos para testar a entrada do disco
- (por exemplo, em um ambiente com codificação sueca, 3 pulsos são reconhecidos como o número 2)
Testes
- O driver também fornece uma suíte de testes abrangente
- No ambiente da VM, é possível executar casos automatizados com
make test
- Dá para verificar o funcionamento do dispositivo de entrada, confirmar a emissão correta de keycodes ao discar números e testar situações como tratamento de entrada inválida
Inclusão no mainline
- O desenvolvedor vê o futuro do disco rotativo de forma positiva, mas comenta de forma bem-humorada que Linus Torvalds talvez não concorde
1 comentários
Comentários no Hacker News