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 "device/serial/serial_connection_factory.h" | 5 #include "device/serial/serial_connection_factory.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/location.h" | 8 #include "base/location.h" |
9 #include "device/serial/serial_connection.h" | 9 #include "device/serial/serial_connection.h" |
10 #include "device/serial/serial_io_handler.h" | 10 #include "device/serial/serial_io_handler.h" |
(...skipping 19 matching lines...) Expand all Loading... |
30 } // namespace | 30 } // namespace |
31 | 31 |
32 class SerialConnectionFactory::ConnectTask | 32 class SerialConnectionFactory::ConnectTask |
33 : public base::RefCountedThreadSafe<SerialConnectionFactory::ConnectTask> { | 33 : public base::RefCountedThreadSafe<SerialConnectionFactory::ConnectTask> { |
34 public: | 34 public: |
35 ConnectTask(scoped_refptr<SerialConnectionFactory> factory, | 35 ConnectTask(scoped_refptr<SerialConnectionFactory> factory, |
36 const std::string& path, | 36 const std::string& path, |
37 serial::ConnectionOptionsPtr options, | 37 serial::ConnectionOptionsPtr options, |
38 mojo::InterfaceRequest<serial::Connection> connection_request, | 38 mojo::InterfaceRequest<serial::Connection> connection_request, |
39 mojo::InterfaceRequest<serial::DataSink> sink, | 39 mojo::InterfaceRequest<serial::DataSink> sink, |
40 mojo::InterfaceRequest<serial::DataSource> source); | 40 mojo::InterfaceRequest<serial::DataSource> source, |
| 41 mojo::InterfacePtr<serial::DataSourceClient> source_client); |
41 void Run(); | 42 void Run(); |
42 | 43 |
43 private: | 44 private: |
44 friend class base::RefCountedThreadSafe<SerialConnectionFactory::ConnectTask>; | 45 friend class base::RefCountedThreadSafe<SerialConnectionFactory::ConnectTask>; |
45 virtual ~ConnectTask(); | 46 virtual ~ConnectTask(); |
46 void Connect(); | 47 void Connect(); |
47 void OnConnected(bool success); | 48 void OnConnected(bool success); |
48 | 49 |
49 scoped_refptr<SerialConnectionFactory> factory_; | 50 scoped_refptr<SerialConnectionFactory> factory_; |
50 const std::string path_; | 51 const std::string path_; |
51 serial::ConnectionOptionsPtr options_; | 52 serial::ConnectionOptionsPtr options_; |
52 mojo::InterfaceRequest<serial::Connection> connection_request_; | 53 mojo::InterfaceRequest<serial::Connection> connection_request_; |
53 mojo::InterfaceRequest<serial::DataSink> sink_; | 54 mojo::InterfaceRequest<serial::DataSink> sink_; |
54 mojo::InterfaceRequest<serial::DataSource> source_; | 55 mojo::InterfaceRequest<serial::DataSource> source_; |
| 56 mojo::InterfacePtr<serial::DataSourceClient> source_client_; |
55 scoped_refptr<SerialIoHandler> io_handler_; | 57 scoped_refptr<SerialIoHandler> io_handler_; |
56 | 58 |
57 DISALLOW_COPY_AND_ASSIGN(ConnectTask); | 59 DISALLOW_COPY_AND_ASSIGN(ConnectTask); |
58 }; | 60 }; |
59 | 61 |
60 SerialConnectionFactory::SerialConnectionFactory( | 62 SerialConnectionFactory::SerialConnectionFactory( |
61 const IoHandlerFactory& io_handler_factory, | 63 const IoHandlerFactory& io_handler_factory, |
62 scoped_refptr<base::MessageLoopProxy> connect_message_loop) | 64 scoped_refptr<base::MessageLoopProxy> connect_message_loop) |
63 : io_handler_factory_(io_handler_factory), | 65 : io_handler_factory_(io_handler_factory), |
64 connect_message_loop_(connect_message_loop) { | 66 connect_message_loop_(connect_message_loop) { |
65 } | 67 } |
66 | 68 |
67 void SerialConnectionFactory::CreateConnection( | 69 void SerialConnectionFactory::CreateConnection( |
68 const std::string& path, | 70 const std::string& path, |
69 serial::ConnectionOptionsPtr options, | 71 serial::ConnectionOptionsPtr options, |
70 mojo::InterfaceRequest<serial::Connection> connection_request, | 72 mojo::InterfaceRequest<serial::Connection> connection_request, |
71 mojo::InterfaceRequest<serial::DataSink> sink, | 73 mojo::InterfaceRequest<serial::DataSink> sink, |
72 mojo::InterfaceRequest<serial::DataSource> source) { | 74 mojo::InterfaceRequest<serial::DataSource> source, |
73 scoped_refptr<ConnectTask> task(new ConnectTask(this, | 75 mojo::InterfacePtr<serial::DataSourceClient> source_client) { |
74 path, | 76 scoped_refptr<ConnectTask> task( |
75 options.Pass(), | 77 new ConnectTask(this, path, options.Pass(), connection_request.Pass(), |
76 connection_request.Pass(), | 78 sink.Pass(), source.Pass(), source_client.Pass())); |
77 sink.Pass(), | |
78 source.Pass())); | |
79 task->Run(); | 79 task->Run(); |
80 } | 80 } |
81 | 81 |
82 SerialConnectionFactory::~SerialConnectionFactory() { | 82 SerialConnectionFactory::~SerialConnectionFactory() { |
83 } | 83 } |
84 | 84 |
85 SerialConnectionFactory::ConnectTask::ConnectTask( | 85 SerialConnectionFactory::ConnectTask::ConnectTask( |
86 scoped_refptr<SerialConnectionFactory> factory, | 86 scoped_refptr<SerialConnectionFactory> factory, |
87 const std::string& path, | 87 const std::string& path, |
88 serial::ConnectionOptionsPtr options, | 88 serial::ConnectionOptionsPtr options, |
89 mojo::InterfaceRequest<serial::Connection> connection_request, | 89 mojo::InterfaceRequest<serial::Connection> connection_request, |
90 mojo::InterfaceRequest<serial::DataSink> sink, | 90 mojo::InterfaceRequest<serial::DataSink> sink, |
91 mojo::InterfaceRequest<serial::DataSource> source) | 91 mojo::InterfaceRequest<serial::DataSource> source, |
| 92 mojo::InterfacePtr<serial::DataSourceClient> source_client) |
92 : factory_(factory), | 93 : factory_(factory), |
93 path_(path), | 94 path_(path), |
94 options_(options.Pass()), | 95 options_(options.Pass()), |
95 connection_request_(connection_request.Pass()), | 96 connection_request_(connection_request.Pass()), |
96 sink_(sink.Pass()), | 97 sink_(sink.Pass()), |
97 source_(source.Pass()) { | 98 source_(source.Pass()), |
| 99 source_client_(source_client.Pass()) { |
98 if (!options_) { | 100 if (!options_) { |
99 options_ = serial::ConnectionOptions::New(); | 101 options_ = serial::ConnectionOptions::New(); |
100 } | 102 } |
101 FillDefaultConnectionOptions(options_.get()); | 103 FillDefaultConnectionOptions(options_.get()); |
102 } | 104 } |
103 | 105 |
104 void SerialConnectionFactory::ConnectTask::Run() { | 106 void SerialConnectionFactory::ConnectTask::Run() { |
105 factory_->connect_message_loop_->PostTask( | 107 factory_->connect_message_loop_->PostTask( |
106 FROM_HERE, | 108 FROM_HERE, |
107 base::Bind(&SerialConnectionFactory::ConnectTask::Connect, this)); | 109 base::Bind(&SerialConnectionFactory::ConnectTask::Connect, this)); |
108 } | 110 } |
109 | 111 |
110 SerialConnectionFactory::ConnectTask::~ConnectTask() { | 112 SerialConnectionFactory::ConnectTask::~ConnectTask() { |
111 } | 113 } |
112 | 114 |
113 void SerialConnectionFactory::ConnectTask::Connect() { | 115 void SerialConnectionFactory::ConnectTask::Connect() { |
114 io_handler_ = factory_->io_handler_factory_.Run(); | 116 io_handler_ = factory_->io_handler_factory_.Run(); |
115 io_handler_->Open( | 117 io_handler_->Open( |
116 path_, *options_, | 118 path_, *options_, |
117 base::Bind(&SerialConnectionFactory::ConnectTask::OnConnected, this)); | 119 base::Bind(&SerialConnectionFactory::ConnectTask::OnConnected, this)); |
118 } | 120 } |
119 | 121 |
120 void SerialConnectionFactory::ConnectTask::OnConnected(bool success) { | 122 void SerialConnectionFactory::ConnectTask::OnConnected(bool success) { |
121 DCHECK(io_handler_.get()); | 123 DCHECK(io_handler_.get()); |
122 if (!success) { | 124 if (!success) { |
123 return; | 125 return; |
124 } | 126 } |
125 | 127 |
126 mojo::BindToRequest( | 128 mojo::BindToRequest( |
127 new SerialConnection(io_handler_, sink_.Pass(), source_.Pass()), | 129 new SerialConnection(io_handler_, sink_.Pass(), source_.Pass(), |
| 130 source_client_.Pass()), |
128 &connection_request_); | 131 &connection_request_); |
129 } | 132 } |
130 | 133 |
131 } // namespace device | 134 } // namespace device |
OLD | NEW |