1 points par GN⁺ 2025-05-25 | 1 commentaires | Partager sur WhatsApp
  • rotary_dial_kmod transforme un cadran de téléphone rotatif en périphérique d’entrée evdev sous Linux, afin de traiter la saisie au cadran comme celle d’un pavé numérique
  • Son fonctionnement repose sur la connexion des commutateurs BUSY/PULSE aux broches GPIO du SoC ; les caractéristiques des contacts mécaniques nécessitent une gestion du rebond
  • Selon le pays et le fabricant, les noms des contacts, la durée des impulsions et l’encodage des chiffres peuvent varier ; il est donc important de vérifier le câblage réel et les étiquettes
  • L’utilisateur configure un nœud rotary-dial dans le devicetree, ainsi que pulse-gpios et busy-gpios, puis compile et charge le pilote comme module noyau hors arborescence
  • Même sans matériel réel, il est possible d’exécuter des tests de bout en bout dans une VM de développement en manipulant des GPIO BUSY/PULSE basés sur gpio-sim

Convertir un cadran rotatif en périphérique d’entrée evdev

  • rotary_dial_kmod est un pilote noyau Linux qui transforme un cadran de téléphone rotatif en périphérique d’entrée evdev
  • Il vise notamment les situations suivantes
    • lorsque l’on préfère une numérotation plus lente qu’avec un pavé numérique
    • lorsque l’on veut utiliser un ancien téléphone à cadran dans un environnement numérique
    • lorsque l’on a besoin d’un exemple simple de pilote avec un environnement de développement et de test de bout en bout basé sur une VM, sans matériel réel
    • d’autres usages créatifs

Câblage et fonctionnement des signaux

  • Ce projet traite le cadran rotatif comme un dispositif composé de deux commutateurs, BUSY et PULSE
    • BUSY est normalement ouvert
    • PULSE est normalement fermé
    • les deux commutateurs sont connectés aux broches GPIO d’un SoC Linux embarqué via des résistances de pull-up
  • Lorsque l’on arme le cadran, le commutateur BUSY se ferme et la broche busy est pilotée à l’état bas
  • Pendant que le cadran revient à sa position initiale, le commutateur PULSE s’ouvre de façon répétée et la broche pulse est pilotée à l’état haut
  • Comme il s’agit d’un commutateur mécanique, un rebond peut se produire

Différences selon les pays et les fabricants

  • La notation des contacts de commutation peut varier selon le pays et le fabricant, ou être absente
    • en Allemagne, le commutateur BUSY est appelé nsa
    • en Allemagne, le commutateur PULSE est appelé nsi
  • Si l’affectation des broches est incertaine, il faut déplacer lentement le cadran et vérifier la réaction du commutateur avec le testeur de continuité d’un multimètre
  • Le rapport cyclique et la durée du signal d’impulsion varient également selon le pays et le fabricant
    • dans l’exemple allemand, pour chaque impulsion, le commutateur PULSE est ouvert pendant 62 ms et fermé pendant 38 ms
  • Dans la plupart des cas, 1 à 9 impulsions correspondent aux chiffres 1 à 9, et 10 impulsions correspondent à 0
  • Certains pays utilisent un encodage différent ; dans l’exemple suédois, 1 impulsion correspond à 0 et 10 impulsions correspondent à 9
  • En cas de doute, il faut vérifier l’étiquette du cadran

Utilisation du module noyau

  • Le pilote est un module noyau hors arborescence standard
  • La procédure d’utilisation part du principe que l’environnement de compilation du noyau Linux est prêt et que l’hôte de compilation et l’hôte cible sont identiques
  • Dans un environnement réel, il est fréquent de compiler avec une toolchain de cross-compilation fournie par Yocto ou Buildroot
  • Il faut ajouter un nœud rotary-dial au devicetree
    • la propriété pulse-gpios est liée à la broche GPIO pulse
    • la propriété busy-gpios est liée à la broche GPIO busy
    • la propriété linux,keycodes permet éventuellement de modifier la table de keycodes par défaut
    • des informations détaillées et des exemples se trouvent dans le binding devicetree
  • La variable d’environnement KDIR doit pointer vers l’arborescence des sources du noyau
  • La compilation, l’installation et le chargement s’effectuent avec les commandes suivantes
make
make install
modprobe rotary_dial
  • Une fois le module noyau chargé, le périphérique d’entrée du cadran rotatif apparaît et, selon le mappage des keycodes, fonctionne par défaut comme un pavé numérique
  • Pour le débogage, le paquet evemu peut être utilisé
    • evemu-describe permet de vérifier les propriétés du périphérique d’entrée
    • evemu-record permet de surveiller les événements du cadran

VM de développement et simulation

  • Une VM est fournie pour le développement du pilote et les tests de bout en bout
  • Le noyau Linux de la VM intègre un patch devicetree
  • Ce devicetree fournit des lignes GPIO busy et pulse simulées via gpio-sim
  • Il est possible de simuler un appel au cadran en manipulant les lignes GPIO depuis l’espace utilisateur
  • La procédure d’utilisation de la VM est la suivante
    • installer le gestionnaire de paquets Nix
    • activer les flakes
    • construire la VM avec make vm
    • cela peut prendre du temps, car le noyau doit être reconstruit avec une configuration personnalisée et le patch devicetree
    • lancer la VM avec make run-vm
    • après le démarrage, la connexion au shell de développement est automatique
  • Dans la VM, KDIR pointe vers les artefacts de compilation du noyau de la VM ; un simple make suffit donc à compiler le pilote
  • Pour certaines cibles clang-format et clang-tidy, les artefacts de compilation ne suffisent pas ; KDIR doit pointer vers des sources du noyau téléchargées séparément
  • Après compilation, les cibles insmod et rmmod permettent de charger et décharger le pilote

rotary_dialer et tests

  • rotary_dialer simule la numérotation de chiffres en manipulant les lignes GPIO
  • La compilation s’effectue avec la commande suivante
make rotary_dialer
  • Exemple pour numéroter trois impulsions
test/rotary_dialer 3
  • De retour dans le shell, le chiffre 2 devrait apparaître, car le devicetree simulé configure un encodage suédois
  • La suite de tests peut être exécutée dans la VM de développement
make test
  • Les tests chargent le module noyau et exécutent plusieurs cas
    • ils vérifient les fonctionnalités du périphérique d’entrée
    • ils vérifient qu’après avoir composé un nombre donné d’impulsions, le keycode attendu est émis
    • ils vérifient que les entrées invalides sont correctement gérées

Inclusion dans mainline

  • La description du projet se conclut par une plaisanterie indiquant que, même si elle voit d’un bon œil l’avenir où les cadrans rotatifs servent de périphériques d’entrée, Linus Torvalds pourrait ne pas être d’accord

1 commentaires

 
GN⁺ 2025-05-25
Avis sur Hacker News
  • À la fin des années 70, j’ai fabriqué un composeur à cadran rotatif avec une calculatrice HP41C
    J’avais relié un relais reed NC au buzzer piézo, et mis le contact NC en série sur la ligne téléphonique
    Pour produire les courts bips nécessaires aux impulsions de numérotation, j’utilisais de la synthetic programming avec des opcodes non documentés ; on pouvait saisir un nom en alphanumérique, retrouver le numéro et l’appeler
    Il y a environ 10 ans, j’ai rencontré au travail quelqu’un qui s’appelait Keith Jarrett, et avant même que je puisse lui demander s’il était le Keith Jarrett qui avait écrit le HP-41C Synthetic Programming Manual, il m’a dit : « Non, je ne suis pas le musicien. Tout le monde me pose la question »
    J’ai donc terminé ma question, et comme il était bien l’auteur de ce livre que j’avais lu 35 ans plus tôt, il en a été lui aussi ravi et très surpris
    https://picclick.com/HP-41-Synthetic-Programming-Made-Easy-b...
    https://www.hpmuseum.org/prog/synth41.htm

    • Un ami et moi avions aussi fabriqué ça, et nous l’utilisions comme numéroteur abrégé fonctionnant avec n’importe quel téléphone
      J’ai encore le guide papier de synthetic programming
      Même sans cette technique, cette calculatrice était un outil programmable très puissant pour le début des années 1980
      Avec le même ami, nous avions aussi écrit un programme qui gérait tous les calculs d’un cours de master sur la modélisation en paramètres S des transmissions RF ; quand nous nous en sommes vantés auprès du professeur, notre « récompense » a été l’interdiction d’utiliser des programmes de calculatrice à tous les examens
      Ce n’est que plus tard que j’ai compris qu’il existait une guerre de territoire entre la partie RF et la partie électronique numérique du département de génie électrique
      La calculatrice HP-41CX m’a appris l’une des leçons les plus importantes de mon cursus d’ingénieur électricien : dans la prise de décision humaine, la technologie n’est souvent pas la priorité numéro un
    • Je me demande si ce genre de chose se programmait directement sur la calculatrice
      J’ai fait quelque chose de similaire avec une hp49g et j’étais fier d’avoir programmé dans un environnement contraint, mais si c’était fait sur l’afficheur d’une seule ligne de la 41c, ce serait vraiment un exploit
  • Petite autopromo pour les amateurs de téléphones à cadran : j’ai modifié mon téléphone pour en faire un casque Bluetooth entièrement fonctionnel, avec composition des numéros au cadran rotatif incluse
    Le post HN n’a pas vraiment pris, mais Hackaday en a parlé
    https://hackaday.com/2024/10/31/bakelite-to-the-future-a-195...
    https://blog.waleson.com/2024/10/bakelite-to-future-1950s-ro...
    Créer un mode alternatif pour un pavé numérique rotatif Bluetooth ne devrait pas être difficile
    Il ne me reste plus qu’à trouver le temps

    • Super. Aujourd’hui, utiliser un ESP32 est un choix bien plus économique, mais j’avais quand même vraiment envie d’essayer d’écrire un driver du noyau Linux
  • À l’époque où l’iPhone n’était encore qu’une rumeur, j’avais suggéré que mettre une molette tactile, comme sur l’iPod de l’époque, serait une bonne occasion de ressusciter le cadran rotatif
    Tout le monde présent a catégoriquement rejeté l’idée, mais grâce à ça, il suffit maintenant de préparer une machine Linux pour retrouver cette sensation classique du cadran rotatif

    • En fait, je n’étais pas le seul : https://www.patentlyapple.com/2010/12/apple-wins-patent-for-...
      Steve Jobs figurait aussi parmi les inventeurs de ce brevet
      Un autre collègue d’Apple et moi avons déposé presque exactement le même brevet quasiment au même moment, et pendant un temps Apple a détenu deux brevets sur la simulation d’un cadran rotatif avec une molette tactile
      Mon brevet a fini par expirer, tandis que celui de Steve a été renouvelé
      J’avais proposé cette idée à un collègue lors d’un dîner à SF, après avoir un peu trop bu, en pensant à un vieux flipper dont les sensations physiques étaient excellentes et donnaient vraiment l’impression du réel
      À mes yeux, l’essentiel était d’implémenter la sensation physique du cadran afin que l’utilisateur puisse, avec le geste approprié, faire tourner rapidement n’importe quel chiffre
      Quand j’ai eu cette idée, je n’avais pas accès aux informations sur l’iPhone, mais mon collègue l’a envoyée au comité des brevets et elle a été approuvée
      Vu les similitudes avec le brevet de Steve, le comité a dû sourire, mais il y avait aussi de grandes différences, donc ce n’était pas un doublon
      Cela dit, je pense qu’ils voulaient augmenter le nombre de brevets liés à l’iPhone dans le cadre du marketing initial. Steve disait déjà lors de la présentation de l’iPhone qu’il y avait « plus de 200 brevets »
    • Si Apple avait sorti ne serait-ce qu’un modèle d’iPod avec simplement du réseau cellulaire ajouté, on aurait eu une chronologie vraiment hilarante
      Pour la saisie, il suffisait d’utiliser ça : https://www.youtube.com/watch?v=9BnLbv6QYcA
    • Il existe sûrement une app qui permet de passer des appels avec un cadran rotatif sur écran tactile
  • Il est temps que quelqu’un exploite vraiment ce téléphone à cadran pour terminer Dark Souls

    • Ça me rappelle qu’on pouvait jouer à Soul Calibur avec la manette canne à pêche de la Dreamcast
  • Il faut une version DTMF
    En Australie, quelqu’un fabrique un tout petit boîtier alimenté uniquement par la ligne, qui convertit les impulsions rotatives en Touch Tone
    Grâce à ça, j’ai pu continuer à utiliser un téléphone à cadran jusqu’à mon déménagement, il y a quelques années, dans un bâtiment sans câblage POTS. Dommage

    • Il suffirait peut-être de le brancher à un FXS/ATA pour en faire un téléphone VoIP ?
      J’utilise encore comme ça plusieurs téléphones, dont un téléphone chandelier des années 1920
  • Excellent. J’aime ce genre d’implémentation minimale de driver
    Ça montre à quel point un driver peut nécessiter peu de code réel, mais aussi combien de flags et de méthodes du noyau il faut connaître pour faire fonctionner ne serait-ce qu’un driver de base
    Le passage « au départ, je voulais réimplémenter le driver en Rust pour voir où en était le projet Rust for Linux, mais j’ai vite compris que les bindings nécessaires n’existaient pas encore, et qu’il faudrait attendre » est intéressant et assez décevant, même si ce n’est pas vraiment surprenant
    Documenter l’approche et les obstacles rencontrés ferait sans doute un billet de blog intéressant

    • Malheureusement, pour l’instant, il n’existe des bindings Rust que pour certaines API de sous-systèmes, donc je ne suis pas allé assez loin pour avoir de quoi écrire quelque chose de substantiel
      Si le support gagne en maturité d’ici l’an prochain et qu’une réimplémentation en Rust devient possible, j’écrirai volontiers sur cette expérience
  • Ça me rappelle une histoire liée aux téléphones à cadran d’il y a environ 30 ans
    Je n’utilisais pas moi-même de téléphone à cadran, mais il s’agissait d’un réseau téléphonique qui restait compatible avec eux
    Plutôt que de me répéter, je laisse le lien ici :
    https://news.ycombinator.com/item?id=40391220
    Pour piquer la curiosité : c’est une histoire avec de grands coups frappés à la porte et « San Jose Police! Open up! »

    • Cette histoire me disait quelque chose, et j’allais commenter que le 112 est redirigé vers le 911
      Parce que le 112 était plus facile à composer, mais il s’est avéré que j’avais déjà laissé le même commentaire quand j’ai vu ce post pour la première fois il y a un an
    • À ma connaissance, tous les PSTN ont été, ou sont encore, compatibles avec la numérotation par impulsions
  • Ça me rappelle le travail de Sarah au Connections Museum de Seattle : elle a écrit un driver permettant à un PBX logiciel Asterisk sur une machine Linux de communiquer avec les trunks pré-DTMF d’un ancien central téléphonique via de la signalisation par impulsions réversives
    https://www.youtube.com/watch?v=35N5vKKGDy8

  • Par un retournement historique amusant, les téléphones à cadran néo-zélandais avaient une correspondance inversée entre les chiffres et le nombre d’impulsions
    Là-bas, le nombre d’impulsions était 10 - le chiffre

    • Il y avait en fait une raison technique profonde à cela
      Je pense faire partie des très rares personnes encore en vie à la connaître, alors je la partage pour que ce savoir ne disparaisse pas
      Parmi les centraux téléphoniques mécaniques relativement anciens, il y avait le rotary exchange [0]
      Les impulsions provenant du téléphone enclenchaient un embrayage dans le central, qui entraînait une partie rotative, laquelle actionnait le dispositif de commutation
      L’un des problèmes du rotary exchange était que les patins d’embrayage s’usaient, rendant l’accouplement peu fiable
      En Aotearoa/Nouvelle-Zélande, au moment où il a été décidé d’installer des rotary exchanges, un plan de numérotation existait déjà
      Quelqu’un d’intelligent connaissait ce problème d’usure et a calculé qu’avec le plan de numérotation existant, faire en sorte que la position 1 du cadran émette 9 impulsions réduirait fortement l’usure globale des patins, et donc les besoins de maintenance
      C’est de là que vient cette configuration
      Autre fait intéressant : il me semble que la Norvège a choisi la même configuration pour ses téléphones à cadran
      Je ne sais pas si c’était pour la même raison
      [0] https://en.wikipedia.org/wiki/Rotary_system
  • Justement, j’ai un téléphone à cadran démonté sur mon bureau et je suis en train de retendre le ressort de barillet quand cet article est sorti
    Drôle de coïncidence

    • Vraie question : depuis combien de temps ce téléphone est-il démonté sur ton bureau ?
      Si tu es comme moi, ça doit faire environ deux ans