1 poin oleh GN⁺ 2025-05-25 | 1 komentar | Bagikan ke WhatsApp
  • rotary_dial_kmod mengubah dial telepon putar menjadi perangkat input evdev di Linux, sehingga input dial dapat diproses seperti keypad angka
  • Cara kerjanya adalah dengan menghubungkan sakelar BUSY/PULSE ke pin GPIO SoC, dan karena sifat kontak mekanisnya, perlu penanganan bouncing
  • Nama kontak, panjang pulsa, dan encoding angka dapat berbeda tergantung negara dan pabrikan, jadi penting untuk memeriksa kabel dan label yang sebenarnya
  • Pengguna menyiapkan node rotary-dial serta pulse-gpios dan busy-gpios di devicetree, lalu membangun dan memuatnya sebagai modul kernel di luar tree
  • Bahkan tanpa perangkat keras asli, pengujian end-to-end dapat dijalankan di VM pengembangan dengan memanipulasi GPIO BUSY/PULSE berbasis gpio-sim

Mengubah dial putar menjadi perangkat input evdev

  • rotary_dial_kmod adalah driver kernel Linux yang mengubah dial telepon putar menjadi perangkat input evdev
  • Driver ini dibuat dengan mempertimbangkan situasi seperti berikut
    • Jika lebih menyukai dialing yang lebih lambat daripada keypad angka
    • Jika ingin memakai telepon putar lama di lingkungan digital
    • Jika membutuhkan contoh driver sederhana dengan lingkungan pengembangan dan pengujian end-to-end berbasis VM tanpa perangkat keras nyata
    • Berbagai kasus penggunaan kreatif lainnya

Pengkabelan dan cara kerja sinyal

  • Proyek ini memperlakukan dial putar sebagai perangkat yang terdiri dari dua sakelar: BUSY dan PULSE
    • BUSY bersifat normally open
    • PULSE bersifat normally closed
    • Kedua sakelar dihubungkan ke pin GPIO pada SoC Linux embedded melalui resistor pull-up
  • Saat dial diputar, sakelar BUSY menutup dan pin busy didorong ke low
  • Saat dial kembali ke posisi semula, sakelar PULSE berulang kali terbuka dan pin pulse didorong ke high
  • Karena menggunakan sakelar mekanis, bouncing dapat terjadi

Perbedaan menurut negara dan pabrikan

  • Penandaan kontak sakelar bisa berbeda atau bahkan tidak ada, tergantung negara dan pabrikan
    • Di Jerman, sakelar BUSY disebut nsa
    • Di Jerman, sakelar PULSE disebut nsi
  • Jika penetapan pin tidak jelas, gerakkan dial perlahan sambil memeriksa respons sakelar dengan continuity tester pada multimeter
  • Duty cycle dan durasi sinyal pulsa juga berbeda menurut negara dan pabrikan
    • Dalam contoh Jerman, sakelar PULSE terbuka selama 62ms dan tertutup selama 38ms per pulsa
  • Dalam kebanyakan kasus, 1 hingga 9 pulsa mewakili angka 1 hingga 9, dan 10 pulsa mewakili 0
  • Beberapa negara memakai encoding berbeda; pada contoh Swedia, 1 pulsa mewakili 0 dan 10 pulsa mewakili 9
  • Jika masih ragu, periksa label pada dial

Cara menggunakan modul kernel

  • Driver ini adalah modul kernel di luar tree standar
  • Prosedur penggunaan dimulai dengan asumsi bahwa lingkungan build kernel Linux sudah siap, dan host build sama dengan host target
  • Dalam lingkungan nyata, build sering dilakukan menggunakan cross-toolchain yang disediakan oleh Yocto atau Buildroot
  • Tambahkan node rotary-dial ke devicetree
    • Properti pulse-gpios di-bind ke pin GPIO pulse
    • Properti busy-gpios di-bind ke pin GPIO busy
    • Properti linux,keycodes dapat digunakan secara opsional untuk mengubah peta keycode bawaan
    • Informasi dan contoh lebih lanjut tersedia di devicetree binding
  • Variabel lingkungan KDIR harus menunjuk ke source tree kernel
  • Build, instal, dan muat dengan perintah berikut
make
make install
modprobe rotary_dial
  • Setelah modul kernel dimuat, perangkat input dial putar akan muncul dan secara default bekerja seperti keypad angka sesuai pemetaan keycode
  • Untuk debugging, paket evemu dapat digunakan
    • Gunakan evemu-describe untuk memeriksa properti perangkat input
    • Gunakan evemu-record untuk memantau event dial

VM pengembangan dan simulasi

  • Tersedia VM untuk pengembangan driver dan pengujian end-to-end
  • Kernel Linux di VM tersebut telah diberi patch devicetree
  • Devicetree ini menyediakan jalur GPIO busy dan pulse yang disimulasikan melalui gpio-sim
  • Dari user space, jalur GPIO dapat dimanipulasi untuk mensimulasikan pemanggilan dial
  • Prosedur penggunaan VM adalah sebagai berikut
    • Instal Nix package manager
    • Aktifkan flakes
    • Bangun VM dengan make vm
    • Karena kernel harus dibangun ulang dengan konfigurasi kustom dan patch devicetree, proses ini bisa memakan waktu
    • Jalankan VM dengan make run-vm
    • Setelah startup, akan otomatis login ke shell pengembangan
  • Di VM, KDIR menunjuk ke artefak build kernel VM sehingga driver dapat dibangun cukup dengan make
  • Beberapa target clang-format dan clang-tidy tidak cukup hanya dengan artefak build, sehingga KDIR harus menunjuk ke source kernel yang diunduh secara terpisah
  • Setelah build, driver dapat dimuat dan dilepas dengan target insmod dan rmmod

rotary_dialer dan pengujian

  • rotary_dialer mensimulasikan pemutaran angka dengan memanipulasi jalur GPIO
  • Build dijalankan dengan perintah berikut
make rotary_dialer
  • Contoh untuk memutar tiga pulsa adalah sebagai berikut
test/rotary_dialer 3
  • Saat kembali ke shell, angka 2 seharusnya terlihat, karena devicetree simulasi diatur ke encoding gaya Swedia
  • Test suite dapat dijalankan di VM pengembangan
make test
  • Pengujian memuat modul kernel dan menjalankan berbagai kasus
    • Memverifikasi fungsi perangkat input
    • Memastikan keycode yang diharapkan dipancarkan setelah memutar jumlah pulsa tertentu
    • Memastikan input yang tidak valid ditangani dengan benar

Apakah akan masuk mainline

  • Penjelasan proyek ditutup dengan candaan bahwa meski masa depan penggunaan dial putar sebagai perangkat input dipandang positif, Linus Torvalds mungkin tidak akan setuju

1 komentar

 
GN⁺ 2025-05-25
Komentar Hacker News
  • Pada akhir 1970-an, saya membuat dialer telepon putar dengan kalkulator HP41C
    Saya menghubungkan relai reed NC ke buzzer piezoelektrik, lalu memasang kontak NC secara seri pada saluran telepon
    Untuk membuat bunyi bip singkat yang diperlukan bagi pulsa dial, saya menggunakan synthetic programming dengan opcode yang tidak terdokumentasi, dan jika memasukkan nama secara alfanumerik, kalkulator bisa mencari nomor lalu meneleponnya
    Sekitar 10 tahun lalu di kantor saya bertemu seseorang bernama Keith Jarrett, dan bahkan sebelum sempat bertanya apakah dia Keith Jarrett yang menulis HP-41C Synthetic Programming Manual, dia berkata, “Bukan, saya bukan musisi. Semua orang menanyakan itu”
    Jadi saya menyelesaikan pertanyaannya, dan karena ternyata dia adalah penulis buku yang saya baca 35 tahun sebelumnya, dia juga sangat senang dan terkejut
    https://picclick.com/HP-41-Synthetic-Programming-Made-Easy-b...
    https://www.hpmuseum.org/prog/synth41.htm

    • Saya dan teman saya juga membuat ini, dan memakainya sebagai speed dialer yang bekerja di telepon apa pun
      Saya masih menyimpan buku panduan cetak synthetic programming itu
      Bahkan tanpa teknik tersebut, kalkulator ini adalah alat yang bisa diprogram dan sangat kuat untuk ukuran awal 1980-an
      Bersama teman yang sama, saya juga menulis program yang menangani seluruh perhitungan untuk kelas pascasarjana pemodelan parameter-S transmisi RF, lalu saat kami memamerkannya kepada profesor, “imbalan”-nya adalah penggunaan program kalkulator dilarang di semua ujian
      Baru belakangan saya tahu bahwa ada perebutan wilayah antara kubu RF dan kubu elektronika digital di jurusan teknik elektro
      Kalkulator HP-41CX mengajarkan salah satu pelajaran terpenting dalam program gelar teknik elektro saya: dalam pengambilan keputusan manusia, teknologi sering kali bukan prioritas utama
    • Saya penasaran apakah hal seperti itu diprogram langsung di kalkulatornya sendiri
      Saya pernah melakukan hal serupa dengan hp49g dan bangga bisa menulis program di lingkungan yang terbatas, tetapi kalau itu dilakukan dengan layar satu baris 41c, itu benar-benar pencapaian luar biasa
  • Sedikit promosi untuk orang yang menyukai telepon putar: saya memodifikasi telepon saya menjadi headset Bluetooth yang berfungsi penuh, termasuk kemampuan menelepon nomor dengan dial putarnya
    Postingan HN-nya tidak terlalu berhasil, tetapi sempat ditampilkan di Hackaday
    https://hackaday.com/2024/10/31/bakelite-to-the-future-a-195...
    https://blog.waleson.com/2024/10/bakelite-to-future-1950s-ro...
    Sepertinya tidak sulit membuat mode alternatif untuk keypad angka putar Bluetooth
    Sekarang tinggal mencari waktunya

    • Keren. Sekarang memakai ESP32 jauh lebih ekonomis, tetapi saya tetap ingin sekali mencoba menulis driver kernel Linux
  • Saat iPhone masih sebatas rumor, saya pernah mengusulkan bahwa kalau dimasukkan touch wheel seperti iPod waktu itu, itu akan menjadi kesempatan bagus untuk menghidupkan kembali dial putar
    Semua orang yang ada di sana menolaknya mentah-mentah, tetapi berkat itu sekarang kita cukup menyiapkan sebuah box Linux untuk memakai nuansa putar klasik tersebut

    • Sebenarnya Anda tidak sendirian: https://www.patentlyapple.com/2010/12/apple-wins-patent-for-...
      Steve Jobs juga tercantum sebagai salah satu inventor paten ini
      Saya dan seorang rekan Apple lain juga mengajukan paten yang hampir identik pada waktu yang hampir sama, dan untuk beberapa waktu Apple memiliki dua paten untuk mensimulasikan dial putar pada touch wheel
      Paten saya akhirnya kedaluwarsa, sedangkan paten Steve diperpanjang
      Saya mengusulkan ide ini kepada seorang rekan saat makan malam di SF dalam keadaan agak banyak minum, sambil teringat gim pinball lama yang sensasi fisiknya sangat bagus hingga terasa seperti nyata
      Menurut saya, intinya adalah mewujudkan sensasi fisik dial agar pengguna bisa memutar angka apa pun dengan cepat menggunakan gestur yang tepat
      Saat mengajukan ide ini, saya belum mendapat akses ke informasi iPhone, tetapi rekan saya mengirimkannya ke komite paten dan disetujui
      Melihat kemiripannya dengan paten Steve, saya membayangkan komite itu tertawa, tetapi ada juga perbedaan besar sehingga bukan duplikasi
      Namun sepertinya mereka ingin menambah jumlah paten terkait iPhone sebagai bagian dari pemasaran awal. Saat peluncuran iPhone, Steve juga sudah mengatakan bahwa ada “lebih dari 200 paten”
    • Kalau saja mereka merilis setidaknya satu model iPod yang hanya ditambahi jaringan seluler, itu pasti menjadi lini waktu yang sangat lucu
      Inputnya bisa memakai ini: https://www.youtube.com/watch?v=9BnLbv6QYcA
    • Saya yakin pasti ada aplikasi yang memungkinkan menelepon dengan dial putar di layar sentuh
  • Sekarang sudah waktunya seseorang memanfaatkan telepon putar itu dengan benar untuk menamatkan Dark Souls

    • Saya jadi teringat bahwa Soul Calibur bisa dimainkan dengan kontroler pancing Dreamcast
  • Perlu versi DTMF
    Di Australia ada orang yang membuat kotak sangat kecil yang berjalan hanya dengan daya dari saluran telepon, dan mengubah pulsa putar menjadi Touch Tone
    Berkat itu saya masih bisa terus memakai telepon putar sampai beberapa tahun lalu, sebelum pindah ke gedung yang tidak punya kabel POTS. Sayang sekali

    • Bukankah bisa disambungkan ke FXS/ATA agar menjadi telepon VoIP?
      Saya juga masih memakai beberapa telepon dengan cara itu, termasuk telepon candlestick dari 1920-an
  • Sangat bagus. Saya suka implementasi driver minimal seperti ini
    Ini menunjukkan betapa sedikit kode nyata yang dibutuhkan dalam sebuah driver, tetapi sekaligus juga menunjukkan betapa banyak flag dan metode kernel yang perlu diketahui agar satu driver dasar bisa berjalan
    Bagian yang mengatakan, “Awalnya saya ingin mengimplementasikan ulang driver ini dengan Rust untuk melihat kondisi proyek Rust for Linux, tetapi segera menyadari bahwa binding yang diperlukan belum ada, jadi bagian itu harus menunggu” menarik dan cukup mengecewakan, meski tidak di luar dugaan
    Mendokumentasikan pendekatan dan hambatan yang ditemui sepertinya akan menjadi tulisan blog yang menarik

    • Sayangnya, saat ini binding Rust hanya tersedia untuk sebagian API subsistem, jadi saya belum bisa melangkah cukup jauh hingga layak ditulis secara bermakna
      Jika dukungannya sudah matang sekitar tahun depan dan implementasi ulang dengan Rust menjadi memungkinkan, saya dengan senang hati akan menuliskan pengalaman saya
  • Ini mengingatkan saya pada sesuatu terkait telepon putar sekitar 30 tahun lalu
    Saya sendiri tidak menggunakan telepon putar, tetapi jaringan telepon yang masih kompatibel dengan telepon semacam itu terlibat
    Daripada menuliskannya berulang-ulang, saya tinggalkan tautannya di sini:
    https://news.ycombinator.com/item?id=40391220
    Untuk membangkitkan rasa penasaran, ceritanya melibatkan suara ketukan keras dan “San Jose Police! Open up!”

    • Cerita itu terasa familier, jadi saya hendak berkomentar bahwa 112 dialihkan ke 911
      Karena 112 lebih mudah diputar, tetapi ternyata saat pertama kali melihat tulisan itu setahun lalu saya sudah meninggalkan komentar yang sama
    • Sepengetahuan saya, semua PSTN pernah kompatibel atau masih kompatibel dengan pulse dial
  • Saya teringat Sarah di Connections Museum di Seattle yang menulis driver agar soft PBX Asterisk di sebuah mesin Linux bisa berkomunikasi dengan trunk pre-DTMF dari sentral telepon lama menggunakan revertive pulse signaling
    https://www.youtube.com/watch?v=35N5vKKGDy8

  • Sebagai pembalikan sejarah yang menarik, telepon putar di Selandia Baru memiliki korespondensi angka dan jumlah pulsa yang terbalik
    Di sini jumlah pulsanya adalah 10 - angka

    • Ada alasan teknis yang mendalam untuk itu
      Saya mungkin salah satu dari sangat sedikit orang yang masih hidup yang mengetahui alasannya, jadi saya bagikan agar pengetahuan ini tidak hilang
      Di antara sentral telepon mekanis yang relatif awal, ada yang disebut rotary exchange [0]
      Pulsa dari telepon menghubungkan kopling di dalam sentral untuk menggerakkan penggerak putar, dan itu menggerakkan perangkat switching
      Salah satu masalah rotary exchange adalah bantalan koplingnya aus sehingga sambungan menjadi tidak stabil
      Di Aotearoa/NZ, ketika diputuskan untuk memasang rotary exchange, sudah ada rencana penomoran yang berjalan
      Seseorang yang cerdas mengetahui masalah keausan itu, lalu menghitung bahwa berdasarkan rencana penomoran yang ada, jika posisi 1 pada dial dibuat menghasilkan 9 pulsa, keausan bantalan secara keseluruhan akan jauh berkurang sehingga perawatan yang dibutuhkan lebih sedikit
      Dari situlah cara ini bermula
      Fakta menarik lainnya, sejauh yang saya tahu Norway juga memilih konfigurasi yang sama untuk telepon putarnya
      Saya tidak yakin apakah alasannya sama
      [0] https://en.wikipedia.org/wiki/Rotary_system
  • Kebetulan telepon putar sedang saya bongkar di atas meja dan saya sedang menggulung ulang clock spring-nya ketika tulisan ini muncul
    Kebetulan yang aneh

    • Pertanyaan serius: sudah berapa lama telepon itu berada di atas meja dalam keadaan terbongkar?
      Kalau mirip dengan saya, kira-kira sudah sekitar 2 tahun