マイコン工作実験日記

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

呼出し音の確認

2008-08-19 23:09:26 | VoIP
SIPクライアントの登録ができたので、次のステップとして発呼の処理にとりかかっています。とは言っても、ハード的にはまだW-SIMすらつながっていないので、当然ながら実際に発呼することはできません。そこでW-SIMのモデム動作をソフトで疑似的に実現してやることで、SIPのプロトコル処理部分の実装とその動作確認作業を進めることにします。

今回、実装と試験を進めるのは、発呼、呼び出しと接続前の切断動作です。相手の呼び出し(ALERT)が確認できた後に、相手が応答する前に発呼側から切断するというシナリオに相当します。下図のようなシーケンスを想定します。

  • クライアントからの発呼動作によって生成されるINVITEを受けて、本来であればW-SIMからの発呼動作をすべきところですが、W-SIMがないので疑似モデムタスクにATDTメッセージを送って、100 Tryingを返すことにします。
  • 疑似モデムタスクは、ATDTメッセージの受信から500ms後にALERTイベントを生成します。これを受けてVoIP GWは180 Ringingをクライアントに送ります。
  • クライアントからの切断操作によって生成されるCANCELを受けたら、疑似モデムタスクにATHメッセージを送って、クライアントには200 OKを送り返します。
  • 疑似モデムタスクはATHの受信から500ms後にOKイベントを生成します。
  • VoIP GWはOKを受けて、クライアントには487を送信します。
  • クライアントは200 OKを返してダイアログが終了します。

今のところ上記フローを実現するために必要な状態遷移表しか用意していません。実験したい手順に応じた状態遷移を順次追加していくことで、だんだんと完成度を高めていくことにします。

現段階ではRTPは全く実装できていないので音声の送受はできません。そのため、上記シーケンスでもINVITEの持つSDPの内容については全く見ていません。しかしながら、180 Ringingをクライアントが受信した時点で、クライアントソフトが自分で呼出し音を生成して流すことができれば、それを確認することができるはずです。X-Liteで試験したところ、次の画面のようになりました。



54321がダイアルした番号です。"Ringing..."という表示とともにめでたくPCのスピーカから呼び出し音が流れだしました。画面右に緑色のインジケータが縦に並んでいますが、呼び出し音に応じてこの表示が上下しました。切断手順も動いているようです。うーん、なんとなく "らしく" なってきました。


最新の画像もっと見る

4 コメント

コメント日が  古い順  |   新しい順
はじめまして (デルタ)
2008-08-20 18:40:44
はじめまして、デルタと申します。
突然で大変に申し訳無いのですが、ご相談に乗って頂きたいことがありコメントをさせてもらいました。
私は、1年間PC専門学校に通い、今年4月に就職した新人です。入社して2ヶ月程経ったときに、組み込みを覚えてもらうかなと言われ、生まれて初めてワンチップマイコン(AVR AT90S2313)なるものを目にしました。ITのどの方面に対しても、知識や経験や勉強時間が少ないので、パソコンに関してもプログラミングに関してもマイコンに関しても、まだまだ素人でございます。(高校時代に地学、大学時代は教育学部でしたので、プルアップという言葉さえ最近知りました。)
小さな会社で、かつ自分と同じプログラマがいない状況なので、聞ける人が誰もおらず、研修といっても自分でネットから情報を探したり書籍を読んだりして勉強をしている状況です。
本題ですが、この度、携帯電話の電話発着信機能をマイコンで操作する必要が出てきました。
色々と調査をしまして、まずはハンズフリー機器に着目しました。携帯電話の外部接続端子の平型コネクタ部分の第8ピンに、LowとHi-zで約2秒のON信号を送ると電話を発着信することを確認しました。しかし、携帯電話側の動作として、この機能を利用しても結局1箇所にしか電話を発信できないことがわかり、候補から消えました。
次に着目したのは、ATコマンドです。FOMA n905iを携帯用USB通信ケーブルでPCに接続し、DocomoサイトのドライバをインストールしてハイパーターミナルからATコマンドで発着信が行えることを確認しました。
機種やキャリアによって多少の操作の違いは出ますが、これならば複数個所に電話発信をすることも可能ということで、ATコマンドを利用することになりました。これと同じことをマイコン(AVR)に行わせるといったところで、一筋縄ではいかないことを知りました。使用しようとしているマイコンがAVR(の予定)なのでUART機能しか搭載していなかったり、USBのホストとデバイス間でエニュメレーションを行っていたり等々。USBに関しての知識も深くなかったので、USBホストの機能を1からマイコンにプログラムするのも非現実的でした。ならば、USBホストのチップを使ってみてはどうかと考えました。
このような流れで、色々と調べているうちに、sirius506さんのブログに辿り着きました。2008年3月1日の「USBホストを追加した」の記事のコメント欄に、shinさんという方の「FOMA携帯をシリアルATコマンドで使えるボードを・・・」の台詞を見つけ、今まさに自分がやろうとしていることではないだろうかと思いました。
これから先に進むのにどこからどう手をつけていいものか悩んでいます。
何かとっかかりになるようなアドバイスを頂けませんでしょうか。
USBをもっと勉強する。この書籍が役に立つ。SL811HSTに関してはここに情報がある。なんでも構いません。
また、shinさんと連絡をとる方法というのはございませんか? 是非とも一度お話をお聞きしたいのですが。
大変な長文で、しかも何を言っているのかよく分からない文章でご迷惑をお掛けします。誠に申し訳ありません。
ひとつ宜しくお願いいたします。
返信する
Re: はじめまして (sirius506)
2008-08-20 23:23:06
はじめまして。入社したばかりで大変そうなのは良くわかりますが、ここはやはり少し落ち着いてUSBホストについて調べてみた方が良いかと思います。

雑誌ではちょっと古いですが、CQ出版のインタフェース2004年10月号がUSBの特集になっており、ホストとしてSL811の説明もありますので参考になると思います。バックナンバーを探すなり、CD-ROMを購入するとかで入手できるのではないでしょうか。

http://www.cqpub.co.jp/interface/contents/2004/200410.htm

インタフェースは2008年5月号にUSBホスト機能をもつFR60が付属していましたから、この号あたりも参考になりませんでしょうか?

USBを使うにはAT90S2313は、いくらなんでも小さすぎるでしょうから、AVR全般についても機種検討された方がいいように思われます。

なお、SL811とかMAX3421EのようなUSBホストチップを使っても、エニュメレーションが不要になるわけではありません。ホストチップを制御して、エニュメレーション処理をおこなうソフトを作成することが必要です。
返信する
ありがとうございます (デルタ)
2008-08-21 09:02:12
ご丁寧な回答、本当にありがとうございます。
やはり、USBについての知識を深めることが一番の近道ですよね。
紹介して頂いた書籍やサイトを参考にしつつ、1歩ずつこなしていこうと思います。
改めて、相談に乗って頂きありがとうございました。
返信する
Re: ありがとうございます (sirius506)
2008-08-21 10:32:01
個人的な意見としては、SL811はすでに古いデバイスだと思います。秋月で入手できるのでホビーの世界ではまだ一般的なのでしょうが、これから開発する製品に使うのはどうかなという気もします。値段も決して安くありませんし。

AVRを使うことを前提としているのであれば、USB AVRの中にOTG機能を持っているものがあるようですが、これを使って携帯をつなぐことはできないのでしょうか? OTGはちゃんと調べたことないので明言できないのですが、ホストのロールで動かしてつなげられてもいいように思います。1チップで済んだ方が基板面積も小さくなり、安くなると思います。
返信する

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。