Rev.2ボードの時と同じように、W-SIM電話機ボードでのタスク構成についても書いておくことにします。TOPPERSのシステムタスクについては、省略します。
キーを押したり、W-SIMの状態に変化があった場合にはmain_taskならびにmodem_reader_taskがそれを検出し、イベントを生成してデータ・キューに入れるようにしています。RTCから毎秒発生する割り込みや電界強度の変化、LCDのスリープモード遷移タイマーの満了といった事象も、すべてイベントとして扱い、データ・キューに送られます。
電話機としての振舞いの制御をおこなっているは、phone_taskです。データ・キューからイベントを順番に読みだし、その時点での呼や画面の状態に応じた制御をおこないます。メニューの表示や操作の処理もphone_taskがおこなっています。
LCDへの書き込みはすべてphone_task経由でおこなわれるようになっています。複数のタスクがデバイスに対してのアクセスをおこなう場合には、アクセスの競合を避けるためにロック処理が必要となりますが、アクセスするタスクは一つだけになっているので、ロックは不要となっています。
呼の発信や着信の実際の処理は、W-SIMに対してATコマンドを送信することに帰着します。発信ならATD、着信ならATAコマンドを発行した後、modem_reader_taskがCONNECTメッセージを受信したことをphone_taskに通知すると、呼は通話状態になったとみなされます。W-SIMからのPCM信号は全てCODECチップにつながっていますので、マイコンは音声については何も処理していません。CODECは、これらの信号を受けて受信したPCM信号を展開してスピーカあるいはイヤフォンから再生してくれます。一連の処理は全てCODECチップがハードウェアで処理してくれますので、マイコンがする仕事は出力するデバイスや再生音量を決めたりすることくらいで、これらの操作はI²Cで行います。このように通話中の状態でもAT91SAM7Sマイコンはヒマにしており、退屈しのぎに通話時間を数えて表示するくらいの仕事しかしていないわけです。
タスク名 | 説明 |
---|---|
main_task | 初期化処理をおこなった後、キーパッドならびにスイッチの入力を監視し、イベントを生成する。 |
modem_reader_task | W-SIMからのメッセージを監視し、イベントを生成する。 |
phone_task | イベントを受信し、対応する処理をおこなう。 |
ringer_task | 着信時鳴動音の周期を生成するタスク |
console_task | デバック用コマンドの処理をおこなう。 |
キーを押したり、W-SIMの状態に変化があった場合にはmain_taskならびにmodem_reader_taskがそれを検出し、イベントを生成してデータ・キューに入れるようにしています。RTCから毎秒発生する割り込みや電界強度の変化、LCDのスリープモード遷移タイマーの満了といった事象も、すべてイベントとして扱い、データ・キューに送られます。
電話機としての振舞いの制御をおこなっているは、phone_taskです。データ・キューからイベントを順番に読みだし、その時点での呼や画面の状態に応じた制御をおこないます。メニューの表示や操作の処理もphone_taskがおこなっています。
LCDへの書き込みはすべてphone_task経由でおこなわれるようになっています。複数のタスクがデバイスに対してのアクセスをおこなう場合には、アクセスの競合を避けるためにロック処理が必要となりますが、アクセスするタスクは一つだけになっているので、ロックは不要となっています。
呼の発信や着信の実際の処理は、W-SIMに対してATコマンドを送信することに帰着します。発信ならATD、着信ならATAコマンドを発行した後、modem_reader_taskがCONNECTメッセージを受信したことをphone_taskに通知すると、呼は通話状態になったとみなされます。W-SIMからのPCM信号は全てCODECチップにつながっていますので、マイコンは音声については何も処理していません。CODECは、これらの信号を受けて受信したPCM信号を展開してスピーカあるいはイヤフォンから再生してくれます。一連の処理は全てCODECチップがハードウェアで処理してくれますので、マイコンがする仕事は出力するデバイスや再生音量を決めたりすることくらいで、これらの操作はI²Cで行います。このように通話中の状態でもAT91SAM7Sマイコンはヒマにしており、退屈しのぎに通話時間を数えて表示するくらいの仕事しかしていないわけです。