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