読者です 読者をやめる 読者になる 読者になる

酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

BREWプログラミング入門(4) アプリインスタンスの生成

さぁ、今回はBREWアプリの実装をしていきます⊂ニ(^ω^)⊃

アプリインスタンスを作成する

BIDファイルを追加

BIDは32ビットなBrew class IDの略です。BREWアプリはユニークBIDが必要になります。

BREWアプリとBIDは紐付けられていますので、アプリAからアプリBのBIDを指定してパラメータを指定して起動させるという事も可能です。

Qualcommか携帯電話キャリアに申請する必要がありますが、BREWシミュレータ上で動かすのであれば、開発者がどのようなIDを指定しても構いません。

ここでは適当に「0x01234567」を指定する事にします。

ソリューションエクスプローラーに表示されている[hellobrew プロジェクト]の[ヘッダーファイル]に

hellobrew.bid を新規作成します。

ファイルの内容は

#ifndef HELLOBREW_BID  
#define HELLOBREW_BID  
  
#define AEECLSID_HELLOBREW    0x01234567  
  
#endif // HELLOBREW_BID  

と、します。

アプリの実装

BREWアプリでは最低限

  • アプリインスタンス生成
  • イベントハンドラ

の処理が必要になります。

ソリューションエクスプローラーに表示されている[hellobrew プロジェクト]の[ソースファイル]に

  • hellobrew.c

を新規作成します。

アプリインスタンス生成

アプリ構造体のサイズ(sizeof(AEEApplet))とイベントハンドラの関数ポインタ(HelloBrew_HandleEvent)の指定をし、アプリインスタンスを生成します。

int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * pMod,void ** ppObj)  
{  
    boolean bRet = FALSE;  
    *ppObj = NULL;  
  
    if(ClsId == AEECLSID_HELLOBREW)  
    {  
        /* IAppletインスタンスを生成 */  
        bRet = AEEApplet_New(sizeof(AEEApplet),   
                             ClsId, pIShell, pMod,   
                             (IApplet**)ppObj,  
                             (AEEHANDLER)HelloBrew_HandleEvent,  
                             NULL);   
    }  
  
    return bRet ? AEE_SUCCESS : EFAILED;  
}

必須ではありませんが、第7引数に「アプリ終了処理の関数ポインタ」を指定することが可能です。関数ポインタを指定した場合、アプリ終了イベント(EVT_APP_STOP)通知後に必ず呼び出されます。

イベントハンドラ キー押下や状態の変化等があった場合、AEEApplet_New()で指定したイベントハンドラへ通知されます。

static boolean HelloBrew_HandleEvent(AEEApplet* pMe, AEEEvent eCode, uint16 wParam, uint32 dwParam)  
{    
    boolean bRet = FALSE;  
  
    switch (eCode)  
    {  
        /* アプリ起動イベント */  
        case EVT_APP_START:  
        {  
            AECHAR szText[] = {'H', 'e', 'l', 'l', 'o', ' ', 'B', 'r', 'e', 'w', '\0'};  
  
            /* ディスプレイバッファへ"Hello Brew"を描画 */  
            IDISPLAY_DrawText(pMe->m_pIDisplay, AEE_FONT_BOLD, szText, -1,  
                              0, 0, NULL, IDF_ALIGN_CENTER | IDF_ALIGN_MIDDLE);  
  
            /* LCDを更新する */  
            IDISPLAY_Update (pMe->m_pIDisplay);  
  
            bRet = TRUE;  
        }  
        break;  
  
        /* アプリ終了イベント */  
        case EVT_APP_STOP:  
        {  
            bRet = TRUE;  
        }  
        break;  
  
        default:  
        break;  
    }  
  
    return bRet;  
}

ここでは起動した事が判る様にアプリ起動時(EVT_APP_START)に、LCD中央に「Hello Brew」と表示します。

現時点でこの様なファイル構成になっていれば問題無いと思います。

以上でアプリの作成は完了です。