1 puan yazan GN⁺ 2025-05-25 | 1 yorum | WhatsApp'ta paylaş
  • 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

 
GN⁺ 2025-05-25
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

    • Bir arkadaşım ve ben de bunu yapmıştık; herhangi bir telefonda çalışan bir hızlı arama cihazı olarak kullanıyorduk.
      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.
    • Böyle bir şeyi doğrudan hesap makinesinin üzerinde programlayıp programlamadıklarını merak ediyorum.
      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.

    • Harika. Bugünlerde ESP32 kullanmak çok daha ekonomik bir seçenek ama yine de Linux çekirdek sürücüsünü mutlaka denemek istedim.
  • 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.

    • Aslında yalnız değildin: https://www.patentlyapple.com/2010/12/apple-wins-patent-for-...
      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.
    • iPod’a yalnızca hücresel ağ bağlantısı ekleyip tek bir model bile çıkarsalardı gerçekten komik bir zaman çizgisi olurdu.
      Giriş için de bunu kullanırlardı: https://www.youtube.com/watch?v=9BnLbv6QYcA
    • Dokunmatik ekranda döner kadranla telefon araması yaptıran bir uygulama mutlaka vardır gibi geliyor.
  • Artık birinin o döner kadranlı telefonu hakkını vererek kullanıp Dark Souls’u bitirmesinin zamanı geldi.

    • Dreamcast’in olta kontrolcüsüyle Soul Calibur oynanabildiği aklıma 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.

    • FXS/ATA’ya bağlayıp VoIP telefon haline getirmek olmaz mı?
      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

    • Ne yazık ki şu anda yalnızca bazı alt sistem API’leri için Rust binding’leri var; bu yüzden anlamlı biçimde yazıya dökecek kadar ilerleyemedim
      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

    • Hikâye tanıdık geldiği için 112’nin 911’e yönlendirildiğini yorum olarak yazacaktım
      Çünkü 112’yi çevirmek daha kolaydı; meğer bir yıl önce o yazıyı ilk gördüğümde aynı yorumu zaten yapmışım
    • Bildiğim kadarıyla tüm PSTN’ler darbeli aramayla uyumluydu ya da hâlâ uyumlu
  • 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 - rakam

    • Bunun derin bir teknik nedeni de vardı
      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

    • Gerçek bir soru: o telefon masanın üstünde sökülmüş hâlde ne kadar zamandır duruyordu?
      Benim gibiyse yaklaşık 2 yıl olmuştur