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

Unified Diff: device/serial/serial_io_handler.cc

Issue 873903002: Set serial connection parameters immediately on connect. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add a comment explaing the "set" notation. Created 5 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « device/serial/serial_io_handler.h ('k') | device/serial/serial_io_handler_posix.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: device/serial/serial_io_handler.cc
diff --git a/device/serial/serial_io_handler.cc b/device/serial/serial_io_handler.cc
index a9cb52f85dc918ae4809110bd9e14a615093004c..288e7618c42d6c729f889eb0f8da53e0c6a01c76 100644
--- a/device/serial/serial_io_handler.cc
+++ b/device/serial/serial_io_handler.cc
@@ -16,6 +16,12 @@ SerialIoHandler::SerialIoHandler(
scoped_refptr<base::MessageLoopProxy> ui_thread_message_loop)
: file_thread_message_loop_(file_thread_message_loop),
ui_thread_message_loop_(ui_thread_message_loop) {
+ options_.bitrate = 9600;
+ options_.data_bits = serial::DATA_BITS_EIGHT;
+ options_.parity_bit = serial::PARITY_BIT_NO;
+ options_.stop_bits = serial::STOP_BITS_ONE;
+ options_.cts_flow_control = false;
+ options_.has_cts_flow_control = true;
}
SerialIoHandler::~SerialIoHandler() {
@@ -24,12 +30,14 @@ SerialIoHandler::~SerialIoHandler() {
}
void SerialIoHandler::Open(const std::string& port,
+ const serial::ConnectionOptions& options,
const OpenCompleteCallback& callback) {
DCHECK(CalledOnValidThread());
DCHECK(open_complete_.is_null());
open_complete_ = callback;
DCHECK(file_thread_message_loop_.get());
DCHECK(ui_thread_message_loop_.get());
+ MergeConnectionOptions(options);
RequestAccess(port, file_thread_message_loop_, ui_thread_message_loop_);
}
@@ -61,6 +69,26 @@ void SerialIoHandler::OnRequestAccessComplete(const std::string& port,
}
}
+void SerialIoHandler::MergeConnectionOptions(
+ const serial::ConnectionOptions& options) {
+ if (options.bitrate) {
+ options_.bitrate = options.bitrate;
+ }
+ if (options.data_bits != serial::DATA_BITS_NONE) {
+ options_.data_bits = options.data_bits;
+ }
+ if (options.parity_bit != serial::PARITY_BIT_NONE) {
+ options_.parity_bit = options.parity_bit;
+ }
+ if (options.stop_bits != serial::STOP_BITS_NONE) {
+ options_.stop_bits = options.stop_bits;
+ }
+ if (options.has_cts_flow_control) {
+ DCHECK(options_.has_cts_flow_control);
+ options_.cts_flow_control = options.cts_flow_control;
+ }
+}
+
void SerialIoHandler::StartOpen(
const std::string& port,
scoped_refptr<base::MessageLoopProxy> io_message_loop) {
@@ -89,15 +117,19 @@ void SerialIoHandler::FinishOpen(base::File file) {
open_complete_.Reset();
if (!file.IsValid()) {
+ LOG(ERROR) << "Failed to open serial port: "
+ << base::File::ErrorToString(file.error_details());
callback.Run(false);
return;
}
file_ = file.Pass();
- bool success = PostOpen();
- if (!success)
+ bool success = PostOpen() && ConfigurePortImpl();
+ if (!success) {
Close();
+ }
+
callback.Run(success);
}
@@ -191,6 +223,11 @@ void SerialIoHandler::CancelWrite(serial::SendError reason) {
}
}
+bool SerialIoHandler::ConfigurePort(const serial::ConnectionOptions& options) {
+ MergeConnectionOptions(options);
+ return ConfigurePortImpl();
+}
+
void SerialIoHandler::QueueReadCompleted(int bytes_read,
serial::ReceiveError error) {
base::MessageLoop::current()->PostTask(
« no previous file with comments | « device/serial/serial_io_handler.h ('k') | device/serial/serial_io_handler_posix.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698