2
PHS 携帯電話アプリケーション・ソフトの開発

田中岳彦
河合孝時

今回から 2 回にわたって，携帯電話のアプリケーション・ソフトウェアの開発について取り上げる．開発環境として，ソフィアシステムズの Linux ベース PHS 携帯電話開発キット「Sandgate W-SIM Phone」を利用する．本キットの開発環境の概要，開発できるアプリケーション・ソフトウェア，GTK+ を用いて作成したソフトウェアを本開発キット上で動作させるための修正方法，音声端末の開発において考慮すべき事項と対策などを解説する．

Sandgate W-SIM Phone は，W-SIM を利用したソフィアシス（編集部）

3）ミドルウェアの追加

テムズ製の音声端末向けの開発キットです．本開発キットには，

4）デバイス・ドライバの改良と新規作成

音声端末を実現するためのミドルウェア・ライブラリと評価用

5）カーネルの改良

サンプル・ソフトウェアが含まれます．OS には Linux を採用● ホスト・パソコンと W-SIM で開発環境を構築

しています．Linux の豊富な資産とミドルウェアを組み合わせ

本開発キットを利用して音声端末のソフトウェアを開発するて利用することで，音声端末向けのソフトウェアを低コストでには，Linux をインストールしたホスト・パソコンと W-SIM を開発できます．

用意する必要があります．本開発キットを図 2 のように接続して，ソフトウェアを開発します．

Sandgate W-SIM Phone で開発できるアプリケーション

開発に必要な機材を以下に示します．
¡本開発キットに付属するもの
1）Sandgate W-SIM Phone 実機

評価用サンプル・ソフトウェアの中には，ソース・ファイル

2）デバッグ・ボードが用意されているものもあり，機能追加や改良を行うことがで

3）RS-232-C クロス・ケーブル

きます．図 1 に本開発キットのソフトウェア構成を示します．

4）LAN クロス・ケーブル

本開発キットを利用することで，W-SIM を利用した音声端

5）AC アダプタ

末に必要な以下のソフトウェア開発を行うことができます．

6）USB ケーブル

1）アプリケーション・ソフトウェアの新規作成¡別途用意するもの

2）評価用サンプル・ソフトウェアの改造と機能追加

1）ホスト・パソコン
シリアル・ポート（RS-232-C）× 1
LAN カード（実機接続用の専用 LAN カード）× 1

ソシア
フョプ
トンリ
ウ・ケ
ェ
ー
ア

ミ
ド
ル
ウ
ェ
ア

カ
ー
ネ
ル

評価用サンプル・ソフトウェア
W-SIM

Sandgate W-SIM Phone
開発キットAPI

GTK+

各種ミドルウェア

DirectFB

POSIX（glibc）

ACアダプタ

実機

RS-232-Cクロス・ケーブル

Linuxカーネル
デバイス・ドライバ
ハードウェア（Sandgate W-SIM Phone）

広く利用されているGTK+によるGUIを採用
アプリケーション・ソフトウェア作成を容易にする各種ミドルウェア機能¡アプリケーション・ソフトウェア連携¡低消費電力化機構¡複数デバイスを連携制御

LANクロス・ケーブル

デバッグ・ボード

ホスト・パソコン

図 1 Sandgate W-SIM Phone 開発キットのソフトウェア構成

図 2 Sandgate W-SIM Phone とホスト・パソコンの接続

本開発キットには，音声端末を実現するためのミドルウェア・ライブラリと評価用
サンプル・ソフトウェアが含まれる．Linux の豊富な既存資産とミドルウェアを利用して，音声端末向けアプリケーション・ソフトウェアを開発することができる

Sandgate W-SIM Phone 実機と Linux をインストールしたホスト・パソコンを，RS232-C クロス・ケーブルと LAN クロス・ケーブルで接続する．W-SIM は別途用意する必要がある

158 KEYWORD ―― PHS，W-SIM，Linux，Sandgate W-SIM Phone，クロス開発環境，

アプリケーション・ソフトウェア，GTK + ，待ち受け，ダイヤラ，メーラ，PIM，FEP

Jan. 2007

ケーション・ソフトウェアやミドルウェアと容易に連携させLinux（Fedora Core4 フル・インストールを推奨）ることができる

2）W-SIM

4）Linux の豊富な資産を活用できるLinux をインストールしたホスト・パソコンに，クロス・コ● サンプル・ソフトウェアが用意されている

ンパイル環境と実機をホスト・パソコンからネットワーク・
ブートする環境（図 3）を構築します．このネットワーク・ブー

本開発キットに搭載されている主なサンプル・ソフトウェア

ト環境上で動作させることにより，作成したソフトウェアの動について説明します．

作確認を行います．また，クロス・コンパイル環境で作成した「待ち受け」は，システム起動後の最初の画面です．すべてのシステムを，実機上のフラッシュ ROM に書き込むことで，通アプリケーション・ソフトウェアの中の最下位層に位置します．

常の音声端末と同じようにスタンドアロン（実機のみの環境）で日時の表示やメイン・メニューへ遷移する機能を提供します．

動作させることもできます．

Windows のデスクトップに相当します〔図 5（a）〕．

● GTK+ を利用してソフトウェアを開発できる「ダイヤラ（無線モデム通信ソフトウェア）」は，発信・着信を行います．発信は待ち受けからの数字キーで遷移します〔図 5

本音声端末のアプリケーション・ソフトウェアは，オープ
ン・ソースで広く利用されている GTK+ 注のインターフェース（b）〕．

を利用して GUI（Graphical User Interface）を構築し，ミドル「メーラ（メール管理ソフトウェア）」はその名のとおりメール

ウェア API によりハードウェアの各機能を利用します．通常はの送受信を行うアプリケーション・ソフトウェアです．メイ

C 言語でアプリケーション・ソフトウェアを作成します．アプ

ン・メニューから，あるいは待ち受けからのショートカット・

リケーション・ソフトウェアとミドルウェア API の関係を図 4 にキーによって遷移します〔図 5（c）〕．

示します．
本開発キットのアプリケーション・ソフトウェアには，以下ホスト・パソコン（Linux）の特徴があります．
1）GTK+ インターフェースにより，GUI を容易に作成できる

クロス・
コンパイル環境

2）ミドルウェア API により，ハードウェアの各機能を容易に
利用できる

クロス・
コンパイラ

3）アプリケーション・フレームワークにより，ほかのアプリ

図4
アプリケーション・ソフトウェアとミドルウェア APIの関係
アプリケーション・ソフトウェアは，GTK + の機能を利用してGUI を構築し，ミドルウェア API によりハードウェア機能を利用する．また，アプリケーション・フレームワークの機能を利用して，ミドルウェアやほかのアプリケーション・ソフトウェアとの通信を行う

Jan. 2007

ミ
ド
ル
ウ
ェ
ア

カ
ー
ネ
ル

カーネル
デバッグ・
ボード

NFSサーバ

注：GTK+（GIMP Toolkit）は，GUI ベースのアプリケーション・ソフトウェアを開発するための C 言語ライブラリ．もともと，GIMP（GNU Image
Manipulation Program）というフリーの画像編集ソフトウェアを開発するために作られた．ライセンスは GNU LGPL（GNU Lesser General
Public License）となっているため，入手や改変，再配布が可能．GTK+には，ラベルやテキスト・ボックス，チェック・ボックス，メニュー，
ツール・バー，ツリー・ビューなど，さまざまな部品（ウィジェット）が標準で用意されている．また，GTK+ の新しいウィジェットも簡単に開発することができる．GTK+ や GIMP の詳細については，以下のWeb サイトを参照されたい．
¡GTK+（http://www.gtk.org/）¡GIMP（http://www.gimp.org/）

ソシア
フョプ
トンリ
ウ・ケ
ェ ー
ア

RS-232-C
クロス・ケーブル

tftpサーバ

ヘッダ・
ファイル

クロス開発環境

RedBoot

ルート・
ファイル
システム

LANケーブルターミナル・
ソフトウェア

図 3 ネットワーク・ブートを利用した開発環境の構成
実際の開発は，ホスト・パソコンと実機を接続し，ネットワーク環境で行う．ホスト・パソコンから TFTP（Trivial File Transfer Protocol）でカーネルをロードし，ルート・ファイル・システムは NFS（Network File System）マウントして使用する．クロス・コンパイル環境は開発キットに含まれる

アプリケーション・
ソフトウェアアプリケーション・
ソフトウェアアプリケーション・
ソフトウェアミドルウェアAPI…

GTK+
アプリケーション・
フレームワーク

トーン鳴動

MIDI制御LED制御…

DirectFB

Linuxカーネル
デバイス・ドライバ
ハードウェア159

表 1 システム・アプリケーションの一覧（a）待ち受け（b）ダイヤラシステム・アプリケーション
起動アニメーション
待ち受け
ダイヤラ
発着信履歴
機能設定
データ・フォルダ
追加アプリケーション
各種メニュー
電源 OFF/終了アニメーション

ソース・ファイル注
○
×
×
○
×
×
○
○
×

注：○は添付，×はバイナリのみ

表 2 ベンダ・アプリケーションの一覧（c）メーラ（d）PIM

ベンダ・
アプリケーション注
メーラ
PIM
Java
Web ブラウザ
文字入力（エンジン部分）

提供元
富士通ビー・エス・シー
富士通ビー・エス・シー
Tao Group 社
Tao Group 社
オムロンソフトウェア

ソフトウェア名
Be Star Mail
Be Star PIM
intentintentAdvanced Wnn
Ver1.20

注：ベンダ・アプリケーションのソース・ファイルは添付されない

プリケーション，ベンダ・アプリケーション，追加アプリケー
ションの 3 種類に分類されます．

● 基本機能を実現するためのシステム・アプリケーション
システム・アプリケーションは，音声端末の基本機能を実現するためのソフトウェアで，システムに静的に組み込まれています．ほかのアプリケーション・ソフトウェアが，後述するア（e）Java（f）FEP

図 5 サンプル・ソフトウェアの利用画面
本開発キットには，音声端末に必要な基本機能に対応するサンプ
ル・ソフトウェアが用意されている

プリケーション・フレームワークに起動要求を行うと，アプリ
ケーション・フレームワークから起動されます．
本開発キットには，表 1 のシステム・アプリケーションが搭載されています．

● 目的に応じて搭載するベンダ・アプリケーション「PIM（Personal Information Manager）」は，カレンダやスケ

ベンダ・アプリケーションは，音声端末の利用目的に応じてジュール帳，電話帳の管理を行います．メイン・メニューから，

オプションとして搭載されるソフトウェアです．メーラや PIM

あるいは待ち受けからのショートカット・キーによって遷移しなどのソフトウェアがこれに該当します．ベンダ・アプリケー

ます〔図 5（d）〕．

ションは，システム・アプリケーションと同じようにシステム「Java」は JavaVM として機能し，Java のアプリケーション・に静的に組み込まれます．また，アプリケーションの種類別

コードを実行する環境を提供します．メイン・メニューから，（メーラ機能，Java 機能など）に，ほかのソフトウェアとのイン

あるいは待ち受けからのショートカット・キーによって遷移しターフェースが統一されます．そのため，端末の利用目的に合ます〔図 5（e）〕．

わせて別のソフトウェアに静的に差し替えることができます．

「FEP（Front-end Processor）」は日本語文字入力を支援しまシステム・アプリケーションと同じように，ほかのソフトウェ

す．FEP はメーラ，PIM，Java，機能設定など，さまざまなア

アがアプリケーション・フレームワークに起動要求を行うと，プリケーション・ソフトウェアで利用されます〔図 5（f）〕．

アプリケーション・フレームワークから起動されます．
本開発キットには，表 2 のベンダ・アプリケーションが搭載

アプリケーションの種類と開発の流れされています．

● 動的にインストールできる追加アプリケーション
本開発キットに搭載されているソフトウェアはシステム・ア

160

追加アプリケーションは，「データフォルダ」からシステムにJan. 2007

コーディングとコンパイル

コーディングとコンパイル

GTK+により作成済みのアプリケーション・ソフトウェアを，ミドルウェア
APIの仕様に従って評価キット上で動作させるための処理を追加し，コンパイルする

GTK+により作成済みのアプリケーション・ソフトウェアを，ミドルウェア
APIの仕様に従って評価キット上で動作させるための処理を追加し，コンパイルする

アプリケーション・ソフトウェアの配置

アプリケーション・ソフトウェアの配置

1）作成したアプリケーション・ソフトウェアのロード・モジュールをシ
ステムに配置する
2）1）の配置情報をアプリケーション・フレームワーク（ミドルウェア）の設定ファイルに記述する

1）作成したアプリケーション・ソフトウェアのロード・モジュールを含むインストール・パッケージを作成する
2）作成したインストール・パッケージをシステムの「データフォルダ」のファイル・システムにコピーする実機による動作確認

実機による動作確認

システムを起動し，アプリケーション・ソフトウェアを実機上で動作させる

1）システムを起動し，「データフォルダ」アプリケーションから追加
アプリケーションをインストールする
2）「追加アプリ」メニューからインストールしたアプリケーション・
ソフトウェアを選択して起動する

図 6 システム・アプリケーションとベンダ・アプリケーションの開発の流れシステム・アプリケーションとベンダ・アプリケーションは，静的にシステムに配置される

動的にインストールできるアプリケーション・ソフトウェアで

図 7 追加アプリケーションの開発の流れ
追加アプリケーションは，「追加アプリ」メニューから動的にインストールできる

アプリケーション・フレームワーク

す．インストールしたアプリケーションは，「追加アプリ」メ
ニューから起動することができ，アンインストールすることもアプリケーション管理

ウィンドウ管理

メッセージ通信

電話機状態管理

できます．追加アプリケーションの機構は，作成したアプリ
ケーション・ソフトウェアをダウンロードなどにより，システ
ムに動的に追加できるしくみとして用意されています．

● アプリケーション・ソフトウェア開発の流れ
GTK+ を利用してすでに作成済みのアプリケーション・ソフ
トウェアを本開発キット上で動作させる際の手順を中心に，ア

図 8 アプリケーション・フレームワークの機能
アプリケーション・フレームワークは，アプリケーション管理，メッセージ送信，
ウィンドウ管理，電話機状態管理の四つの機能から構成される

プリケーション・ソフトウェア開発の流れについて説明します．
システム・アプリケーションとベンダ・アプリケーションは，
図 6 のような流れで開発します．
一方，追加アプリケーションの場合は，アプリケーションを

はの考慮が必要となります．詳細は後述しますが，音声端末な

動的にインストールできるようにするため，図 7 のような流れ

らではの動作も，アプリケーション・フレームワークを利用すで開発します．なお，追加アプリケーションはパッケージ形式

ることで可能となります．

にする必要がありますが，コーディングおよびコンパイルの時● アプリケーション管理：アプリの起動や終了を管理する

点ではシステム・アプリケーションとの違いはありません．

アプリケーション管理は，アプリケーション・フレームワー
ク上で動作するアプリケーション・ソフトウェアやミドルウェ

アプリケーション・フレームワークのさまざまな管理機構

アの起動，および終了を管理します．アプリケーション・ソフ
トウェアは，それぞれ固有のアプリケーション ID で識別しま
す．そのため，個々のアプリケーション・ソフトウェアには，

アプリケーション・ソフトウェアは，アプリケーション・フ

固有のアプリケーション ID を割り当てる必要があります．こレームワークが提供する四つの管理機構（アプリケーション管の ID を使用してアプリケーション・ソフトウェアの起動，お理，メッセージ通信，ウィンドウ管理，電話機状態管理）のもよびアプリケーション・ソフトウェア間の通信が行われます．

とで動作し，また，これらの機能を利用できます（図 8）．アプ

アプリケーション ID は 16 ビット（2 バイト）で構成され，表 3

リケーション・フレームワークとは，メッセージ通信によるプに示す区分に従って割り当てを行います．

ロセス間通信機能，および各種ミドルウェアに対する処理依頼を行う機能などを備えたライブラリ群のことです．

アプリケーション・ソフトウェアは，初期化するときにアプ
リケーション ID を指定してアプリケーション・フレームワーク

音声端末上のアプリケーション・ソフトウェアの開発は，通初期化 API（wapc_init 関数）を呼び出し，動作環境の初期化

常のアプリケーション・ソフトウェアと異なり音声端末ならでとアプリケーション ID の登録をかならず行う必要があります．

Jan. 2007161

表 3 アプリケーション ID の割り当て

表 4 ウィンドウ終了時の動作

アプリケーションID
0x0000 〜 0x0FFF
0x1000 〜 0x1FFF
0x2000 〜 0x3FFF
0x4000 〜 0x4FFF
0x6000 〜 0x6FFF
0x8000 〜 0x8FFF

終了タイプ
WINDOW_TYPE_NORMAL

説 明
アプリケーション・フレームワーク用ミドルウェア用（通信インフラ依存ミドルウェア）
ミドルウェア用
システム・アプリケーション用
ベンダ・アプリケーション用
追加アプリケーション用

WINDOW_TYPE_ABORTWINDOW_TYPE_GUARD
リスト 1 ウィンドウの登録
ウィンドウの登録

WINDOW_TYPE_BYPASS

ret = wapc_window_register(window, WINDOW_TYPE_NORMAL, NULL );if( ret != MSGAPC_OK ){printf( APP ERROR WINDOW REGISTER \n );return -1;}

説 明
終了の種別にかかわらず，アプリケー
ションに終了指示が行われる
登録したウィンドウが最前面に表示されている場合は，WINDOW_TYPE_NORMAL と同じ動作となる．
最前面に表示されていない場合は，登録したウィンドウが最前面に表示された状
態で，終了処理が完了する
電源キー，W-SIM 挿抜による終了処理の場合，登録したウィンドウが最前面になった時点で終了処理が完了する
終了の種別にかかわらず，登録したウィ
ンドウに対する終了指示は行わない．
登録したウィンドウが最前面に表示された状態でも終了処理は完了せず，下側に位置するほかの画面に対する終了処理は継続して行われる/* wapc_window_register 関数の第 2 引き数で終了タイプ(画面終了時の動作)を指定します */ン・ソフトウェアが起動していない場合は，アプリケーショ● ウィンドウ管理：画面を制御する音声端末では，「待ち受け」→「メイン・メニュー」→「設定画面」というように複数のアプリケーション・ソフトウェアを連ン・フレームワークがアプリケーション・ソフトウェアを起動
し，メッセージ送信を行います．

● 電話機状態管理：電話機の状態変化を通知する

続起動した状態でクリア・キーが押されると，一つ前の画面に電話機状態管理は，電話機の状態変化をアプリケーション・

戻ります．一方，電源キーが押された場合は，一度に待ち受け

ソフトウェアに通知する機能です．バッテリの残量の変化に応に戻ります．ウィンドウ管理は，このような画面制御を容易にじて，待ち受け画面上部の電池残量マークの表示を変更する場実現するための機能を提供します．

合などに使用されます．電話機状態として管理できる状態を表

画面をもつアプリケーション・ソフトウェアは，初期化す

5 に示します．電話機状態が変化すると，アプリケーション・

るときにアプリケーション・フレームワークに対して，画面

ソフトウェアに対して，状態変化を通知するメッセージが送信（GTK+ のウィンドウ）と画面制御の方法（終了タイプ，詳細はされます．アプリケーション・ソフトウェアから電話機状態を表 4）を登録します．リスト 1 にコーディング例を示します．

動的に確認することもできます．

● メッセージ通信：プログラム間通信を提供する
本開発キット上のアプリケーション・ソフトウェアおよびミ
ドルウェアは，アプリケーション・フレームワークが提供する

GTK+ アプリケーションを動作させるための修正方法

メッセージ通信機構を利用して通信を行います．同期通信型と非同期通信型の二つのメッセージ通信方式がサポートされています．

GTK+ アプリケーション・ソフトウェアをアプリケーショ
ン・フレームワーク上で動作させるための改造箇所を中心に，常駐しないアプリケーション・ソフトウェアの起動は，起動

音声端末アプリケーション・ソフトウェアの詳細について説明

要求オプションを付加したメッセージの送信により行います．

します．

起動要求オプションを送信したとき，送信先のアプリケーショ● アプリケーションの初期化前にコールバック関数を登録
GTK+ の初期化処理 gtk_init 関数を呼び出す前にアプリ
ケーション・ソフトウェアの動作環境の初期化とメッセージ到

表 5 電話機状態の一覧

着時のコールバック関数の登録を行います（図 9）．表示する画

状態種別
W-SIM 状態
イヤホン状態
通話状態
USB 状態
電源断可能状態
バッテリ状態
充電状態

面（ウィンドウ）の準備が整ったら，アプリケーション・フレー

162

状 態
挿入/未挿入挿入/未挿入通話中/非通話中
挿入/未挿入電源断可能/電源断不可能
残量未取得/残量 50%以上/10%未満など
未取得/充電中/充電完了/充電なし

ムワークに対してウィンドウ登録を行います．

● 登録したメッセージ処理関数内でメッセージを受信
ほかのアプリケーション・ソフトウェアやミドルウェアからメッセージが到着すると，wapc_init_msg_func_register関数でコールバック関数として登録したメッセージ処理関数が自動的に呼び出されます（図 10）．このメッセージ処理関数内

Jan. 2007

開始

バッテリ・メッセージ
終了メッセージ⁝

アプリケーション・ソフトウェアの動作環境の初期化（wapc_init）

メッセージ処理関数
メッセージ到着時のコールバック
関数登録（wapc_init_msg_func_register）

メッセージ受信（wapc_msg_get）

GTK+初期化処理（gtk_init）

メッセージに応じた処理を実施（処理例）

シグナル・ハンドラ登録（g_signal_connect）¡バッテリ・メッセージの場合→ 電池表示の更新¡終了メッセージの場合→ 終了処理

処理名（関数名） ：追加処理フロー
ウィンドウ表示依頼（gtk_widget_show）
ウィンドウのないアプリケーショ
ン・ソフトウェアでは不要
処理名（関数名） ：
追加処理フローウィンドウ登録（wapc_window_register）
ウィンドウのないアプリケーショ
ン・ソフトウェアでは不要

処理名（関数名） ：GTK+処理フロー

図 10 メッセージ受信時の処理フロー
アプリケーション・ソフトウェアがメッセージを受信すると，初期化時に登録した
コールバック関数が呼ばれる．アプリケーション・ソフトウェアは，コールバック関数内でメッセージに応じた処理を行う．代表的なメッセージは一括終了要求

処理名（関数名） ：
GTK+処理フロー¡電源キー・イベント¡アプリケーション・フレームワー
クからの終了メッセージ¡終了処理⁝

GTK+メイン・ループ（gtk_main）

図 9 アプリケーションの初期化処理フロー
アプリケーション・フレームワークを使用するアプリケーション・ソフトウェア
は，GTK+ 初期化（gtk_init）の前に，フレームワーク登録処理（wapc_init），およ び メ ッ セ ー ジ ・ コ ー ル バ ッ ク 関 数 の 登 録 処 理（ w a p c _ i n i t _ m s g _ f u n c _register）を行う

GTK+メイン・ループ終了（gtk_quit）
処理名（関数名） ：追加処理フローキー・イベント⁝

処理名（関数名） ：
追加処理フロー
処理名（関数名） ：
GTK+処理フロー

メッセージの送信（同期：wapc_msg_sync_send）（非同期：wapc_msg_async_send）

図 11 メッセージ送信時の処理フロー

アプリケーション・ソフトウェアの動作環境の解放（wapc_deinit）

処理名（関数名） ：GTK+処理フロー終了

図 12 アプリケーション・ソフトウェアの終了処理フロー
各種終了イベントにより，アプリケーション・ソフトウェアは終了処理を行う．ア
プリケーション・ソフトウェアが終了する際は，GTK+ メイン・ループの終了処理（gtk_main_quit()）を行った後，アプリケーション・フレームワークからの削除

メッセージ送信処理は，通常のアプリケーション・ソフトウェアにおいてはキー・
イベントを契機に行う．同期メッセージと非同期メッセージを適宜使い分ける．ほかのアプリケーションを起動する場合は，起動要求付きメッセージを送信するの終了処理では，gtk_main 関数から復帰した後に，アプリ
ケーション・ソフトウェアの動作環境の解放を行います（図 12）．
で到着したメッセージを受信し，メッセージに応じた処理を行

アプリケーション・ソフトウェアの動作環境を解放した後は，います．

メッセージの送受信などのアプリケーション・フレームワーク● キー・イベント処理関数内でメッセージを送信の機能は使用できなくなります．

メイン・メニューでキー操作に応じてアプリケーション・● 順番に終了要求してアプリケーションを一括終了

ソフトウェアを起動する場合，アプリケーション・ソフト

電源キーを押したことをアプリケーション・ソフトウェアがウェアは，受け取ったキー・イベントを契機にほかのアプリ

検出した場合，アプリケーション・フレームワークに対して，ケーション・ソフトウェアへメッセージを送信します．このとアプリケーション・ソフトウェアの一括終了を要求する必要がき，GTK＋のキー・イベントのコールバック関数内で，アプリあります．要求を受け付けたアプリケーション・フレームワー

ケーション・フレームワークのメッセージ送信 API を使用してクは，最前面のアプリケーション・ソフトウェアから最背面のメッセージ送信を行います（図 11）．

アプリケーション・ソフトウェアまで，順番に終了要求メッ● 終了処理：メイン関数から復帰した後に動作環境を解放

セージを送信します（図 13）．

GTK+ を利用して作成したアプリケーション・ソフトウェア

Jan. 2007

アプリケーション・ソフトウェアの一括終了の詳細は，次節

163

処理名
（関数名） ：
追加処理フロー

電源キー・イベント⁝必要があります．上記と同じ例では，設定画面の電源キーを押すことによって，待ち受けに戻ります．
このように，同じアプリケーション・ソフトウェアの終了で処理名（関数名） ：
GTK+処理フロー

ウィンドウの一括終了要求（wapc_window_terminate）

図 13 アプリケーション・ソフトウェアの一括終了処理フロー
通常のアプリケーション・ソフトウェアは，電源キーが押された場合に各アプリケー
ション・ソフトウェアに対して一括終了要求を送信する必要がある．電源キー長押
し，W-SIM 挿抜，および低電圧の終了メッセージは，ミドルウェアより送信されるもキーの種類によりその動きは異なります．キーの種類による終了方法をシステム内で統一しておくことで，統一感のある
ユーザ・インターフェースにすることができます．

● 電源キーを長押ししてシステムを終了
電源キーを長押しすると，アプリケーション・ソフトウェア
を終了し，待ち受けに戻るだけでなく，システム全体を終了させる必要があります．

で説明します．

● バッテリ残量が少なくなったらシステムを終了
バッテリ残量がある一定量を下回り，低電圧状態になった場

音声端末アプリケーションが考慮すべき事項と対策

合は，アプリケーション・ソフトウェアを終了する必要があります．この場合，アプリケーション・ソフトウェアだけでなく，システム全体を終了させます．

音声端末向けのアプリケーション・ソフトウェアでは操作性

これにより，低電圧状態の不安定な動作や突発的な電源断をに配慮し，音声端末特有の考慮を行わなければならない部分が防ぎます．突発的に電源が断たれると，最悪，データの消失なあります．Linux の通常の GUI 処理とは異なるので注意が必要

どを引き起こす可能性があります．

です．ここでは，音声端末向けのアプリケーション・ソフト● W-SIM を挿抜したらアプリケーションをすべて終了

ウェアを作成する際のアプリケーション・ソフトウェアの終了

通常の音声端末では，通信部分を物理的に取り外すことはでに関する注意事項を中心に，アプリケーション・フレームワー

きません．一方，W-SIM を使用する音声端末では，W-SIM のクを使用した対策方法について説明します．

挿抜が行われると，その時点で起動しているアプリケーショ● クリア・キーを押してアプリケーションを終了

ン・ソフトウェアをすべて終了し，待ち受けまで戻ります．メー

クリア・キーの押下をアプリケーションの終了に割り当てた

ラや Web ブラウザなどにおいて，実際に通信を行っていた場

場合，クリア・キーが押されたときに一つ前の画面に戻る必要

合はもちろんのこと，文字入力中に W-SIM の挿抜が行われてがあります．たとえば，「待ち受け」→「メイン・メニュー」→

も，待ち受けを除くすべてのアプリケーション・ソフトウェア「設定画面」というように複数の機能を連続して起動した状態でを終了させます．イベントによるアプリケーション・ソフト

クリア・キーが押されると，設定画面から一つ前の画面（メイ

ウェア終了の違いを図 14 に示します．

ン・メニュー）に戻る必要があります．つまり，クリア・キー

電源キーの長押しや低電圧，W-SIM の挿抜による終了は，アによる終了では，キー・イベントを取り扱ったアプリケーショ

プリケーション・フレームワークからの終了要求メッセージとン・ソフトウェアのみが終了すればよいということになります．

して各アプリケーション・ソフトウェアに通知されます．本開● 電源キーを押してアプリケーションを終了

発キットでは，これらのメッセージ送信をミドルウェアが行っ

電源キーによる終了を実行すると，待ち受けまで一度に戻るています．つまり，アプリケーション・ソフトウェアは送信さ
クリア・キーによる終了

図 14
イベントによるアプリケーション・
ソフトウェア終了の違い
通常の終了要求イベントのケースである．待ち受け，メイン・メニュー，機能設定と遷移した状態でクリア・キーを押すと，メイン・メ
ニュー（一つ前の画面）に戻る．一方，電源キーを押した場合は待ち受けに戻る

164

電源キー，W-SIMの挿抜
電源キー長押し，低電圧時はさらにシステム終了へ

Jan. 2007

クリア・キーによる終了

W-SIM挿抜
電源キー長押し，および低電圧時はさらにシステム
終了へ

電源キー

図 15 通話状態のアプリケーション・ソフトウェア終了
ダイヤラ動作中（通話中）にメイン・メニュー，機能設定と遷移した状態で電源キーを押すと，ダイヤラの前面に表示されている画面のみが終了し，ダイヤラが表示された時点で終了要求イベントは停止する．一方，電源キー長押し，および低電圧による終了要求イベントでは，ダイヤラも終了し，システム全体が停止するれたメッセージに従い，正しく終了処理を行えばよいだけです．
また，アプリケーション・ソフトウェアの終了前に編集中のデータを保存したい場合は，終了要求メッセージを契機に保存
未挿入
アイコン

処理を行う必要があります．
一方，電源キーの終了については，電源キーを操作したアプ
リケーション・ソフトウェアがほかのアプリケーション・ソフ
トウェアに対して終了要求メッセージを送信する必要がありま

グレー・
アウト

す．これが，前述したアプリケーション・ソフトウェアの一括終了要求となります．この処理を行わない場合は，ほかのアプ
リケーション・ソフトウェアに終了要求が実行されず，クリア・キー終了と同じ動作となります．
特殊な場面では，終了要求イベントによりアプリケーショ
ン・ソフトウェアを終了させたくない場合があります．たとえば，ダイヤラを起動し，通話中にメイン・メニューから機能設

W-SIM挿入状態

W-SIM未挿入状態

図 16 W-SIM 挿入状態による表示変更の例
メイン・メニューを起動した際の画面である．W-SIM の挿入状態ではアンテナ・マークが表示され，アドレス帳も選択可能となっている．W-SIM が未挿入の状態では，アンテナ・マーク部分に未挿入マークが表示され，アドレス帳はグレー・アウトにより選択不可となる定を起動した状態で電源キーを押す場合を考えます．このとき，機能設定とメイン・メニューは終了させますが，ダイヤラを終了させてしまうと通話が切断されてしまいます．また，通話時を起動するための選択項目をグレー・アウトしたい場合があり間なども確認できません．通話状態のアプリケーション・ソフ

ます．図 16 は，実際に電話機の状態による機能制限を行ってトウェア終了の違いを図 15 に示します．

いるメイン・メニューの例です．

このような場合を考慮し，ウィンドウごとに終了タイプを指こういった場合は，W-SIM 状態の変化を通知するメッセー

定することが可能となっています．これが，表 4 のウィンドウ

ジを受け取り，グレー・アウトするために必要な処理を行いまの終了タイプです．終了タイプは 4 種類あり，適切なタイプをす．実際のメッセージのハンドリング処理について説明します．

指定することで，音声端末ならではの動作を実現できます．

リスト 2 は，実際のコールバック関数のサンプルです．wapc_● 電話機の状態によって機能を制限

msg_get 関数を呼び出してメッセージを取得した後，msg_id

電話機状態とは，電話機に搭載された各種デバイス（ハードを参照し，処理を振り分けます．ここに終了要求メッセージウェア）の状態などを意味します．W-SIM を例にあげると，電（MSGAPC_TERMINATE）が格納されています．さらに，終了理

話機に W-SIM が挿入されているか，未挿入であるかという状

由は，msg 構造体内の実際のメッセージ内容（msg 配列）に格納

態があります．W-SIM が未挿入状態のとき，通信系アプリケー

されています．

ション・ソフトウェア（メーラ，Web ブラウザなど）や電話帳

Jan. 2007

サンプル・ソースでは，W-SIM 挿抜（TERMINATE_REASON_

165

リスト 2
メッセージのハンドリング処理

static void wapc_msg_func(){
int
rc, reason;
struct msg_t
msg;while ( 1 ) {rc = wapc_msg_get( &msg );if ( rc == MSGAPC_ERROR_NOMSG ) {break;}

メッセージを取得

msg_idを参照

switch(msg.header.msg_id){case(MSGAPC_TERMINATE):

終了要求メッセージの判定
reason = (int)*msg.msg;
switch(msg.header.msg_id){case(TERMINATE_REASON_WSIM):
printf("TERMINATE_REASON_WSIM¥n");break;case(TERMINATE_REASON_POWEROFF):printf("TERMINATE_REASON_ POWEROFF ¥n");break;case(TERMINATE_REASON_LOWBATTERY):
printf("TERMINATE_REASON_LOWBATTERY¥n");break;
default :printf("TERMINATE OTHER REASON¥n");break;}
gtk_main_quit();break;

W-SIM挿抜
電源キー/電源キー長押し
低電圧

default:
printf( "msg_func unkown msg(%d)¥n", msg.header.msg_id );break;}}
return;}

WSIM），電源キー/電源キー長押し（TERMINATE_REASON_

通常のアプリケーション・ソフトウェアでは終了理由を考慮

POWEROFF），低電圧（TERMINATE_REASON_LOWBATTERY）

する必要がないので，終了要求（MSGAPC_TERMINATE）を受信による終了理由の判定を行っています．終了理由により処理をした時点で終了処理を行います．

変更する場合は，case 文の中で処理を行います．そして，
gtk_main_quit 関数を用いてアプリケーション・ソフトウェア
を終了させます．

166

たなか・たけひこ，かわい・こうじ（株）富士通ソフトウェアテクノロジーズ

Jan. 2007