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

Side by Side Diff: tools/battor_agent/battor_connection_impl.h

Issue 1567683002: Makes the BattOrConnection read messages instead of bytes (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 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 unified diff | Download patch
OLDNEW
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 #ifndef TOOLS_BATTOR_AGENT_BATTOR_CONNECTION_IMPL_H_ 5 #ifndef TOOLS_BATTOR_AGENT_BATTOR_CONNECTION_IMPL_H_
6 #define TOOLS_BATTOR_AGENT_BATTOR_CONNECTION_IMPL_H_ 6 #define TOOLS_BATTOR_AGENT_BATTOR_CONNECTION_IMPL_H_
7 7
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/callback_forward.h" 10 #include "base/callback_forward.h"
(...skipping 24 matching lines...) Expand all
35 BattOrConnection::Listener* listener, 35 BattOrConnection::Listener* listener,
36 scoped_refptr<base::SingleThreadTaskRunner> file_thread_task_runner, 36 scoped_refptr<base::SingleThreadTaskRunner> file_thread_task_runner,
37 scoped_refptr<base::SingleThreadTaskRunner> ui_thread_task_runner); 37 scoped_refptr<base::SingleThreadTaskRunner> ui_thread_task_runner);
38 ~BattOrConnectionImpl() override; 38 ~BattOrConnectionImpl() override;
39 39
40 void Open() override; 40 void Open() override;
41 void Close() override; 41 void Close() override;
42 void SendBytes(BattOrMessageType type, 42 void SendBytes(BattOrMessageType type,
43 const void* buffer, 43 const void* buffer,
44 size_t bytes_to_send) override; 44 size_t bytes_to_send) override;
45 void ReadBytes(size_t bytes_to_read) override; 45 void ReadMessage(size_t max_data_bytes_to_read) override;
46 void Flush() override; 46 void Flush() override;
47 47
48 protected: 48 protected:
49 // Overridden by the test to use a fake serial connection. 49 // Overridden by the test to use a fake serial connection.
50 virtual scoped_refptr<device::SerialIoHandler> CreateIoHandler(); 50 virtual scoped_refptr<device::SerialIoHandler> CreateIoHandler();
51 51
52 // IO handler capable of reading and writing from the serial connection. 52 // IO handler capable of reading and writing from the serial connection.
53 scoped_refptr<device::SerialIoHandler> io_handler_; 53 scoped_refptr<device::SerialIoHandler> io_handler_;
54 54
55 private: 55 private:
56 void OnOpened(bool success); 56 void OnOpened(bool success);
57 57
58 // Reads the specified number of additional bytes and adds them to the pending 58 // Reads the specified number of additional bytes and adds them to the pending
59 // read buffer. 59 // read buffer.
60 void ReadMoreBytes(size_t bytes_to_read); 60 void BeginReadBytes(size_t bytes_to_read);
61 61
62 // Internal callback for when bytes are read. This method may trigger 62 // Internal callback for when bytes are read. This method may trigger
63 // additional reads if any newly read bytes are escape bytes. 63 // additional reads if any newly read bytes are escape bytes.
64 void OnBytesRead(int bytes_read, device::serial::ReceiveError error); 64 void OnBytesRead(int bytes_read, device::serial::ReceiveError error);
65 65
66 void EndReadBytes(bool success,
67 BattOrMessageType type,
68 scoped_ptr<std::vector<char>> data);
69
70 // Pulls off the next complete message from already_read_buffer_, returning
71 // its type and contents (via out parameters) and whether a complete message
72 // was able to be read (via the return value).
73 bool ParseMessage(BattOrMessageType* type, std::vector<char>* data);
74
66 // Internal callback for when bytes are sent. 75 // Internal callback for when bytes are sent.
67 void OnBytesSent(int bytes_sent, device::serial::SendError error); 76 void OnBytesSent(int bytes_sent, device::serial::SendError error);
68 77
69 // The path of the BattOr. 78 // The path of the BattOr.
70 std::string path_; 79 std::string path_;
71 80
72 // All bytes that have been read since the user requested a read. If multiple 81 // All bytes that have already been read from the serial stream, but have not
73 // reads are required due to the presence of escape bytes, 82 // yet been given to the listener as a complete message.
74 // pending_read_buffer_ grows with each read. 83 std::vector<char> already_read_buffer_;
75 scoped_ptr<std::vector<char>> pending_read_buffer_; 84 // The bytes that were read in the last read.
76 // The bytes that were read in just the last read. If multiple reads are 85 scoped_refptr<net::IOBuffer> pending_read_buffer_;
77 // required due to the presence of escape bytes, last_read_buffer_ only 86 // The maximum number of bytes for the last read.
78 // contains the results of the last read. 87 size_t pending_read_max_length_;
79 scoped_refptr<net::IOBuffer> last_read_buffer_;
80 // The number of bytes that we requested in the last read.
81 size_t pending_read_length_;
82 // The number of escape bytes that have already been read.
83 size_t pending_read_escape_byte_count_;
84 88
85 // The total number of bytes that we're expecting to send. 89 // The total number of bytes that we're expecting to send.
86 size_t pending_write_length_; 90 size_t pending_write_length_;
87 91
88 // Threads needed for serial communication. 92 // Threads needed for serial communication.
89 scoped_refptr<base::SingleThreadTaskRunner> file_thread_task_runner_; 93 scoped_refptr<base::SingleThreadTaskRunner> file_thread_task_runner_;
90 scoped_refptr<base::SingleThreadTaskRunner> ui_thread_task_runner_; 94 scoped_refptr<base::SingleThreadTaskRunner> ui_thread_task_runner_;
91 95
92 DISALLOW_COPY_AND_ASSIGN(BattOrConnectionImpl); 96 DISALLOW_COPY_AND_ASSIGN(BattOrConnectionImpl);
93 }; 97 };
94 98
95 } // namespace battor 99 } // namespace battor
96 100
97 #endif // TOOLS_BATTOR_AGENT_BATTOR_CONNECTION_IMPL_H_ 101 #endif // TOOLS_BATTOR_AGENT_BATTOR_CONNECTION_IMPL_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698