これまでの作業で基本的な機能パーツが揃ってきましたので、これらを制御して電話として機能させるための制御タスクを用意することにしました。全体は、下図に示すように5つのタスクで構成することにしました。
![](https://blogimg.goo.ne.jp/user_image/5a/bb/974984138886e525e4f84278cf4f0f35.png)
VinTask, VoutTask, SlicTask, WT32Taskの各タスクはこれまでの実験で作ってきたものです。そして今回、全体を制御するタスクとしてPhoneTaskを作り始めました。
まずはトーン生成機能の追加。VoutTaskではダイアルトーンのような単一周波数のトーンを連続して生成する機能を持っていますが、ふたつの高さの音を繰り返して生成することはできません。そこでPhoneTaskから2つの周波数を切り替える指示をVoutTaskに送ることでこれを実現してみました。トーンの生成は、フッキングがトリガとなって開始、終了します。
![](https://blogimg.goo.ne.jp/user_image/2c/dc/17ccb9e07bb4a8500c52261f376e5bff.png)
HFP接続が無い状態でオフフックした場合には、400Hzと600Hzを交互に出すことでエラー通知とします。オンフックされたならば、トーン生成を止めます。
![](https://blogimg.goo.ne.jp/user_image/13/fe/e59988f9272bfeca82a145103eae0372.png)
HFP接続が確立した状態ではオフフックを検出すると、400Hzを連続して生成することでダイアルトーンを出力します。
![](https://blogimg.goo.ne.jp/user_image/5a/bb/974984138886e525e4f84278cf4f0f35.png)
VinTask | 音声信号の入力処理タスク。DTMFの検出も行う。 |
VoutTask | 音声信号の出力処理タスク。トーンの生成も行う。 |
SlicTask | フッキング検出並びに着信鳴動を生成するタスク。 |
WT32Task | WT32の音声入出力ならびにイベント解析を行うタスク。 |
PhoneTask | 全体の制御を行うタスク。LCDへの出力も行う。 |
VinTask, VoutTask, SlicTask, WT32Taskの各タスクはこれまでの実験で作ってきたものです。そして今回、全体を制御するタスクとしてPhoneTaskを作り始めました。
まずはトーン生成機能の追加。VoutTaskではダイアルトーンのような単一周波数のトーンを連続して生成する機能を持っていますが、ふたつの高さの音を繰り返して生成することはできません。そこでPhoneTaskから2つの周波数を切り替える指示をVoutTaskに送ることでこれを実現してみました。トーンの生成は、フッキングがトリガとなって開始、終了します。
![](https://blogimg.goo.ne.jp/user_image/2c/dc/17ccb9e07bb4a8500c52261f376e5bff.png)
HFP接続が無い状態でオフフックした場合には、400Hzと600Hzを交互に出すことでエラー通知とします。オンフックされたならば、トーン生成を止めます。
![](https://blogimg.goo.ne.jp/user_image/13/fe/e59988f9272bfeca82a145103eae0372.png)
HFP接続が確立した状態ではオフフックを検出すると、400Hzを連続して生成することでダイアルトーンを出力します。