rotary_dial_kmod, çevirmeli telefon kadranını Linux’ta bir evdev giriş aygıtına dönüştürerek kadran girişlerinin sayısal tuş takımı gibi işlenmesini sağlar
- Çalışma biçimi, BUSY/PULSE anahtarlarını SoC’nin GPIO pinlerine bağlama yapısına dayanır; mekanik kontakların doğası gereği bounce giderme gerekir
- Ülke ve üreticiye göre kontak adları, darbe süreleri ve sayı kodlaması değişebileceğinden gerçek kablolamayı ve etiketleri kontrol etmek önemlidir
- Kullanıcı, devicetree’ye
rotary-dial düğümünü ve pulse-gpios, busy-gpios ayarlarını ekledikten sonra bunu ağaç dışı kernel modülü olarak derleyip yükler
- Gerçek donanım olmasa bile geliştirme VM’inde
gpio-sim tabanlı BUSY/PULSE GPIO’ları manipüle ederek uçtan uca testler çalıştırılabilir
Çevirmeli kadranı evdev giriş aygıtına dönüştürme
rotary_dial_kmod, çevirmeli telefon kadranını evdev giriş aygıtına dönüştüren bir Linux kernel sürücüsüdür
- Aşağıdaki durumlar göz önünde bulundurulur
- Sayısal tuş takımına kıyasla daha yavaş çevirmeyi tercih edenler
- Eski çevirmeli telefonları dijital ortamda kullanmak isteyenler
- Gerçek donanım olmadan VM tabanlı uçtan uca geliştirme ve test ortamı olan basit bir sürücü örneğine ihtiyaç duyanlar
- Diğer yaratıcı kullanım senaryoları
Kablolama ve sinyal davranışı
- Bu proje çevirmeli kadranı, BUSY ve PULSE adlı iki anahtardan oluşan bir aygıt olarak ele alır
- BUSY normalde açık
- PULSE normalde kapalı
- İki anahtar, pull-up dirençleri üzerinden gömülü Linux SoC’nin GPIO pinlerine bağlanır
- Kadran çevrildiğinde BUSY anahtarı kapanır ve busy pini low seviyesine sürülür
- Kadran başlangıç konumuna dönerken PULSE anahtarı tekrarlı olarak açılır ve pulse pini high seviyesine sürülür
- Mekanik anahtar olduğu için bounce oluşabilir
Ülke ve üreticiye göre farklar
- Anahtar kontak işaretleri ülke ve üreticiye göre farklı olabilir veya hiç olmayabilir
- Almanya’da BUSY anahtarına nsa denir
- Almanya’da PULSE anahtarına nsi denir
- Pin ataması belirsizse kadranı yavaşça hareket ettirirken bir multimetrenin süreklilik test cihazıyla anahtar tepkisini kontrol edin
- Darbe sinyalinin duty cycle’ı ve süresi de ülke ve üreticiye göre değişir
- Almanya örneğinde darbe başına PULSE anahtarı 62 ms açık, 38 ms kapalı kalır
- Çoğu durumda 1~9 darbe, 1~9 rakamlarına; 10 darbe ise 0’a karşılık gelir
- Bazı ülkelerde kodlama farklıdır; İsveç örneğinde 1 darbe 0’a, 10 darbe ise 9’a karşılık gelir
- Emin değilseniz kadranın etiketini kontrol etmek gerekir
Kernel modülünü kullanma
- Sürücü standart bir ağaç dışı kernel modülüdür
- Kullanım adımları, Linux kernel derleme ortamının hazır olduğu ve derleme makinesi ile hedef makinenin aynı olduğu varsayımıyla başlar
- Gerçek ortamlarda çoğu zaman Yocto veya Buildroot’un sağladığı cross toolchain ile derleme yapılır
- devicetree’ye
rotary-dial düğümü eklenir
pulse-gpios özelliği pulse GPIO pinine bağlanır
busy-gpios özelliği busy GPIO pinine bağlanır
linux,keycodes özelliğiyle varsayılan keycode haritası isteğe bağlı olarak değiştirilebilir
- Ayrıntılı bilgi ve örnekler devicetree binding içinde yer alır
KDIR ortam değişkeni kernel kaynak ağacını göstermelidir
- Derleme, kurulum ve yükleme şu komutlarla çalıştırılır
make
make install
modprobe rotary_dial
- Kernel modülü yüklendiğinde çevirmeli kadran giriş aygıtı görünür ve keycode eşlemesine bağlı olarak varsayılan biçimde sayısal tuş takımı gibi çalışır
- Hata ayıklama için evemu paketi kullanılabilir
evemu-describe ile giriş aygıtı özelliklerini kontrol edin
evemu-record ile kadran olaylarını izleyin
Geliştirme VM’i ve simülasyon
- Sürücü geliştirme ve uçtan uca test için bir VM sağlanır
- VM’in Linux kernel’ine devicetree yaması uygulanmıştır
- Bu devicetree, gpio-sim üzerinden simüle edilmiş busy ve pulse GPIO hatları sağlar
- Kullanıcı alanından GPIO hatları manipüle edilerek kadran çevirmesi simüle edilebilir
- VM kullanım adımları şöyledir
- Nix package manager kurulur
- flakes etkinleştirilir
make vm ile VM derlenir
- Kernel’in özel yapılandırma ve devicetree yamasıyla yeniden derlenmesi gerektiğinden zaman alabilir
make run-vm ile VM çalıştırılır
- Başlangıçtan sonra geliştirme kabuğuna otomatik giriş yapılır
- VM’de
KDIR, VM’in kernel derleme çıktılarını gösterdiği için sürücü yalnızca make ile derlenebilir
clang-format ve clang-tidy hedeflerinin bazıları için yalnızca derleme çıktıları yeterli değildir; KDIR ayrı olarak indirilmiş kernel kaynaklarını göstermelidir
- Derlemeden sonra
insmod ve rmmod hedefleriyle sürücü yüklenip kaldırılabilir
rotary_dialer ve testler
rotary_dialer, GPIO hatlarını manipüle ederek sayı çevirmeyi simüle eder
- Derleme şu komutla çalıştırılır
make rotary_dialer
- Üç darbe çevirmeye örnek şöyledir
test/rotary_dialer 3
- Kabuğa döndüğünüzde
2 rakamı görünmelidir; bunun nedeni simülasyon devicetree’sinin İsveç tipi kodlama ayarlamış olmasıdır
- Test paketi geliştirme VM’inde çalıştırılabilir
make test
- Testler kernel modülünü yükler ve çeşitli vakaları çalıştırır
- Giriş aygıtı işlevselliğini doğrular
- Verilen darbe sayısı çevrildikten sonra beklenen keycode’un yayımlanıp yayımlanmadığını kontrol eder
- Hatalı girişin düzgün işlenip işlenmediğini kontrol eder
Mainline’a dahil edilme durumu
- Proje açıklaması, çevirmeli kadranı giriş aygıtı olarak kullanma geleceğine olumlu baksa da Linus Torvalds’ın buna katılmayabileceğine dair bir şakayla sona erer
1 yorum
Hacker News yorumları
70’lerin sonunda HP41C hesap makinesiyle döner kadranlı bir telefon çevirici yapmıştım.
NC reed rölesini piezo zile bağladım, NC kontağını da telefon hattına seri olarak koydum.
Çevirme darbeleri için gereken kısa bip seslerini üretmek üzere belgelenmemiş bir opcode kullanan synthetic programming yöntemini kullandım; bir adı alfanümerik olarak girince numarayı bulup arama yapabiliyordu.
Yaklaşık 10 yıl önce şirkette Keith Jarrett adında biriyle tanıştım; ona HP-41C Synthetic Programming Manual’ı yazan Keith Jarrett olup olmadığını sormama fırsat kalmadan “Hayır, müzisyen değilim. Herkes bunu soruyor” dedi.
Ben de sorumu sonuna kadar sordum; 35 yıl önce okuduğum o kitabın yazarı olduğu için o da çok sevindi ve şaşırdı.
https://picclick.com/HP-41-Synthetic-Programming-Made-Easy-b...
https://www.hpmuseum.org/prog/synth41.htm
Synthetic programming kılavuzunun basılı kopyası hâlâ duruyor.
O tekniği bir kenara bıraksak bile, bu hesap makinesi 1980’lerin başı için çok güçlü, programlanabilir bir araçtı.
Aynı arkadaşla RF iletiminde S-parametre modellemesi üzerine lisansüstü dersin tüm hesaplarını yapan bir program da yazmıştık; hocaya hava atınca “ödül” olarak tüm sınavlarda hesap makinesi programlarının kullanılması yasaklandı.
Ancak daha sonra elektrik mühendisliği bölümünün RF tarafı ile dijital elektronik tarafı arasında bir alan kavgası olduğunu öğrendim.
HP-41CX hesap makinesi, elektrik mühendisliği eğitimimdeki en önemli derslerden birini öğretti: İnsanların kararlarında teknoloji çoğu zaman en yüksek öncelik olmuyor.
hp49g ile benzer bir şey yapmıştım ve kısıtlı bir ortamda program yazdığım için gurur duymuştum; ama bunu 41c’nin tek satırlık ekranıyla yaptılarsa gerçekten büyük başarı olurdu.
Döner kadranlı telefon sevenler için küçük bir reklam yapayım: Kendi telefonumu tam işlevli bir Bluetooth kulaklığa dönüştürdüm; buna döner kadranla telefon numarası çevirmek de dahil.
HN gönderisi pek tutmadı ama Hackaday’de yer aldı.
https://hackaday.com/2024/10/31/bakelite-to-the-future-a-195...
https://blog.waleson.com/2024/10/bakelite-to-future-1950s-ro...
Bluetooth döner sayısal tuş takımına alternatif modlar eklemek zor olmasa gerek.
Şimdi tek gereken zaman bulmak.
iPhone’un hâlâ sadece söylentiden ibaret olduğu dönemde, o zamanki iPod gibi bir touch wheel eklenirse döner kadranı canlandırmak için iyi bir fırsat olacağını önermiştim.
Oradaki herkes tarafından kesin bir dille reddedildim ama bunun sayesinde artık klasik döner kadran hissini kullanmak için yalnızca bir Linux kutusu hazırlamak yeterli hale geldi.
Steve Jobs da bu patentte mucitlerden biri olarak yer alıyordu.
Ben ve başka bir Apple meslektaşım da neredeyse aynı dönemde neredeyse aynı patenti verdik; Apple bir süre touch wheel üzerinde döner kadran simülasyonu için iki patente sahipti.
Benim patentim sonunda düştü, Steve’in patenti yenilendi.
SF’teki bir akşam yemeğinde biraz fazla içmişken bu fikri meslektaşıma önermiştim; fiziksel hissi çok iyi olup gerçekten öyleymiş gibi hissettiren eski bir pinball oyununu düşünüyordum.
Bence kilit nokta, kullanıcının uygun bir jestle herhangi bir rakamı hızlıca çevirebilmesini sağlayan kadran fiziğini uygulamaktı.
Bu fikri ortaya attığımda iPhone hakkında bilgi paylaşılmış kişilerden biri değildim; ama meslektaşım bunu patent kuruluna gönderdi ve onaylandı.
Steve’in patentiyle benzerlikleri görünce kurulun gülmüş olabileceğini düşünüyorum, ama ciddi farklar da vardı; bu yüzden mükerrer değildi.
Yine de sanırım erken dönem pazarlamanın parçası olarak iPhone’la ilgili patent sayısını artırmak istiyorlardı. Steve de iPhone tanıtımında zaten “200’den fazla patent” olduğunu söylemişti.
Giriş için de bunu kullanırlardı: https://www.youtube.com/watch?v=9BnLbv6QYcA
Artık birinin o döner kadranlı telefonu hakkını vererek kullanıp Dark Souls’u bitirmesinin zamanı geldi.
Bir DTMF sürümü gerekiyor.
Avustralya’da yalnızca hat gücüyle çalışan çok küçük bir kutu yapan biri var; döner kadran darbelerini Touch Tone’a dönüştürüyor.
Birkaç yıl önce POTS kablolaması olmayan bir binaya taşınana kadar onun sayesinde döner kadranlı telefonumu kullanmaya devam edebilmiştim. Yazık oldu.
Ben de 1920’lerden kalma şamdan tipi telefon dahil birkaç telefonu hâlâ bu şekilde çalışır halde kullanıyorum.
Çok iyi. Böyle minimal sürücü uygulamalarını seviyorum
Sürücüde gerçek kodun ne kadar az gerekebileceğini gösteriyor; ama aynı zamanda temel bir sürücüyü çalıştırmak için bilinmesi gereken bayrakların ve çekirdek metotlarının ne kadar çok olduğunu da gösteriyor
“Başta Rust for Linux projesinin durumunu görmek için sürücüyü Rust ile yeniden uygulamayı denemek istedim, ama gereken binding’lerin henüz olmadığını kısa sürede fark ettim; o kısmı beklemek gerekecek” bölümü ilginç ve epey hayal kırıklığı yaratıcı, ama beklenmedik değil
Yaklaşımı ve karşılaşılan engelleri belgelemek ilginç bir blog yazısı olur gibi
Gelecek yıl civarında destek olgunlaşıp Rust ile yeniden uygulama mümkün hâle gelirse deneyimimi memnuniyetle yazarım
Yaklaşık 30 yıl önceki çevirmeli telefonlarla ilgili bir işi hatırlattı
Doğrudan çevirmeli telefon kullanmadım, ama hâlâ bu telefonlarla uyumlu bir telefon ağı işin içindeydi
Tekrar tekrar yazmak yerine bağlantıyı buraya bırakıyorum:
https://news.ycombinator.com/item?id=40391220
Merak uyandırmak için söyleyeyim: yüksek bir kapı vurma sesi ve “San Jose Police! Open up!” geçen bir hikâye
Çünkü 112’yi çevirmek daha kolaydı; meğer bir yıl önce o yazıyı ilk gördüğümde aynı yorumu zaten yapmışım
Seattle’daki Connections Museum’da Sarah’nın, Linux kutusundaki Asterisk soft PBX’in eski telefon santralinin DTMF öncesi trunk’larıyla revertive pulse signaling üzerinden iletişim kurmasını sağlayan bir sürücü yazdığı işi hatırlattı
https://www.youtube.com/watch?v=35N5vKKGDy8
İlginç bir tarihsel terslik olarak, Yeni Zelanda’daki çevirmeli telefonlarda rakamlarla darbe sayıları arasındaki eşleşme tersti
Orada darbe sayısı 10 - rakamdı
Bu nedeni bilen hayattaki çok az kişiden biri olabileceğimi düşündüğüm için, bilgi kaybolmasın diye paylaşıyorum
Görece erken dönem mekanik telefon santrallerinden biri rotary exchange idi [0]
Telefondan gelen darbeler santral içindeki bir kavramayı devreye sokup döner tahriki hareket ettiriyor, bu da anahtarlama düzeneğini hareket ettiriyordu
rotary exchange’in sorunlarından biri, kavrama balatalarının aşınıp bağlantının güvenilmez hâle gelmesiydi
Aotearoa/Yeni Zelanda’da rotary exchange kurmaya karar verildiğinde mevcut bir numaralandırma planı zaten vardı
Akıllı birisi aşınma sorununu biliyordu ve mevcut numaralandırma planına göre kadrandaki 1 konumunun 9 darbe üretmesini sağlarsa toplam balata aşınmasının çok daha azalacağını, dolayısıyla bakım ihtiyacının düşeceğini hesapladı
Bu yöntem buradan doğdu
Bir başka ilginç bilgi de, bildiğim kadarıyla Norveç’in de çevirmeli telefonlarda aynı düzeni seçmiş olması
Aynı nedenle mi, emin değilim
[0] https://en.wikipedia.org/wiki/Rotary_system
Tam da masamın üstünde bir çevirmeli telefonu sökmüş, saat yayını yeniden kurarken bu yazı çıktı
Tuhaf bir tesadüf
Benim gibiyse yaklaşık 2 yıl olmuştur