1 pontos por GN⁺ 2025-05-25 | 1 comentários | Compartilhar no WhatsApp
  • 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

 
GN⁺ 2025-05-25
Comentários no Hacker News
  • Compartilha a lembrança de ter construído manualmente um discador telefônico rotativo com uma calculadora HP41C no fim dos anos 70, conectando um relé reed sem contato a um buzzer piezoelétrico e à linha telefônica, e usando “synthetic programming” (comandos não documentados) para gerar bipes curtos que completavam os pulsos de discagem; usava um método em que, ao digitar o nome (com suporte a alfabeto), o número era encontrado e discado imediatamente. Também relembra que, quando conheceu Keith Jarrett no trabalho há 10 anos, as pessoas frequentemente confundiam se ele era o músico, e que ele mesmo perguntou se era o autor do HP-41C Synthetic Programming Manual, ao que Jarrett reagiu com surpresa e alegria. Anexa links relacionados com informações do livro e informações sobre synthetic programming
    • Pergunta se o programa foi criado diretamente na calculadora; também se gaba de já ter programado direto em uma hp49g, e opina que a 41c, com display de uma linha, deve ter sido um desafio muito maior
  • Compartilha a experiência de ter modificado um telefone rotativo para transformá-lo em um headset Bluetooth completo, permitindo também discar números com o disco. No HN a reação foi morna, mas ficou orgulhoso por o projeto ter sido apresentado no hackaday; anexa o link do projeto relacionado e o post no blog pessoal, e acha que também seria fácil fazer um modo de teclado numérico rotativo via Bluetooth, embora lhe falte tempo no momento
    • Hoje em dia o ESP32 seria uma escolha muito mais econômica, mas conta que implementou assim mesmo porque queria muito criar um driver do kernel Linux
  • Compartilha a experiência de, na época em que o iPhone era só rumor, ter sugerido que seria divertido recriar um disco rotativo usando a touch wheel do iPod, mas ter sido rejeitado por todos; pensa em montar uma Linux box para recriar essa sensação clássica de discagem rotativa
    • Diz que não estava sozinho nessa ideia: de fato, a Apple registrou uma patente de disco rotativo com touch wheel, e Steve Jobs está incluído na lista de inventores. Ele próprio e um colega da Apple também registraram uma patente quase idêntica, mas no fim a patente dele expirou e só a de Steve permaneceu. Conta que, durante uma noite em um bar em SF, teve a ideia de criar um discador com touch wheel, fortemente inspirado pela importância do motor físico de jogos de pinball, e que essa ideia acabou sendo reconhecida pelo comitê de patentes. Interpreta que, embora houvesse diferenças em relação à patente de Steve, também podia haver uma estratégia de inflar o número de patentes do iPhone
    • Imagina que, se o iPod tivesse sido lançado apenas com conectividade celular adicionada, teria surgido uma história alternativa interessante; também compartilha um link de vídeo sobre digitação eficiente
    • Supõe que certamente deve existir algum app para discar em tela sensível ao toque usando um disco rotativo
  • Fica empolgado achando que finalmente alguém tentou zerar Dark Souls com um telefone rotativo
    • Isso faz lembrar a época em que jogava Soul Calibur com o controle de vara de pesca do Dreamcast
  • Isso lembra Sarah, do Connections Museum em Seattle, que criou um driver para permitir pulse signaling em uma central telefônica antiga conectada ao soft PBX Asterisk; também compartilha um link de vídeo explicativo
  • Ao ver esse tipo de implementação de driver minimalista, acha impressionante como o código real do driver pode ser bem pequeno e ainda assim funcionar, mas como ainda é preciso conhecer uma enorme quantidade de flags e métodos do kernel. Conta que quis reimplementar isso em Rust, mas ficou frustrado porque os bindings necessários não estavam prontos; opina que também seria interessante escrever um post de blog sobre a abordagem adotada e as dificuldades encontradas
    • Confessa que atualmente só há suporte para poucas APIs de subsistemas nos bindings de Rust, então não conseguiu avançar o suficiente; espera tentar de novo no ano que vem, quando o suporte estiver mais maduro, e compartilhar a experiência
  • Lembra que, em modems compatíveis com Hayes, era possível fazer discagem por pulso rotativo usando o comando ATDP em vez de ATDT
  • Como fato histórico curioso, apresenta que nos telefones rotativos da Nova Zelândia os números e a quantidade de pulsos eram mapeados ao contrário; na prática, usavam mesmo um esquema de pulsos de 10 dígitos
    • Explica a razão técnica: nos primeiros equipamentos mecânicos de comutação telefônica, os rotary exchange, havia um problema de desgaste nas clutch pads, e a ideia de inverter o esquema — como 9 pulsos ao discar o número 1 — surgiu na Nova Zelândia para reduzir o desgaste total. Pelo que sabe, a Noruega também adotou o mesmo método. Anexa um link da Wikipédia sobre o rotary system
  • Menciona a necessidade de uma versão com conversão DTMF (touch-tone); na Austrália, houve casos de fabricação de pequenas caixas alimentadas pela própria linha para converter pulsos rotativos em touch-tone. Graças a isso, ainda dava para usar por bastante tempo as linhas telefônicas comuns, mas lamenta que edifícios recentes já não tenham sequer fiação telefônica
    • Ainda é possível conectar a um FXS/ATA e usá-lo como telefone VoIP, e até telefones candlestick da década de 1920 continuam em uso graças a esse método
  • Acha curioso o acaso de estar justamente vendo este texto enquanto tem um telefone rotativo desmontado sobre a mesa, dando corda na mola naquele exato momento
    • Pergunta há quanto tempo o telefone está desmontado em cima da mesa de fato; responde com empatia que acontece o mesmo com ele e que provavelmente já faz uns dois anos