This source file includes following definitions.
- StartDiscoverySession
- GetDevices
- GetDevices
- GetDevice
- GetDevice
- AddPairingDelegate
- RemovePairingDelegate
- DefaultPairingDelegate
- OnStartDiscoverySession
- MarkDiscoverySessionsAsInactive
- DiscoverySessionBecameInactive
#include "device/bluetooth/bluetooth_adapter.h"
#include "base/bind.h"
#include "base/stl_util.h"
#include "device/bluetooth/bluetooth_device.h"
#include "device/bluetooth/bluetooth_discovery_session.h"
namespace device {
BluetoothAdapter::BluetoothAdapter()
: weak_ptr_factory_(this) {
}
BluetoothAdapter::~BluetoothAdapter() {
STLDeleteValues(&devices_);
}
void BluetoothAdapter::StartDiscoverySession(
const DiscoverySessionCallback& callback,
const ErrorCallback& error_callback) {
AddDiscoverySession(
base::Bind(&BluetoothAdapter::OnStartDiscoverySession,
weak_ptr_factory_.GetWeakPtr(),
callback),
error_callback);
}
BluetoothAdapter::DeviceList BluetoothAdapter::GetDevices() {
ConstDeviceList const_devices =
const_cast<const BluetoothAdapter *>(this)->GetDevices();
DeviceList devices;
for (ConstDeviceList::const_iterator i = const_devices.begin();
i != const_devices.end(); ++i)
devices.push_back(const_cast<BluetoothDevice *>(*i));
return devices;
}
BluetoothAdapter::ConstDeviceList BluetoothAdapter::GetDevices() const {
ConstDeviceList devices;
for (DevicesMap::const_iterator iter = devices_.begin();
iter != devices_.end();
++iter)
devices.push_back(iter->second);
return devices;
}
BluetoothDevice* BluetoothAdapter::GetDevice(const std::string& address) {
return const_cast<BluetoothDevice *>(
const_cast<const BluetoothAdapter *>(this)->GetDevice(address));
}
const BluetoothDevice* BluetoothAdapter::GetDevice(
const std::string& address) const {
DevicesMap::const_iterator iter = devices_.find(address);
if (iter != devices_.end())
return iter->second;
return NULL;
}
void BluetoothAdapter::AddPairingDelegate(
BluetoothDevice::PairingDelegate* pairing_delegate,
PairingDelegatePriority priority) {
RemovePairingDelegate(pairing_delegate);
std::list<PairingDelegatePair>::iterator iter = pairing_delegates_.begin();
while (iter != pairing_delegates_.end() && iter->second >= priority)
++iter;
pairing_delegates_.insert(iter, std::make_pair(pairing_delegate, priority));
}
void BluetoothAdapter::RemovePairingDelegate(
BluetoothDevice::PairingDelegate* pairing_delegate) {
for (std::list<PairingDelegatePair>::iterator iter =
pairing_delegates_.begin(); iter != pairing_delegates_.end(); ++iter) {
if (iter->first == pairing_delegate) {
RemovePairingDelegateInternal(pairing_delegate);
pairing_delegates_.erase(iter);
return;
}
}
}
BluetoothDevice::PairingDelegate* BluetoothAdapter::DefaultPairingDelegate() {
if (pairing_delegates_.empty())
return NULL;
return pairing_delegates_.front().first;
}
void BluetoothAdapter::OnStartDiscoverySession(
const DiscoverySessionCallback& callback) {
VLOG(1) << "Discovery session started!";
scoped_ptr<BluetoothDiscoverySession> discovery_session(
new BluetoothDiscoverySession(scoped_refptr<BluetoothAdapter>(this)));
discovery_sessions_.insert(discovery_session.get());
callback.Run(discovery_session.Pass());
}
void BluetoothAdapter::MarkDiscoverySessionsAsInactive() {
std::set<BluetoothDiscoverySession*> temp(discovery_sessions_);
for (std::set<BluetoothDiscoverySession*>::iterator
iter = temp.begin();
iter != temp.end(); ++iter) {
(*iter)->MarkAsInactive();
}
}
void BluetoothAdapter::DiscoverySessionBecameInactive(
BluetoothDiscoverySession* discovery_session) {
DCHECK(!discovery_session->IsActive());
discovery_sessions_.erase(discovery_session);
}
}