2017-11-27 50 views
0

シナリオがある:BluetoothGattは:onClientConnectionState()ステータスを返す= 133

私はアプリケーションを実行android dongleを有し、他方の側には私はesp8266に取り付けHM10 LEのBluetoothを有します。

私はHM10に私のアプリを通してアンドロイドドングルをブルートゥースで接続しようとしています。

アンドロイドドングルを別のHM10に接続しても、その逆でも同じHM10と他のドングルを接続しても、数週間でうまくやったことがあります。

問題:一定期間の後

は、接続試行中に、私は、ステータス133で切断された状態を受け取るために始めましたが、いくつかの接続は、接続が正常に起こった再試行の後。

特定のアンドロイドドングル(問題のあるドングルと呼ぶ)を特定のHM10(問題のあるHM10と呼ぶ)に接続できません。私はいつも133を受け取り、接続することができない何百回もの再試行をしています。

しかし、別のドングルを使用すると、「問題のある」HM10に接続することができます。また、別のHM10を使用すると、「問題のある」ドングルに接続することができます。

最後に、別のHM10を問題のあるドングルに接続すると、その直後に問題のあるドングルに問題のあるHM10を接続することができます。しかし、私はそれを切断すると、私は再び接続することはできません。

特定のBLEデバイスに接続しようとすると、常にステータス= 133の切断状態が表示されます。

私はそれを解決するために試したこと:

これは、通常の使用時に、HM10は、およびその逆で回すことができる、と言うことが重要です。しかし、Gattコールバックの "onConnectionStateChange"で切断イベントを取得すると、私はいつもgatt(deviceGatt.close();)を閉じます。

私はいくつかのポストでデバイスガットをリフレッシュして閉じます。また、それをやって「M:

//inside the onConnectionStateChange on the BluetoothGattCallback: 
case BluetoothProfile.STATE_DISCONNECTED: 

        mConnectionState = ConnectionStatus.DISCONNECTED; 
        readCharacteristic = null; 
        writeCharacteristic = null; 

        if (status != BluetoothGatt.GATT_SUCCESS) { 

         if (status == 133) { 
          refreshDeviceCache(deviceGatt); 
         } 

        } 

        deviceGatt.close(); 
        deviceGatt = null; 

        break; 
      } 


private boolean refreshDeviceCache(BluetoothGatt gatt){ 
     try { 
      BluetoothGatt localBluetoothGatt = gatt; 
      Method localMethod = localBluetoothGatt.getClass().getMethod("refresh", new Class[0]); 
      if (localMethod != null) { 
       boolean bool = ((Boolean) localMethod.invoke(localBluetoothGatt, new Object[0])).booleanValue(); 
       return bool; 
      } 
     } 
     catch (Exception localException) { 

     } 
     return false; 
    } 

私はまた、ワイヤレス& Networks->詳細 - >ネットワーク設定のリセット>アンドロイド設定]でキャッシュをきれいにするつのポストで読みますが、問題はまだそれをやった後に存在します。

以下のログを見つけてください:ここでは

11-27 11:16:49.353 8104-8130/? D/bt_hci_h5: hci_hal_h5 h5_transmit_data, data type: 1 
11-27 11:16:49.353 8104-8130/? D/bt_hci_h5: cmd opcode = 0xfc19 
11-27 11:16:49.353 8104-8130/? D/bt_hci_h5: hci_hal_h5 h5_int_transmit_data_cb data type: 5 
11-27 11:16:49.353 8104-8144/? W/bt_btif: bta_gattc_conn_cback() - cif=3 connected=0 conn_id=3 reason=0x0008 
11-27 11:16:49.353 8104-8144/? W/bt_btif: bta_gattc_conn_cback() - cif=4 connected=0 conn_id=4 reason=0x0008 
11-27 11:16:49.353 8104-8144/? W/bt_btif: bta_gattc_conn_cback() - cif=5 connected=0 conn_id=5 reason=0x0008 
11-27 11:16:49.353 8104-8144/? W/bt_btif: bta_gattc_conn_cback() - cif=6 connected=0 conn_id=6 reason=0x0008 
11-27 11:16:49.353 8104-8144/? W/bt_btif: bta_gattc_conn_cback() - cif=7 connected=0 conn_id=7 reason=0x0008 
11-27 11:16:49.353 8104-8144/? E/rtk_parse: rtk_delete_le_profile, hci_conn not exist with handle ffff 
11-27 11:16:49.353 8104-8144/? I/bt_btm_sec: btm_sec_disconnected clearing pending flag handle:16 reason:8 
11-27 11:16:49.354 8104-8126/? D/BtGatt.GattService: onConnected() - clientIf=7, connId=0, address=34:15:13:E6:50:8F 
11-27 11:16:49.354 8104-8130/? D/bt_hci_h5: hci_hal_h5 h5_int_transmit_data_cb data type: 5 
11-27 11:16:49.354 24277-24288/? D/BluetoothGatt: onClientConnectionState() - status=133 clientIf=7 device=34:15:13:E6:50:8F 
11-27 11:16:49.358 24277-24288/? D/BluetoothComm: Error connecting to device: com.polidea.rxandroidble.exceptions.BleDisconnectedException: Disconnected from 34:15:13:E6:50:8F 
11-27 11:16:49.359 24277-24288/? W/System.err: com.polidea.rxandroidble.exceptions.BleDisconnectedException: Disconnected from 34:15:13:E6:50:8F 
11-27 11:16:49.359 24277-24288/? W/System.err:  at com.polidea.rxandroidble.internal.connection.RxBleGattCallback$2.onConnectionStateChange(RxBleGattCallback.java:76) 
11-27 11:16:49.359 24277-24288/? W/System.err:  at android.bluetooth.BluetoothGatt$1.onClientConnectionState(BluetoothGatt.java:184) 
11-27 11:16:49.359 24277-24288/? W/System.err:  at android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:70) 
11-27 11:16:49.359 24277-24288/? W/System.err:  at android.os.Binder.execTransact(Binder.java:565) 
11-27 11:16:49.362 24277-24324/? D/BluetoothManager: getConnectionState() 
11-27 11:16:49.362 24277-24324/? D/BluetoothManager: getConnectedDevices 
11-27 11:16:49.367 24277-24324/? D/BluetoothGatt: close() 
11-27 11:16:49.367 24277-24324/? D/BluetoothGatt: unregisterApp() - mClientIf=7 
11-27 11:16:49.368 8104-8158/? D/BtGatt.GattService: unregisterClient() - clientIf=7 
11-27 11:16:49.465 8104-8130/? D/bt_vendor_uart: op for 7 
11-27 11:16:49.465 8104-8130/? D/bt_hci_h5: hci_hal_h5 h5_transmit_data, data type: 1 
11-27 11:16:49.465 8104-8130/? D/bt_hci_h5: cmd opcode = 0xfc94 

はbtsnoop_hciのスクリーンショットです。CFA:

enter image description here

//アップデート - ここでは、ファイルのログ

を追加することは、私は、この問題についての記事をたくさん読んでますがまたはdoesnのlog file

//最終更新

です提供されたソリューションが提供されなかったか、提供されたソリューションが機能しませんでした。

私はオプションがないので、誰かが私を助けてくれるのだろうかと思います。何かご意見は?

+0

hciログをアップロードできますか? – Emil

+0

@Emil投稿をログファイルで更新しました。ご協力いただきありがとうございます。 –

答えて

0

Androidソフトウェアに問題はありません。問題は、BLE無線リンクが接続されたままではないように見えることです。空気中の何が起こっているのかを監視するために、空気探知機を使うことができます。なぜパケットが失われるのか。もちろん、2つのBluetoothコントローラのいずれかのリンクレイヤーが間違っている可能性もあります。ハードウェアが実際に動作し、適切であることを確認することをお勧めします。

+0

奇妙なことは、HM10ハードウェアが他のアンドロイドのハードウェアと動作し、他のアンドロイドドングルと接続すると正常に接続するということです。それは、あなたはまた、 "2つのBluetoothコントローラのいずれかのリンクレイヤーが間違っている"と言いました。私は問題がこの問題の周りにあると信じています。空中でパケットをチェックする以外にこれをチェックすることをお勧めしますか? –

+0

実際はありません。私の知る限り、Bluetoothチップにはデバッグ出力がないので、これは唯一の方法です。エアスニッファを使用すると、どのデバイスが適切に応答しないかがわかります。 – Emil

関連する問題