2016/07/17

[android]BLE接続の不安定さに迫る!の補足

結局のところ、前回は「Androidが一人で接続しようとして確立失敗しているようだ」という結論だった。
CONNECT_REQを出したつもりだけどうまく出せなかったとか、そういうことなのだろうか。


昨日のログで、いくつか気になっていることがあるので、補足しておこう。

 

まず、これ。

D/BluetoothGatt: cancelOpen()

もしかしたら、接続してからすぐ切断しているからこのログが出るのだろうか?

BluetoothGatt.java#750

単に、BluetoothGatt#disconnect()のトレースログが出ているだけだった。
最初はそういうAPI名だったのかもね。

 

次は、これ。

W/bt_btif: bta_gattc_conn_cback()

不審はないのだけど、なんだろう?

system/bt/bta/gatt/bta_gattc_act.c#1808

ここはsystemなんだ。
gattcなので、Client側ということか。
接続/切断関連のコールバック関数のようで、reasonが0以外であれば出力されている。
接続時には理由がないだろうが、切断時はだいたい理由があるから、切断時にしか出ないのかな。

 

最後に、これ。

D/BtGatt.GattService: clientConnect()

isDirectはどういう意味なのだろう?

GattService.java#1445

clientConnect()もたくさんあるようだが、AIDLになっているのはisDirectがあるやつだけだ。
AIDLはプロセス間通信に関するもので、ActivityがServiceをbindしてコールバックしてもらったりするようだ。
LocalのServiceじゃないやつ、ということかな。

呼んでいるのは、BluetoothGattの中にあるmBluetoothGattCallbackBluetoothGatt#connect()だ。
後者は再接続用だから、今回は前者だろう。
前者の時は、単にautoConnectを反転してisDirectにしている。
ちなみに、再接続の時はfalseを指定している。
gattClientConnectNative()までつながるのだろうが、そこから先はよくわからん。


何か安定した接続になるようなヒントがないかと思ったが、ないな。