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 "device/bluetooth/dbus/fake_bluetooth_media_transport_client.h" |
6 | 6 |
7 #include <unistd.h> | 7 #include <unistd.h> |
8 #include <sys/socket.h> | 8 #include <sys/socket.h> |
9 | 9 |
10 #include <sstream> | 10 #include <sstream> |
11 | 11 |
12 #include "base/bind.h" | 12 #include "base/bind.h" |
13 #include "base/stl_util.h" | 13 #include "base/stl_util.h" |
14 #include "chromeos/dbus/bluetooth_media_client.h" | |
15 #include "chromeos/dbus/dbus_thread_manager.h" | |
16 #include "chromeos/dbus/fake_bluetooth_adapter_client.h" | |
17 #include "chromeos/dbus/fake_bluetooth_media_client.h" | |
18 #include "chromeos/dbus/fake_bluetooth_media_endpoint_service_provider.h" | |
19 #include "dbus/file_descriptor.h" | 14 #include "dbus/file_descriptor.h" |
| 15 #include "device/bluetooth/dbus/bluetooth_media_client.h" |
| 16 #include "device/bluetooth/dbus/bluez_dbus_manager.h" |
| 17 #include "device/bluetooth/dbus/fake_bluetooth_adapter_client.h" |
| 18 #include "device/bluetooth/dbus/fake_bluetooth_media_client.h" |
| 19 #include "device/bluetooth/dbus/fake_bluetooth_media_endpoint_service_provider.h
" |
20 | 20 |
21 using dbus::ObjectPath; | 21 using dbus::ObjectPath; |
22 | 22 |
23 namespace { | 23 namespace { |
24 | 24 |
25 // TODO(mcchou): Remove this constants once it is in cros_system_api. | 25 // TODO(mcchou): Remove this constants once it is in cros_system_api. |
26 const char kBluetoothMediaTransportInterface[] = "org.bluez.MediaTransport1"; | 26 const char kBluetoothMediaTransportInterface[] = "org.bluez.MediaTransport1"; |
27 const char kNotImplemented[] = "org.bluez.NotImplemented"; | 27 const char kNotImplemented[] = "org.bluez.NotImplemented"; |
28 const char kNotAuthorized[] = "org.bluez.NotAuthorized"; | 28 const char kNotAuthorized[] = "org.bluez.NotAuthorized"; |
29 const char kFailed[] = "org.bluez.Failed"; | 29 const char kFailed[] = "org.bluez.Failed"; |
30 const char kNotAvailable[] = "org.bluez.NotAvailable"; | 30 const char kNotAvailable[] = "org.bluez.NotAvailable"; |
31 | 31 |
32 const int kInvalidFd = -1; | 32 const int kInvalidFd = -1; |
33 | 33 |
34 ObjectPath GenerateTransportPath() { | 34 ObjectPath GenerateTransportPath() { |
35 static unsigned int sequence_number = 0; | 35 static unsigned int sequence_number = 0; |
36 ++sequence_number; | 36 ++sequence_number; |
37 std::stringstream path; | 37 std::stringstream path; |
38 path << chromeos::FakeBluetoothAdapterClient::kAdapterPath | 38 path << bluez::FakeBluetoothAdapterClient::kAdapterPath |
39 << chromeos::FakeBluetoothMediaTransportClient::kTransportDevicePath | 39 << bluez::FakeBluetoothMediaTransportClient::kTransportDevicePath |
40 << "/fd" << sequence_number; | 40 << "/fd" << sequence_number; |
41 return ObjectPath(path.str()); | 41 return ObjectPath(path.str()); |
42 } | 42 } |
43 | 43 |
44 } // namespace | 44 } // namespace |
45 | 45 |
46 namespace chromeos { | 46 namespace bluez { |
47 | 47 |
48 // static | 48 // static |
49 const char FakeBluetoothMediaTransportClient::kTransportDevicePath[] = | 49 const char FakeBluetoothMediaTransportClient::kTransportDevicePath[] = |
50 "/fake_audio_source"; | 50 "/fake_audio_source"; |
51 const uint8_t FakeBluetoothMediaTransportClient::kTransportCodec = 0x00; | 51 const uint8_t FakeBluetoothMediaTransportClient::kTransportCodec = 0x00; |
52 const std::vector<uint8_t> | 52 const std::vector<uint8_t> |
53 FakeBluetoothMediaTransportClient::kTransportConfiguration = { | 53 FakeBluetoothMediaTransportClient::kTransportConfiguration = {0x21, 0x15, |
54 0x21, 0x15, 0x33, 0x2C}; | 54 0x33, 0x2C}; |
55 const uint16_t FakeBluetoothMediaTransportClient::kTransportDelay = 5; | 55 const uint16_t FakeBluetoothMediaTransportClient::kTransportDelay = 5; |
56 const uint16_t FakeBluetoothMediaTransportClient::kTransportVolume = 50; | 56 const uint16_t FakeBluetoothMediaTransportClient::kTransportVolume = 50; |
57 const uint16_t FakeBluetoothMediaTransportClient::kDefaultReadMtu = 20; | 57 const uint16_t FakeBluetoothMediaTransportClient::kDefaultReadMtu = 20; |
58 const uint16_t FakeBluetoothMediaTransportClient::kDefaultWriteMtu = 25; | 58 const uint16_t FakeBluetoothMediaTransportClient::kDefaultWriteMtu = 25; |
59 | 59 |
60 FakeBluetoothMediaTransportClient::Properties::Properties( | 60 FakeBluetoothMediaTransportClient::Properties::Properties( |
61 const PropertyChangedCallback& callback) | 61 const PropertyChangedCallback& callback) |
62 : BluetoothMediaTransportClient::Properties( | 62 : BluetoothMediaTransportClient::Properties( |
63 nullptr, | 63 nullptr, |
64 kBluetoothMediaTransportInterface, | 64 kBluetoothMediaTransportInterface, |
65 callback) { | 65 callback) {} |
66 } | |
67 | 66 |
68 FakeBluetoothMediaTransportClient::Properties::~Properties() { | 67 FakeBluetoothMediaTransportClient::Properties::~Properties() {} |
69 } | |
70 | 68 |
71 void FakeBluetoothMediaTransportClient::Properties::Get( | 69 void FakeBluetoothMediaTransportClient::Properties::Get( |
72 dbus::PropertyBase* property, | 70 dbus::PropertyBase* property, |
73 dbus::PropertySet::GetCallback callback) { | 71 dbus::PropertySet::GetCallback callback) { |
74 VLOG(1) << "Get " << property->name(); | 72 VLOG(1) << "Get " << property->name(); |
75 callback.Run(false); | 73 callback.Run(false); |
76 } | 74 } |
77 | 75 |
78 void FakeBluetoothMediaTransportClient::Properties::GetAll() { | 76 void FakeBluetoothMediaTransportClient::Properties::GetAll() { |
79 VLOG(1) << "GetAll called."; | 77 VLOG(1) << "GetAll called."; |
80 } | 78 } |
81 | 79 |
82 void FakeBluetoothMediaTransportClient::Properties::Set( | 80 void FakeBluetoothMediaTransportClient::Properties::Set( |
83 dbus::PropertyBase* property, | 81 dbus::PropertyBase* property, |
84 dbus::PropertySet::SetCallback callback) { | 82 dbus::PropertySet::SetCallback callback) { |
85 VLOG(1) << "Set " << property->name(); | 83 VLOG(1) << "Set " << property->name(); |
86 callback.Run(false); | 84 callback.Run(false); |
87 } | 85 } |
88 | 86 |
89 FakeBluetoothMediaTransportClient::Transport::Transport( | 87 FakeBluetoothMediaTransportClient::Transport::Transport( |
90 const ObjectPath& transport_path, | 88 const ObjectPath& transport_path, |
91 Properties* transport_properties) | 89 Properties* transport_properties) |
92 : path(transport_path) { | 90 : path(transport_path) { |
93 properties.reset(transport_properties); | 91 properties.reset(transport_properties); |
94 } | 92 } |
95 | 93 |
96 FakeBluetoothMediaTransportClient::Transport::~Transport() { | 94 FakeBluetoothMediaTransportClient::Transport::~Transport() {} |
97 } | |
98 | 95 |
99 FakeBluetoothMediaTransportClient::FakeBluetoothMediaTransportClient() { | 96 FakeBluetoothMediaTransportClient::FakeBluetoothMediaTransportClient() {} |
100 } | |
101 | 97 |
102 FakeBluetoothMediaTransportClient::~FakeBluetoothMediaTransportClient() { | 98 FakeBluetoothMediaTransportClient::~FakeBluetoothMediaTransportClient() { |
103 STLDeleteValues(&endpoint_to_transport_map_); | 99 STLDeleteValues(&endpoint_to_transport_map_); |
104 } | 100 } |
105 | 101 |
106 // DBusClient override. | 102 // DBusClient override. |
107 void FakeBluetoothMediaTransportClient::Init(dbus::Bus* bus) { | 103 void FakeBluetoothMediaTransportClient::Init(dbus::Bus* bus) {} |
108 } | |
109 | 104 |
110 void FakeBluetoothMediaTransportClient::AddObserver( | 105 void FakeBluetoothMediaTransportClient::AddObserver( |
111 BluetoothMediaTransportClient::Observer* observer) { | 106 BluetoothMediaTransportClient::Observer* observer) { |
112 observers_.AddObserver(observer); | 107 observers_.AddObserver(observer); |
113 } | 108 } |
114 | 109 |
115 void FakeBluetoothMediaTransportClient::RemoveObserver( | 110 void FakeBluetoothMediaTransportClient::RemoveObserver( |
116 BluetoothMediaTransportClient::Observer* observer) { | 111 BluetoothMediaTransportClient::Observer* observer) { |
117 observers_.RemoveObserver(observer); | 112 observers_.RemoveObserver(observer); |
118 } | 113 } |
(...skipping 28 matching lines...) Expand all Loading... |
147 const ObjectPath& object_path, | 142 const ObjectPath& object_path, |
148 const base::Closure& callback, | 143 const base::Closure& callback, |
149 const ErrorCallback& error_callback) { | 144 const ErrorCallback& error_callback) { |
150 error_callback.Run(kNotImplemented, ""); | 145 error_callback.Run(kNotImplemented, ""); |
151 } | 146 } |
152 | 147 |
153 void FakeBluetoothMediaTransportClient::SetValid( | 148 void FakeBluetoothMediaTransportClient::SetValid( |
154 FakeBluetoothMediaEndpointServiceProvider* endpoint, | 149 FakeBluetoothMediaEndpointServiceProvider* endpoint, |
155 bool valid) { | 150 bool valid) { |
156 FakeBluetoothMediaClient* media = static_cast<FakeBluetoothMediaClient*>( | 151 FakeBluetoothMediaClient* media = static_cast<FakeBluetoothMediaClient*>( |
157 DBusThreadManager::Get()->GetBluetoothMediaClient()); | 152 bluez::BluezDBusManager::Get()->GetBluetoothMediaClient()); |
158 DCHECK(media); | 153 DCHECK(media); |
159 | 154 |
160 ObjectPath endpoint_path(endpoint->object_path()); | 155 ObjectPath endpoint_path(endpoint->object_path()); |
161 if (!media->IsRegistered(endpoint_path)) | 156 if (!media->IsRegistered(endpoint_path)) |
162 return; | 157 return; |
163 | 158 |
164 if (valid) { | 159 if (valid) { |
165 ObjectPath transport_path = GenerateTransportPath(); | 160 ObjectPath transport_path = GenerateTransportPath(); |
166 VLOG(1) << "New transport, " << transport_path.value() | 161 VLOG(1) << "New transport, " << transport_path.value() |
167 << " is created for endpoint " << endpoint_path.value(); | 162 << " is created for endpoint " << endpoint_path.value(); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
203 void FakeBluetoothMediaTransportClient::SetState( | 198 void FakeBluetoothMediaTransportClient::SetState( |
204 const ObjectPath& endpoint_path, | 199 const ObjectPath& endpoint_path, |
205 const std::string& state) { | 200 const std::string& state) { |
206 VLOG(1) << "SetState - state: " << state; | 201 VLOG(1) << "SetState - state: " << state; |
207 | 202 |
208 Transport* transport = GetTransport(endpoint_path); | 203 Transport* transport = GetTransport(endpoint_path); |
209 if (!transport) | 204 if (!transport) |
210 return; | 205 return; |
211 | 206 |
212 transport->properties->state.ReplaceValue(state); | 207 transport->properties->state.ReplaceValue(state); |
213 FOR_EACH_OBSERVER(BluetoothMediaTransportClient::Observer, observers_, | 208 FOR_EACH_OBSERVER( |
214 MediaTransportPropertyChanged( | 209 BluetoothMediaTransportClient::Observer, observers_, |
215 transport->path, | 210 MediaTransportPropertyChanged( |
216 BluetoothMediaTransportClient::kStateProperty)); | 211 transport->path, BluetoothMediaTransportClient::kStateProperty)); |
217 } | 212 } |
218 | 213 |
219 void FakeBluetoothMediaTransportClient::SetVolume( | 214 void FakeBluetoothMediaTransportClient::SetVolume( |
220 const ObjectPath& endpoint_path, | 215 const ObjectPath& endpoint_path, |
221 const uint16_t& volume) { | 216 const uint16_t& volume) { |
222 Transport* transport = GetTransport(endpoint_path); | 217 Transport* transport = GetTransport(endpoint_path); |
223 if (!transport) | 218 if (!transport) |
224 return; | 219 return; |
225 | 220 |
226 transport->properties->volume.ReplaceValue(volume); | 221 transport->properties->volume.ReplaceValue(volume); |
227 FOR_EACH_OBSERVER(BluetoothMediaTransportClient::Observer, observers_, | 222 FOR_EACH_OBSERVER( |
228 MediaTransportPropertyChanged( | 223 BluetoothMediaTransportClient::Observer, observers_, |
229 transport->path, | 224 MediaTransportPropertyChanged( |
230 BluetoothMediaTransportClient::kVolumeProperty)); | 225 transport->path, BluetoothMediaTransportClient::kVolumeProperty)); |
231 } | 226 } |
232 | 227 |
233 void FakeBluetoothMediaTransportClient::WriteData( | 228 void FakeBluetoothMediaTransportClient::WriteData( |
234 const ObjectPath& endpoint_path, const std::vector<char>& bytes) { | 229 const ObjectPath& endpoint_path, |
| 230 const std::vector<char>& bytes) { |
235 VLOG(1) << "WriteData - write " << bytes.size() << " bytes"; | 231 VLOG(1) << "WriteData - write " << bytes.size() << " bytes"; |
236 | 232 |
237 Transport* transport = GetTransport(endpoint_path); | 233 Transport* transport = GetTransport(endpoint_path); |
238 | 234 |
239 if (!transport || transport->properties->state.value() != "active") { | 235 if (!transport || transport->properties->state.value() != "active") { |
240 VLOG(1) << "WriteData - write operation rejected, since the state isn't " | 236 VLOG(1) << "WriteData - write operation rejected, since the state isn't " |
241 "active for endpoint: " << endpoint_path.value(); | 237 "active for endpoint: " |
| 238 << endpoint_path.value(); |
242 return; | 239 return; |
243 } | 240 } |
244 | 241 |
245 if (!transport->input_fd.get()) { | 242 if (!transport->input_fd.get()) { |
246 VLOG(1) << "WriteData - invalid input file descriptor"; | 243 VLOG(1) << "WriteData - invalid input file descriptor"; |
247 return; | 244 return; |
248 } | 245 } |
249 | 246 |
250 ssize_t written_len = | 247 ssize_t written_len = |
251 write(transport->input_fd->GetPlatformFile(), bytes.data(), bytes.size()); | 248 write(transport->input_fd->GetPlatformFile(), bytes.data(), bytes.size()); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 return; | 313 return; |
317 } | 314 } |
318 DCHECK((fds[0] > kInvalidFd) && (fds[1] > kInvalidFd)); | 315 DCHECK((fds[0] > kInvalidFd) && (fds[1] > kInvalidFd)); |
319 transport->input_fd.reset(new base::File(fds[0])); | 316 transport->input_fd.reset(new base::File(fds[0])); |
320 | 317 |
321 dbus::FileDescriptor out_fd(fds[1]); | 318 dbus::FileDescriptor out_fd(fds[1]); |
322 callback.Run(&out_fd, kDefaultReadMtu, kDefaultWriteMtu); | 319 callback.Run(&out_fd, kDefaultReadMtu, kDefaultWriteMtu); |
323 SetState(endpoint_path, "active"); | 320 SetState(endpoint_path, "active"); |
324 } | 321 } |
325 | 322 |
326 } // namespace chromeos | 323 } // namespace bluez |
OLD | NEW |