Skip to content

Commit c20cbc5

Browse files
authored
Fixes for follow up on PR #9631 (#10205)
1 parent 2ac6cfe commit c20cbc5

File tree

2 files changed

+41
-29
lines changed

2 files changed

+41
-29
lines changed

src/runtime/hexagon/rpc/android/session.cc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class HexagonTransportChannel : public RPCChannel {
5151
enable_unsigned_pd(true);
5252
set_remote_stack_size(remote_stack_size_bytes);
5353
AEEResult rc = hexagon_rpc_open(uri.c_str(), &_handle);
54-
ICHECK(rc == AEE_SUCCESS) << "Hexagon RPC Open failed. URI: " << uri.c_str();
54+
ICHECK(rc == AEE_SUCCESS) << "hexagon_rpc_open failed. URI: " << uri.c_str();
5555
}
5656

5757
size_t Send(const void* data, size_t size) override {

src/runtime/hexagon/rpc/hexagon/rpc_server.cc

Lines changed: 40 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -59,30 +59,33 @@ class HexagonIOHandler {
5959
public:
6060
explicit HexagonIOHandler(uint8_t* read_buffer, size_t read_buffer_size_bytes)
6161
: read_buffer_{read_buffer},
62+
read_buffer_index_{0},
6263
read_buffer_size_bytes_{read_buffer_size_bytes},
63-
read_buffer_index_{0} {}
64+
write_buffer_available_length_{0} {}
6465

6566
void MessageStart(size_t message_size_bytes) {}
6667

6768
ssize_t PosixWrite(const uint8_t* buf, size_t write_len_bytes) {
68-
HEXAGON_PRINT(ALWAYS, "HexagonIOHandler PosixWrite called, write_len_bytes: %d",
69+
HEXAGON_PRINT(ALWAYS, "INFO: HexagonIOHandler PosixWrite called, write_len_bytes(%d)",
6970
write_len_bytes);
70-
size_t written_size = static_cast<size_t>(
71-
write_buffer_.sputn(reinterpret_cast<const char*>(buf), write_len_bytes));
71+
int32_t written_size = write_buffer_.sputn(reinterpret_cast<const char*>(buf), write_len_bytes);
7272
if (written_size != write_len_bytes) {
73-
HEXAGON_PRINT(ALWAYS, "HexagonIOHandler written_size failed");
73+
HEXAGON_PRINT(ALWAYS, "ERROR: written_size(%lld) != write_len_bytes(%d)");
7474
}
75+
write_buffer_available_length_ += written_size;
7576
return (ssize_t)written_size;
7677
}
7778

78-
void MessageDone() {}
79+
void MessageDone() { HEXAGON_PRINT(HIGH, "INFO: Message Done."); }
7980

8081
ssize_t PosixRead(uint8_t* buf, size_t read_len_bytes) {
81-
HEXAGON_PRINT(ALWAYS, "HexagonIOHandler PosixRead called, %d, %d", read_len_bytes,
82-
read_buffer_index_);
82+
HEXAGON_PRINT(
83+
ALWAYS,
84+
"INFO: HexagonIOHandler PosixRead called, read_len_bytes(%d), read_buffer_index_(%d)",
85+
read_len_bytes, read_buffer_index_);
8386

8487
uint32_t bytes_to_read = 0;
85-
if ((read_buffer_index_ - read_len_bytes) < 0) {
88+
if (read_buffer_index_ < read_len_bytes) {
8689
bytes_to_read = read_buffer_index_;
8790
} else {
8891
bytes_to_read = read_len_bytes;
@@ -91,10 +94,6 @@ class HexagonIOHandler {
9194
std::memcpy(buf, read_buffer_, bytes_to_read);
9295
read_buffer_ += bytes_to_read;
9396
read_buffer_index_ -= bytes_to_read;
94-
if (bytes_to_read != read_len_bytes) {
95-
HEXAGON_PRINT(ERROR, "Error bytes_to_read (%d) < read_len_bytes (%d).", bytes_to_read,
96-
read_len_bytes);
97-
}
9897
return (ssize_t)bytes_to_read;
9998
}
10099

@@ -106,39 +105,51 @@ class HexagonIOHandler {
106105
* \return The status
107106
*/
108107
AEEResult SetReadBuffer(const uint8_t* data, size_t data_size_bytes) {
109-
HEXAGON_PRINT(ALWAYS, "HexagonIOHandler SetReadBuffer called: %d, prev read_buffer_index_: ",
110-
data_size_bytes, read_buffer_index_);
108+
HEXAGON_PRINT(ALWAYS,
109+
"INFO: HexagonIOHandler SetReadBuffer: data_size_bytes(%d), "
110+
"read_buffer_index_(%d), read_buffer_size_bytes_(%d)",
111+
data_size_bytes, read_buffer_index_, read_buffer_size_bytes_);
111112
if (data_size_bytes > read_buffer_size_bytes_) {
113+
HEXAGON_PRINT(ERROR, "ERROR: data_size_bytes(%d) > read_buffer_size_bytes_(%d)");
112114
return AEE_EFAILED;
113115
}
114-
read_buffer_ = data;
116+
std::memcpy(reinterpret_cast<void*>(read_buffer_), reinterpret_cast<const void*>(data),
117+
data_size_bytes);
115118
read_buffer_index_ = data_size_bytes;
116119
return AEE_SUCCESS;
117120
}
118121

119122
/*!
120-
* \brief Get pointer to the buffer that a packet has been written to.
123+
* \brief Read from the write buffer that a packet has been written to.
121124
* \param buf The data pointer.
122125
* \param read_size_bytes The size of read in bytes.
123126
*
124127
* \return The size of data that is read in bytes.
125128
*/
126-
int64_t GetWriteBuffer(uint8_t* buf, size_t read_size_bytes) {
127-
HEXAGON_PRINT(ALWAYS, "HexagonIOHandler GetWriteBuffer called, read_len_bytes: %d",
129+
int64_t ReadFromWriteBuffer(uint8_t* buf, size_t read_size_bytes) {
130+
HEXAGON_PRINT(ALWAYS, "INFO: HexagonIOHandler ReadFromWriteBuffer called, read_size_bytes: %d",
128131
read_size_bytes);
129-
return write_buffer_.sgetn(reinterpret_cast<char*>(buf), read_size_bytes);
132+
int64_t size = (int64_t)write_buffer_.sgetn(reinterpret_cast<char*>(buf), read_size_bytes);
133+
write_buffer_available_length_ -= size;
134+
135+
// Clear buffer
136+
if (write_buffer_available_length_ == 0) {
137+
write_buffer_.str("");
138+
}
139+
return size;
130140
}
131141

132-
void Close() { HEXAGON_PRINT(ALWAYS, "HexagonIOHandler Close called"); }
142+
void Close() { HEXAGON_PRINT(ALWAYS, "INFO: HexagonIOHandler Close called"); }
133143

134144
void Exit(int code) { exit(code); }
135145

136146
private:
137-
const uint8_t* read_buffer_;
147+
uint8_t* read_buffer_;
138148
uint32_t read_buffer_index_;
139149
size_t read_buffer_size_bytes_;
140150

141151
std::stringbuf write_buffer_;
152+
uint32_t write_buffer_available_length_;
142153
};
143154

144155
class HexagonRPCServer {
@@ -169,7 +180,7 @@ class HexagonRPCServer {
169180
* \return The size of data that is read in bytes.
170181
*/
171182
int64_t Read(uint8_t* buf, size_t read_size_bytes) {
172-
return io_.GetWriteBuffer(buf, read_size_bytes);
183+
return io_.ReadFromWriteBuffer(buf, read_size_bytes);
173184
}
174185

175186
private:
@@ -209,6 +220,7 @@ int __QAIC_HEADER(hexagon_rpc_open)(const char* uri, remote_handle64* handle) {
209220
}
210221
reset_device_api();
211222
get_hexagon_rpc_server();
223+
212224
return AEE_SUCCESS;
213225
}
214226

@@ -233,8 +245,8 @@ AEEResult __QAIC_HEADER(hexagon_rpc_send)(remote_handle64 _handle, const unsigne
233245
int64_t written_size = get_hexagon_rpc_server()->Write(reinterpret_cast<const uint8_t*>(data),
234246
static_cast<size_t>(dataLen));
235247
if (written_size != dataLen) {
236-
HEXAGON_PRINT(ERROR, "RPC Server Write failed, written_size (%d) != dataLen (%d)", written_size,
237-
dataLen);
248+
HEXAGON_PRINT(ERROR, "ERROR: hexagon_rpc_send failed, written_size (%d) != dataLen (%d)",
249+
written_size, dataLen);
238250
return AEE_EFAILED;
239251
}
240252
return AEE_SUCCESS;
@@ -254,11 +266,11 @@ AEEResult __QAIC_HEADER(hexagon_rpc_receive)(remote_handle64 _handle, unsigned c
254266
int64_t read_size =
255267
get_hexagon_rpc_server()->Read(reinterpret_cast<uint8_t*>(buf), static_cast<size_t>(bufLen));
256268
*buf_written_size = read_size;
257-
if (read_size == bufLen) {
269+
if (read_size == static_cast<int64_t>(bufLen)) {
258270
return AEE_SUCCESS;
259271
} else {
260-
HEXAGON_PRINT(ALWAYS, "RPC Server Read failed, read_size (%d) != dataLen (%d)", read_size,
261-
bufLen);
272+
HEXAGON_PRINT(ERROR, "ERROR: RPC Server Read failed, read_size (%lld) != bufLen (%lld)",
273+
read_size, static_cast<int64_t>(bufLen));
262274
return AEE_EFAILED;
263275
}
264276
}

0 commit comments

Comments
 (0)