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
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
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
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
À 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
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 »
Pour la saisie, il suffisait d’utiliser ça : https://www.youtube.com/watch?v=9BnLbv6QYcA
Il est temps que quelqu’un exploite vraiment ce téléphone à cadran pour terminer Dark Souls
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
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
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! »
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
Ç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
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
Si tu es comme moi, ça doit faire environ deux ans