DATE : 2007/01/05 (Fri)
(前回の記事)
GPRMC
手入力用の雛形として、まず GPRMC の例をひとつコピーしてきます。(以下の例は、「NMEA-0183 フォーマット」からの転載です)
$GPRMC,050945.00,A,3504.227794,N,13545.810149,E,000.0,57.1,140302,6.5,W,A*12
このデータの中で重要な部分を示します。
$GPRMC,050945.00,A,3504.227794,N,13545.810149,E,000.0,57.1,140302,6.5,W,A*12
- 050945.00
- 現在時刻(UTC)です。hhmmss.ss 形式で記述します。この例では、5時9分45秒です。実際の現在時刻を記述する必要はありません。1秒ごとのデータを記述する場合には、ひとつ前のデータの現在時刻に1秒を加えます。
- 3504.227794,N
- 緯度です。ddmm.mmm 形式で記述します。N は北緯、S は南緯を表します。この例では、北緯35度4.227794分です。
- 13545.810149,E
- 経度です。ddmm.mmm 形式で記述します。E は東経、W は西経を表します。この例では、東経135度45.810149分です。
- 57.1
- 進行方向です。真北が0度で、時計回りに増加します。
上に記述した部分を変えることで、任意の緯度・経度・進行方向で GPS エミュレーションを行えます。
(つづきます)
参考文献
DATE : 2007/01/04 (Thu)
(前回の記事)
BGP ファイルの中身
BGP (BREW Geographic Position) ファイルには、次のような形で位置情報が記述されています。(以下の例は、「NMEA-0183 フォーマット」の出力例からの転載です)
$GPRMC,050945.00,A,3504.227794,N,13545.810149,E,000.0,57.1,140302,6.5,W,A*12 $GPGGA,050945.00,3504.227794,N,13545.810149,E,1,06,1.4,151.00,M,34.53,M,,*6A
「$」に情報の形式が続き、その後に内容が続きます。
上のコード例からも分かるとおり、BGP 形式のファイルは、NMEA-0183 フォーマットで記述された情報の羅列です。1つ分の情報は GPRMC、GPGGA の組で構成され、それぞれを1行で記述します。テキストファイルなので、手入力でも簡単に作成できます。
(つづきます)
参考文献
DATE : 2007/01/03 (Wed)
BREW シミュレータでは、シリアルポートに接続した GPS 受信機や、ファイルに記録された GPS 情報から GPS の動作をエミュレーションすることができます。
しかし BREW SDK のドキュメントには、GPS 受信機を使った方法(直接入力、ファイル入力)の解説はあるものの、手入力のファイルからの方法は書かれていません。そこで、本記事では手入力で GPS 情報をファイルに記述する方法をまとめます。
BREW シミュレータで扱う GPS 情報の形式
BREW シミュレータでは、BGP (BREW Geographic Position) 形式で記録された GPS 情報(拡張子は .bgp)を使用します。
手入力する GPS 情報は以下の2種類です。
- GPRMC
- 主に緯度・経度・進行方向を記述。
- GPGGA
- 主に緯度・経度・高度を記述。
(つづきます)
DATE : 2006/12/30 (Sat)
(前回の記事)
AEE シェルによるコールバック
AEE の待機中操作キューに関数を登録します。登録した順に関数がひとつずつ実行されていきます。時間のかかる処理を細切れにするには、AEE シェルに処理を細かく分けた関数を登録していくことになります。
コールバックを定義するには、AEECallback 構造体を使用します。メンバをひとつずつ設定していくこともできますが、CALLBACK_Init 関数を使うと簡単にメンバを設定できます。
例えば、callback(AEECallback* 型)に execute 関数(PFNNOTIFY 型)を登録し、その引数として data(void* 型)を渡すコードは次のようになります。
CALLBACK_Init(callback, execute, data); callback->pfnCancel = NULL;
ここで、AEECallback の pfnCancel メンバを NULL に設定している部分に注意してください。pfnCancel メンバはコールバックのキャンセル時に呼ばれる関数ポインタを格納する変数で、AEE シェルが設定します。そのため、コールバックが待機中操作キューに登録されているかどうかを確かめる BREW API の処理は、pfnCancel メンバが NULL 以外の場合に待機中操作キューに登録されていると見なします。
なお execute 関数は、void 型のポインタを引数に1つとる void 型の関数でなければなりません。
void execute(void* data) { ... }
ここで、AEECallback 型のデータと、呼び出す関数に渡すデータは、登録を行う関数が終了した後でも残っていなければなりません。ローカル変数として確保すると、関数の終了時に消えてしまいます。そこで、アプレット構造体に置く、もしくはヒープに確保するといった方法をとります。
コールバックを AEE シェルに登録するには、ISHELL_Resume 関数を使用します。以下は、callback(AEECallback* 型)を登録するコードです。ここで、m_pIShell は IShell* 型を表します。
ISHELL_Resume(m_pIShell, callback);
コールバックをキャンセルするには、pfnCancel メンバの指す関数を実行します。ただし、CALLBACK_Cancel 関数を使うと簡単です。待機中操作キューにコールバックが登録されている場合のみ、pfnCancel メンバの指す関数を実行します(ただし、待機中操作キューに登録されているか否かは、コールバックの pfnCancel メンバが NULL でないかどうかで判断しています)。
CALLBACK_Cancel(callback);
(つづきます)
参考文献
DATE : 2006/12/21 (Thu)
(前回の記事)
コールバックとは
コールバックを使うと、BREW AEE に関数を登録しておくことができます。
コールバックには、大きく分けると次の2種類があります。
- 非同期処理のためのコールバック
- AEE シェルによるコールバック
非同期処理のためのコールバック
ネットワークで通信を行う場合などには、相手の応答を待たなければならないことがあります。このような応答を待たなければならない処理にコールバックが使用されます。相手からの応答があれば、コールバックに登録した関数が実行されます。
このコールバックは非同期処理の必要な API にそれぞれ用意されているので、詳しくは触れません。
なお、ファイルを読み書きするための IFile インタフェースにもファイルを読み込むためのコールバックを登録する関数(IFILE_Readable)があります。しかし、コールバック経由でなくとも直接 IFILE_Read 関数を使ってファイルを読み込むことができるそうです。
(つづきます)