1 पॉइंट द्वारा GN⁺ 2025-05-25 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • rotary_dial_kmod rotary phone dial को Linux के evdev input device में बदलता है, जिससे dial input को number pad की तरह प्रोसेस किया जा सकता है
  • इसका काम करने का तरीका BUSY/PULSE switches को SoC के GPIO pins से जोड़ने पर आधारित है, और mechanical contacts की प्रकृति के कारण bouncing handling की ज़रूरत होती है
  • देश और निर्माता के अनुसार contact names, pulse length, और number encoding अलग हो सकते हैं, इसलिए actual wiring और labels की जांच करना महत्वपूर्ण है
  • उपयोगकर्ता devicetree में rotary-dial node और pulse-gpios, busy-gpios सेट करने के बाद इसे out-of-tree kernel module के रूप में build और load करते हैं
  • असली hardware न होने पर भी development VM में gpio-sim आधारित BUSY/PULSE GPIO को नियंत्रित करके end-to-end tests चलाए जा सकते हैं

rotary dial को evdev input device में बदलना

  • rotary_dial_kmod एक Linux kernel driver है जो rotary phone dial को evdev input device में बदलता है
  • इसे निम्नलिखित परिस्थितियों को ध्यान में रखकर बनाया गया है
    • जब कोई number pad की तुलना में धीमा dialing पसंद करता हो
    • जब कोई पुराने rotary phone को digital environment में उपयोग करना चाहता हो
    • जब असली hardware के बिना VM-आधारित end-to-end development और test environment के लिए किसी सरल driver example की ज़रूरत हो
    • अन्य रचनात्मक use cases

wiring और signal का व्यवहार

  • यह project rotary dial को BUSY और PULSE दो switches से बने device के रूप में देखता है
    • BUSY normally open है
    • PULSE normally closed है
    • दोनों switches pull-up resistors के जरिए embedded Linux SoC के GPIO pins से जुड़े होते हैं
  • dial को घुमाने पर BUSY switch बंद हो जाता है और busy pin low पर चला जाता है
  • dial के अपनी मूल स्थिति में लौटने के दौरान PULSE switch बार-बार खुलता है और pulse pin high पर चला जाता है
  • mechanical switch होने के कारण bouncing हो सकती है

देश और निर्माता के अनुसार अंतर

  • switch contacts के नाम देश और निर्माता के अनुसार अलग हो सकते हैं या मौजूद ही न हों
    • जर्मनी में BUSY switch को nsa कहा जाता है
    • जर्मनी में PULSE switch को nsi कहा जाता है
  • अगर pin assignment स्पष्ट न हो, तो dial को धीरे-धीरे घुमाकर multimeter के continuity tester से switch response की जांच की जाती है
  • pulse signal का duty cycle और duration भी देश और निर्माता के अनुसार बदल सकता है
    • जर्मन उदाहरण में प्रति pulse PULSE switch 62ms खुला और 38ms बंद रहता है
  • अधिकांश मामलों में 1 से 9 pulses संख्या 1 से 9 के अनुरूप होते हैं, और 10 pulses संख्या 0 के अनुरूप होते हैं
  • कुछ देशों में encoding अलग होती है; स्वीडिश उदाहरण में 1 pulse का मतलब 0 है, और 10 pulses का मतलब 9 है
  • यदि संदेह हो, तो dial पर लगे label की जांच करनी चाहिए

kernel module का उपयोग कैसे करें

  • यह driver एक मानक out-of-tree kernel module है
  • उपयोग की प्रक्रिया इस मान्यता से शुरू होती है कि Linux kernel build environment तैयार है और build host तथा target host एक ही हैं
  • वास्तविक environments में अक्सर Yocto या Buildroot द्वारा उपलब्ध cross toolchain से build किया जाता है
  • devicetree में rotary-dial node जोड़ा जाता है
    • pulse-gpios property pulse GPIO pin से bind होती है
    • busy-gpios property busy GPIO pin से bind होती है
    • linux,keycodes property के जरिए default keycode map को वैकल्पिक रूप से बदला जा सकता है
    • अधिक जानकारी और उदाहरण devicetree binding में हैं
  • KDIR environment variable को kernel source tree की ओर point करना चाहिए
  • build, install, और load निम्न commands से किए जाते हैं
make
make install
modprobe rotary_dial
  • kernel module load होने पर rotary dial input device दिखाई देता है और keycode mapping के अनुसार डिफ़ॉल्ट रूप से number pad की तरह काम करता है
  • debugging के लिए evemu package का उपयोग किया जा सकता है
    • evemu-describe से input device properties देखी जाती हैं
    • evemu-record से dial events monitor किए जाते हैं

development VM और simulation

  • driver development और end-to-end testing के लिए एक VM दिया गया है
  • VM के Linux kernel में devicetree patch लागू है
  • यह devicetree gpio-sim के जरिए simulated busy और pulse GPIO lines प्रदान करता है
  • user space से GPIO lines को नियंत्रित करके dial calls simulate किए जा सकते हैं
  • VM उपयोग की प्रक्रिया इस प्रकार है
    • Nix package manager install करें
    • flakes enable करें
    • make vm से VM build करें
    • kernel को custom configuration और devicetree patch के साथ दोबारा build करना पड़ता है, इसलिए इसमें समय लग सकता है
    • make run-vm से VM चलाएँ
    • startup के बाद development shell में automatic login हो जाता है
  • VM में KDIR VM के kernel build artifacts को point करता है, इसलिए केवल make से driver build किया जा सकता है
  • कुछ clang-format और clang-tidy targets के लिए केवल build artifacts पर्याप्त नहीं हैं; KDIR को अलग से डाउनलोड किए गए kernel source की ओर point करना चाहिए
  • build के बाद insmod और rmmod targets से driver को load और unload किया जा सकता है

rotary_dialer और tests

  • rotary_dialer GPIO lines को नियंत्रित करके number dialing simulate करता है
  • build निम्न command से किया जाता है
make rotary_dialer
  • तीन pulses dial करने का उदाहरण इस प्रकार है
test/rotary_dialer 3
  • shell पर लौटने के बाद संख्या 2 दिखनी चाहिए, क्योंकि simulated devicetree में Swedish encoding सेट है
  • test suite development VM में चलाया जा सकता है
make test
  • tests kernel module को load करके कई cases चलाते हैं
    • input device functionality को verify करते हैं
    • दी गई pulse count dial करने के बाद expected keycode emit होता है या नहीं, यह जांचते हैं
    • invalid input सही तरह से handle हो रहा है या नहीं, यह जांचते हैं

mainline में शामिल होने की संभावना

  • project description rotary dial को input device के रूप में उपयोग करने वाले भविष्य को सकारात्मक रूप से देखता है, लेकिन अंत में मज़ाक में कहा गया है कि Linus Torvalds शायद इससे सहमत न हों

1 टिप्पणियां

 
GN⁺ 2025-05-25
Hacker News की राय
  • 70 के दशक के आखिर में HP41C calculator से एक rotary phone dialer बनाया था
    NC reed relay को piezoelectric buzzer से जोड़ा था, और NC contact को phone line में series में लगाया था
    dial pulse के लिए ज़रूरी छोटे beep बनाने हेतु undocumented opcode इस्तेमाल करने के लिए synthetic programming का उपयोग किया, और नाम को alphanumeric रूप में दर्ज करके नंबर ढूंढकर कॉल किया जा सकता था
    लगभग 10 साल पहले कंपनी में Keith Jarrett नाम के एक व्यक्ति से मिला, और HP-41C Synthetic Programming Manual लिखने वाले वही Keith Jarrett हैं क्या यह पूछने से पहले ही उन्होंने कहा, “नहीं, मैं musician नहीं हूँ। सब लोग वही पूछते हैं”
    इसलिए मैंने सवाल पूरा किया, तो पता चला कि 35 साल पहले पढ़ी उस किताब के वही लेखक थे, और वे भी बहुत खुश और हैरान हुए
    https://picclick.com/HP-41-Synthetic-Programming-Made-Easy-b...
    https://www.hpmuseum.org/prog/synth41.htm

    • मैंने और मेरे दोस्त ने भी यह बनाया था, और इसे किसी भी phone पर काम करने वाले speed dialer की तरह इस्तेमाल किया था
      synthetic programming guide की paperback copy अब भी मेरे पास है
      उस technique को अलग भी रखें, तो यह calculator 1980 के दशक की शुरुआत के हिसाब से बेहद ताकतवर programmable tool था
      उसी दोस्त के साथ RF transmission की S-parameter modeling वाली graduate class की सारी calculations संभालने वाला program भी लिखा था, और professor को दिखाकर शेखी बघारी तो “इनाम” के तौर पर हर परीक्षा में calculator program के इस्तेमाल पर रोक लग गई
      बाद में पता चला कि electrical engineering department में RF पक्ष और digital electronics पक्ष के बीच territorial dispute चल रहा था
      HP-41CX calculator ने electrical engineering degree के दौरान एक बहुत अहम सबक सिखाया: इंसानी decision-making में technology हमेशा सबसे ऊँची प्राथमिकता नहीं होती
    • जिज्ञासा है कि क्या यह सब calculator पर ही program किया गया था
      मैंने hp49g पर कुछ ऐसा करने की कोशिश की थी और constrained environment में program लिखने पर गर्व था, लेकिन 41c की single-line display पर किया गया हो तो वह सचमुच बड़ी उपलब्धि रही होगी
  • rotary phone पसंद करने वालों के लिए हल्का-सा प्रचार करूँ तो, मैंने अपने phone को पूरी तरह काम करने वाले Bluetooth headset में mod किया है, जिसमें rotary dial से phone number dial करना भी शामिल है
    HN पोस्ट खास नहीं चली, लेकिन Hackaday पर इसे दिखाया गया था
    https://hackaday.com/2024/10/31/bakelite-to-the-future-a-195...
    https://blog.waleson.com/2024/10/bakelite-to-future-1950s-ro...
    Bluetooth rotary number pad के लिए alternate mode बनाना मुश्किल नहीं लगता
    अब बस उसके लिए समय निकालना है

    • कमाल है। आजकल ESP32 इस्तेमाल करना कहीं ज़्यादा किफायती विकल्प है, लेकिन फिर भी मैं Linux kernel driver ज़रूर आज़माना चाहता था
  • जब iPhone अभी सिर्फ अफवाहों में था, तब मैंने सुझाव दिया था कि उस समय के iPod जैसे touch wheel को जोड़कर rotary dial को वापस लाने का यह अच्छा मौका होगा
    वहाँ मौजूद सब लोगों ने इसे साफ़ तौर पर ठुकरा दिया, लेकिन उसकी बदौलत अब सिर्फ एक Linux box तैयार हो तो वह classic rotary एहसास फिर इस्तेमाल किया जा सकता है

    • असल में आप अकेले नहीं थे: https://www.patentlyapple.com/2010/12/apple-wins-patent-for-...
      Steve Jobs भी इस patent के inventors में से एक के रूप में सूचीबद्ध थे
      मैंने और Apple में मेरे एक दूसरे सहकर्मी ने भी लगभग उसी समय लगभग बिल्कुल वैसा ही patent दायर किया था, और कुछ समय तक Apple के पास touch wheel पर rotary dial simulate करने वाले दो patents थे
      मेरा patent आखिरकार समाप्त हो गया और Steve वाला renew हो गया
      SF में एक dinner के दौरान, थोड़ा ज़्यादा पी रखी थी, तब मैंने एक सहकर्मी को यह idea बताया; मेरे दिमाग में एक पुराना pinball game था जिसकी physical feel इतनी अच्छी थी कि वह सचमुच असली जैसा लगता था
      मेरी नज़र में मुख्य बात यह थी कि dial physics को इस तरह लागू किया जाए कि user सही gesture के साथ किसी भी digit तक जल्दी घूमकर पहुँच सके
      जब मैंने यह idea दिया, तब मुझे iPhone की जानकारी साझा नहीं की गई थी, लेकिन सहकर्मी ने इसे patent committee को भेजा और मंज़ूर हो गया
      Steve के patent से इसकी समानता देखकर लगता है committee हँसी होगी, लेकिन बड़े फ़र्क भी थे इसलिए यह duplicate नहीं था
      हालांकि लगता है कि शुरुआती marketing के हिस्से के रूप में वे iPhone-संबंधित patents की संख्या बढ़ाना चाहते थे। Steve ने भी iPhone announcement के समय कहा था कि “200 से ज़्यादा patents” हैं
    • अगर iPod में सिर्फ cellular networking जोड़कर एक model भी निकाला गया होता, तो वह सचमुच बहुत मज़ेदार timeline होती
      input के लिए यह इस्तेमाल किया जा सकता है: https://www.youtube.com/watch?v=9BnLbv6QYcA
    • touchscreen पर rotary dial से call करने देने वाली कोई app ज़रूर होगी
  • अब समय आ गया है कि कोई उस rotary phone का सही इस्तेमाल करे और उससे Dark Souls ख़त्म करे

    • इससे याद आया कि Dreamcast के fishing rod controller से Soul Calibur खेला जा सकता था
  • DTMF version की ज़रूरत है
    Australia में एक व्यक्ति बहुत छोटा box बनाता है जो सिर्फ line power पर चलता है
    वह rotary pulse को Touch Tone में बदल देता है
    कुछ साल पहले तक, जब तक मैं ऐसे building में shift नहीं हुआ था जहाँ POTS wiring नहीं थी, उसी की बदौलत मैं rotary phone इस्तेमाल करता रहा। अफसोस

    • इसे FXS/ATA से जोड़कर VoIP phone नहीं बनाया जा सकता?
      मैं भी कई units को ऐसे ही अब तक चालू हालत में इस्तेमाल कर रहा हूँ, जिनमें 1920s का candlestick phone भी शामिल है
  • बहुत बढ़िया। मुझे इस तरह की minimal driver implementation पसंद है
    यह दिखाता है कि ड्राइवर में वास्तव में कितनी कम code की ज़रूरत होती है, लेकिन साथ ही यह भी दिखाता है कि एक basic driver को चलाने के लिए कितने flags और kernel methods जानने पड़ते हैं
    यह हिस्सा दिलचस्प है, और काफ़ी निराशाजनक भी, हालांकि अप्रत्याशित नहीं: “शुरुआत में मैंने Rust for Linux project की स्थिति देखने के लिए driver को Rust में फिर से implement करने की कोशिश की, लेकिन जल्द ही समझ में आ गया कि ज़रूरी bindings अभी मौजूद नहीं हैं, इसलिए उस हिस्से का इंतज़ार करना पड़ा”
    अगर approach और रास्ते में आई रुकावटों को document किया जाए, तो यह एक दिलचस्प blog post बन सकती है

    • दुर्भाग्य से अभी केवल कुछ subsystem APIs के लिए ही Rust bindings हैं, इसलिए इतना आगे बढ़ ही नहीं पाया कि उस पर ढंग से कुछ लिखा जा सके
      शायद अगले साल तक support mature हो जाए और Rust reimplementation संभव हो, तो मैं खुशी से अपना अनुभव लिखूँगा
  • इससे लगभग 30 साल पहले के rotary phone से जुड़ा एक काम याद आ गया
    मैंने खुद rotary phone इस्तेमाल नहीं किया था, लेकिन तब भी ऐसे phones के साथ compatible telephone network जुड़ा हुआ था
    बार-बार लिखने के बजाय यहाँ link छोड़ रहा हूँ:
    https://news.ycombinator.com/item?id=40391220
    उत्सुकता बढ़ाने के लिए इतना कहूँगा कि यह एक ऐसी कहानी है जिसमें ज़ोरदार दस्तक की आवाज़ आती है और “San Jose Police! Open up!” सुनाई देता है

    • वह कहानी जानी-पहचानी लगी, तो मैंने comment करने की सोची कि 112 को 911 पर redirect किया जाता है
      वजह यह थी कि 112 डायल करना आसान था, लेकिन फिर पता चला कि एक साल पहले जब मैंने वह post पहली बार देखी थी, तब भी मैं यही comment कर चुका था
    • जहाँ तक मुझे पता है, सभी PSTN pulse dialing के साथ compatible थे, या अब भी हैं
  • इससे Seattle के Connections Museum में Sarah का वह काम याद आता है, जहाँ उन्होंने एक Linux box पर Asterisk soft PBX को पुराने telephone exchange के pre-DTMF trunk के साथ revertive pulse signaling के ज़रिए communicate कराने वाला driver लिखा था
    https://www.youtube.com/watch?v=35N5vKKGDy8

  • एक मज़ेदार ऐतिहासिक मोड़ यह है कि New Zealand के rotary phone में अंकों और pulse count का संबंध उल्टा था
    वहाँ pulse count 10 - अंक होता था

    • इसके पीछे एक गहरा technical कारण भी था
      शायद मैं उन बहुत कम जीवित लोगों में हूँ जिन्हें इसका कारण पता है, इसलिए यह ज्ञान खो न जाए, इसीलिए साझा कर रहा हूँ
      अपेक्षाकृत शुरुआती mechanical telephone exchanges में एक rotary exchange हुआ करता था [0]
      phone से आने वाले pulses exchange के भीतर clutch को engage करते थे, जिससे rotating drive चलती थी, और वही switching mechanism को हिलाती थी
      rotary exchange की एक समस्या यह थी कि clutch pad घिस जाते थे और engagement अविश्वसनीय हो जाती थी
      Aotearoa/NZ में rotary exchange लगाने का फ़ैसला होने तक वहाँ पहले से एक मौजूदा numbering plan था
      किसी समझदार व्यक्ति को wear की समस्या का पता था, और उसने गणना की कि अगर मौजूदा numbering plan को देखते हुए dial की 1 position से 9 pulses निकलें, तो कुल pad wear काफ़ी कम होगा और maintenance भी कम लगेगी
      यही वही तरीका है जो वहाँ शुरू हुआ
      एक और रोचक बात यह है कि मेरी जानकारी में Norway ने भी rotary phone के लिए यही configuration चुनी थी
      वजह भी यही थी या नहीं, यह पक्का नहीं है
      [0] https://en.wikipedia.org/wiki/Rotary_system
  • अभी-अभी मेरी डेस्क पर एक rotary phone खुला पड़ा है और मैं उसकी clock spring फिर से wound कर रहा हूँ, तभी यह पोस्ट सामने आ गई
    अजीब संयोग है

    • सचमुच का सवाल: वह phone आपकी डेस्क पर खुली हालत में कितने समय से पड़ा है?
      अगर आप मेरी तरह हैं, तो शायद लगभग 2 साल से होगा