[go: nahoru, domu]

blob: 280b5c44766d87cdba3c45e173d46c0e43f1c81b [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "device/bluetooth/floss/bluetooth_gatt_connection_floss.h"
#include "base/bind.h"
#include "base/logging.h"
#include "device/bluetooth/bluetooth_adapter.h"
#include "device/bluetooth/bluetooth_device.h"
#include "device/bluetooth/floss/floss_dbus_manager.h"
namespace floss {
BluetoothGattConnectionFloss::BluetoothGattConnectionFloss(
scoped_refptr<device::BluetoothAdapter> adapter,
const FlossDeviceId& device_id)
: BluetoothGattConnection(adapter.get(), device_id.address) {
DCHECK(adapter_.get());
DCHECK(!device_id.address.empty());
id_ = device_id;
connected_ = true;
floss::FlossDBusManager::Get()->GetAdapterClient()->AddObserver(this);
}
BluetoothGattConnectionFloss::~BluetoothGattConnectionFloss() {
floss::FlossDBusManager::Get()->GetAdapterClient()->RemoveObserver(this);
Disconnect();
}
bool BluetoothGattConnectionFloss::IsConnected() {
return connected_;
}
void BluetoothGattConnectionFloss::Disconnect() {
if (!connected_) {
DVLOG(1) << "Connection already inactive";
return;
}
connected_ = false;
BluetoothGattConnection::Disconnect();
}
void BluetoothGattConnectionFloss::AdapterDeviceDisconnected(
const FlossDeviceId& device) {
if (device.address != id_.address)
return;
VLOG(2) << "BluetoothGattConnection disconnected for " << device.address;
connected_ = false;
}
void BluetoothGattConnectionFloss::GattClientConnectionState(
GattStatus status,
int32_t client_id,
bool connected,
std::string address) {
if (address != id_.address) {
return;
}
VLOG(2) << "BluetoothGattConnection state change " << address << ": "
<< (connected ? "CONNECTED" : "DISCONNECTED");
connected_ = connected;
}
} // namespace floss