久し振りにVoIP GWネタです。前回は通話時に音声波形を表示するようにしてみましたが、今回は着信時の機能です。着信時には発信者の電話番号を表示しますが、携帯電話のように電話帳機能があれば、漢字で表示することができます。これまでの自作ジャケットには電話帳機能がありませんでしたので、発信者名の表示はできませんでした。それに漢字フォントをジャケット側に準備するのも面倒です。
今回はEthernetがあるので、この通信機能を使って、サーバ側に電話番号から名前への変換機能を用意することで、発信者名の表示を可能とすることにしました。仕掛けはいたって単純で、下図に示したようにサーバ側に発信者番号情報を渡すと、サーバが発信者名への変換をおこないその漢字表記のビットマップを返すというものです。ビットマップの生成にはいつものようにIPA GUIフォントを使っています。
サーバ側には発信者番号だけでなく、イベントの種別も渡しています。これは、今後、着信以外のイベントを渡して処理することを想定しているためです。プロトコルとしては、UDPで簡易的なもので実験しています。本来であれば、TCPでHTTPとか使って、データの送受もXML形式を使うとかすればWebアプリ的になるのですが、TCP載せるとRAM容量がキツクなってきそうな状況なので、パスすることに。サーバからの応答は、縦40ドット分の画像イメージということに決めつけてしまい、生データを返すだけにしています。そのため、受信処理ではLCDのフレームバッファに応答を読み込むだけで済ましています。そうすると、定期的な画面更新処理が走った時点でLCD画面に表示が現れるというわけです。
シーケンス図に示したように、発信者名が表示される前に短時間ですが、発信者番号が表示されている期間もあります。動画をコマ送りすれば、わかるかもしれません。ただし番号は一部Xでつぶしてあります。また、今回の動画ならびに写真では青色LEDのバックライトを点灯させています。
サーバ側処理も極めて単純化して実験しています。ビットマップ生成は以前 フォントデータ生成に使っていたものをNokia 5110用の生データを出力するように変更したものをひとつのコマンドとして用意しておき、それをPerlで書いたサーバから呼び出して使っています。電話帳データは、いまのところPerlの連想配列としてサーバコードに埋め込んであるだけです。
発信者番号が非通知の場合にはID=には何も番号が載らないので、この場合にはanonymousという名前にVoIP GW上で変換しています。これをサーバ側で漢字表記に変換する際に非通知という文字列に変換することにしました。プロトコル自体はUDPベースで、サーバからの返答内容をビットマップととして、そのままLCDに送っているだけの処理です。
フォントはスケーラブルですので、表示する文字数に応じて適宜フォントのサイズを変更してビットマップイメージを作成しています。これもサーバ側の機能ですので、マイコン側では何にもせずに単に表示しているだけなのですけど。
はい、ありかわらずW-SIM中心でやっておりますが、ひとつのものの完成度を高めるよりは、バリエーションを楽しんでいます。ホントは根気が続かずにすぐに関心が他のことに向いてしまうだけなのですが。。。
近頃はW-SIMの機能究明もやっていないので、結果的にいつも普通の音声通話/データ通信機能しか使わなくなってきています。そういう意味ではW-SIMの比重は少なくなるかもしれませんが、ARMマイコンがらみでの工作/実験を続けていくつもりでいますので、今後もたまに覗いてみてください。
以前他のページで紹介されたのを見て以来、久々にお邪魔します。
着々と勝手ジャケットの開発進んでたんですね。
開発頑張ってください!