2016/07/10

[nrf52]そもそも、nRF52のNFCペアリングはなんなのだろう

今さら?と言われそうだが、ああそうだ。
基本的なことを確認していなかったのは反省しよう。

 

NFC Forumのドキュメントは大半が有料になったが、NFCペアリングに関してはダウンロードできるようになっているし、下のようにBluetooth SIGからもダウンロードできる。
https://www.bluetooth.org/DocMan/handlers/DownloadDoc.ashx?doc_id=264234

NFCペアリング、とあっさり書いているが、ハンドオーバーの種類としては3つある。

  • Static Handover
  • Negotiated Handover
  • Mediated Handover

3番目のは比較的最近だったためか、BluetoothについてはStaticとNegotiatedだけになっている。

大ざっぱに言うと、Staticの方が簡単で、Negotiatedの方がめんどくさい。
めんどくさいというか、StaticはNFCタグに書込んでおくだけなのだが、Negotiatedは文字通りネゴシエーションがいるので実装が必要なのだ。

hiro99ma blog: [nfc]よくわかってないハンドオーバー


では、nRF52のサンプルで行っているのはどちらだろう?

見分けるのは、最初のNDEFでわかる。
Static Handoverであれば「Handover Select Record」、Netotiated Handoverであれば「Handover Request Record」になるはずだ。
さあ、どっちだ?

image

Static Handoverだ!


NFC Forumなどで公開されているドキュメントでは、1.2。
もう1つドキュメントとして「Connection Handover」があり、これが1.3だった。

NDEFのメッセージは、NDEFレコード1つ以上から構成される。
Handover Selectメッセージは、Handover Selectレコードが先頭にあればよいことになっている。

そしてレコードの方だが、Global RecordとLocal Recordがある。
Handover Selectレコードは、その中に複数のAlternative Carrierレコードを持つ構成になっているので、Handover Select Recordは外側だからGlobal、Alternative Carrier Recordは内側だからLocal、なのかな。


で、ごにょごにょと見ていったのだが、BLEのペアリングだけじゃなくて、BR/EDRのペアリングについても載っていた。
それが邪魔なんじゃないのか?

nfc_ble_pair_default_msg_encode()でNFC_BLE_PAIR_MSG_FULLが指定されていたので、NFC_BLE_PAIR_MSG_BLUETOOTH_LE_SHORTに変更してみた。
・・・Handover Select Record自体がなくなって、application/vnd.bluetooth.le.oobのレコードだけになってしまった。。
でも、これはこれでペアリングできるようだ。

ただ、ペアリングに成功しやすくなったわけでもない。
そもそも「ペアリングしますか?」と聞いてくるところまででNFCの役割は終わりのはずだ。
ダイアログが出た後で、端末をEBSHから離して「はい」にしてもペアリングできるし。
接続しようとして失敗しました、ならまだしも、接続しようとしていないというのは言語道断だろう。


「失敗しました」のトーストが出るときと出ないときもあるし、なんか変なのだけど、表現ができない。

Nexus7でも同じだから関係ないかもしれんが、一度Nexus5を初期化してみよう。。

0 件のコメント:

コメントを投稿

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