2015/01/27

Bluetooth 4.2とLE Privacy 1.2

今さらだが、Bluetooth 4.2の仕様が出ていることを知った。
まだ最新の動向を追いかけられるほど知識が溜まっていないが、概要は知りたい。

検索すると日本語でもいくつか出てくるのだが、その中に「ビーコンが安全になる」みたいなのがあった。
よくわからなかったので、なるべく理解してみよう。


とりあえず勘違いしていたのは、ビーコンが安全になるというのではなく、機器の追跡についてプライバシーが強化された、みたいな感じらしい。デバイスを追跡から保護する、と。
"Bluetooth Small devices"とあるから、スマホみたいなやつじゃなくて、ビーコン端末みたいなちっこいのを指してるのかな。

"LE Privacy 1.2"という名前(feature)で、

Bluetoothによる狭い範囲の追跡(Small location tracker)は、所有者か省電力動作中でも信頼されたグループ(trusted group all while consuming less power)のみ行うことができる(only be followed)

とある(Bluetooth4-2FAQ[pdf]より)。
まあ、私の訳だと不安だろうから、短いFAQなので読んでいただきたい(1ページ目にある)。

 

さて、勘違いしていたことに気付いたのはよいが、所有者だとかグループだとかはどこで出てくるんだろうか?
また、"Bluetooth Small location tracker"というのがAdvertisingを使ったビーコンみたいなところでできるかどうかまではFAQに書かれていない。
AM3 - Bluetooth Technology Overview Part2(pdf)の最後の方には、LE Privacy 1.2を実現するのはハードウェアだと書いてある。

ようやく情報が見つかったのが、こちらのページ。
Bluetooth LEが2.5倍に増速 - KONURE
ホワイトリスト方式での接続に限定できるとのこと。
これをキーワードにCore_V4.2を検索すると、Device Filterling Procedureという言葉が出てくる。
ただ・・・ホワイトリストにデバイスを追加するようなコマンドは、4.0のときからあるようなのだ。
上記のサイトでも、4.1ではホスト側でアドレス解決する方式があって、それとは上位互換になっていると解説してある。
ということは、コマンドがどうこうではなく、もっと、なにか、こう・・・。

今度はアドレス解決という観点でCore_V4.2を検索すると、ようやくそれらしきものに出会った。
"Vol 6, Part D: Message Sequence Charts"の"4 Scanning State"だ。
Core_V4.1では「Passive Scanning」と「Active Scanning」しかないのだが、Core_V4.2では追加がある。

  • 4.3 Passive Scanning for Directed Advertisements with Privacy
  • 4.4 Active Scannig with Privacy
  • 4.5 Active Scanning with Privacy and Controller Based Resolvable Private Address Generation

図は、デバイスBがAdvertisiongして、デバイスAがそれを見つけるようになっている。
既存のはデバイスBだけでAdvertisingしているのだけど、この3つのシーケンスではホストBもなんかやってる。
やってるが、よくわからん・・・。

controller resolving listとかいう名前も出てくるが、これだったらハードウェアの変更じゃなくてファームウェアの変更で対応できそうな気がする。
違うのかなぁ・・・。


そうそう、もう1つ勘違いしていたのは、FIPSとかいうセキュリティのことだ。
FIPSが何かは知らんけど、これでビーコンみたいなAdvertisingのものを安全にできたりしないよなあ、と思ったのだ。
もちろんこれは私の勘違いで、FAQでも"during device pairing"と、ペアリングしたあとのことを言っているようだ。
ペアリングする前のAdvertisingには関係ないのだ。

2015/01/25

[nrf51]今日のデバッグ設定

nRF51822 + J-Link LITE CortexMの環境を使っている。
gccは推奨バージョンじゃないが、まあよいだろう。

  • nRF51822 xxAA
  • J-Link LITE CortexM : 4.94j
  • SoftDevice : S110 v7.1.0
  • nRF51 SDK : v7.2.0
  • Eclipse : Luna Service Release 1a(4.4.1) C/C++ Developers
  • GNU ARM Eclipse Plug-ins : J-Link Debugging : 3.1.1.201412191510
  • arm-none-eabi-gcc : 4.8.4 20140526 (4_8-2014q2-20140609-win32)

 

"Startup"の"Run Commands"で、"Pre-run reset and halt"の設定をしたらmain()で止まった状態で開始できたので、メモがてら残しておこう。
gdbのパスが"CodeSourcery"になってるが、気にしないように。もう長いことフォルダ構成を変えていないから、ARMのコンパイラはここに置くようになってしまったのだ。

 

image

 

image


自分のプロジェクトだが、SDK v7からはSDKの中にフォルダを作って置くことにした。
以前は環境変数にSDKのパスを書いて、それを参照するようにしていたのだ。
でも、SDKが変わるたびに作りが変わっているので、なんかもう維持するのが面倒になってしまった。
makefileだけ書き換えればよいのだろうが、もう「nRF51 SDK v7.x用」と割り切ってしまいたい。

 

とまあ、こんな感じでようやく方針が決まったから、BLEの続きをやりましょうかね。

2015/01/24

[ios]IoS Developer Programの年間参加費が¥11,800になった

下記のサイトで、年会費が上がったという記事があった。
Apple、iOS・Macデベロッパープログラムの年会費の値上げを実施 | 気になる、記になる…

うわぁ、本当だ!
iOS Developer Program - Apple Developer

 

経費にすることはできると思うんだけど、いかんせんiOSでの開発はやらない気がするからなぁ。
さっき久々にログインして、iOS8.2 beta4が出てるのを知ったくらいだ。
BLEだとiOSは大切なんだろうけど、MacのiOSシミュレータでBLEできるような記事もあったので、更新はしないでよさそうだ。

2015/01/23

[nrf51sdkv7]デバッグがきれいに始まらない

これはnRF51 SDKがv7になったせいではないような気がする。
何かというと、デバッグ開始時がすんなり進まないのだ。

だいたい、HardFaultが発生している。
そこで"Restart"すると、今度はうまくいく。
以前、eclipseのプラグインを入れ込んでから、うまくいくようになったとばかり思っていたのだが・・・。

この辺をすっきりさせたいのだけど、まだ、今の私にはまだ力が足りていない。。。
他力にすがってもよいので、探しておきたいところだ。

2015/01/22

VはViolationのV

Linuxやってるとよく見る、Segmentation Fault。
セグフォル、とか略したりするが、C言語で使うときは"SIGSEGV"だ。

今まで何も考えずに使っていたけど、Segmentation Faultなのに、なぜ「V」が??
そう思って調べた結果が、今回のタイトルだ。
Segmentation Fault Violationの略で、SEGVなのだった。

 

Vが付くと、なんとなく東欧とかロシアとかの単語から来てるんじゃないかと想像していたのだ。
セマフォの上げたり下ろしたりのPとかVとかも、確かその辺だったはずだ。
逆ポーランド法とか。