2014/11/02

[nrf51]BLEスタックのイベントハンドラを見る (6)

サンプルソースのBLEイベントハンドラの調べ物。
最後の1つだ。


BLE_GATTS_EVT_SYS_ATTR_MISSING

前回まではGAPのイベントだったが、これはGATT Serverのイベントだ。

https://devzone.nordicsemi.com/documentation/nrf51/4.3.0/html/group___b_l_e___g_a_t_t_s___s_y_s___a_t_t_r_s___b_o_n_d_e_d___p_e_e_r___m_s_c.html

Disconnectされたとき、SoftDeviceにsystem attributeデータを取得して保持しておき、次に接続するときに再設定するしくみのようだ。

BLE_GATTS_EVT_SYS_ATTR_MISSINGの説明としては、sd_ble_gatts_sys_attr_set()待ち、らしい。
確かにイベントハンドラでも、sd_ble_gatts_sys_attr_set()を呼び出している。
"persistent system attribute"というのは、BLEスタックが返す値のようで、アプリはそのコピーを持っておき、この関数で渡すようなしくみらしい。
コピーじゃなくてNULLを渡すと、前回の値はないよ、ということで初期化されるようだ。
storageという単語が出てくるから、保持しておきたいデータ、みたいな使い方なのか。

サンプルではNULLを渡すだけになっている。


似たような感じで、Notify投げようとしてエラーで帰ってくる場合もあるようだ。

https://devzone.nordicsemi.com/documentation/nrf51/4.3.0/html/group___b_l_e___g_a_t_t_s___h_v_x___s_y_s___a_t_t_r_s___m_i_s_s_i_n_g___m_s_c.html

sd_ble_gatts_hvx()を呼んで、エラーが発生した場合のようだ。
まずsd_ble_gatts_hvx()はNotifyを投げるときに使っている。
サンプルでは、このエラーが発生すると、単にエラーという扱いにしている。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。