予想していたよりも簡単にDTMF検出ができてしまって、SLICの基本的な使い方もわかってしまいました。SIPの方も発信は確認できているので、基本通話ができるメドが立った感じです。しかし、せっかく$150も払って買ったSLICボードですので、もう少し使いこなしてやろうという欲が出てきました。そんなわけで、ナンバーディスプレイに挑戦してみることにしまいた。
アナログ電話に関する技術的な情報は、NTTが
電話サービスのインタフェースとして公開しています。
この技術参考資料の中でナンバーディスプレイについても解説されているので、この仕様に沿って必要な信号をSLICから送出してやれば、電話機は発信者番号を表示してくれるはずです。
技術参考資料からナンバーディスプレイのシーケンスを抜き出すと下図のようになります。NTTの方が書いた
この記事からの拝借です。
極性反転
というのは、RJ11の2本の線の極性を反転してやる操作で、これはSLICの64番レジスタで操作できます。次の
情報受信端末起動信号
というのは、0.5秒鳴動/0.5秒休止の周期で呼出し信号を送出してやることのようです。ですので、これもSLICのRING関連のレジスタを設定してやることで、実現できます。普通の2秒/1秒の周期の呼出し信号の場合には電話機は着信音を鳴らしますが、この情報受信端末起動信号の場合にはナンバーディスプレイ対応の電話機は着信音を鳴らさないのです。ナンバーディスプレイに対応していない安物電話機では、こんな芸当はできないので、短い周期でベルが鳴り始めます。
一次応答信号
というのは、なんのことはない、Off-hook信号のことです。実際には人間が受話器をとりあげているわけではないですが、電話機が自動的にオフフック操作をすると思えばいいでしょう。これを受けて、SLIC側から発信者番号情報をモデム信号として送信してやります。モデム信号については、SLICが持っているFSK信号の送信機能を利用することで送信できます。
電話機側ではモデム信号を受信して、それに対応する番号情報を表示すると、受信完了信号を送信します。この信号もなんのことはない、実体はオンフック信号です。
シーケンスは理解できたので、初めの部分だけでも早速実験してみようということで、実験環境構築。自宅の電話機をつなげてみました。
ファームウェアの側では、最初に極性反転して、ベル周期を変えた鳴動を開始するためのコマンド
slic clid
を追加しただけです。
コマンドを入れて、しばらくするとOff-Hookが検出されてます。つまり、電話機が情報受信端末起動信号に対して一次応答信号を送ってきているのが確認できたことになります。この時、電話機のLCDには次のように表示されていました。どうやら番号情報の受信待ちの間は、このように表示するようになっているようです。
本来であれば、ここで番号情報をモデム信号で送ってやるべきなのですが、まだそんな機能は用意できていないので、何も送れません。待つこと数秒で電話機側がタイムアウトして送ってくるのが受信完了信号に対応するOn-Hookです。電話機側の表示は次のようになりした。
何も情報送ってませんからね。と、いうわけで送るべきモデム情報さえ送ってやれば、番号表示してくれそうです。