2015-08-18 6 views
5

Sto sviluppando un'applicazione che deve connettersi automaticamente ad una periferica.gatt.writeDescriptor errore di richiamata di stato quando si utilizza il dispositivo collegato

Ho un servizio appiccicosa che procede come segue:

  1. cerca il dispositivo desiderato nel periferiche associate
  2. se non fine la periferica (prima volta), scansioni per esso e legami con esso utilizzando device.createBond(), attende che il legame per finire ascoltando l'ACTION_BOND_STATE_CHANGED trasmesso
  3. collega ad esso utilizzando device.connectGatt(ctx,true,callback)
  4. attende onConnectionStateChange callback con stato di connessione
  5. 012.
  6. inizia il rilevamento dei servizi utilizzando gatt.discoverServices()
  7. attende onServicesDiscoverd richiamata
  8. permette le notifiche su una caratteristica scrivendo un descrittore utilizzando gatt.writeDescriptor
  9. attese per la richiamata onDescriptorWrite con lo status di successo BluetoothGatt.GATT_SUCCESS (0)
  10. fa cose con notifiche ricevute

Questo tutto funziona per la prima volta. Quando il dispositivo si disconnette (diventa fuori portata per esempio, o spento) i callback di servizio fastidiosi gatt.disconnect() e gatt.close(), si riavvia e ricomincia da capo, questa volta utilizza il dispositivo collegato per connettersi.

Tutto funziona bene fino a quando il punto 7, nel senso ho un callback per onDescriptorWrite con lo stato 133 volte seguita da un cambiamento di callback stato di connessione con lo stato 0 e lo stato di 22.

non riuscivo a trovare alcuna info on-line per quale status 133 o 22 media.

Qualche idea sul perché questo sta accadendo?

Sto lavorando attorno ad esso reagendo alla cattiva callback onDescriptorWrite rimuovendo il bond (reflection) e facendo di nuovo tutto con il dispositivo appena scansionato.

Quindi in pratica sto utilizzando il legame solo per attendere la connessione del dispositivo e quindi riavviare il tutto.

Ciò significa che una connessione Gatt per un dispositivo collegato è inutile per scrivere il descrittore di cui ho bisogno.

Sembra che mi manchi qualcosa, mi piacerebbe sapere cosa.

EDIT: alcuni logcat relavant uscita

08-18 16:06:31.363 12765-12835/? W/bt-att﹕ gatt_rsp_timeout disconnecting... 
08-18 16:06:31.363 12765-12835/? W/bt-btif﹕ bta_gattc_conn_cback() - cif=3  connected=0 conn_id=3 reason=0x0016 
08-18 16:06:31.363 12765-12835/? W/bt-btif﹕ bta_gattc_conn_cback() - cif=4  connected=0 conn_id=4 reason=0x0016 
08-18 16:06:31.363 12765-12835/? W/bt-btif﹕ bta_gattc_conn_cback() - cif=5  connected=0 conn_id=5 reason=0x0016 
08-18 16:06:31.366 12765-12807/? D/BtGatt.GattService﹕ onDisconnected() -  clientIf=5, connId=5, address=C1:D1:22:BA:F5:13 
here im getting onDescriptorWrite with status 133 
D/BluetoothGatt﹕ onClientConnectionState() - status=22 clientIf=5  device=C1:D1:22:BA:F5:13 

tramite gli sguardi di questo:
https://android.googlesource.com/platform/external/bluetooth/bluedroid/+/idea133/bta/include/bta_gatt_api.h#169

16 mezzi BTA_GATT_CONN_TERMINATE_LOCAL_HOST
22 significa BTA_GATT_CONN_LMP_TIMEOUT

chiesto questo su Nordici GitHub: https://github.com/NordicSemiconductor/Android-nRF-Toolbox/issues/9#issuecomment-132191406

.210
+0

un po 'più di dettagli, se solo salvare l'indirizzo del dispositivo ble e connettersi utilizzando bluetoothAdapter.getRemoteDevice (indirizzo) quindi non ho mai avuto questo problema. è solo durante il collegamento, forse l'informazione di vincolo non è più valida dopo il mio dispositivo si riavvia? quali informazioni conserva il legame? – talarari

+0

Trovate la soluzione? Penso anche che il ritardo non sia una buona soluzione per risolverlo – Jame

+0

Nota che 22 non è BTA_GATT_CONN_LMP_TIMEOUT - c'è un'enorme differenza tra 22 e 0x22. 22 = 0x16. –

risposta

1

chiesto questo su GitHub Nordici: https://github.com/NordicSemiconductor/Android-nRF-Toolbox/issues/9#issuecomment-132191406

dopo la loro raccomandazione aggiunto un ritardo di 2 secondi dopo aver chiamato connectGatt e ora funziona.

+0

ok, era sbagliato, il ritardo non aggiustarlo . – talarari

+1

Ciao @talarari Penso che potremmo avere un problema simile, hai mai trovato una soluzione? Grazie. – poshaughnessy

+0

@talarari, sto anche affrontando lo stesso problema, hai risolto questo problema?. Grazie in anticipo – kavie

Problemi correlati