const auto& address = common::FromJson<std::string>(args, "address");
- int ret = bt_gatt_connect(address.c_str(), true);
+ bool connected = false;
+ int ret = bt_device_is_profile_connected(address.c_str(), BT_PROFILE_GATT, &connected);
if (BT_ERROR_NONE != ret) {
- instance_.AsyncResponse(
- callback_handle,
- PlatformResult(util::GetBluetoothError(ret, "Failed to connect.")));
+ instance_.AsyncResponse(callback_handle,
+ PlatformResult(ErrorCode::UNKNOWN_ERR, "Failed to disconnect."));
return;
}
- connecting_[address] = callback_handle;
+ if (connected) {
+ instance_.AsyncResponse(callback_handle,
+ PlatformResult(ErrorCode::NO_ERROR));
+ } else { // not connected yet
+ ret = bt_gatt_connect(address.c_str(), true);
+ if (BT_ERROR_NONE != ret) {
+ instance_.AsyncResponse(
+ callback_handle,
+ PlatformResult(ErrorCode::UNKNOWN_ERR, "Failed to connect."));
+ return;
+ }
+ connecting_[address] = callback_handle;
+ }
ReportSuccess(out);
}