如何从Samsung Gear S2手表断开BLE Beacon?

时间:2017-04-22 15:03:17

标签: bluetooth-lowenergy tizen gatt tizen-wearable-sdk tizen-native-app

我面临问题,一旦完成GATT操作,第二次我无法扫描任何Beacon。

我正在开发基本的演示BLE应用程序。可穿戴SDK 3.0,设备:Samsung Gear S2,我有两个按钮Start和Stop。当按下开始按钮应用程序开始扫描,如果发现像MY_BEACON_1那样,那么gatt操作执行。

GATT操作 - >读取服务 - 特征码 - 描述符UUID,写入命令和获取响应。一旦我完成了写命令并获得所有操作,那么第二次无法扫描信标。

我为断开信标做了什么:

1)停止扫描, - 成功

2)Derigister特征。 -success

3)调用GATT连接回调 - 成功

4)断开客户端-success

5)取消注册GATT -success

6)Deintiliaze蓝牙所有操作。 -success

“如果我断开信标的电池,然后连接(添加),扫描就可以了。”

停止按钮一段时间给予积极响应:客户端成功销毁,成功取消注册GATT,但不能一直工作 请建议我解决芯片,GATT,客户端的正确方法。 代码(停止)按钮:

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

如果有任何其他进程断开三星Gear S2的信标,那将会很棒。

先谢谢。

0 个答案:

没有答案