OLD | NEW |
---|---|
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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 "chromeos/dbus/fake_bluetooth_device_client.h" | 5 #include "chromeos/dbus/fake_bluetooth_device_client.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <map> | 8 #include <map> |
9 #include <string> | 9 #include <string> |
10 #include <utility> | 10 #include <utility> |
11 #include <vector> | 11 #include <vector> |
12 | 12 |
13 #include "base/bind.h" | 13 #include "base/bind.h" |
14 #include "base/logging.h" | 14 #include "base/logging.h" |
15 #include "base/message_loop.h" | 15 #include "base/message_loop.h" |
16 #include "base/stl_util.h" | 16 #include "base/stl_util.h" |
17 #include "base/time.h" | 17 #include "base/time.h" |
18 #include "chromeos/dbus/dbus_thread_manager.h" | 18 #include "chromeos/dbus/dbus_thread_manager.h" |
19 #include "chromeos/dbus/fake_bluetooth_adapter_client.h" | 19 #include "chromeos/dbus/fake_bluetooth_adapter_client.h" |
20 #include "chromeos/dbus/fake_bluetooth_agent_manager_client.h" | 20 #include "chromeos/dbus/fake_bluetooth_agent_manager_client.h" |
21 #include "chromeos/dbus/fake_bluetooth_agent_service_provider.h" | 21 #include "chromeos/dbus/fake_bluetooth_agent_service_provider.h" |
22 #include "chromeos/dbus/fake_bluetooth_input_client.h" | |
22 #include "dbus/object_path.h" | 23 #include "dbus/object_path.h" |
23 #include "third_party/cros_system_api/dbus/service_constants.h" | 24 #include "third_party/cros_system_api/dbus/service_constants.h" |
24 | 25 |
25 namespace { | 26 namespace { |
26 | 27 |
27 // Default interval between simulated events. | 28 // Default interval between simulated events. |
28 const int kSimulationIntervalMs = 750; | 29 const int kSimulationIntervalMs = 750; |
29 | 30 |
30 } | 31 } |
31 | 32 |
(...skipping 377 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
409 | 410 |
410 PropertiesMap::iterator iter = properties_map_.find(device_path); | 411 PropertiesMap::iterator iter = properties_map_.find(device_path); |
411 Properties* properties = iter->second; | 412 Properties* properties = iter->second; |
412 | 413 |
413 VLOG(1) << "removing device: " << properties->alias.value(); | 414 VLOG(1) << "removing device: " << properties->alias.value(); |
414 device_list_.erase(listiter); | 415 device_list_.erase(listiter); |
415 | 416 |
416 FOR_EACH_OBSERVER(ExperimentalBluetoothDeviceClient::Observer, observers_, | 417 FOR_EACH_OBSERVER(ExperimentalBluetoothDeviceClient::Observer, observers_, |
417 DeviceRemoved(device_path)); | 418 DeviceRemoved(device_path)); |
418 | 419 |
420 // Remove the Input interface if it exists. | |
421 FakeBluetoothInputClient* fake_bluetooth_input_client = | |
422 static_cast<FakeBluetoothInputClient*>( | |
423 DBusThreadManager::Get()->GetExperimentalBluetoothInputClient()); | |
424 fake_bluetooth_input_client->RemoveInputDevice(device_path); | |
425 | |
419 delete properties; | 426 delete properties; |
420 properties_map_.erase(iter); | 427 properties_map_.erase(iter); |
421 } | 428 } |
422 | 429 |
423 void FakeBluetoothDeviceClient::OnPropertyChanged( | 430 void FakeBluetoothDeviceClient::OnPropertyChanged( |
424 const dbus::ObjectPath& object_path, | 431 const dbus::ObjectPath& object_path, |
425 const std::string& property_name) { | 432 const std::string& property_name) { |
426 FOR_EACH_OBSERVER(ExperimentalBluetoothDeviceClient::Observer, observers_, | 433 FOR_EACH_OBSERVER(ExperimentalBluetoothDeviceClient::Observer, observers_, |
427 DevicePropertyChanged(object_path, property_name)); | 434 DevicePropertyChanged(object_path, property_name)); |
428 } | 435 } |
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
621 if (pairing_cancelled_) { | 628 if (pairing_cancelled_) { |
622 pairing_cancelled_ = false; | 629 pairing_cancelled_ = false; |
623 | 630 |
624 error_callback.Run(bluetooth_adapter::kErrorAuthenticationCanceled, | 631 error_callback.Run(bluetooth_adapter::kErrorAuthenticationCanceled, |
625 "Cancaled"); | 632 "Cancaled"); |
626 } else { | 633 } else { |
627 Properties* properties = GetProperties(object_path); | 634 Properties* properties = GetProperties(object_path); |
628 | 635 |
629 properties->paired.ReplaceValue(true); | 636 properties->paired.ReplaceValue(true); |
630 | 637 |
638 // If the paired device is a HID device based on it's bluetooth class, | |
639 // simulate the Input interface. | |
640 FakeBluetoothInputClient* fake_bluetooth_input_client = | |
641 static_cast<FakeBluetoothInputClient*>( | |
642 DBusThreadManager::Get()->GetExperimentalBluetoothInputClient()); | |
643 | |
644 if ((properties->bluetooth_class.value() & 0x001f03) == 0x000500) { | |
645 std::vector<std::string> uuids = properties->uuids.value(); | |
646 if (std::find(uuids.begin(), uuids.end(), | |
647 "00001124-0000-1000-8000-00805f9b34fb") == uuids.end()) { | |
648 uuids.push_back("00001124-0000-1000-8000-00805f9b34fb"); | |
649 properties->uuids.ReplaceValue(uuids); | |
650 fake_bluetooth_input_client->AddInputDevice(object_path); | |
651 } | |
652 } | |
keybuk
2013/04/18 22:37:44
This also needs to be run in the Connect() functio
deymo
2013/04/18 23:21:02
CompleteSimulatedPairing is called also for the Mi
keybuk
2013/04/18 23:45:09
It is, but for the "test a connect failing after p
deymo
2013/04/19 01:23:22
Done.
| |
653 | |
631 callback.Run(); | 654 callback.Run(); |
632 properties->NotifyPropertyChanged(properties->paired.name()); | 655 properties->NotifyPropertyChanged(properties->paired.name()); |
633 } | 656 } |
634 } | 657 } |
635 | 658 |
636 void FakeBluetoothDeviceClient::TimeoutSimulatedPairing( | 659 void FakeBluetoothDeviceClient::TimeoutSimulatedPairing( |
637 const dbus::ObjectPath& object_path, | 660 const dbus::ObjectPath& object_path, |
638 const ErrorCallback& error_callback) { | 661 const ErrorCallback& error_callback) { |
639 VLOG(1) << "TimeoutSimulatedPairing: " << object_path.value(); | 662 VLOG(1) << "TimeoutSimulatedPairing: " << object_path.value(); |
640 | 663 |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
798 FROM_HERE, | 821 FROM_HERE, |
799 base::Bind(&FakeBluetoothDeviceClient::CompleteSimulatedPairing, | 822 base::Bind(&FakeBluetoothDeviceClient::CompleteSimulatedPairing, |
800 base::Unretained(this), | 823 base::Unretained(this), |
801 object_path, callback, error_callback), | 824 object_path, callback, error_callback), |
802 base::TimeDelta::FromMilliseconds(simulation_interval_ms_)); | 825 base::TimeDelta::FromMilliseconds(simulation_interval_ms_)); |
803 | 826 |
804 } | 827 } |
805 } | 828 } |
806 | 829 |
807 } // namespace chromeos | 830 } // namespace chromeos |
OLD | NEW |