前回の続き。
SensorTagとNexus7間の通信をうまくキャプチャできない件について。
結果として、できるようになったみたいだ。
構成
- TI SensorTag
- TI CC2540 USB Dongle + BLE Sniffer(Windows7 64bit)
- Nexus7 2013 + TI sample application
現象
- SensorTagとNexus7間は、うまくいってるようだ
- BLE Snifferのキャプチャが、途中で止まる
- Advertisingは取れている
- connectすると、しばらく取れている
- 数秒以内に正常なキャプチャができなくなる。取れるのはエラーのときだけ。
というわけだ。
iPad mini oldのときは問題ないので???だ。
どうにもわからんかったので、FacebookのWF-BTLEというグループに聞いた。
いくつか推測してもらって、その中に「AndroidのWiFiが邪魔してるのでは?」というのがあった。
まさかそんなことがねぇ、などと疑いつつもやってみると・・・取れるじゃないの奥さん!
詳しい人だなあ、と思って見てみると、http://reinforce-lab.github.io/の人だった。
なるほど。
じゃあ、iPad mini oldでうまくキャプチャできているところにNexus7を近づけたら同じ現象が起きるはず、とやってみたが、こいつはうまくいっている。
うーん、これはこれで納得がいかない。
教えてもらったところでは、L2CAPで使えないチャネルをスキップするという情報交換ができるらしい。
それが機能していて、CC2540Dongleもそれを使っているのかいな。
Androidではそれを無視して送るとか・・・でもアプリは取れてるし・・・。
スニファがBLEで使うチャネルを同時にすべてスキャンできてキャプチャするなら関係ないんだろうけど、たぶんそんなことはできないだろうから、そういう推測になるかなあ。
もしできるんなら、Advertisingだけ取れて、connectしたら3分の1の確率でしか取得できない、なんてことはないはずだ。
では、次に調べるのは、BLEがどうやってホッピングしているか、というところだろう。
次はこのチャネル使います、という指定をしないと、うまく取得できないはずだ。
Nexus 7(2013)でBLEのスキャンをしているとWebに繋がらなくなるので困ったなーと思ってるんですが、これも似たような理由なんですかね。。
返信削除おお、逆パターン!
削除試してないですが、そっちがあっても不思議じゃないですね。
wiresharkとかでパケット取りながら確認したらわかるんですかねぇ。