マイコン工作実験日記

Microcontroller を用いての工作、実験記録

発着信時処理の改善

2008-01-16 11:34:25 | W-SIM
昨日の記事で、「着信に応答しないとW-SIMが勝手に切断してしまう」問題について書きましたが、その対策法がわかりました。そもそも問題の認識が間違っていました。正確には、W-SIMが切断しているのではなく、網側から切断されていました。以下がそのログです。

RING
PROTOCOL=0
ID=
CAUSE=USER REQUEST

DISC

REASON:66

PROGIND:0

NO CARRIER

REASON:66

DISCメッセージが切断要求があったことを示しており、切断原因(0x66 = 102)はタイマの満了を示しています。

以前から奇妙に感じていたのですが、W-SIMに対して別の電話機から発信すると、呼出音(RBT: Ring Back Tone)が聞こえないのです。W-SIM側で着信に応答すると、発信側ではダイアル後、呼出音がせずにいきなりつながってしまうのです。この動作について考えてみると、

「おそらく着信が入ってもW-SIMが網に対してALERTINGメッセージを送出していないのだろう」

と推測することができます。網側は着信を知らせるSETUPを打ってから、端末側の着信処理が進んで、適切な応答が返ってくるのを待っています。必要な応答が一定時間内に返ってこない場合には、網側から切断をおこなってきます。切断されるまでの時間がおよそ10秒だったので、NTTのISDN技術参考資料を調べてみるとT310タイマーが10秒に設定されており、ちょうど発生している現象に符合します。このタイマーの停止条件より、網側は、W-SIMからALERTING, CONNECTあるいはDISCが送られてくるのを待っていると考えられます。この仮定が正しければ、W-SIMにはALERTINGを送出するための手段として、なんらかの仕掛けが用意されているのに違いありません。そう考えてWikiのATコマンド一覧を見直してみると、AT@CALLEDというコマンドがあるのに気が付きました。説明が無いのですが、如何にも自分が呼び出しを検知したことを通知するかのようなネーミングではありませんか。

さっそく着信時処理に小さな修正を加えました。RINGを検出した際にAT@CALLEDを送出するようにしただけです。実際に試してみると ビンゴ!! です。発信側では、呼出音(RBT)が聞こえるようになり、切断されることもなくなりました。着呼時のメッセージの流れは次のようになっていると考えられます。

発信については以前DTEモードでのCTS信号において「DTR信号をいじってみると良さそうだ」と書きましたが、どうやらBREAK信号の送出も有効なことがわかりました。ただし、どのくらいの期間BREAKを送出すれば良いのかがわかりません。不定なのかもしれません。現在は、ATコマンドの送出に先立ち、CTS信号が出るまでBREAKを送出し続けるようにしていますが、このように対処するようにしてから確実にATDでの発信ができるようになりました。