| OLD | NEW | 
|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/webcam_private/visca_webcam.h" | 5 #include "extensions/browser/api/webcam_private/visca_webcam.h" | 
| 6 | 6 | 
| 7 #include "base/bind.h" | 7 #include "base/bind.h" | 
| 8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" | 
| 9 #include "content/public/browser/browser_thread.h" | 9 #include "content/public/browser/browser_thread.h" | 
| 10 | 10 | 
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 104 void ViscaWebcam::Open(const OpenCompleteCallback& open_callback) { | 104 void ViscaWebcam::Open(const OpenCompleteCallback& open_callback) { | 
| 105   BrowserThread::PostTask( | 105   BrowserThread::PostTask( | 
| 106       BrowserThread::IO, FROM_HERE, | 106       BrowserThread::IO, FROM_HERE, | 
| 107       base::Bind(&ViscaWebcam::OpenOnIOThread, weak_ptr_factory_.GetWeakPtr(), | 107       base::Bind(&ViscaWebcam::OpenOnIOThread, weak_ptr_factory_.GetWeakPtr(), | 
| 108                  open_callback)); | 108                  open_callback)); | 
| 109 } | 109 } | 
| 110 | 110 | 
| 111 void ViscaWebcam::OpenOnIOThread(const OpenCompleteCallback& open_callback) { | 111 void ViscaWebcam::OpenOnIOThread(const OpenCompleteCallback& open_callback) { | 
| 112   DCHECK_CURRENTLY_ON(BrowserThread::IO); | 112   DCHECK_CURRENTLY_ON(BrowserThread::IO); | 
| 113 | 113 | 
| 114   core_api::serial::ConnectionOptions options; | 114   api::serial::ConnectionOptions options; | 
| 115 | 115 | 
| 116   // Set the receive buffer size to receive the response data 1 by 1. | 116   // Set the receive buffer size to receive the response data 1 by 1. | 
| 117   options.buffer_size.reset(new int(1)); | 117   options.buffer_size.reset(new int(1)); | 
| 118   options.persistent.reset(new bool(false)); | 118   options.persistent.reset(new bool(false)); | 
| 119   options.bitrate.reset(new int(9600)); | 119   options.bitrate.reset(new int(9600)); | 
| 120   options.cts_flow_control.reset(new bool(false)); | 120   options.cts_flow_control.reset(new bool(false)); | 
| 121   options.receive_timeout.reset(new int(0)); | 121   options.receive_timeout.reset(new int(0)); | 
| 122   options.send_timeout.reset(new int(0)); | 122   options.send_timeout.reset(new int(0)); | 
| 123   options.data_bits = core_api::serial::DATA_BITS_EIGHT; | 123   options.data_bits = api::serial::DATA_BITS_EIGHT; | 
| 124   options.parity_bit = core_api::serial::PARITY_BIT_NO; | 124   options.parity_bit = api::serial::PARITY_BIT_NO; | 
| 125   options.stop_bits = core_api::serial::STOP_BITS_ONE; | 125   options.stop_bits = api::serial::STOP_BITS_ONE; | 
| 126 | 126 | 
| 127   serial_connection_.reset(new SerialConnection(path_, extension_id_)); | 127   serial_connection_.reset(new SerialConnection(path_, extension_id_)); | 
| 128   serial_connection_->Open( | 128   serial_connection_->Open( | 
| 129       options, base::Bind(&ViscaWebcam::OnConnected, | 129       options, base::Bind(&ViscaWebcam::OnConnected, | 
| 130                           weak_ptr_factory_.GetWeakPtr(), open_callback)); | 130                           weak_ptr_factory_.GetWeakPtr(), open_callback)); | 
| 131 } | 131 } | 
| 132 | 132 | 
| 133 void ViscaWebcam::OnConnected(const OpenCompleteCallback& open_callback, | 133 void ViscaWebcam::OnConnected(const OpenCompleteCallback& open_callback, | 
| 134                               bool success) { | 134                               bool success) { | 
| 135   if (!success) { | 135   if (!success) { | 
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 178   if (!commands_.empty() || | 178   if (!commands_.empty() || | 
| 179       !serial_connection_->Send( | 179       !serial_connection_->Send( | 
| 180           command, base::Bind(&ViscaWebcam::OnSendCompleted, | 180           command, base::Bind(&ViscaWebcam::OnSendCompleted, | 
| 181                               weak_ptr_factory_.GetWeakPtr(), callback))) { | 181                               weak_ptr_factory_.GetWeakPtr(), callback))) { | 
| 182     commands_.push_back(std::make_pair(command, callback)); | 182     commands_.push_back(std::make_pair(command, callback)); | 
| 183   } | 183   } | 
| 184 } | 184 } | 
| 185 | 185 | 
| 186 void ViscaWebcam::OnSendCompleted(const CommandCompleteCallback& callback, | 186 void ViscaWebcam::OnSendCompleted(const CommandCompleteCallback& callback, | 
| 187                                   int bytes_sent, | 187                                   int bytes_sent, | 
| 188                                   core_api::serial::SendError error) { | 188                                   api::serial::SendError error) { | 
| 189   if (error == core_api::serial::SEND_ERROR_NONE) { | 189   if (error == api::serial::SEND_ERROR_NONE) { | 
| 190     ReceiveLoop(callback); | 190     ReceiveLoop(callback); | 
| 191   } else { | 191   } else { | 
| 192     const std::vector<char> response; | 192     const std::vector<char> response; | 
| 193     callback.Run(false, response); | 193     callback.Run(false, response); | 
| 194   } | 194   } | 
| 195 } | 195 } | 
| 196 | 196 | 
| 197 void ViscaWebcam::ReceiveLoop(const CommandCompleteCallback& callback) { | 197 void ViscaWebcam::ReceiveLoop(const CommandCompleteCallback& callback) { | 
| 198   serial_connection_->Receive(base::Bind(&ViscaWebcam::OnReceiveCompleted, | 198   serial_connection_->Receive(base::Bind(&ViscaWebcam::OnReceiveCompleted, | 
| 199                                          weak_ptr_factory_.GetWeakPtr(), | 199                                          weak_ptr_factory_.GetWeakPtr(), | 
| 200                                          callback)); | 200                                          callback)); | 
| 201 } | 201 } | 
| 202 | 202 | 
| 203 void ViscaWebcam::OnReceiveCompleted(const CommandCompleteCallback& callback, | 203 void ViscaWebcam::OnReceiveCompleted(const CommandCompleteCallback& callback, | 
| 204                                      const std::vector<char>& data, | 204                                      const std::vector<char>& data, | 
| 205                                      core_api::serial::ReceiveError error) { | 205                                      api::serial::ReceiveError error) { | 
| 206   data_buffer_.insert(data_buffer_.end(), data.begin(), data.end()); | 206   data_buffer_.insert(data_buffer_.end(), data.begin(), data.end()); | 
| 207 | 207 | 
| 208   if (error == core_api::serial::RECEIVE_ERROR_NONE) { | 208   if (error == api::serial::RECEIVE_ERROR_NONE) { | 
| 209     // Loop until encounter the terminator. | 209     // Loop until encounter the terminator. | 
| 210     if (int(data_buffer_.back()) != VISCA_TERMINATOR) { | 210     if (int(data_buffer_.back()) != VISCA_TERMINATOR) { | 
| 211       base::MessageLoop::current()->PostTask( | 211       base::MessageLoop::current()->PostTask( | 
| 212           FROM_HERE, base::Bind(&ViscaWebcam::ReceiveLoop, | 212           FROM_HERE, base::Bind(&ViscaWebcam::ReceiveLoop, | 
| 213                                 weak_ptr_factory_.GetWeakPtr(), callback)); | 213                                 weak_ptr_factory_.GetWeakPtr(), callback)); | 
| 214     } else { | 214     } else { | 
| 215       // Clear |data_buffer_|. | 215       // Clear |data_buffer_|. | 
| 216       std::vector<char> response; | 216       std::vector<char> response; | 
| 217       response.swap(data_buffer_); | 217       response.swap(data_buffer_); | 
| 218 | 218 | 
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 390     case TILT_DOWN: | 390     case TILT_DOWN: | 
| 391       command = kPTDownCommand; | 391       command = kPTDownCommand; | 
| 392       break; | 392       break; | 
| 393   } | 393   } | 
| 394   Send(command, base::Bind(&ViscaWebcam::OnCommandCompleted, | 394   Send(command, base::Bind(&ViscaWebcam::OnCommandCompleted, | 
| 395                            weak_ptr_factory_.GetWeakPtr(), COMMAND, &tilt_)); | 395                            weak_ptr_factory_.GetWeakPtr(), COMMAND, &tilt_)); | 
| 396   return true; | 396   return true; | 
| 397 } | 397 } | 
| 398 | 398 | 
| 399 }  // namespace extensions | 399 }  // namespace extensions | 
| OLD | NEW | 
|---|