Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(137)

Side by Side Diff: device/serial/serial_connection_factory.cc

Issue 2410743002: Remove the mojo serial interfaces and related infrastructure. (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « device/serial/serial_connection_factory.h ('k') | device/serial/serial_connection_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(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_connection_factory.h"
6
7 #include <utility>
8
9 #include "base/bind.h"
10 #include "base/location.h"
11 #include "base/macros.h"
12 #include "device/serial/serial_connection.h"
13 #include "device/serial/serial_io_handler.h"
14 #include "mojo/public/cpp/bindings/strong_binding.h"
15
16 namespace device {
17 namespace {
18
19 void FillDefaultConnectionOptions(serial::ConnectionOptions* options) {
20 if (!options->bitrate)
21 options->bitrate = 9600;
22 if (options->data_bits == serial::DataBits::NONE)
23 options->data_bits = serial::DataBits::EIGHT;
24 if (options->stop_bits == serial::StopBits::NONE)
25 options->stop_bits = serial::StopBits::ONE;
26 if (options->parity_bit == serial::ParityBit::NONE)
27 options->parity_bit = serial::ParityBit::NO;
28 if (!options->has_cts_flow_control) {
29 options->has_cts_flow_control = true;
30 options->cts_flow_control = false;
31 }
32 }
33
34 } // namespace
35
36 class SerialConnectionFactory::ConnectTask
37 : public base::RefCountedThreadSafe<SerialConnectionFactory::ConnectTask> {
38 public:
39 ConnectTask(scoped_refptr<SerialConnectionFactory> factory,
40 const std::string& path,
41 serial::ConnectionOptionsPtr options,
42 mojo::InterfaceRequest<serial::Connection> connection_request,
43 mojo::InterfaceRequest<serial::DataSink> sink,
44 mojo::InterfaceRequest<serial::DataSource> source,
45 mojo::InterfacePtr<serial::DataSourceClient> source_client);
46 void Run();
47
48 private:
49 friend class base::RefCountedThreadSafe<SerialConnectionFactory::ConnectTask>;
50 virtual ~ConnectTask();
51 void Connect();
52 void OnConnected(bool success);
53
54 scoped_refptr<SerialConnectionFactory> factory_;
55 const std::string path_;
56 serial::ConnectionOptionsPtr options_;
57 mojo::InterfaceRequest<serial::Connection> connection_request_;
58 mojo::InterfaceRequest<serial::DataSink> sink_;
59 mojo::InterfaceRequest<serial::DataSource> source_;
60 mojo::InterfacePtrInfo<serial::DataSourceClient> source_client_;
61 scoped_refptr<SerialIoHandler> io_handler_;
62
63 DISALLOW_COPY_AND_ASSIGN(ConnectTask);
64 };
65
66 SerialConnectionFactory::SerialConnectionFactory(
67 const IoHandlerFactory& io_handler_factory,
68 scoped_refptr<base::SingleThreadTaskRunner> connect_task_runner)
69 : io_handler_factory_(io_handler_factory),
70 connect_task_runner_(connect_task_runner) {
71 }
72
73 void SerialConnectionFactory::CreateConnection(
74 const std::string& path,
75 serial::ConnectionOptionsPtr options,
76 mojo::InterfaceRequest<serial::Connection> connection_request,
77 mojo::InterfaceRequest<serial::DataSink> sink,
78 mojo::InterfaceRequest<serial::DataSource> source,
79 mojo::InterfacePtr<serial::DataSourceClient> source_client) {
80 scoped_refptr<ConnectTask> task(new ConnectTask(
81 this, path, std::move(options), std::move(connection_request),
82 std::move(sink), std::move(source), std::move(source_client)));
83 task->Run();
84 }
85
86 SerialConnectionFactory::~SerialConnectionFactory() {
87 }
88
89 SerialConnectionFactory::ConnectTask::ConnectTask(
90 scoped_refptr<SerialConnectionFactory> factory,
91 const std::string& path,
92 serial::ConnectionOptionsPtr options,
93 mojo::InterfaceRequest<serial::Connection> connection_request,
94 mojo::InterfaceRequest<serial::DataSink> sink,
95 mojo::InterfaceRequest<serial::DataSource> source,
96 mojo::InterfacePtr<serial::DataSourceClient> source_client)
97 : factory_(factory),
98 path_(path),
99 options_(std::move(options)),
100 connection_request_(std::move(connection_request)),
101 sink_(std::move(sink)),
102 source_(std::move(source)),
103 source_client_(source_client.PassInterface()) {
104 if (!options_) {
105 options_ = serial::ConnectionOptions::New();
106 }
107 FillDefaultConnectionOptions(options_.get());
108 }
109
110 void SerialConnectionFactory::ConnectTask::Run() {
111 factory_->connect_task_runner_->PostTask(
112 FROM_HERE,
113 base::Bind(&SerialConnectionFactory::ConnectTask::Connect, this));
114 }
115
116 SerialConnectionFactory::ConnectTask::~ConnectTask() {
117 }
118
119 void SerialConnectionFactory::ConnectTask::Connect() {
120 io_handler_ = factory_->io_handler_factory_.Run();
121 io_handler_->Open(
122 path_, *options_,
123 base::Bind(&SerialConnectionFactory::ConnectTask::OnConnected, this));
124 }
125
126 void SerialConnectionFactory::ConnectTask::OnConnected(bool success) {
127 DCHECK(io_handler_.get());
128 if (!success) {
129 return;
130 }
131
132 mojo::MakeStrongBinding(base::MakeUnique<SerialConnection>(
133 io_handler_, std::move(sink_), std::move(source_),
134 mojo::MakeProxy(std::move(source_client_))),
135 std::move(connection_request_));
136 }
137
138 } // namespace device
OLDNEW
« no previous file with comments | « device/serial/serial_connection_factory.h ('k') | device/serial/serial_connection_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698