- Rotary Phone Dial Linux Kernel Driver は、古いダイヤル式電話機を Linux の evdev 入力デバイス に変換するカーネルモジュール
- このプロジェクトは、シンプルなサンプルドライバーと仮想マシンベースの開発環境を提供しており、教育およびテスト用途としても非常に有用
- 実際のハードウェアがなくても開発とテストが可能で、GPIO シミュレーションをサポート
- ほぼすべてのキーマッピング設定をサポートし、各国の多様なパルス符号化方式にも対応可能
- 標準的なカーネルモジュールであるため、Linux システムへの拡張および統合が容易
Rotary Phone Dial Linux Kernel Driver 概要
- このプロジェクトは、古い回転式(ロータリー)電話機のダイヤルを Linux システムの標準入力デバイス(例: テンキー)へ変換するカーネルモジュール
- 次のような人が利用を検討できる
- ゆっくりしたダイヤル操作で数字を入力したい場合
- 昔のアナログ電話機をデジタル時代へ持ち込みたいユーザー
- 実機なしでサンプルカーネルドライバーと仮想開発/テスト環境を必要とする教育者
- その他、創造的な実験目的など
回路の接続方法
- 回転ダイヤルは基本的に BUSY(開放状態) と PULSE(閉状態) の 2 つのスイッチで構成される
- これら 2 つのスイッチは、組み込み Linux が動作するシステムの GPIO ピン にプルアップ抵抗とともに接続される
- ダイヤルを回すと BUSY スイッチが閉状態になり、ダイヤルが元の位置へ戻る間、PULSE スイッチが繰り返し開閉する
- 接続方法とピン配置は国やメーカーによって異なるため、マルチメーターでスイッチの反応を確認することが推奨される
- パルス信号のデューティサイクル(開放/閉状態の時間)とデコード方式も国やメーカーごとに異なる
- 例: ドイツでは 1 パルスあたり開放 62ms、閉状態 38ms
- 通常は 1 回〜9 回のパルスが 1〜9、10 回のパルスが 0 を表す(スウェーデンなど例外あり)
- 不明な場合は、ダイヤルのラベルを確認するかテストが必要
使い方
- このドライバーは標準的なカーネル外部モジュール(out-of-tree kernel module)
- 手順を要約すると
- デバイスツリーに
rotary-dial ノードを追加し、pulse-gpios と busy-gpios を実際のピンにマッピング
- 必要に応じて
linux,keycodes プロパティでキーコードマップを変更
- カーネルソースのパス(
KDIR)を環境変数で指定してからビルドとインストールを行い、モジュールをロード
- カーネルモジュールがロードされると入力デバイスが作成され、テンキーとして動作する
- evemu ツールで入力デバイスの属性やダイヤルイベントを監視可能
開発およびテスト用仮想マシン(VM)
- ドライバー開発とエンドツーエンドテストのための仮想マシン環境を提供
- この VM は、gpio-sim でシミュレーションされる busy/pulse GPIO を devicetree にパッチした形で提供される
- ユーザー空間から GPIO を制御してテストシナリオを実装可能
- Nix パッケージマネージャーと flakes 機能を有効にしたうえで VM をビルドし、実行できる
- VM 内ではすぐに開発シェルへログインされる
- ドライバーをビルドした後、モジュールのロード/アンロードもサポート
rotary_dialer ツールで特定のパルス数をシミュレーションし、ダイヤル入力のテストが可能
- (スウェーデン式の符号化環境では、3 パルスが数字 2 として認識される、など)
テスト
- ドライバーには包括的なテストスイートも付属
- VM 環境で
make test を実行すると自動化されたケースを実行できる
- 入力デバイスの動作検証、ダイヤル数字入力時に正しいキーコードが送出されるかの確認、不正な入力の処理など、さまざまな状況を確認可能
メインライン登録の可否
- 開発者はロータリーダイヤルの未来を前向きに見ているが、Linus Torvalds は同意しないかもしれないとユーモラスに述べている
1件のコメント
Hacker Newsのコメント