| OLD | NEW |
| (Empty) |
| 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 | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "device/serial/serial_service_impl.h" | |
| 6 | |
| 7 #include <stddef.h> | |
| 8 | |
| 9 #include <memory> | |
| 10 #include <utility> | |
| 11 | |
| 12 #include "base/bind.h" | |
| 13 #include "base/location.h" | |
| 14 #include "device/serial/serial_io_handler.h" | |
| 15 #include "mojo/public/cpp/bindings/strong_binding.h" | |
| 16 | |
| 17 namespace device { | |
| 18 | |
| 19 SerialServiceImpl::SerialServiceImpl( | |
| 20 scoped_refptr<SerialConnectionFactory> connection_factory) | |
| 21 : connection_factory_(connection_factory) {} | |
| 22 | |
| 23 SerialServiceImpl::SerialServiceImpl( | |
| 24 scoped_refptr<SerialConnectionFactory> connection_factory, | |
| 25 std::unique_ptr<SerialDeviceEnumerator> device_enumerator) | |
| 26 : device_enumerator_(std::move(device_enumerator)), | |
| 27 connection_factory_(connection_factory) {} | |
| 28 | |
| 29 SerialServiceImpl::~SerialServiceImpl() {} | |
| 30 | |
| 31 // static | |
| 32 void SerialServiceImpl::Create( | |
| 33 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, | |
| 34 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, | |
| 35 mojo::InterfaceRequest<serial::SerialService> request) { | |
| 36 mojo::MakeStrongBinding( | |
| 37 base::MakeUnique<SerialServiceImpl>(new SerialConnectionFactory( | |
| 38 base::Bind(SerialIoHandler::Create, | |
| 39 base::ThreadTaskRunnerHandle::Get(), ui_task_runner), | |
| 40 io_task_runner)), | |
| 41 std::move(request)); | |
| 42 } | |
| 43 | |
| 44 // static | |
| 45 void SerialServiceImpl::CreateOnMessageLoop( | |
| 46 scoped_refptr<base::SingleThreadTaskRunner> task_runner, | |
| 47 scoped_refptr<base::SingleThreadTaskRunner> io_task_runner, | |
| 48 scoped_refptr<base::SingleThreadTaskRunner> ui_task_runner, | |
| 49 mojo::InterfaceRequest<serial::SerialService> request) { | |
| 50 task_runner->PostTask(FROM_HERE, | |
| 51 base::Bind(&SerialServiceImpl::Create, io_task_runner, | |
| 52 ui_task_runner, base::Passed(&request))); | |
| 53 } | |
| 54 | |
| 55 void SerialServiceImpl::GetDevices(const GetDevicesCallback& callback) { | |
| 56 callback.Run(GetDeviceEnumerator()->GetDevices()); | |
| 57 } | |
| 58 | |
| 59 void SerialServiceImpl::Connect( | |
| 60 const mojo::String& path, | |
| 61 serial::ConnectionOptionsPtr options, | |
| 62 mojo::InterfaceRequest<serial::Connection> connection_request, | |
| 63 mojo::InterfaceRequest<serial::DataSink> sink, | |
| 64 mojo::InterfaceRequest<serial::DataSource> source, | |
| 65 mojo::InterfacePtr<serial::DataSourceClient> source_client) { | |
| 66 if (!IsValidPath(path)) | |
| 67 return; | |
| 68 connection_factory_->CreateConnection( | |
| 69 path, std::move(options), std::move(connection_request), std::move(sink), | |
| 70 std::move(source), std::move(source_client)); | |
| 71 } | |
| 72 | |
| 73 SerialDeviceEnumerator* SerialServiceImpl::GetDeviceEnumerator() { | |
| 74 if (!device_enumerator_) | |
| 75 device_enumerator_ = SerialDeviceEnumerator::Create(); | |
| 76 return device_enumerator_.get(); | |
| 77 } | |
| 78 | |
| 79 bool SerialServiceImpl::IsValidPath(const mojo::String& path) { | |
| 80 mojo::Array<serial::DeviceInfoPtr> devices( | |
| 81 GetDeviceEnumerator()->GetDevices()); | |
| 82 for (size_t i = 0; i < devices.size(); i++) { | |
| 83 if (path == devices[i]->path) | |
| 84 return true; | |
| 85 } | |
| 86 return false; | |
| 87 } | |
| 88 | |
| 89 } // namespace device | |
| OLD | NEW |