2017-11-27 5 views
0

Das Szenario ist:BluetoothGatt: onClientConnectionState() gibt status = 133

Ich habe eine android dongle meine app läuft und auf der anderen Seite habe ich eine HM10 LE Bluetooth an ein Esp8266 angebracht.

Ich versuche, über Bluetooth den Android-Dongle durch meine App mit dem HM10 zu verbinden.

Ich habe dies erfolgreich während Wochen getan, sogar die Verbindung der Android-Dongle mit anderen HM10 oder umgekehrt, die gleiche HM10 mit anderen Dongles.

Das Problem:

Nach einer gewissen Zeit, während der Verbindung versuchen, ich habe angefangen, erfolgreich die Verbindung passiert einem nicht verbundenen Zustand zu erhalten mit dem Status 133, aber nach ein paar Verbindungsversuche.

Jetzt kann ich nicht einen bestimmten Android-Dongle (nennen wir es problematische Dongle) mit einem bestimmten HM10 (nennen wir es problematische HM10). Ich empfange immer die 133 und sogar mit Hunderten von Wiederholungen ist es nicht in der Lage zu verbinden.

Aber, wenn ich einen anderen Dongle verwende, kann ich mich mit dem "problematischen" HM10 verbinden. Wenn ich einen anderen HM10 benutze, kann ich mich mit dem "problematischen" Dongle verbinden.

Schließlich passiert es auch, dass ich, wenn ich ein anderes HM10 an den problematischen Dongle anschließe, direkt danach den problematischen HM10 an den problematischen Dongle anschließen kann. Aber wenn ich es abziehe, werde ich nie wieder eine Verbindung herstellen können.

Wenn ich versuche, eine Verbindung zu einem bestimmten BLE-Gerät herzustellen, erhalte ich immer einen getrennten Zustand mit Status = 133.

Was ich habe versucht, es zu lösen:

Es ist wichtig zu sagen, dass, während einer normalen Nutzung kann die HM10 von und umgekehrt gedreht werden. Obwohl ich das Trennereignis auf dem "onConnectionStateChange" im Gatt Callback ergreife, schließe ich immer den gatt (deviceGatt.close();) Ich habe auch in einigen Posts gelesen, um das DeviceGatt zu aktualisieren, bevor ich es schließe, also ich ‚tut es auch:

//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; 
    } 

ich auch in einem Beitrag lesen sie den Cache in dem android settings- zu reinigen> Wireless & Networks> mehr-> Netzwerkeinstellungen zurückzusetzen, aber das Problem weiterhin besteht, nachdem es zu tun.

finden Sie die Protokolle unter:

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 

Hier ein Screenshot des btsnoop_hci ist.cfa:

enter image description here

// update - Hinzufügen von Dateiprotokoll

Hier ist die log file

// end Update

ich viel Post zu diesem Thema gelesen, aber oder doesn Habe keine Lösung oder die gelieferte Lösung hat nicht funktioniert.

Ich bin ohne Optionen so frage ich mich Wenn jemand mir dabei helfen könnte. Irgendwelche Gedanken?

+0

Können Sie das hci-Protokoll hochladen? – Emil

+0

@Emil Ich habe den Beitrag mit der Protokolldatei aktualisiert. Danke für Ihre Hilfe. –

Antwort

0

Es ist nichts falsch mit der Android-Software. Das Problem ist, dass die BLE-Funkverbindung nicht in Verbindung zu bleiben scheint. Sie könnten einen Luftschnüffler verwenden, um zu überwachen, was in der Luft ist; Warum sind die Pakete verloren? Es besteht natürlich auch die Möglichkeit, dass sich die Link Layers der beiden Bluetooth Controller nicht richtig verhalten. Ich würde empfehlen zu überprüfen, dass die Hardware wirklich funktioniert und korrekt ist.

+0

Die seltsame Sache ist, dass HM10 Hardware mit einer anderen Android-Hardware funktioniert, was bedeutet, dass erfolgreich verbindet, wenn ich mit anderen Android-Dongle verbinden. Sagte, dass Sie auch erwähnt, "dass einer der Link-Ebenen der beiden Bluetooth-Controller sich schlecht benehmen." Ich glaube, das Problem besteht in diesem Problem. Irgendeine Empfehlung, dies auch zu überprüfen, um die Pakete über Funk zu überprüfen? –

+0

Nicht wirklich. Da keine Bluetooth-Chips irgendwelche Debug-Ausgaben haben, so weit ich weiß, ist das die einzige Methode. Mit einem Luftschnüffler sehen Sie, welches Gerät nicht richtig reagiert. – Emil

Verwandte Themen