Chromium Code Reviews| 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..d54667551087c850fd4634d046fccf91de518c74 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::TrackDefaultAdapter() { |
| + PollAdapterState(); |
| +} |
| + |
| +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::PollAdapterState() { |
| + UpdateAdapterState(); |
| + |
| + MessageLoop::current()->PostDelayedTask( |
| + FROM_HERE, |
| + base::Bind(&BluetoothAdapterWin::PollAdapterState, |
| + weak_ptr_factory_.GetWeakPtr()), |
|
bryeung
2012/11/09 21:55:48
Since this is a weak_ptr, couldn't the adapter hav
youngki
2012/11/12 16:42:53
I ran a simple test by queuing this to message loo
|
| + base::TimeDelta::FromMilliseconds(kPollIntervalMs)); |
| +} |
| + |
| } // namespace device |