Languages

Menu
Sites
Language
How to disconnect BLE Beacon from Samsung Gear S2 watch?

I face issue , once GATT Operation done, Second time i am unable to scan any Beacon.

I am developing basic demo BLE app. Wearable SDK 3.0, Device: Samsung Gear S2, I have two buttons Start and Stop. when press start button app start scanning and if found perticular like MY_BEACON_1 then gatt operation perform.

GATT operation-> read service - characterstic- descriptor UUIDs, Write command and get response. once i finished write comand and get all operation then unable to scan beacon second time.

what i did for disconnect beacon:

1) Stop scan, -success

2) Derigister characteristic. -success

3) Call GATT connection callback - success

4) Disconnect Client -success

5) Deregister GATT -success

6) Deintiliaze Bluetooth all operations. -success

"If i disconnect battery cell of beacon then connect (add) , scanning is work."

Stop button some time give positive response like: client successfully destroy, Successfully deregister GATT, But not work all time Please suggest me the right way to disconnet chip, GATT, Client. Code (stop) button:

 

//release all resources once user press stop or close app.

void release_resources() {

    /* not work.
  ret = bt_gatt_set_value(chr, "QUIT\r", 4);
	if (ret != BT_ERROR_NONE) {
		dlog_print(DLOG_ERROR, LOG_TAG, "set failed Resume %d", ret);
		//return;
	} else {
		dlog_print(DLOG_INFO, LOG_TAG, "set success Resume", ret);
	}*/

//appdata_s *ad=(appdata_s *) data;
	dlog_print(DLOG_INFO, LOG_TAG, "Remote address of FxChip %s",ad->remote_address_global);

	//stop scanning
	ret = bt_adapter_le_stop_scan();
	if (ret != BT_ERROR_NONE) {
		dlog_print(DLOG_ERROR, LOG_TAG, "[bt_adapter_le_stop_scan] failed.");
	}

	bt_swtich_response(ret, "LE Stop");

	char *svc_uuid = "0bd51666-e7cb-469b-8e4d-2742f1ba77cc";
	char *chr_uuid = "e7add780-b042-4876-aae1-112855353cc1";

	ret = bt_gatt_client_get_service(client, svc_uuid, &svc);
	if (ret != BT_ERROR_NONE) {
		dlog_print(DLOG_INFO, LOG_TAG, "bt_gatt_client_get_service failed: %d",
				ret);
		//return;
	}

	ret = bt_gatt_service_get_characteristic(svc, chr_uuid, &chr);
	if (ret != BT_ERROR_NONE) {
		dlog_print(DLOG_INFO, LOG_TAG,
				"bt_gatt_service_get_characteristic failed: %d", ret);
		//return;
	}

	ret = bt_gatt_client_unset_characteristic_value_changed_cb(chr);
	if (ret != BT_ERROR_NONE) {
		dlog_print(DLOG_INFO, LOG_TAG,
				"bt_gatt_client_unset_characteristic_value_changed_cb failed: %d",
				ret);
		//return;
	} else {
		dlog_print(DLOG_INFO, LOG_TAG,
				"bt_gatt_client_unset_characteristic_value_changed_cb succesful");
	}

	//De-register the GATT connection callback
	ret = bt_gatt_unset_connection_state_changed_cb();

	if (ret != BT_ERROR_NONE)
		dlog_print(DLOG_INFO, LOG_TAG, "Failed to deregister");
	else
		dlog_print(DLOG_INFO, LOG_TAG, "Successfully deregister");
	bt_swtich_response(ret, "De register");

	// Destroy the client
	if (client != NULL) {
		ret = bt_gatt_client_destroy(client);
		if (ret == BT_ERROR_NONE) {
			dlog_print(DLOG_INFO, LOG_TAG, "Successfully destroy client");

		} else
			dlog_print(DLOG_INFO, LOG_TAG, "Falied to destroy client");
		client = NULL;
		bt_swtich_response(ret, "Client");
	}

	//Disconnect : got null value;
	ret = bt_gatt_disconnect(ad->remote_address_global);
	dlog_print(DLOG_INFO, LOG_TAG, "%s",
			ret == BT_ERROR_NONE ?
					"Successfully disconnect GATT - stop call" :
					"Fail to disconnect GATT- stop call ");
	bt_swtich_response(ret, "GATT Disconnect");

	// Deinitialize Bluetooth
	ret = bt_deinitialize();
	if (ret != BT_ERROR_NONE) {
		dlog_print(DLOG_ERROR, LOG_TAG, "[bt_deinitialize] Failed.");
	} else {
		dlog_print(DLOG_ERROR, LOG_TAG, "[bt_deinitialize] Success.");
	}
	bt_swtich_response(ret, "De initialize");

	bt_mgr_release();
}

void bt_mgr_release(void) {
	bt_adapter_unset_state_changed_cb();
	bt_adapter_unset_device_discovery_state_changed_cb();
	bt_device_unset_service_searched_cb();
	bt_socket_unset_data_received_cb();
	bt_socket_unset_connection_state_changed_cb();
	bt_deinitialize();
}



void bt_swtich_response(int ret, char *s) {
	dlog_print(DLOG_INFO, LOG_TAG, "################## %s ###################",
			s);
	switch (ret) {
	case BT_ERROR_NONE:
		dlog_print(DLOG_INFO, LOG_TAG, "Successful");
		break;
	case BT_ERROR_NOT_INITIALIZED:
		dlog_print(DLOG_INFO, LOG_TAG, "BT_ERROR_NOT_INITIALIZED");
		break;
	case BT_ERROR_NOT_ENABLED:
		dlog_print(DLOG_INFO, LOG_TAG, "BT_ERROR_NOT_ENABLED");
		break;
	case BT_ERROR_INVALID_PARAMETER:
		dlog_print(DLOG_INFO, LOG_TAG, "BT_ERROR_INVALID_PARAMETER");
		break;
	case BT_ERROR_OPERATION_FAILED:
		dlog_print(DLOG_INFO, LOG_TAG, "BT_ERROR_OPERATION_FAILED");
		break;
	case BT_ERROR_PERMISSION_DENIED:
		dlog_print(DLOG_INFO, LOG_TAG, "BT_ERROR_PERMISSION_DENIED");
		break;
	case BT_ERROR_NOT_SUPPORTED:
		dlog_print(DLOG_INFO, LOG_TAG, "BT_ERROR_NOT_SUPPORTED");
		break;
	default:
		dlog_print(DLOG_INFO, LOG_TAG, "Default called");
		break;
	}
}

 

It would be great if any other process for disconnect beacon for Samsung Gear S2.

Thanks in Advance.

 

Regards,

 Vrajesh s

 

Responses

7 Replies
Yasin Ali

Hi,
To disconnect from the Connected Device You may Use SPP.

To disconnect from a device:
•If your device is a Bluetooth server, disconnect from the client with the bt_socket_destroy_rfcomm() function:

bt_error_e ret; 
// You can get "server_socket_fd" from output of bt_socket_create_rfcomm()
ret = bt_socket_destroy_rfcomm(server_socket_fd);
if (ret != BT_ERROR_NONE)
{
   dlog_print(DLOG_ERROR, LOG_TAG, "[bt_socket_destroy_rfcomm] Failed.");
}
else
{
   dlog_print(DLOG_INFO, LOG_TAG, "[bt_socket_destroy_rfcomm] Succeeded. socket_fd = %d", server_socket_fd);
}

•If your device is a Bluetooth client, disconnect from the server with the bt_socket_disconnect_rfcomm() function:

bt_error_e ret;
/* You can get "server_socket_fd" from bt_socket_connection_state_changed_cb() */
ret = bt_socket_disconnect_rfcomm(server_socket_fd);
if (ret != BT_ERROR_NONE)
    dlog_print(DLOG_ERROR, LOG_TAG, "[bt_socket_destroy_rfcomm] failed. server_socket_fd = %d.", server_socket_fd);
else
    dlog_print(DLOG_INFO, LOG_TAG, "[bt_socket_destroy_rfcomm] succeeded. server_socket_fd = %d.", server_socket_fd);

 Hope it will help you.
If you find my post is helpful for you, please mark it as the Best Answer to promote this post to others.

vrajesh s

Hello sir,

 

Thanks for repy. i tried above code but every time socket id returns -1.so not able to disconnect it. Is there any other solution

Regards,

Vrajesh S

Yasin Ali

I think if successfully disconnected then socket id is not that concerned.

vrajesh s

some times got succesfully disconnect message. but actually BLE device connected. 

vrajesh s

Hello,

Please see below logs:

04-26 19:39:58.855 : INFO / freelaptizen ( 4260 : 4260 ) : bt_gatt_client_get_service is success 
04-26 19:39:58.855 : INFO / freelaptizen ( 4260 : 4260 ) : bt_gatt_client_get_characteristic is success :
04-26 19:39:58.855 : INFO / freelaptizen ( 4260 : 4260 ) : bt_gatt_characteristic_get_descriptor is success
04-26 19:39:59.040 : INFO / freelaptizen ( 4260 : 4260 ) : [bt_socket_connect_rfcomm] Succeeded. bt_socket_connection_state_changed_cb will be called.
04-26 19:39:59.060 : INFO / freelaptizen ( 4260 : 4260 ) : bt_gatt_client_set_characteristic_value_changed_cb Success
04-26 19:39:59.060 : INFO / freelaptizen ( 4260 : 4260 ) : set success Resume
04-26 19:40:01.095 : INFO / freelaptizen ( 4260 : 4260 ) : Successfully set write method Resume
04-26 19:40:01.110 : INFO / freelaptizen ( 4260 : 4260 ) : bt_gatt_client_write value failed (e7add780-b042-4876-aae1-112855353cc1): (null)
04-26 19:40:04.235 : ERROR / freelaptizen ( 4260 : 4260 ) : [socket_connection_state_changed_cb] failed. result =-29359863.
04-26 19:40:04.235 : INFO / freelaptizen ( 4260 : 4260 ) : Callback: Connected.
04-26 19:40:04.235 : INFO / freelaptizen ( 4260 : 4260 ) : Callback: Socket of connection - -1.
04-26 19:40:04.235 : INFO / freelaptizen ( 4260 : 4260 ) : Callback: Role of connection - 2.
04-26 19:40:04.235 : INFO / freelaptizen ( 4260 : 4260 ) : Callback: Address of connection - 00:0B:57:00:E0:DA.



 

Regards.

Vrajesh s

vrajesh s

Hello,

Please see below logs:

04-26 19:39:58.855 : INFO / freelaptizen ( 4260 : 4260 ) : bt_gatt_client_get_service is success 
04-26 19:39:58.855 : INFO / freelaptizen ( 4260 : 4260 ) : bt_gatt_client_get_characteristic is success :
04-26 19:39:58.855 : INFO / freelaptizen ( 4260 : 4260 ) : bt_gatt_characteristic_get_descriptor is success
04-26 19:39:59.040 : INFO / freelaptizen ( 4260 : 4260 ) : [bt_socket_connect_rfcomm] Succeeded. bt_socket_connection_state_changed_cb will be called.
04-26 19:39:59.060 : INFO / freelaptizen ( 4260 : 4260 ) : bt_gatt_client_set_characteristic_value_changed_cb Success
04-26 19:39:59.060 : INFO / freelaptizen ( 4260 : 4260 ) : set success Resume
04-26 19:40:01.095 : INFO / freelaptizen ( 4260 : 4260 ) : Successfully set write method Resume
04-26 19:40:01.110 : INFO / freelaptizen ( 4260 : 4260 ) : bt_gatt_client_write value failed (e7add780-b042-4876-aae1-112855353cc1): (null)
04-26 19:40:04.235 : ERROR / freelaptizen ( 4260 : 4260 ) : [socket_connection_state_changed_cb] failed. result =-29359863.
04-26 19:40:04.235 : INFO / freelaptizen ( 4260 : 4260 ) : Callback: Connected.
04-26 19:40:04.235 : INFO / freelaptizen ( 4260 : 4260 ) : Callback: Socket of connection - -1.
04-26 19:40:04.235 : INFO / freelaptizen ( 4260 : 4260 ) : Callback: Role of connection - 2.
04-26 19:40:04.235 : INFO / freelaptizen ( 4260 : 4260 ) : Callback: Address of connection - 00:0B:57:00:E0:DA.



 

Regards.

Vrajesh s

Yasin Ali

Try with resetting your device and checking connection strength

manually.