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
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 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 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
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
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”
Inputnya bisa memakai ini: https://www.youtube.com/watch?v=9BnLbv6QYcA
Sekarang sudah waktunya seseorang memanfaatkan telepon putar itu dengan benar untuk menamatkan Dark Souls
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
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
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!”
Karena 112 lebih mudah diputar, tetapi ternyata saat pertama kali melihat tulisan itu setahun lalu saya sudah meninggalkan komentar yang sama
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
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
Kalau mirip dengan saya, kira-kira sudah sekitar 2 tahun