• 検索結果がありません。

5. ユーザコードの実装方法

5.2 app_main 関数

app_main関数では、初期化処理、メインループの実装を行います。また、タイマ、ボード設定、コマン

ドラインなど使用する場合、 app_main関数で初期化処理を行います。

【注】 QE for BLEを使用する場合、app_main関数のソースコードは自動的に生成されます。

app_main関数の例をコード5-1に示します。

/* CommandLine parameters */

static const st_ble_cli_cmd_t * const gsp_cmds[] = {

&g_abs_cmd, &g_vs_cmd, &g_sys_cmd, &g_ble_cmd };

void app_main(void) {

/* Initialize BLE */

R_BLE_Open();

#if (BLE_CFG_MCU_PSM_OPE)

/* MCU Power supply modes change: ALLPWON -> EXFPWON */

/* Note: EXFPWON needs to execute a program on RAM area. */

R_LPM_PowerSupplyModeExfpwonSet();

#endif /* (BLE_CFG_MCU_PSM_OPE) */

/* Configure the board */

R_BLE_BOARD_Init();

/* Initialize the Low Power Control function */

R_BLE_LPC_Init();

/* Initialize timer for ABS & LED blink */

R_BLE_TIMER_Init();

/* Configure CommandLine */

R_BLE_CLI_Init();

R_BLE_CLI_RegisterCmds(gsp_cmds, ARRAY_SIZE(gsp_cmds));

R_BLE_CMD_SetResetCb(ble_init);

/* Initialize BLE host stack and profiles */

ble_init();

/* main loop */

while (1) {

/* Process Command Line */

R_BLE_CLI_Process();

/* Process Event */

R_BLE_Execute();

/* Enter the Lower Power Mode */

R_BLE_LPC_EnterLowPowerMode();

} }

コード5-1 app_main関数の例

BLEプロトコルスタックの初期化(R_BLE_Open)

【注】必ずapp_main関数の最初でコールしてください。

【注】必ず電源供給モードALLPWONでコールしてください。

ボードの初期化(R_BLE_BOARD_Init)

MCU低消費電力機能の初期化(R_BLE_LPC_Init)

アプリケーション用のtimerの初期化(R_BLE_TIMER_Init)

コマンドラインの初期化(R_BLE_CLI_Init)

ホストスタック、プロファイルの初期化(ble_init)

メインループ(R_BLE_Executeを呼び出す、

R_BLE_LPC_EnterLowPowerModeMCU低消費電力状態への移行) MCUの電源供給モード変更(R_LPM_PowerSupplyModeExfpwonSet)

ble_init関数では、ホストスタック、プロファイルの初期化処理を行います。コールバック関数の登録や GATTデータベースの登録などを行います。

【注】QE for BLEを使用する場合、ble_init関数のソースコードは自動的に生成されます。

ble_init関数の例をコード5-2に示します。

static ble_status_t ble_init(void) {

ble_status_t status;

g_conn_hdl = BLE_GAP_INVALID_CONN_HDL;

gs_timer_hdl = BLE_TIMER_INVALID_HDL;

/* Initialize host stack */

status = R_BLE_ABS_Init(&gs_abs_init_param);

if (BLE_SUCCESS != status) {

return BLE_ERR_INVALID_OPERATION;

}

/* Initialize GATT Database */

status = R_BLE_GATTS_SetDbInst(&g_gatt_db_table);

if (BLE_SUCCESS != status) {

return BLE_ERR_INVALID_OPERATION;

}

/* Initialize GATT Server */

status = R_BLE_SERVS_Init();

if (BLE_SUCCESS != status) {

return BLE_ERR_INVALID_OPERATION;

}

/* Initialize GATT client */

status = R_BLE_SERVC_Init();

if (BLE_SUCCESS != status) {

return BLE_ERR_INVALID_OPERATION;

}

/* Initialize GATT Discovery Library */

status = R_BLE_DISC_Init();

if (BLE_SUCCESS != status) {

return BLE_ERR_INVALID_OPERATION;

}

/* Initialize LED and Switch Service */

status = R_BLE_LSC_Init(lss_cb);

if (BLE_SUCCESS != status) {

return BLE_ERR_INVALID_OPERATION;

}

/* Create timer for LED blink */

status = R_BLE_TIMER_Create(&gs_timer_hdl, 1, BLE_TIMER_PERIODIC, timer_cb);

if (BLE_SUCCESS != status) {

return BLE_ERR_INVALID_OPERATION;

}

return status;

}

コード5-2 ble_init関数の例

ホストスタックの初期化(R_BLE_ABS_Init)

【注】抽象APIを使わない場合、以下を使用します。

R_BLE_GAP_Init R_BLE_VS_Init R_BLE_GATTS_Init R_BLE_GATTC_Init

GATTデータベースの登録(R_BLE_GATTS_SetDbInst)

【注】QE for BLEGATTロールをサーバ/クライアント のどちらにしてもコード生成されます。

GATTサーバ機能の初期化(R_BLE_SERVS_Init)

【注】QE for BLEGATTロールをサーバ/クライアントのどちらにしてもコード 生成されます。

ソフトウェアタイマ生成(R_BLE_TIMER_Create) GATTクライアント機能の初期化(R_BLE_SERVC_Init)

【注】QE for BLEGATTロールをサーバ/クライアントのどちらにしてもコード 生成されます。

Service Discovery機能の初期化(R_BLE_DISC_Init)

【注】QE for BLEGAPロールをセントラルにするとコード生成されま す。

サービスの初期化

(R_BLE_[サービス名]S_InitまたはR_BLE_[サービス名]C_Init)

【注】QE for BLEGATTロールをサーバにするとR_BLE_[サービス 名]S_Initがコード生成されます。

【注】QE for BLEGATTロールをクライアントにすると R_BLE_[サービス名]C_Init)がコード生成されます。

5.2.1.1

コールバック関数の登録

アプリケーションにコールバック関数を登録することで、各種イベントの受信タイミングで処理を行うこ とが可能です。各機能ブロックのコールバック登録APIを表5.2に示します。

表5.2 コールバック登録API

機能ブロック コールバック登録API コメント

GAP R_BLE_ABS_Init or

R_BLE_GAP_Init

登録されたコールバック関数は Advertising、スキャン、Connection 確立など、R_BLE_GAP_XXXの結果 を受信時に呼び出されます。

GATTサーバ (プロファイル共通)

R_BLE_ABS_Init or

R_BLE_GATTS_RegisterCb

登録されたコールバック関数は GATTクライアントからアクセス時 に呼び出されます。

GATTクライアント (プロファイル共通)

R_BLE_ABS_Init or

R_BLE_GATTC_RegisterCb

登録されたコールバック関数は GATTサーバからのアクセス時に呼 び出されます。

Service Discovery

(プロファイル共通) R_BLE_DISC_Start()

登録されたコールバック関数は Service Discoveryが完了したときに 呼び出されます。

Vendor Specific R_BLE_ABS_Init or R_BLE_VS_Init

登録されたコールバック関数は

R_BLE_VS_XXXの結果を受信時に

呼び出されます。

L2CAP R_BLE_L2CAP_RegisterCfPsm()

登録されたコールバック関数は L2CAP Credit-Based Flow Controlの リクエストの応答が返った時、

L2CAP Credit-Based Flow Controlの 受信時など、R_BLE_L2CAP_XXXの 結果を受信時に呼び出されます。

【注】QE for BLEでコード生成され ません。

LED and Switch制御 R_BLE_BOARD_RegisterSwitchCb()

登録されたコールバック関数は BoardのSwitchが押下された場合な ど、R_BLE_BOARD_XXXの結果を 受信時に呼び出されます。

【注】QE for BLEでコード生成され ません。

ソフトウェアタイマ R_BLE_TIMER_Create()

登録されたコールバック関数は指定 した時間が経過した場合など、

R_BLE_TIMER_XXXの結果を受信時

に呼び出されます。

【注】QE for BLEでコード生成され ません。

サーバ側

プロファイルAPI

R_BLE_XXXS_Init() (XXXはServiceの名前)

登録されたコールバック関数はクラ イアントからアクセスされた場合に 呼び出されます。

クライアント側 プロファイルAPI

R_BLE_XXXC_Init() (XXXはServiceの名前)

登録されたコールバック関数はサー バからアクセスされた場合に呼び出 されます。

【注】 R_BLE_ABS_InitはGAP、GATTサーバ、GATTクライアント、VSのコールバック関数をまとめて登録で

きます。

GATTサーバとして動作させるGATT サービスアプリケーションを作成する場合、QE for BLEが以下の ファイルにサービスのデータベースをコード生成します。

⚫ gatt_db.c

⚫ gatt_db.h

このGATTデータベースはR_BLE_GATTS_SetDbInstによってアプリケーションに登録されます。

5.2.2

メインループとスケジューラ(R_BLE_Execute)

BLEプロトコルスタックはアプリケーションから呼ばれるAPIを処理するためにスケジューラを使用し ます。スケジューラを動作させるためにメインループ内にてR_BLE_Executeをコールしてください。発生 したイベントは登録したコールバック関数に通知されます。

スケジューラはR_BLE_Executeにより、BLEプロトコルスタックの各レイヤのタスク宛に送信された メッセージキューに従ってタスクを処理します。図5.2にBLEプロトコルスタックの基本シーケンス チャートを示します。

図5.2 BLEプロトコルスタックの基本シーケンスチャート

R_BLE API Scheduler Host Stack Link Layer(LL) BLE H/W

Application

Call R_BLE API

return R_BLE API

Send Message to Host Stack 

Call R_BLE_Execute()

return R_BLE_Execute()

Execute Task

return Send Message to LL

Execute Task

return

Access BLE H/W Send Message to Host Stack

BLE Interrupt Execute Task

return return callback R_BLE event callback

return

Send Message to LL Call R_BLE_Execute()

return R_BLE_Execute()

Execute Task

return

Access BLE H/W Send Message to Host Stack

Execute Task

return callback

return R_BLE event callback

return Function Call

Send Message return

BLE Interrupt Access BLE H/W

Software Hardware

Source Code Library

BLE Protcol Stack

関連したドキュメント