| Index: device/bluetooth/bluetooth_adapter_win.cc
|
| diff --git a/device/bluetooth/bluetooth_adapter_win.cc b/device/bluetooth/bluetooth_adapter_win.cc
|
| index 97eca65763bbdb2245bc9a84cf82ced50b7ab675..2fe1f58d906aa209ac231be3c6138294856380cb 100644
|
| --- a/device/bluetooth/bluetooth_adapter_win.cc
|
| +++ b/device/bluetooth/bluetooth_adapter_win.cc
|
| @@ -6,11 +6,27 @@
|
|
|
| #include "device/bluetooth/bluetooth_adapter_win.h"
|
|
|
| +#include <BluetoothAPIs.h>
|
| #include <string>
|
| +#include "base/bind.h"
|
| #include "base/logging.h"
|
| +#include "base/message_loop.h"
|
| +#include "base/stringprintf.h"
|
| +#include "base/sys_string_conversions.h"
|
| +
|
| +# pragma comment(lib, "Bthprops.lib")
|
| +
|
| +namespace {
|
| +
|
| +const BLUETOOTH_FIND_RADIO_PARAMS bluetooth_adapter_param =
|
| + { sizeof(BLUETOOTH_FIND_RADIO_PARAMS) };
|
| +
|
| +} // namespace
|
|
|
| namespace device {
|
|
|
| +const int BluetoothAdapterWin::kPollIntervalMs = 500;
|
| +
|
| BluetoothAdapterWin::BluetoothAdapterWin()
|
| : BluetoothAdapter(),
|
| ALLOW_THIS_IN_INITIALIZER_LIST(weak_ptr_factory_(this)) {
|
| @@ -28,8 +44,7 @@ void BluetoothAdapterWin::RemoveObserver(BluetoothAdapter::Observer* observer) {
|
| }
|
|
|
| bool BluetoothAdapterWin::IsPresent() const {
|
| - NOTIMPLEMENTED();
|
| - return false;
|
| + return !address_.empty();
|
| }
|
|
|
| bool BluetoothAdapterWin::IsPowered() const {
|
| @@ -78,4 +93,40 @@ void BluetoothAdapterWin::ReadLocalOutOfBandPairingData(
|
| NOTIMPLEMENTED();
|
| }
|
|
|
| +void BluetoothAdapterWin::UpdateAdapterState() {
|
| + HBLUETOOTH_RADIO_FIND bluetooth_adapter_handle = NULL;
|
| + BLUETOOTH_RADIO_INFO bluetooth_adapter_info =
|
| + { sizeof(BLUETOOTH_RADIO_INFO), 0 };
|
| + BluetoothFindFirstRadio(&bluetooth_adapter_param, &bluetooth_adapter_handle);
|
| + if (bluetooth_adapter_handle &&
|
| + ERROR_SUCCESS == BluetoothGetRadioInfo(bluetooth_adapter_handle,
|
| + &bluetooth_adapter_info)) {
|
| + name_ = base::SysWideToUTF8(bluetooth_adapter_info.szName);
|
| + address_ = base::StringPrintf("%02X:%02X:%02X:%02X:%02X:%02X",
|
| + bluetooth_adapter_info.address.rgBytes[5],
|
| + bluetooth_adapter_info.address.rgBytes[4],
|
| + bluetooth_adapter_info.address.rgBytes[3],
|
| + bluetooth_adapter_info.address.rgBytes[2],
|
| + bluetooth_adapter_info.address.rgBytes[1],
|
| + bluetooth_adapter_info.address.rgBytes[0]);
|
| + } else {
|
| + name_.clear();
|
| + address_.clear();
|
| + }
|
| +}
|
| +
|
| +void BluetoothAdapterWin::TrackDefaultAdapter() {
|
| + PollAdapterState();
|
| +}
|
| +
|
| +void BluetoothAdapterWin::PollAdapterState() {
|
| + UpdateAdapterState();
|
| +
|
| + MessageLoop::current()->PostDelayedTask(
|
| + FROM_HERE,
|
| + base::Bind(&BluetoothAdapterWin::PollAdapterState,
|
| + weak_ptr_factory_.GetWeakPtr()),
|
| + base::TimeDelta::FromMilliseconds(kPollIntervalMs));
|
| +}
|
| +
|
| } // namespace device
|
|
|