まだまだサンプルソースの解読中だ。
避けて通れないBLEの部分にさしかかっている。
パラメータ設定などを眺めていたが、その設定が必要かどうかになると、途端にわからなくなる。
そういう眺め方では進まないので、「今のソースは正しい」と考え、こういう処理をするようになっているのは、このパラメータが設定されているためだろう、という読み方に切り替えた。
そうなると、BLEスタックのイベントハンドラを読まねばなるまい。
softdevice_ble_evt_handler_set()で登録している関数だ。
私のI/Oサービスサンプルでは、こんな感じになっている。
ble_evt_handler(p_ble_evt);ble_conn_params_on_ble_evt(p_ble_evt);//I/O Service
ble_ios_on_ble_evt(&m_ios, p_ble_evt);
ble_evt_handler()は、自分の中でイベントを処理する関数。
ble_conn_params_on_ble_evt()は、SoftDevice側なんだが・・・nRF51 SDKのドキュメントでひっかからない。
S110のところが、ほとんどドキュメント化されていないような感じがする(doxygenで生成させると出てくる)。
ble_evt_handler()も、ほとんどサンプルで作られている。
switch-caseで処理されている。
イベント値には範囲があり、以下のようになっている(ble_ranges.h)。
- BLE_EVT_xxx : 0x01-0x0F
- BLE_GAP_EVT_xxx : 0x10-0x2F (ble_gap.h)
- BLE_GATTC_EVT_xxx : 0x30-0x4F (ble_gattc.h)
- BLE_GATTS_EVT_xxx : 0x50-0x6F (ble_gatts.h)
- BLE_L2CAP_EVT_xxx : 0x70-0x8F (ble_l2cap.h)
サンプルソースでは、BLE_GAP_EVTとBLE_GATTS_EVTだけ対応している。
全部のイベントではなく、必要そうなところだけやっているようだ。
GATTSは、GATTのServerで、今回のServiceがServerだからだろう。
- BLE_GAP_EVT_CONNECTED
- Connection established
- Connect LED点灯
- Advertising LED消灯
- ボタンの使用を許可
- m_conn_handlerを渡された値に更新
- BLE_GAP_EVT_DISCONNECTED
- Disconnected from peer
- Connect LED消灯
- ボタンの使用を禁止
- m_conn_handleを無効値に更新
- Advertising開始
- BLE_GAP_EVT_SEC_PARAMS_REQUEST
- Request to provide security parameters
- sd_ble_gap_sec_params_reply()してる。
m_sec_params()を返しているのだが、なんだろうか?
sec_params_init()で設定してはいるのだが。 - BLE_GAP_EVT_SEC_INFO_REQUEST
- Request to provide security information
- sd_ble_gap_sec_info_reply()してる
- BLE_GAP_EVT_AUTH_STATUS
- Authentication procedure completed with status
- m_auth_statusを更新している(static変数)
- この値は、BLE_GAP_EVT_SEC_INFO_REQUESTで使われる
- ということは、BLE_GAP_EVT_AUTH_STATUS→BLE_GAP_EVT_SEC_INFO_REQUEST、の順か
- BLE_GAP_EVT_TIMEOUT
- Timeout expired
- タイムアウトの種別がBLE_GAP_TIMEOUT_SRC_ADVERTISEMENTだったら、Advertising LEDを消灯してシステムOFFになる。
- システムOFFの関数を呼ぶと、もう戻ってこないらしい。
- BLE_GATTS_EVT_SYS_ATTR_MISSING
- A persistent system attribute access is pending, awaiting a sd_ble_gatts_sys_attr_set()
- sd_ble_gatts_sys_attr_set()してる
- default
- 何も無し
CONNECT、DISCONNECTはわかる。
TIMEOUTも、だいたいわかる。
しかし、それ以外が理解できてない。
次回は、もう少し中身を掘り下げよう。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。