| 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 "extensions/browser/api/serial/serial_connection.h" | 5 #include "extensions/browser/api/serial/serial_connection.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
| 11 #include "base/lazy_instance.h" | 11 #include "base/lazy_instance.h" |
| 12 #include "base/message_loop/message_loop.h" | 12 #include "base/message_loop/message_loop.h" |
| 13 #include "device/serial/buffer.h" | 13 #include "device/serial/buffer.h" |
| 14 #include "extensions/browser/api/api_resource_manager.h" | 14 #include "extensions/browser/api/api_resource_manager.h" |
| 15 #include "extensions/common/api/serial.h" | 15 #include "extensions/common/api/serial.h" |
| 16 | 16 |
| 17 namespace extensions { | 17 namespace extensions { |
| 18 | 18 |
| 19 namespace { | 19 namespace { |
| 20 | 20 |
| 21 const int kDefaultBufferSize = 4096; | 21 const int kDefaultBufferSize = 4096; |
| 22 | 22 |
| 23 api::serial::SendError ConvertSendErrorFromMojo( | 23 api::serial::SendError ConvertSendErrorFromMojo( |
| 24 device::serial::SendError input) { | 24 device::serial::SendError input) { |
| 25 switch (input) { | 25 switch (input) { |
| 26 case device::serial::SEND_ERROR_NONE: | 26 case device::serial::SendError::NONE: |
| 27 return api::serial::SEND_ERROR_NONE; | 27 return api::serial::SEND_ERROR_NONE; |
| 28 case device::serial::SEND_ERROR_DISCONNECTED: | 28 case device::serial::SendError::DISCONNECTED: |
| 29 return api::serial::SEND_ERROR_DISCONNECTED; | 29 return api::serial::SEND_ERROR_DISCONNECTED; |
| 30 case device::serial::SEND_ERROR_PENDING: | 30 case device::serial::SendError::PENDING: |
| 31 return api::serial::SEND_ERROR_PENDING; | 31 return api::serial::SEND_ERROR_PENDING; |
| 32 case device::serial::SEND_ERROR_TIMEOUT: | 32 case device::serial::SendError::TIMEOUT: |
| 33 return api::serial::SEND_ERROR_TIMEOUT; | 33 return api::serial::SEND_ERROR_TIMEOUT; |
| 34 case device::serial::SEND_ERROR_SYSTEM_ERROR: | 34 case device::serial::SendError::SYSTEM_ERROR: |
| 35 return api::serial::SEND_ERROR_SYSTEM_ERROR; | 35 return api::serial::SEND_ERROR_SYSTEM_ERROR; |
| 36 } | 36 } |
| 37 return api::serial::SEND_ERROR_NONE; | 37 return api::serial::SEND_ERROR_NONE; |
| 38 } | 38 } |
| 39 | 39 |
| 40 api::serial::ReceiveError ConvertReceiveErrorFromMojo( | 40 api::serial::ReceiveError ConvertReceiveErrorFromMojo( |
| 41 device::serial::ReceiveError input) { | 41 device::serial::ReceiveError input) { |
| 42 switch (input) { | 42 switch (input) { |
| 43 case device::serial::RECEIVE_ERROR_NONE: | 43 case device::serial::ReceiveError::NONE: |
| 44 return api::serial::RECEIVE_ERROR_NONE; | 44 return api::serial::RECEIVE_ERROR_NONE; |
| 45 case device::serial::RECEIVE_ERROR_DISCONNECTED: | 45 case device::serial::ReceiveError::DISCONNECTED: |
| 46 return api::serial::RECEIVE_ERROR_DISCONNECTED; | 46 return api::serial::RECEIVE_ERROR_DISCONNECTED; |
| 47 case device::serial::RECEIVE_ERROR_TIMEOUT: | 47 case device::serial::ReceiveError::TIMEOUT: |
| 48 return api::serial::RECEIVE_ERROR_TIMEOUT; | 48 return api::serial::RECEIVE_ERROR_TIMEOUT; |
| 49 case device::serial::RECEIVE_ERROR_DEVICE_LOST: | 49 case device::serial::ReceiveError::DEVICE_LOST: |
| 50 return api::serial::RECEIVE_ERROR_DEVICE_LOST; | 50 return api::serial::RECEIVE_ERROR_DEVICE_LOST; |
| 51 case device::serial::RECEIVE_ERROR_BREAK: | 51 case device::serial::ReceiveError::BREAK: |
| 52 return api::serial::RECEIVE_ERROR_BREAK; | 52 return api::serial::RECEIVE_ERROR_BREAK; |
| 53 case device::serial::RECEIVE_ERROR_FRAME_ERROR: | 53 case device::serial::ReceiveError::FRAME_ERROR: |
| 54 return api::serial::RECEIVE_ERROR_FRAME_ERROR; | 54 return api::serial::RECEIVE_ERROR_FRAME_ERROR; |
| 55 case device::serial::RECEIVE_ERROR_OVERRUN: | 55 case device::serial::ReceiveError::OVERRUN: |
| 56 return api::serial::RECEIVE_ERROR_OVERRUN; | 56 return api::serial::RECEIVE_ERROR_OVERRUN; |
| 57 case device::serial::RECEIVE_ERROR_BUFFER_OVERFLOW: | 57 case device::serial::ReceiveError::BUFFER_OVERFLOW: |
| 58 return api::serial::RECEIVE_ERROR_BUFFER_OVERFLOW; | 58 return api::serial::RECEIVE_ERROR_BUFFER_OVERFLOW; |
| 59 case device::serial::RECEIVE_ERROR_PARITY_ERROR: | 59 case device::serial::ReceiveError::PARITY_ERROR: |
| 60 return api::serial::RECEIVE_ERROR_PARITY_ERROR; | 60 return api::serial::RECEIVE_ERROR_PARITY_ERROR; |
| 61 case device::serial::RECEIVE_ERROR_SYSTEM_ERROR: | 61 case device::serial::ReceiveError::SYSTEM_ERROR: |
| 62 return api::serial::RECEIVE_ERROR_SYSTEM_ERROR; | 62 return api::serial::RECEIVE_ERROR_SYSTEM_ERROR; |
| 63 } | 63 } |
| 64 return api::serial::RECEIVE_ERROR_NONE; | 64 return api::serial::RECEIVE_ERROR_NONE; |
| 65 } | 65 } |
| 66 | 66 |
| 67 api::serial::DataBits ConvertDataBitsFromMojo(device::serial::DataBits input) { | 67 api::serial::DataBits ConvertDataBitsFromMojo(device::serial::DataBits input) { |
| 68 switch (input) { | 68 switch (input) { |
| 69 case device::serial::DATA_BITS_NONE: | 69 case device::serial::DataBits::NONE: |
| 70 return api::serial::DATA_BITS_NONE; | 70 return api::serial::DATA_BITS_NONE; |
| 71 case device::serial::DATA_BITS_SEVEN: | 71 case device::serial::DataBits::SEVEN: |
| 72 return api::serial::DATA_BITS_SEVEN; | 72 return api::serial::DATA_BITS_SEVEN; |
| 73 case device::serial::DATA_BITS_EIGHT: | 73 case device::serial::DataBits::EIGHT: |
| 74 return api::serial::DATA_BITS_EIGHT; | 74 return api::serial::DATA_BITS_EIGHT; |
| 75 } | 75 } |
| 76 return api::serial::DATA_BITS_NONE; | 76 return api::serial::DATA_BITS_NONE; |
| 77 } | 77 } |
| 78 | 78 |
| 79 device::serial::DataBits ConvertDataBitsToMojo(api::serial::DataBits input) { | 79 device::serial::DataBits ConvertDataBitsToMojo(api::serial::DataBits input) { |
| 80 switch (input) { | 80 switch (input) { |
| 81 case api::serial::DATA_BITS_NONE: | 81 case api::serial::DATA_BITS_NONE: |
| 82 return device::serial::DATA_BITS_NONE; | 82 return device::serial::DataBits::NONE; |
| 83 case api::serial::DATA_BITS_SEVEN: | 83 case api::serial::DATA_BITS_SEVEN: |
| 84 return device::serial::DATA_BITS_SEVEN; | 84 return device::serial::DataBits::SEVEN; |
| 85 case api::serial::DATA_BITS_EIGHT: | 85 case api::serial::DATA_BITS_EIGHT: |
| 86 return device::serial::DATA_BITS_EIGHT; | 86 return device::serial::DataBits::EIGHT; |
| 87 } | 87 } |
| 88 return device::serial::DATA_BITS_NONE; | 88 return device::serial::DataBits::NONE; |
| 89 } | 89 } |
| 90 | 90 |
| 91 api::serial::ParityBit ConvertParityBitFromMojo( | 91 api::serial::ParityBit ConvertParityBitFromMojo( |
| 92 device::serial::ParityBit input) { | 92 device::serial::ParityBit input) { |
| 93 switch (input) { | 93 switch (input) { |
| 94 case device::serial::PARITY_BIT_NONE: | 94 case device::serial::ParityBit::NONE: |
| 95 return api::serial::PARITY_BIT_NONE; | 95 return api::serial::PARITY_BIT_NONE; |
| 96 case device::serial::PARITY_BIT_ODD: | 96 case device::serial::ParityBit::ODD: |
| 97 return api::serial::PARITY_BIT_ODD; | 97 return api::serial::PARITY_BIT_ODD; |
| 98 case device::serial::PARITY_BIT_NO: | 98 case device::serial::ParityBit::NO: |
| 99 return api::serial::PARITY_BIT_NO; | 99 return api::serial::PARITY_BIT_NO; |
| 100 case device::serial::PARITY_BIT_EVEN: | 100 case device::serial::ParityBit::EVEN: |
| 101 return api::serial::PARITY_BIT_EVEN; | 101 return api::serial::PARITY_BIT_EVEN; |
| 102 } | 102 } |
| 103 return api::serial::PARITY_BIT_NONE; | 103 return api::serial::PARITY_BIT_NONE; |
| 104 } | 104 } |
| 105 | 105 |
| 106 device::serial::ParityBit ConvertParityBitToMojo(api::serial::ParityBit input) { | 106 device::serial::ParityBit ConvertParityBitToMojo(api::serial::ParityBit input) { |
| 107 switch (input) { | 107 switch (input) { |
| 108 case api::serial::PARITY_BIT_NONE: | 108 case api::serial::PARITY_BIT_NONE: |
| 109 return device::serial::PARITY_BIT_NONE; | 109 return device::serial::ParityBit::NONE; |
| 110 case api::serial::PARITY_BIT_NO: | 110 case api::serial::PARITY_BIT_NO: |
| 111 return device::serial::PARITY_BIT_NO; | 111 return device::serial::ParityBit::NO; |
| 112 case api::serial::PARITY_BIT_ODD: | 112 case api::serial::PARITY_BIT_ODD: |
| 113 return device::serial::PARITY_BIT_ODD; | 113 return device::serial::ParityBit::ODD; |
| 114 case api::serial::PARITY_BIT_EVEN: | 114 case api::serial::PARITY_BIT_EVEN: |
| 115 return device::serial::PARITY_BIT_EVEN; | 115 return device::serial::ParityBit::EVEN; |
| 116 } | 116 } |
| 117 return device::serial::PARITY_BIT_NONE; | 117 return device::serial::ParityBit::NONE; |
| 118 } | 118 } |
| 119 | 119 |
| 120 api::serial::StopBits ConvertStopBitsFromMojo(device::serial::StopBits input) { | 120 api::serial::StopBits ConvertStopBitsFromMojo(device::serial::StopBits input) { |
| 121 switch (input) { | 121 switch (input) { |
| 122 case device::serial::STOP_BITS_NONE: | 122 case device::serial::StopBits::NONE: |
| 123 return api::serial::STOP_BITS_NONE; | 123 return api::serial::STOP_BITS_NONE; |
| 124 case device::serial::STOP_BITS_ONE: | 124 case device::serial::StopBits::ONE: |
| 125 return api::serial::STOP_BITS_ONE; | 125 return api::serial::STOP_BITS_ONE; |
| 126 case device::serial::STOP_BITS_TWO: | 126 case device::serial::StopBits::TWO: |
| 127 return api::serial::STOP_BITS_TWO; | 127 return api::serial::STOP_BITS_TWO; |
| 128 } | 128 } |
| 129 return api::serial::STOP_BITS_NONE; | 129 return api::serial::STOP_BITS_NONE; |
| 130 } | 130 } |
| 131 | 131 |
| 132 device::serial::StopBits ConvertStopBitsToMojo(api::serial::StopBits input) { | 132 device::serial::StopBits ConvertStopBitsToMojo(api::serial::StopBits input) { |
| 133 switch (input) { | 133 switch (input) { |
| 134 case api::serial::STOP_BITS_NONE: | 134 case api::serial::STOP_BITS_NONE: |
| 135 return device::serial::STOP_BITS_NONE; | 135 return device::serial::StopBits::NONE; |
| 136 case api::serial::STOP_BITS_ONE: | 136 case api::serial::STOP_BITS_ONE: |
| 137 return device::serial::STOP_BITS_ONE; | 137 return device::serial::StopBits::ONE; |
| 138 case api::serial::STOP_BITS_TWO: | 138 case api::serial::STOP_BITS_TWO: |
| 139 return device::serial::STOP_BITS_TWO; | 139 return device::serial::StopBits::TWO; |
| 140 } | 140 } |
| 141 return device::serial::STOP_BITS_NONE; | 141 return device::serial::StopBits::NONE; |
| 142 } | 142 } |
| 143 | 143 |
| 144 } // namespace | 144 } // namespace |
| 145 | 145 |
| 146 static base::LazyInstance< | 146 static base::LazyInstance< |
| 147 BrowserContextKeyedAPIFactory<ApiResourceManager<SerialConnection> > > | 147 BrowserContextKeyedAPIFactory<ApiResourceManager<SerialConnection> > > |
| 148 g_factory = LAZY_INSTANCE_INITIALIZER; | 148 g_factory = LAZY_INSTANCE_INITIALIZER; |
| 149 | 149 |
| 150 // static | 150 // static |
| 151 template <> | 151 template <> |
| (...skipping 13 matching lines...) Expand all Loading... |
| 165 paused_(false), | 165 paused_(false), |
| 166 io_handler_(device::SerialIoHandler::Create( | 166 io_handler_(device::SerialIoHandler::Create( |
| 167 content::BrowserThread::GetMessageLoopProxyForThread( | 167 content::BrowserThread::GetMessageLoopProxyForThread( |
| 168 content::BrowserThread::FILE), | 168 content::BrowserThread::FILE), |
| 169 content::BrowserThread::GetMessageLoopProxyForThread( | 169 content::BrowserThread::GetMessageLoopProxyForThread( |
| 170 content::BrowserThread::UI))) { | 170 content::BrowserThread::UI))) { |
| 171 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 171 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 172 } | 172 } |
| 173 | 173 |
| 174 SerialConnection::~SerialConnection() { | 174 SerialConnection::~SerialConnection() { |
| 175 io_handler_->CancelRead(device::serial::RECEIVE_ERROR_DISCONNECTED); | 175 io_handler_->CancelRead(device::serial::ReceiveError::DISCONNECTED); |
| 176 io_handler_->CancelWrite(device::serial::SEND_ERROR_DISCONNECTED); | 176 io_handler_->CancelWrite(device::serial::SendError::DISCONNECTED); |
| 177 } | 177 } |
| 178 | 178 |
| 179 bool SerialConnection::IsPersistent() const { | 179 bool SerialConnection::IsPersistent() const { |
| 180 return persistent(); | 180 return persistent(); |
| 181 } | 181 } |
| 182 | 182 |
| 183 void SerialConnection::set_buffer_size(int buffer_size) { | 183 void SerialConnection::set_buffer_size(int buffer_size) { |
| 184 buffer_size_ = buffer_size; | 184 buffer_size_ = buffer_size; |
| 185 } | 185 } |
| 186 | 186 |
| 187 void SerialConnection::set_receive_timeout(int receive_timeout) { | 187 void SerialConnection::set_receive_timeout(int receive_timeout) { |
| 188 receive_timeout_ = receive_timeout; | 188 receive_timeout_ = receive_timeout; |
| 189 } | 189 } |
| 190 | 190 |
| 191 void SerialConnection::set_send_timeout(int send_timeout) { | 191 void SerialConnection::set_send_timeout(int send_timeout) { |
| 192 send_timeout_ = send_timeout; | 192 send_timeout_ = send_timeout; |
| 193 } | 193 } |
| 194 | 194 |
| 195 void SerialConnection::set_paused(bool paused) { | 195 void SerialConnection::set_paused(bool paused) { |
| 196 paused_ = paused; | 196 paused_ = paused; |
| 197 if (paused) { | 197 if (paused) { |
| 198 io_handler_->CancelRead(device::serial::RECEIVE_ERROR_NONE); | 198 io_handler_->CancelRead(device::serial::ReceiveError::NONE); |
| 199 } | 199 } |
| 200 } | 200 } |
| 201 | 201 |
| 202 void SerialConnection::Open(const api::serial::ConnectionOptions& options, | 202 void SerialConnection::Open(const api::serial::ConnectionOptions& options, |
| 203 const OpenCompleteCallback& callback) { | 203 const OpenCompleteCallback& callback) { |
| 204 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 204 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 205 if (options.persistent.get()) | 205 if (options.persistent.get()) |
| 206 set_persistent(*options.persistent); | 206 set_persistent(*options.persistent); |
| 207 if (options.name.get()) | 207 if (options.name.get()) |
| 208 set_name(*options.name); | 208 set_name(*options.name); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 259 if (options.name.get()) | 259 if (options.name.get()) |
| 260 set_name(*options.name); | 260 set_name(*options.name); |
| 261 if (options.buffer_size.get()) | 261 if (options.buffer_size.get()) |
| 262 set_buffer_size(*options.buffer_size); | 262 set_buffer_size(*options.buffer_size); |
| 263 if (options.receive_timeout.get()) | 263 if (options.receive_timeout.get()) |
| 264 set_receive_timeout(*options.receive_timeout); | 264 set_receive_timeout(*options.receive_timeout); |
| 265 if (options.send_timeout.get()) | 265 if (options.send_timeout.get()) |
| 266 set_send_timeout(*options.send_timeout); | 266 set_send_timeout(*options.send_timeout); |
| 267 bool success = io_handler_->ConfigurePort( | 267 bool success = io_handler_->ConfigurePort( |
| 268 *device::serial::ConnectionOptions::From(options)); | 268 *device::serial::ConnectionOptions::From(options)); |
| 269 io_handler_->CancelRead(device::serial::RECEIVE_ERROR_NONE); | 269 io_handler_->CancelRead(device::serial::ReceiveError::NONE); |
| 270 return success; | 270 return success; |
| 271 } | 271 } |
| 272 | 272 |
| 273 void SerialConnection::SetIoHandlerForTest( | 273 void SerialConnection::SetIoHandlerForTest( |
| 274 scoped_refptr<device::SerialIoHandler> handler) { | 274 scoped_refptr<device::SerialIoHandler> handler) { |
| 275 io_handler_ = handler; | 275 io_handler_ = handler; |
| 276 } | 276 } |
| 277 | 277 |
| 278 bool SerialConnection::GetInfo(api::serial::ConnectionInfo* info) const { | 278 bool SerialConnection::GetInfo(api::serial::ConnectionInfo* info) const { |
| 279 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 279 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 322 bool SerialConnection::SetBreak() { | 322 bool SerialConnection::SetBreak() { |
| 323 return io_handler_->SetBreak(); | 323 return io_handler_->SetBreak(); |
| 324 } | 324 } |
| 325 | 325 |
| 326 bool SerialConnection::ClearBreak() { | 326 bool SerialConnection::ClearBreak() { |
| 327 return io_handler_->ClearBreak(); | 327 return io_handler_->ClearBreak(); |
| 328 } | 328 } |
| 329 | 329 |
| 330 void SerialConnection::OnReceiveTimeout() { | 330 void SerialConnection::OnReceiveTimeout() { |
| 331 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 331 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 332 io_handler_->CancelRead(device::serial::RECEIVE_ERROR_TIMEOUT); | 332 io_handler_->CancelRead(device::serial::ReceiveError::TIMEOUT); |
| 333 } | 333 } |
| 334 | 334 |
| 335 void SerialConnection::OnSendTimeout() { | 335 void SerialConnection::OnSendTimeout() { |
| 336 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 336 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 337 io_handler_->CancelWrite(device::serial::SEND_ERROR_TIMEOUT); | 337 io_handler_->CancelWrite(device::serial::SendError::TIMEOUT); |
| 338 } | 338 } |
| 339 | 339 |
| 340 void SerialConnection::OnAsyncReadComplete(int bytes_read, | 340 void SerialConnection::OnAsyncReadComplete(int bytes_read, |
| 341 device::serial::ReceiveError error) { | 341 device::serial::ReceiveError error) { |
| 342 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 342 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 343 DCHECK(!receive_complete_.is_null()); | 343 DCHECK(!receive_complete_.is_null()); |
| 344 ReceiveCompleteCallback callback = receive_complete_; | 344 ReceiveCompleteCallback callback = receive_complete_; |
| 345 receive_complete_.Reset(); | 345 receive_complete_.Reset(); |
| 346 receive_timeout_task_.reset(); | 346 receive_timeout_task_.reset(); |
| 347 callback.Run(std::vector<char>(receive_buffer_->data(), | 347 callback.Run(std::vector<char>(receive_buffer_->data(), |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 411 output->parity_bit = extensions::ConvertParityBitToMojo(input.parity_bit); | 411 output->parity_bit = extensions::ConvertParityBitToMojo(input.parity_bit); |
| 412 output->stop_bits = extensions::ConvertStopBitsToMojo(input.stop_bits); | 412 output->stop_bits = extensions::ConvertStopBitsToMojo(input.stop_bits); |
| 413 if (input.cts_flow_control.get()) { | 413 if (input.cts_flow_control.get()) { |
| 414 output->has_cts_flow_control = true; | 414 output->has_cts_flow_control = true; |
| 415 output->cts_flow_control = *input.cts_flow_control; | 415 output->cts_flow_control = *input.cts_flow_control; |
| 416 } | 416 } |
| 417 return output; | 417 return output; |
| 418 } | 418 } |
| 419 | 419 |
| 420 } // namespace mojo | 420 } // namespace mojo |
| OLD | NEW |