OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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_media_transport_client.h" | 5 #include "chromeos/dbus/fake_bluetooth_media_transport_client.h" |
6 | 6 |
7 #include <sstream> | |
8 | |
7 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/stl_util.h" | |
8 #include "chromeos/dbus/bluetooth_media_client.h" | 11 #include "chromeos/dbus/bluetooth_media_client.h" |
9 #include "chromeos/dbus/dbus_thread_manager.h" | 12 #include "chromeos/dbus/dbus_thread_manager.h" |
13 #include "chromeos/dbus/fake_bluetooth_adapter_client.h" | |
10 #include "chromeos/dbus/fake_bluetooth_media_client.h" | 14 #include "chromeos/dbus/fake_bluetooth_media_client.h" |
15 #include "chromeos/dbus/fake_bluetooth_media_endpoint_service_provider.h" | |
11 | 16 |
12 using dbus::ObjectPath; | 17 using dbus::ObjectPath; |
13 | 18 |
14 namespace { | 19 namespace { |
15 | 20 |
16 // TODO(mcchou): Remove this constants once it is in cros_system_api. | 21 // TODO(mcchou): Remove this constants once it is in cros_system_api. |
17 const char kBluetoothMediaTransportInterface[] = "org.bluez.MediaTransport1"; | 22 const char kBluetoothMediaTransportInterface[] = "org.bluez.MediaTransport1"; |
18 const char kNotImplemented[] = "org.bluez.NotImplemented"; | 23 const char kNotImplemented[] = "org.bluez.NotImplemented"; |
19 | 24 |
25 ObjectPath GenerateTransportPath() { | |
26 static unsigned int sequence_number = 0; | |
27 ++sequence_number; | |
28 std::stringstream path; | |
29 path << chromeos::FakeBluetoothAdapterClient::kAdapterPath | |
30 << "/fake_audio_source/fd" << sequence_number; | |
armansito
2015/02/24 01:38:05
nit: use chromeos::FakeBluetoothAdapterClient::kTr
Miao
2015/02/24 05:11:38
Done.
| |
31 return ObjectPath(path.str()); | |
32 } | |
33 | |
20 } // namespace | 34 } // namespace |
21 | 35 |
22 namespace chromeos { | 36 namespace chromeos { |
23 | 37 |
24 // static | 38 // static |
25 const char FakeBluetoothMediaTransportClient::kTransportPath[] = | |
26 "/fake/hci0/dev_00_00_00_00_00_00/fd0"; | |
27 const char FakeBluetoothMediaTransportClient::kTransportDevicePath[] = | 39 const char FakeBluetoothMediaTransportClient::kTransportDevicePath[] = |
28 "/fake/hci0/dev_00_00_00_00_00_00"; | 40 "/fake_audio_source"; |
29 const uint8_t FakeBluetoothMediaTransportClient::kTransportCodec = 0x00; | 41 const uint8_t FakeBluetoothMediaTransportClient::kTransportCodec = 0x00; |
30 const std::vector<uint8_t> | 42 const std::vector<uint8_t> |
31 FakeBluetoothMediaTransportClient::kTransportConfiguration = { | 43 FakeBluetoothMediaTransportClient::kTransportConfiguration = { |
32 0x21, 0x15, 0x33, 0x2C}; | 44 0x21, 0x15, 0x33, 0x2C}; |
33 const uint16_t FakeBluetoothMediaTransportClient::kTransportDelay = 5; | 45 const uint16_t FakeBluetoothMediaTransportClient::kTransportDelay = 5; |
34 const uint16_t FakeBluetoothMediaTransportClient::kTransportVolume = 10; | 46 const uint16_t FakeBluetoothMediaTransportClient::kTransportVolume = 10; |
35 | 47 |
36 FakeBluetoothMediaTransportClient::Properties::Properties( | 48 FakeBluetoothMediaTransportClient::Properties::Properties( |
37 const PropertyChangedCallback& callback) | 49 const PropertyChangedCallback& callback) |
38 : BluetoothMediaTransportClient::Properties( | 50 : BluetoothMediaTransportClient::Properties( |
(...skipping 18 matching lines...) Expand all Loading... | |
57 VLOG(1) << "GetAll called."; | 69 VLOG(1) << "GetAll called."; |
58 } | 70 } |
59 | 71 |
60 void FakeBluetoothMediaTransportClient::Properties::Set( | 72 void FakeBluetoothMediaTransportClient::Properties::Set( |
61 dbus::PropertyBase* property, | 73 dbus::PropertyBase* property, |
62 dbus::PropertySet::SetCallback callback) { | 74 dbus::PropertySet::SetCallback callback) { |
63 VLOG(1) << "Set " << property->name(); | 75 VLOG(1) << "Set " << property->name(); |
64 callback.Run(false); | 76 callback.Run(false); |
65 } | 77 } |
66 | 78 |
67 FakeBluetoothMediaTransportClient::FakeBluetoothMediaTransportClient() | 79 FakeBluetoothMediaTransportClient::FakeBluetoothMediaTransportClient() { |
68 : object_path_(ObjectPath(kTransportPath)) { | |
69 // TODO(mcchou): Multiple endpoints are sharing one property set for now. | 80 // TODO(mcchou): Multiple endpoints are sharing one property set for now. |
70 // Add property sets accordingly to separate the | 81 // Add property sets accordingly to separate the |
71 // MediaTransportPropertiesChanged events for different endpoints. | 82 // MediaTransportPropertiesChanged events for different endpoints. |
72 | 83 |
73 // Sets fake property set with default values. | 84 // Sets fake property set with default values. |
74 properties_.reset(new Properties( | 85 properties_.reset(new Properties( |
75 base::Bind(&FakeBluetoothMediaTransportClient::OnPropertyChanged, | 86 base::Bind(&FakeBluetoothMediaTransportClient::OnPropertyChanged, |
76 base::Unretained(this)))); | 87 base::Unretained(this)))); |
77 properties_->device.ReplaceValue(ObjectPath(kTransportDevicePath)); | 88 properties_->device.ReplaceValue(ObjectPath(kTransportDevicePath)); |
78 properties_->uuid.ReplaceValue(BluetoothMediaClient::kBluetoothAudioSinkUUID); | 89 properties_->uuid.ReplaceValue(BluetoothMediaClient::kBluetoothAudioSinkUUID); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
123 } | 134 } |
124 | 135 |
125 void FakeBluetoothMediaTransportClient::Release( | 136 void FakeBluetoothMediaTransportClient::Release( |
126 const ObjectPath& object_path, | 137 const ObjectPath& object_path, |
127 const base::Closure& callback, | 138 const base::Closure& callback, |
128 const ErrorCallback& error_callback) { | 139 const ErrorCallback& error_callback) { |
129 error_callback.Run(kNotImplemented, ""); | 140 error_callback.Run(kNotImplemented, ""); |
130 } | 141 } |
131 | 142 |
132 void FakeBluetoothMediaTransportClient::SetValid( | 143 void FakeBluetoothMediaTransportClient::SetValid( |
133 const ObjectPath& endpoint_path, | 144 FakeBluetoothMediaEndpointServiceProvider* endpoint, |
134 bool valid) { | 145 bool valid) { |
146 FakeBluetoothMediaClient* media = static_cast<FakeBluetoothMediaClient*>( | |
147 DBusThreadManager::Get()->GetBluetoothMediaClient()); | |
148 DCHECK(media); | |
149 | |
150 ObjectPath endpoint_path(endpoint->object_path()); | |
151 if (!media->IsRegistered(endpoint_path)) | |
152 return; | |
153 | |
135 if (valid) { | 154 if (valid) { |
136 endpoints_[endpoint_path] = valid; | 155 ObjectPath transport_path = GenerateTransportPath(); |
156 VLOG(1) << "New transport, " << transport_path.value() | |
157 << " is created for endpoint " << endpoint_path.value(); | |
158 endpoints_[endpoint_path] = transport_path; | |
137 return; | 159 return; |
138 } | 160 } |
139 endpoints_.erase(endpoint_path); | |
140 | |
141 // TODO(mcchou): Since there is only one transport path, all observers will | |
142 // be notified. Shades irrelevant observers. | |
143 | 161 |
144 // Notifies observers about the state change of the transport. | 162 // Notifies observers about the state change of the transport. |
145 FOR_EACH_OBSERVER(BluetoothMediaTransportClient::Observer, observers_, | 163 FOR_EACH_OBSERVER(BluetoothMediaTransportClient::Observer, observers_, |
146 MediaTransportRemoved(object_path_)); | 164 MediaTransportRemoved(endpoints_[endpoint_path])); |
165 endpoints_.erase(endpoint_path); | |
166 endpoint->ClearConfiguration(GetTransportPath(endpoint_path)); | |
167 } | |
168 | |
169 ObjectPath FakeBluetoothMediaTransportClient::GetTransportPath( | |
170 const ObjectPath& endpoint_path) { | |
171 if (ContainsKey(endpoints_, endpoint_path)) | |
172 return endpoints_[endpoint_path]; | |
173 return ObjectPath(""); | |
147 } | 174 } |
148 | 175 |
149 void FakeBluetoothMediaTransportClient::OnPropertyChanged( | 176 void FakeBluetoothMediaTransportClient::OnPropertyChanged( |
150 const std::string& property_name) { | 177 const std::string& property_name) { |
151 VLOG(1) << "Property " << property_name << " changed"; | 178 VLOG(1) << "Property " << property_name << " changed"; |
152 } | 179 } |
153 | 180 |
154 } // namespace chromeos | 181 } // namespace chromeos |
OLD | NEW |