1 puntos por GN⁺ 2025-05-25 | 1 comentarios | Compartir por WhatsApp
  • Rotary Phone Dial Linux Kernel Driver es un módulo del kernel que convierte un antiguo teléfono de disco en un dispositivo de entrada evdev para Linux
  • El proyecto también resulta muy útil con fines de educación y pruebas, ya que ofrece un controlador de ejemplo sencillo y un entorno de desarrollo basado en máquina virtual
  • Permite desarrollo y pruebas incluso sin hardware real, y admite simulación de GPIO
  • Soporta casi cualquier configuración de asignación de teclas y puede adaptarse a diversos esquemas de codificación por pulsos de distintos países
  • Como es un módulo estándar del kernel, se puede extender e integrar fácilmente en sistemas Linux

Resumen de Rotary Phone Dial Linux Kernel Driver

  • Este proyecto es un módulo del kernel que convierte el dial rotatorio de un teléfono antiguo en un dispositivo de entrada estándar de Linux (por ejemplo, un teclado numérico)
  • Podría interesarle a personas como las siguientes
    • Quienes quieran introducir números mediante un marcado lento
    • Usuarios que quieran llevar un teléfono analógico de antaño a la era digital
    • Educadores que necesiten un controlador de ejemplo del kernel y un entorno virtual de desarrollo/pruebas sin hardware real
    • Otros fines de experimentación creativa

Cómo conectar el circuito

  • El dial rotatorio está compuesto básicamente por dos interruptores: BUSY (estado abierto) y PULSE (estado cerrado)
    • Estos dos interruptores se conectan, junto con resistencias pull-up, a los pines GPIO de un sistema capaz de ejecutar Linux embebido
  • Al girar el dial, el interruptor BUSY cambia al estado cerrado, y mientras el dial vuelve a su posición original, el interruptor PULSE repite la apertura y el cierre
  • La conexión y la distribución de pines varían según el país o el fabricante, por lo que se recomienda probar la respuesta de los interruptores con un multímetro
  • El ciclo de trabajo de la señal de pulsos (tiempo abierto/cerrado) y el método de decodificación también difieren según el país y el fabricante
    • Ejemplo: en Alemania, por cada pulso son 62 ms abierto y 38 ms cerrado
    • Por lo general, de uno a nueve pulsos corresponden a 1–9, y diez pulsos corresponden a 0 (aunque hay excepciones, como Suecia)
  • Si hay dudas, conviene revisar la etiqueta del dial o hacer pruebas

Uso

  • Este controlador es un módulo externo estándar del kernel (out-of-tree kernel module)
  • Resumen de los pasos
    • Agregar un nodo rotary-dial al árbol de dispositivos y mapear pulse-gpios y busy-gpios a los pines reales
    • Si es necesario, cambiar el mapa de códigos de tecla con la propiedad linux,keycodes
    • Definir la ruta del código fuente del kernel (KDIR) como variable de entorno, luego compilar, instalar y cargar el módulo
  • Cuando se carga el módulo del kernel, se crea un dispositivo de entrada que funciona como teclado numérico
  • Se puede usar la herramienta evemu para monitorear las propiedades del dispositivo de entrada y los eventos del dial

Máquina virtual (VM) para desarrollo y pruebas

  • Se proporciona un entorno de máquina virtual para el desarrollo del controlador y las pruebas end-to-end
    • Esta VM incluye un parche al devicetree con GPIO busy/pulse simulados mediante gpio-sim
    • Es posible controlar los GPIO desde espacio de usuario para implementar escenarios de prueba
  • Se puede compilar y ejecutar la VM tras habilitar el gestor de paquetes Nix y la función flakes
  • Dentro de la VM se inicia sesión directamente en un shell de desarrollo
  • También se admite cargar y descargar el módulo después de compilar el controlador
  • La herramienta rotary_dialer permite simular una cantidad específica de pulsos para probar la entrada del dial
    • (Por ejemplo, en un entorno con codificación sueca, 3 pulsos se reconocen como el número 2)

Pruebas

  • El controlador incluye una suite de pruebas integral
  • En el entorno de VM, se pueden ejecutar casos automatizados con make test
    • Es posible verificar el funcionamiento del dispositivo de entrada, confirmar que al marcar números se emiten los códigos de tecla correctos y revisar diversos escenarios como el manejo de entradas inválidas

Estado de incorporación al mainline

  • El desarrollador comenta en tono humorístico que ve el futuro del dial rotatorio de forma positiva, aunque Linus Torvalds podría no estar de acuerdo

1 comentarios

 
GN⁺ 2025-05-25
Comentarios de Hacker News
  • Comparte el recuerdo de haber construido él mismo un marcador telefónico rotatorio con una calculadora HP41C a finales de los 70; conectó un relé reed sin contacto a un zumbador piezoeléctrico y a la línea telefónica, y cuenta que usó “synthetic programming” (comandos no documentados) para generar pitidos cortos y completar los pulsos de marcado. Usaba un método en el que introducías un nombre (con soporte para alfabeto), buscaba el número y llamaba de inmediato. También recuerda que, cuando conoció a Keith Jarrett en su empresa hace 10 años, la gente se confundía seguido pensando en el músico, y que él más bien le preguntó si era el autor del HP-41C Synthetic Programming Manual, a lo que este reaccionó con sorpresa y alegría. Adjunta enlaces relacionados: información del libro y información sobre synthetic programming
    • Le da curiosidad saber si realmente escribió ese programa directamente en la calculadora; presume que él también programó así en una hp49g, y opina que en la 41c, con pantalla de una sola línea, debió haber sido un reto mucho mayor
  • Comparte la experiencia de haber modificado un teléfono rotatorio para convertirlo en un headset Bluetooth completo, permitiendo también marcar números con el dial. Dice que en HN no tuvo mucha reacción, pero que le dio gusto que apareciera en hackaday, y adjunta enlace al proyecto y post de su blog personal. Cree que también sería fácil hacer un modo de keypad rotatorio Bluetooth, pero no tiene tiempo suficiente
    • Hoy en día un ESP32 sería una opción mucho más económica, pero cuenta que quiso hacer específicamente un driver del kernel de Linux y por eso lo implementó él mismo
  • En la época en que solo había rumores sobre el iPhone, propuso que sería divertido recrear un dial rotatorio usando la touch wheel del iPod, pero todos lo rechazaron; dice que le dan ganas de configurar una caja Linux para tener esa sensación clásica de dial rotatorio
    • Aclara que no era el único: de hecho, Apple registró una patente de dial rotatorio con touch wheel, y Steve Jobs aparece entre los inventores. Él y un colega de Apple también presentaron una patente casi idéntica, pero al final la suya expiró y solo quedó la de Steve. Cuenta que, mientras estaba tomando en un bar en SF, se le ocurrió la idea de hacer el dial con touch wheel, muy inspirada por la física de los juegos de pinball, y que esa idea fue reconocida por el comité de patentes. Interpreta que, aunque había diferencias con la patente de Steve, también pudo influir la estrategia de inflar la cantidad de patentes del iPhone
    • Imagina que, si hubieran lanzado un iPod solo añadiéndole conectividad celular, se habría creado una historia alternativa interesante, y también comparte un video de escritura eficiente
    • Supone que seguramente existe alguna app para hacer llamadas con dial rotatorio en pantalla táctil
  • Le emociona que por fin alguien parezca haber intentado terminar Dark Souls usando un teléfono rotatorio
    • Eso le hizo recordar cuando jugaba Soul Calibur con el controlador de caña de pescar de Dreamcast
  • Dice que esto le recordó a Sarah, del Connections Museum de Seattle, que creó un driver para habilitar pulse signaling en una central telefónica antigua conectada con el soft PBX Asterisk, y también comparte un video explicativo
  • Al ver este tipo de implementaciones mínimas de drivers, le impresiona que el código real del driver puede ser muy poco y aun así bastar, mientras que sí hay muchísimas flags y métodos del kernel que hay que conocer. Cuenta que quiso reimplementarlo en Rust, pero se quedó con las ganas porque no estaban listas las bindings necesarias, y opina que también sería interesante escribir un post de blog sobre el enfoque y las dificultades encontradas
    • Confiesa que actualmente son pocas las API de subsistemas compatibles con bindings de Rust, así que no pudo avanzar lo suficiente; espera volver a intentarlo el próximo año, cuando ese soporte esté más maduro, y compartir la experiencia
  • Recuerda que en los módems compatibles con Hayes se podía usar el comando ATDP en lugar de ATDT para hacer marcado por pulsos rotatorios
  • Como dato histórico curioso, comenta que en los teléfonos rotatorios de Nueva Zelanda la relación entre números y cantidad de pulsos estaba invertida; efectivamente usaban un sistema de pulsos de 10 dígitos
    • Explica la razón técnica: en los primeros equipos mecánicos de conmutación telefónica, los rotary exchange, había problemas de desgaste en las almohadillas de embrague, así que para reducir el desgaste total se ideó en Nueva Zelanda un diseño invertido donde marcar el 1 generaba 9 pulsos, etc. Cree que Noruega también adoptó el mismo sistema, y adjunta un enlace de Wikipedia sobre rotary system
  • Menciona la necesidad de una versión con conversión DTMF (touch-tone); en Australia hubo casos de pequeñas cajas alimentadas por la propia línea que convertían los pulsos rotatorios a touch-tone. Gracias a eso se pudieron seguir usando por mucho tiempo con líneas telefónicas normales, aunque lamenta que en edificios recientes ya ni siquiera haya línea telefónica
    • Aun así, dice que todavía se pueden usar como teléfonos voip conectándolos a un FXS/ATA; incluso un teléfono candlestick de los años 20 sigue en uso gracias a ese método
  • Le parece curiosa la coincidencia de que justo, al momento de leer esto, tiene un teléfono rotatorio desarmado sobre el escritorio y está dándole cuerda al resorte
    • Le da curiosidad cuánto tiempo ha estado realmente el teléfono desarmado sobre el escritorio; dice que a él le pasa algo parecido y que probablemente ya van como 2 años