Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(72)

Side by Side Diff: device/bluetooth/bluetooth_task_manager_win.cc

Issue 1668233004: Refactor bluetooth_task_manager_win to prepare for new Bluetooth test fixture (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address comments Created 4 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « device/bluetooth/bluetooth_low_energy_win.cc ('k') | device/device_tests.gyp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "device/bluetooth/bluetooth_task_manager_win.h" 5 #include "device/bluetooth/bluetooth_task_manager_win.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 #include <winsock2.h> 8 #include <winsock2.h>
9 9
10 #include <string> 10 #include <string>
11 11
12 #include "base/bind.h" 12 #include "base/bind.h"
13 #include "base/memory/ref_counted.h" 13 #include "base/memory/ref_counted.h"
14 #include "base/message_loop/message_loop.h" 14 #include "base/message_loop/message_loop.h"
15 #include "base/sequenced_task_runner.h" 15 #include "base/sequenced_task_runner.h"
16 #include "base/strings/stringprintf.h" 16 #include "base/strings/stringprintf.h"
17 #include "base/strings/sys_string_conversions.h" 17 #include "base/strings/sys_string_conversions.h"
18 #include "base/threading/sequenced_worker_pool.h" 18 #include "base/threading/sequenced_worker_pool.h"
19 #include "base/win/scoped_handle.h" 19 #include "base/win/scoped_handle.h"
20 #include "device/bluetooth/bluetooth_classic_win.h"
20 #include "device/bluetooth/bluetooth_device.h" 21 #include "device/bluetooth/bluetooth_device.h"
21 #include "device/bluetooth/bluetooth_init_win.h" 22 #include "device/bluetooth/bluetooth_init_win.h"
22 #include "device/bluetooth/bluetooth_low_energy_win.h" 23 #include "device/bluetooth/bluetooth_low_energy_win.h"
23 #include "device/bluetooth/bluetooth_service_record_win.h" 24 #include "device/bluetooth/bluetooth_service_record_win.h"
24 #include "net/base/winsock_init.h" 25 #include "net/base/winsock_init.h"
25 26
26 namespace { 27 namespace {
27 28
28 const int kNumThreadsInWorkerPool = 3; 29 const int kNumThreadsInWorkerPool = 3;
29 const char kBluetoothThreadName[] = "BluetoothPollingThreadWin"; 30 const char kBluetoothThreadName[] = "BluetoothPollingThreadWin";
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
77 } 78 }
78 79
79 // Populates bluetooth adapter state using adapter_handle. 80 // Populates bluetooth adapter state using adapter_handle.
80 void GetAdapterState(HANDLE adapter_handle, 81 void GetAdapterState(HANDLE adapter_handle,
81 device::BluetoothTaskManagerWin::AdapterState* state) { 82 device::BluetoothTaskManagerWin::AdapterState* state) {
82 std::string name; 83 std::string name;
83 std::string address; 84 std::string address;
84 bool powered = false; 85 bool powered = false;
85 BLUETOOTH_RADIO_INFO adapter_info = {sizeof(BLUETOOTH_RADIO_INFO)}; 86 BLUETOOTH_RADIO_INFO adapter_info = {sizeof(BLUETOOTH_RADIO_INFO)};
86 if (adapter_handle && 87 if (adapter_handle &&
87 ERROR_SUCCESS == BluetoothGetRadioInfo(adapter_handle, 88 ERROR_SUCCESS ==
88 &adapter_info)) { 89 device::win::BluetoothClassicWrapper::GetInstance()->GetRadioInfo(
90 adapter_handle, &adapter_info)) {
89 name = base::SysWideToUTF8(adapter_info.szName); 91 name = base::SysWideToUTF8(adapter_info.szName);
90 address = BluetoothAddressToCanonicalString(adapter_info.address); 92 address = BluetoothAddressToCanonicalString(adapter_info.address);
91 powered = !!BluetoothIsConnectable(adapter_handle); 93 powered =
94 !!device::win::BluetoothClassicWrapper::GetInstance()->IsConnectable(
95 adapter_handle);
92 } 96 }
93 state->name = name; 97 state->name = name;
94 state->address = address; 98 state->address = address;
95 state->powered = powered; 99 state->powered = powered;
96 } 100 }
97 101
98 void GetDeviceState(const BLUETOOTH_DEVICE_INFO& device_info, 102 void GetDeviceState(const BLUETOOTH_DEVICE_INFO& device_info,
99 device::BluetoothTaskManagerWin::DeviceState* state) { 103 device::BluetoothTaskManagerWin::DeviceState* state) {
100 state->name = base::SysWideToUTF8(device_info.szName); 104 state->name = base::SysWideToUTF8(device_info.szName);
101 state->address = BluetoothAddressToCanonicalString(device_info.Address); 105 state->address = BluetoothAddressToCanonicalString(device_info.Address);
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 140
137 BluetoothTaskManagerWin::BluetoothTaskManagerWin( 141 BluetoothTaskManagerWin::BluetoothTaskManagerWin(
138 scoped_refptr<base::SequencedTaskRunner> ui_task_runner) 142 scoped_refptr<base::SequencedTaskRunner> ui_task_runner)
139 : ui_task_runner_(ui_task_runner), 143 : ui_task_runner_(ui_task_runner),
140 discovering_(false), 144 discovering_(false),
141 current_logging_batch_count_(0) { 145 current_logging_batch_count_(0) {
142 } 146 }
143 147
144 BluetoothTaskManagerWin::~BluetoothTaskManagerWin() { 148 BluetoothTaskManagerWin::~BluetoothTaskManagerWin() {
145 win::BluetoothLowEnergyWrapper::DeleteInstance(); 149 win::BluetoothLowEnergyWrapper::DeleteInstance();
150 win::BluetoothClassicWrapper::DeleteInstance();
146 } 151 }
147 152
148 void BluetoothTaskManagerWin::AddObserver(Observer* observer) { 153 void BluetoothTaskManagerWin::AddObserver(Observer* observer) {
149 DCHECK(observer); 154 DCHECK(observer);
150 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread()); 155 DCHECK(ui_task_runner_->RunsTasksOnCurrentThread());
151 observers_.AddObserver(observer); 156 observers_.AddObserver(observer);
152 } 157 }
153 158
154 void BluetoothTaskManagerWin::RemoveObserver(Observer* observer) { 159 void BluetoothTaskManagerWin::RemoveObserver(Observer* observer) {
155 DCHECK(observer); 160 DCHECK(observer);
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 void BluetoothTaskManagerWin::PollAdapter() { 293 void BluetoothTaskManagerWin::PollAdapter() {
289 DCHECK(bluetooth_task_runner_->RunsTasksOnCurrentThread()); 294 DCHECK(bluetooth_task_runner_->RunsTasksOnCurrentThread());
290 295
291 // Skips updating the adapter info if the adapter is in discovery mode. 296 // Skips updating the adapter info if the adapter is in discovery mode.
292 if (!discovering_) { 297 if (!discovering_) {
293 const BLUETOOTH_FIND_RADIO_PARAMS adapter_param = 298 const BLUETOOTH_FIND_RADIO_PARAMS adapter_param =
294 { sizeof(BLUETOOTH_FIND_RADIO_PARAMS) }; 299 { sizeof(BLUETOOTH_FIND_RADIO_PARAMS) };
295 if (adapter_handle_.IsValid()) 300 if (adapter_handle_.IsValid())
296 adapter_handle_.Close(); 301 adapter_handle_.Close();
297 HANDLE temp_adapter_handle; 302 HANDLE temp_adapter_handle;
298 HBLUETOOTH_RADIO_FIND handle = BluetoothFindFirstRadio( 303 HBLUETOOTH_RADIO_FIND handle =
299 &adapter_param, &temp_adapter_handle); 304 win::BluetoothClassicWrapper::GetInstance()->FindFirstRadio(
305 &adapter_param, &temp_adapter_handle);
300 306
301 if (handle) { 307 if (handle) {
302 adapter_handle_.Set(temp_adapter_handle); 308 adapter_handle_.Set(temp_adapter_handle);
303 GetKnownDevices(); 309 GetKnownDevices();
304 BluetoothFindRadioClose(handle); 310 win::BluetoothClassicWrapper::GetInstance()->FindRadioClose(handle);
305 } 311 }
306 312
307 PostAdapterStateToUi(); 313 PostAdapterStateToUi();
308 } 314 }
309 315
310 // Re-poll. 316 // Re-poll.
311 bluetooth_task_runner_->PostDelayedTask( 317 bluetooth_task_runner_->PostDelayedTask(
312 FROM_HERE, 318 FROM_HERE,
313 base::Bind(&BluetoothTaskManagerWin::PollAdapter, 319 base::Bind(&BluetoothTaskManagerWin::PollAdapter,
314 this), 320 this),
(...skipping 11 matching lines...) Expand all
326 base::Owned(state))); 332 base::Owned(state)));
327 } 333 }
328 334
329 void BluetoothTaskManagerWin::SetPowered( 335 void BluetoothTaskManagerWin::SetPowered(
330 bool powered, 336 bool powered,
331 const base::Closure& callback, 337 const base::Closure& callback,
332 const BluetoothAdapter::ErrorCallback& error_callback) { 338 const BluetoothAdapter::ErrorCallback& error_callback) {
333 DCHECK(bluetooth_task_runner_->RunsTasksOnCurrentThread()); 339 DCHECK(bluetooth_task_runner_->RunsTasksOnCurrentThread());
334 bool success = false; 340 bool success = false;
335 if (adapter_handle_.IsValid()) { 341 if (adapter_handle_.IsValid()) {
336 if (!powered) 342 if (!powered) {
337 BluetoothEnableDiscovery(adapter_handle_.Get(), false); 343 win::BluetoothClassicWrapper::GetInstance()->EnableDiscovery(
338 success = 344 adapter_handle_.Get(), false);
339 !!BluetoothEnableIncomingConnections(adapter_handle_.Get(), powered); 345 }
346 success = !!win::BluetoothClassicWrapper::GetInstance()
347 ->EnableIncomingConnections(adapter_handle_.Get(), powered);
340 } 348 }
341 349
342 if (success) { 350 if (success) {
343 PostAdapterStateToUi(); 351 PostAdapterStateToUi();
344 ui_task_runner_->PostTask(FROM_HERE, callback); 352 ui_task_runner_->PostTask(FROM_HERE, callback);
345 } else { 353 } else {
346 ui_task_runner_->PostTask(FROM_HERE, error_callback); 354 ui_task_runner_->PostTask(FROM_HERE, error_callback);
347 } 355 }
348 } 356 }
349 357
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after
430 device_search_params.fReturnRemembered = 1; 438 device_search_params.fReturnRemembered = 1;
431 device_search_params.fReturnUnknown = (search_cached_devices_only ? 0 : 1); 439 device_search_params.fReturnUnknown = (search_cached_devices_only ? 0 : 1);
432 device_search_params.fReturnConnected = 1; 440 device_search_params.fReturnConnected = 1;
433 device_search_params.fIssueInquiry = (search_cached_devices_only ? 0 : 1); 441 device_search_params.fIssueInquiry = (search_cached_devices_only ? 0 : 1);
434 device_search_params.cTimeoutMultiplier = timeout_multiplier; 442 device_search_params.cTimeoutMultiplier = timeout_multiplier;
435 443
436 BLUETOOTH_DEVICE_INFO device_info; 444 BLUETOOTH_DEVICE_INFO device_info;
437 ZeroMemory(&device_info, sizeof(device_info)); 445 ZeroMemory(&device_info, sizeof(device_info));
438 device_info.dwSize = sizeof(BLUETOOTH_DEVICE_INFO); 446 device_info.dwSize = sizeof(BLUETOOTH_DEVICE_INFO);
439 HBLUETOOTH_DEVICE_FIND handle = 447 HBLUETOOTH_DEVICE_FIND handle =
440 BluetoothFindFirstDevice(&device_search_params, &device_info); 448 win::BluetoothClassicWrapper::GetInstance()->FindFirstDevice(
449 &device_search_params, &device_info);
441 if (!handle) { 450 if (!handle) {
442 int last_error = GetLastError(); 451 int last_error = GetLastError();
443 if (last_error == ERROR_NO_MORE_ITEMS) { 452 if (last_error == ERROR_NO_MORE_ITEMS) {
444 return true; // No devices is not an error. 453 return true; // No devices is not an error.
445 } 454 }
446 LogPollingError("Error calling BluetoothFindFirstDevice", last_error); 455 LogPollingError("Error calling BluetoothFindFirstDevice", last_error);
447 return false; 456 return false;
448 } 457 }
449 458
450 while (true) { 459 while (true) {
451 DeviceState* device_state = new DeviceState(); 460 DeviceState* device_state = new DeviceState();
452 GetDeviceState(device_info, device_state); 461 GetDeviceState(device_info, device_state);
453 device_list->push_back(device_state); 462 device_list->push_back(device_state);
454 463
455 // Reset device info before next call (as a safety precaution). 464 // Reset device info before next call (as a safety precaution).
456 ZeroMemory(&device_info, sizeof(device_info)); 465 ZeroMemory(&device_info, sizeof(device_info));
457 device_info.dwSize = sizeof(BLUETOOTH_DEVICE_INFO); 466 device_info.dwSize = sizeof(BLUETOOTH_DEVICE_INFO);
458 if (!BluetoothFindNextDevice(handle, &device_info)) { 467 if (!win::BluetoothClassicWrapper::GetInstance()->FindNextDevice(
468 handle, &device_info)) {
459 int last_error = GetLastError(); 469 int last_error = GetLastError();
460 if (last_error == ERROR_NO_MORE_ITEMS) { 470 if (last_error == ERROR_NO_MORE_ITEMS) {
461 break; // No more items is expected error when done enumerating. 471 break; // No more items is expected error when done enumerating.
462 } 472 }
463 LogPollingError("Error calling BluetoothFindNextDevice", last_error); 473 LogPollingError("Error calling BluetoothFindNextDevice", last_error);
464 BluetoothFindDeviceClose(handle); 474 win::BluetoothClassicWrapper::GetInstance()->FindDeviceClose(handle);
465 return false; 475 return false;
466 } 476 }
467 } 477 }
468 478
469 if (!BluetoothFindDeviceClose(handle)) { 479 if (!win::BluetoothClassicWrapper::GetInstance()->FindDeviceClose(handle)) {
470 LogPollingError("Error calling BluetoothFindDeviceClose", GetLastError()); 480 LogPollingError("Error calling BluetoothFindDeviceClose", GetLastError());
471 return false; 481 return false;
472 } 482 }
473 return true; 483 return true;
474 } 484 }
475 485
476 bool BluetoothTaskManagerWin::SearchLowEnergyDevices( 486 bool BluetoothTaskManagerWin::SearchLowEnergyDevices(
477 ScopedVector<DeviceState>* device_list) { 487 ScopedVector<DeviceState>* device_list) {
478 if (!win::IsBluetoothLowEnergySupported()) 488 if (!win::IsBluetoothLowEnergySupported())
479 return true; // Bluetooth LE not supported is not an error. 489 return true; // Bluetooth LE not supported is not an error.
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
712 break; 722 break;
713 } 723 }
714 } 724 }
715 } 725 }
716 } 726 }
717 727
718 return true; 728 return true;
719 } 729 }
720 730
721 } // namespace device 731 } // namespace device
OLDNEW
« no previous file with comments | « device/bluetooth/bluetooth_low_energy_win.cc ('k') | device/device_tests.gyp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698