nRF51822とAndroidアプリだが、なんか気持ちが停滞してしまって進んでいない。
目が乾燥している気がするのよねぇ。
せっかく作るから、今みたいに誰でも接続できるんじゃなくて、ペアリングとかしてみたい。
ペア・リング(Pair Ring)を装着してみたい、じゃないよ。
ペアリング(Pairing)をしてみたいのだ。
そういえば、ボンディングという言葉もよく聞く。
検索すると、どっちも引っかかったりして訳がわからなくなってきた。
どこがどう違うのだろうか?
あるいは、「一般人はペアリングって呼ぶけど、開発者はボンディングって呼ぶよね」みたいなことなんだろうか?
こういうときは、NordicのInfocenterだ。
Paringのシーケンスは、SMP Pairing Phase 2のあと、アプリにBLE_GAP_EVT_CONN_SEC_UPDATEを返し、最後にBLE_GAP_EVT_AUTH_STATUSがSUCCESSで返っている。
Bondingもほぼ同じなのだけど、BLE_GAP_EVT_CONN_SEC_UPDATEのあと、SMP Pairing Phase 3があってからBLE_GAP_EVT_AUTH_STATUSがSUCCESSで返り、アプリは鍵を保存している。
シーケンスはほとんど一緒なのだが、どこで動きが変わっているかというと、最初にCentralからSMP Pairing Requestが来て、SoftDeviceがアプリにBLE_GAP_EVT_SEC_PARAMS_REQUESTが通知されたときと、その返し方が違っていた。
- Paringのとき
- BLE_GAP_EVT_SEC_PARAMS_REQUESTが「no_bond」で来ている
- sd_ble_gap_sec_params_reply()の最後の引数が「NULL」になっている
- Bondingのとき
- BLE_GAP_EVT_SEC_PARAMS_REQUESTが「bond」で来ている
- sd_ble_gap_sec_params_reply()の最後の引数が「p_keyset」になっている
ということは、PairingかBondingかの違いはCentral側が主導権を持っているということか。
AndroidとかiOSとかでペアリング操作はOSの役目だと思うけど、そのときに「ペアリング or ボンディング」みたいな選択はないと思う。
ボンディングのbondって、木工ボンドとかのあれと同じ意味なのだろうか。
だったら、のり付けというか、通信するペアになりはするけれども、ペアを覚えておくほどでもない場合がペアリングで、覚えておくときがボンディングなのだろうか?
シーケンスの一覧を見ても、PairingとBondingがあるのはJust Worksだけで、Passkey EntryやOOBのときはBondingしかないのよね。
Interface誌の特集では、暗号鍵の交換手順がボンディングとあるのだが、とりあえずNordicではそういう使い方をしているようだ、というところにとどめておこう。
sd_ble_gap_sec_params_reply()の最後の引数はin/outなんだけど、examplesを検索しても使っているのはmultiprotocol/ble_app_gzllのサンプルで、まねしていいのかどうかわからん。
試してみればいいんだろうけど、nRF52でNFCペアリングしようとして訳がわからなくなってしまったので、やる気が起きないのよねぇ。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。