From 0f4041d8d947d72e822a272dd1f7465d652039c5 Mon Sep 17 00:00:00 2001 From: taynpg Date: Sat, 18 May 2024 23:54:50 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9A=82=E6=97=B6=E6=94=B9=E6=88=90=E8=AF=BB?= =?UTF-8?q?=E5=8F=96=E4=B8=8D=E4=BC=A0=E5=85=A5len?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- libserial/serial.cpp | 20 ++++++++------------ libserial/serial.h | 2 +- main.cpp | 2 +- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/libserial/serial.cpp b/libserial/serial.cpp index bcfcedc..3d648e1 100644 --- a/libserial/serial.cpp +++ b/libserial/serial.cpp @@ -62,7 +62,7 @@ public: return send_size; } - int read(char* data, int size) + int read(char* data) { bytes_transferred_ = 0; io_.reset(); @@ -77,16 +77,11 @@ public: boost::asio::placeholders::bytes_transferred)); io_.run(); - - if (size < bytes_transferred_) { - return -1; - } - if (bytes_transferred_ > 0) { std::memcpy(data, buffer_, bytes_transferred_); - return static_cast(bytes_transferred_); + data[bytes_transferred_] = '\0'; } - return 0; + return bytes_transferred_; } const char* get_last_error() const { return error_; } void set_timeout(uint64_t timeout) { time_out_ = timeout; } @@ -103,12 +98,13 @@ private: if (code) { return; } + bytes_transferred_ = -1; port_->cancel(); } void handle_read(const boost::system::error_code& error, std::size_t bytes_transferred) { if (!error) { - bytes_transferred_ = bytes_transferred; + bytes_transferred_ = static_cast(bytes_transferred); timer_.cancel(); } } @@ -123,7 +119,7 @@ private: serial_port::flow_control flow_control_; private: - std::size_t bytes_transferred_{}; + int bytes_transferred_{}; boost::asio::io_context io_{}; boost::asio::serial_port* port_{}; boost::system::error_code ec_{}; @@ -238,9 +234,9 @@ void CSerialOpr::close() { imp_->close(); } -int CSerialOpr::read(char* data, int size) +int CSerialOpr::read(char* data) { - return imp_->read(data, size); + return imp_->read(data); } int CSerialOpr::write(const char* data, int len) { diff --git a/libserial/serial.h b/libserial/serial.h index 710fd6f..3263c7c 100644 --- a/libserial/serial.h +++ b/libserial/serial.h @@ -54,7 +54,7 @@ public: public: int open(); void close(); - int read(char* data, int size); + int read(char* data); int write(const char* data, int len); const char* get_last_error() const; diff --git a/main.cpp b/main.cpp index f9b8d6c..af00d02 100644 --- a/main.cpp +++ b/main.cpp @@ -23,7 +23,7 @@ int main() return false; } - int read_size = opr.read(buffer, sizeof(buffer)); + int read_size = opr.read(buffer); if (read_size > 0) { std::cout << "要发送的数据大小:" << strlen(buffer2) << "\n"; int write_size = opr.write(buffer2, strlen(buffer2));