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

Side by Side Diff: chrome/browser/extensions/api/serial/serial_api.cc

Issue 10827123: Add serial bulk reads. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge help. Created 8 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/extensions/api/serial/serial_apitest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/browser/extensions/api/serial/serial_api.h" 5 #include "chrome/browser/extensions/api/serial/serial_api.h"
6 6
7 #include "base/values.h" 7 #include "base/values.h"
8 #include "chrome/browser/extensions/extension_system.h" 8 #include "chrome/browser/extensions/extension_system.h"
9 #include "chrome/browser/extensions/api/serial/serial_connection.h" 9 #include "chrome/browser/extensions/api/serial/serial_connection.h"
10 #include "chrome/browser/extensions/api/serial/serial_port_enumerator.h" 10 #include "chrome/browser/extensions/api/serial/serial_port_enumerator.h"
11 #include "content/public/browser/browser_thread.h" 11 #include "content/public/browser/browser_thread.h"
12 12
13 using content::BrowserThread; 13 using content::BrowserThread;
14 14
15 namespace extensions { 15 namespace extensions {
16 16
17 const char kConnectionIdKey[] = "connectionId"; 17 const char kConnectionIdKey[] = "connectionId";
18 const char kPortsKey[] = "ports"; 18 const char kPortsKey[] = "ports";
19 const char kDataKey[] = "data"; 19 const char kDataKey[] = "data";
20 const char kBytesReadKey[] = "bytesRead"; 20 const char kBytesReadKey[] = "bytesRead";
21 const char kBytesToReadKey[] = "bytesToRead";
21 const char kBytesWrittenKey[] = "bytesWritten"; 22 const char kBytesWrittenKey[] = "bytesWritten";
22 const char kBitrateKey[] = "bitrate"; 23 const char kBitrateKey[] = "bitrate";
23 const char kOptionsKey[] = "options"; 24 const char kOptionsKey[] = "options";
24 const char kSuccessKey[] = "success"; 25 const char kSuccessKey[] = "success";
25 const char kDtrKey[] = "dtr"; 26 const char kDtrKey[] = "dtr";
26 const char kRtsKey[] = "rts"; 27 const char kRtsKey[] = "rts";
27 const char kDcdKey[] = "dcd"; 28 const char kDcdKey[] = "dcd";
28 const char kCtsKey[] = "cts"; 29 const char kCtsKey[] = "cts";
29 30
30 const char kErrorGetControlSignalsFailed[] = "Failed to get control signals."; 31 const char kErrorGetControlSignalsFailed[] = "Failed to get control signals.";
31 const char kErrorSetControlSignalsFailed[] = "Failed to set control signals."; 32 const char kErrorSetControlSignalsFailed[] = "Failed to set control signals.";
33 const char kSerialReadInvalidBytesToRead[] = "Number of bytes to read must "
34 "be a positive number less than 1,048,576.";
32 35
33 SerialAsyncApiFunction::SerialAsyncApiFunction() 36 SerialAsyncApiFunction::SerialAsyncApiFunction()
34 : manager_(NULL) { 37 : manager_(NULL) {
35 } 38 }
36 39
37 SerialAsyncApiFunction::~SerialAsyncApiFunction() { 40 SerialAsyncApiFunction::~SerialAsyncApiFunction() {
38 } 41 }
39 42
40 bool SerialAsyncApiFunction::PrePrepare() { 43 bool SerialAsyncApiFunction::PrePrepare() {
41 manager_ = ExtensionSystem::Get(profile())->serial_connection_manager(); 44 manager_ = ExtensionSystem::Get(profile())->serial_connection_manager();
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 } 192 }
190 193
191 SerialReadFunction::~SerialReadFunction() { 194 SerialReadFunction::~SerialReadFunction() {
192 } 195 }
193 196
194 bool SerialReadFunction::Prepare() { 197 bool SerialReadFunction::Prepare() {
195 set_work_thread_id(BrowserThread::FILE); 198 set_work_thread_id(BrowserThread::FILE);
196 199
197 params_ = api::experimental_serial::Read::Params::Create(*args_); 200 params_ = api::experimental_serial::Read::Params::Create(*args_);
198 EXTENSION_FUNCTION_VALIDATE(params_.get()); 201 EXTENSION_FUNCTION_VALIDATE(params_.get());
202 if (params_->bytes_to_read <= 0 || params_->bytes_to_read >= 1024 * 1024) {
203 error_ = kSerialReadInvalidBytesToRead;
204 return false;
205 }
199 206
200 return true; 207 return true;
201 } 208 }
202 209
203 void SerialReadFunction::Work() { 210 void SerialReadFunction::Work() {
204 uint8 byte = '\0';
205 int bytes_read = -1; 211 int bytes_read = -1;
206 SerialConnection* serial_connection = manager_->Get(params_->connection_id); 212 scoped_refptr<net::IOBufferWithSize> io_buffer(
213 new net::IOBufferWithSize(params_->bytes_to_read));
214 SerialConnection* serial_connection(manager_->Get(params_->connection_id));
215
207 if (serial_connection) 216 if (serial_connection)
208 bytes_read = serial_connection->Read(&byte); 217 bytes_read = serial_connection->Read(io_buffer);
209 218
210 DictionaryValue* result = new DictionaryValue(); 219 DictionaryValue* result = new DictionaryValue();
211 220
212 // The API is defined to require a 'data' value, so we will always 221 // The API is defined to require a 'data' value, so we will always
213 // create a BinaryValue, even if it's zero-length. 222 // create a BinaryValue, even if it's zero-length.
214 if (bytes_read < 0) 223 if (bytes_read < 0)
215 bytes_read = 0; 224 bytes_read = 0;
216 result->SetInteger(kBytesReadKey, bytes_read); 225 result->SetInteger(kBytesReadKey, bytes_read);
217 result->Set(kDataKey, base::BinaryValue::CreateWithCopiedBuffer( 226 result->Set(kDataKey, base::BinaryValue::CreateWithCopiedBuffer(
218 reinterpret_cast<char*>(&byte), bytes_read)); 227 io_buffer->data(), bytes_read));
219 SetResult(result); 228 SetResult(result);
220 } 229 }
221 230
222 bool SerialReadFunction::Respond() { 231 bool SerialReadFunction::Respond() {
223 return true; 232 return true;
224 } 233 }
225 234
226 SerialWriteFunction::SerialWriteFunction() 235 SerialWriteFunction::SerialWriteFunction()
227 : io_buffer_(NULL), io_buffer_size_(0) { 236 : io_buffer_(NULL), io_buffer_size_(0) {
228 } 237 }
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 error_ = kSerialConnectionNotFoundError; 374 error_ = kSerialConnectionNotFoundError;
366 SetResult(Value::CreateBooleanValue(false)); 375 SetResult(Value::CreateBooleanValue(false));
367 } 376 }
368 } 377 }
369 378
370 bool SerialSetControlSignalsFunction::Respond() { 379 bool SerialSetControlSignalsFunction::Respond() {
371 return true; 380 return true;
372 } 381 }
373 382
374 } // namespace extensions 383 } // namespace extensions
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/extensions/api/serial/serial_apitest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698