Better handling of connection state and calls to gatt.close().
This commit is contained in:
parent
a4a7dea4ba
commit
ca70d55f7e
|
@ -126,6 +126,13 @@ public class BleConnect extends Fragment {
|
||||||
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
|
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
|
||||||
BluetoothDevice device = gatt.getDevice();
|
BluetoothDevice device = gatt.getDevice();
|
||||||
String addr = device.getAddress();
|
String addr = device.getAddress();
|
||||||
|
if (status != BluetoothGatt.GATT_SUCCESS) {
|
||||||
|
Log.d("gio", "onConnectionStateChange: error code " + status);
|
||||||
|
onDisconnect(gatt, addr);
|
||||||
|
Log.d("gio", "gatt.close()");
|
||||||
|
gatt.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
switch (newState) {
|
switch (newState) {
|
||||||
case BluetoothProfile.STATE_CONNECTED: {
|
case BluetoothProfile.STATE_CONNECTED: {
|
||||||
Log.d("gio", "Connected");
|
Log.d("gio", "Connected");
|
||||||
|
@ -133,14 +140,21 @@ public class BleConnect extends Fragment {
|
||||||
onConnect(gatt, addr);
|
onConnect(gatt, addr);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case BluetoothProfile.STATE_CONNECTING:
|
||||||
|
case BluetoothProfile.STATE_DISCONNECTING: {
|
||||||
|
break;
|
||||||
|
}
|
||||||
case BluetoothProfile.STATE_DISCONNECTED: {
|
case BluetoothProfile.STATE_DISCONNECTED: {
|
||||||
Log.d("gio", "Disconnected");
|
Log.d("gio", "Disconnected");
|
||||||
onDisconnect(gatt, addr);
|
onDisconnect(gatt, addr);
|
||||||
|
Log.d("gio", "gatt.close()");
|
||||||
gatt.close();
|
gatt.close();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
Log.d("gio", "onConnectionStateChange: unknown state");
|
Log.d("gio", "onConnectionStateChange: unknown state");
|
||||||
|
onDisconnect(gatt, addr);
|
||||||
|
Log.d("gio", "gatt.close()");
|
||||||
gatt.close();
|
gatt.close();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -177,7 +191,15 @@ public class BleConnect extends Fragment {
|
||||||
Log.d("gio","BleConnect: disconnect");
|
Log.d("gio","BleConnect: disconnect");
|
||||||
handler.post(new Runnable() {
|
handler.post(new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
|
boolean callClose = false;
|
||||||
|
BluetoothDevice device = gatt.getDevice();
|
||||||
|
if (device != null) {
|
||||||
|
callClose = (manager.getConnectionState(device, BluetoothProfile.GATT) != BluetoothGatt.STATE_CONNECTED);
|
||||||
|
}
|
||||||
gatt.disconnect();
|
gatt.disconnect();
|
||||||
|
if (callClose) {
|
||||||
|
gatt.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -178,6 +178,9 @@ func (b *BLE) knownPeripheral(p Peripheral) (Peripheral, bool) {
|
||||||
|
|
||||||
//DiscoverServices asks a Peripheral for its Services
|
//DiscoverServices asks a Peripheral for its Services
|
||||||
func (p Peripheral) DiscoverServices() {
|
func (p Peripheral) DiscoverServices() {
|
||||||
|
if p.gatt == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
connect()
|
connect()
|
||||||
log.Printf("discovering services")
|
log.Printf("discovering services")
|
||||||
runInJVM(func(env *C.JNIEnv) {
|
runInJVM(func(env *C.JNIEnv) {
|
||||||
|
@ -188,6 +191,9 @@ func (p Peripheral) DiscoverServices() {
|
||||||
//DiscoverCharacteristics asks a Peripheral for the Characteristics related
|
//DiscoverCharacteristics asks a Peripheral for the Characteristics related
|
||||||
//to a Service
|
//to a Service
|
||||||
func (p Peripheral) DiscoverCharacteristics(serv Service) {
|
func (p Peripheral) DiscoverCharacteristics(serv Service) {
|
||||||
|
if p.gatt == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
//launch a goroutine because this function calls back directly
|
//launch a goroutine because this function calls back directly
|
||||||
//from the same thread.
|
//from the same thread.
|
||||||
go func() {
|
go func() {
|
||||||
|
@ -202,6 +208,9 @@ func (p Peripheral) DiscoverCharacteristics(serv Service) {
|
||||||
|
|
||||||
//SetNotifyValue subscribes to a characteristic
|
//SetNotifyValue subscribes to a characteristic
|
||||||
func (p Peripheral) SetNotifyValue(c Characteristic) {
|
func (p Peripheral) SetNotifyValue(c Characteristic) {
|
||||||
|
if p.gatt == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
runInJVM(func(env *C.JNIEnv) {
|
runInJVM(func(env *C.JNIEnv) {
|
||||||
log.Printf("setCharacteristicNotification: %s", c.UUID)
|
log.Printf("setCharacteristicNotification: %s", c.UUID)
|
||||||
C.setCharacteristicNotification(env, gBLE.handle.BleConnect, p.gatt, c.characteristic)
|
C.setCharacteristicNotification(env, gBLE.handle.BleConnect, p.gatt, c.characteristic)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user