移除串口异步接收逻辑

Signed-off-by: a1012112796 <1012112796@qq.com>
This commit is contained in:
2021-09-07 20:45:14 +08:00
parent 3294f498c7
commit 18d5a0f4f3
5 changed files with 36 additions and 27 deletions

View File

@@ -51,6 +51,8 @@ public:
int send(const char* data,int length); int send(const char* data,int length);
void setReceiveCalback(ReceiveCallback receiveCallback); void setReceiveCalback(ReceiveCallback receiveCallback);
int read_data(char* receive_buf, size_t receive_buf_size);
void sync_read(void);
protected: protected:
virtual void onReceive(char* data,int length); virtual void onReceive(char* data,int length);

View File

@@ -3,7 +3,6 @@
#include <ros/ros.h> #include <ros/ros.h>
#include <std_msgs/String.h> #include <std_msgs/String.h>
#include <queue>
#include "test_topic/WzSerialportPlus.h" #include "test_topic/WzSerialportPlus.h"
using MsgType = std_msgs::String; using MsgType = std_msgs::String;
@@ -14,7 +13,6 @@ public:
void run(const char *device); void run(const char *device);
private: private:
ros::Publisher _sender; ros::Publisher _sender;
std::queue<MsgType> _queue;
WzSerialportPlus _serial; WzSerialportPlus _serial;
}; };

View File

@@ -195,10 +195,25 @@ bool WzSerialportPlus::open()
receivable = true; receivable = true;
printf("[WzSerialportPlus::open()]: open success.\n");
return true;
}
int WzSerialportPlus::read_data(char* receive_buf, size_t receive_buf_size)
{
if (!receivable)
{
return -1;
}
return read(serialportFd, receive_buf, receive_buf_size);
}
void WzSerialportPlus::sync_read(void)
{
std::thread([&]{ std::thread([&]{
char* receiveData = new char[receiveMaxlength]; char* receiveData = new char[receiveMaxlength];
int receivedLength = 0; int receivedLength = 0;
int selectResult = -1;
while (receivable) while (receivable)
{ {
@@ -218,9 +233,6 @@ bool WzSerialportPlus::open()
delete[] receiveData; delete[] receiveData;
receiveData = nullptr; receiveData = nullptr;
}).detach(); }).detach();
printf("[WzSerialportPlus::open()]: open success.\n");
return true;
} }
bool WzSerialportPlus::open(const std::string& name, bool WzSerialportPlus::open(const std::string& name,

View File

@@ -12,29 +12,26 @@ MinPublisher::~MinPublisher()
void MinPublisher::run(const char *device) void MinPublisher::run(const char *device)
{ {
_serial.setReceiveCalback([this](char* str,int length){
MsgType msg;
std::stringstream ss;
ss << str;
msg.data = ss.str();
this->_queue.push(msg);
});
_serial.open(device, 115200, 1, 8, 'N'); _serial.open(device, 115200, 1, 8, 'N');
char *read_buf = new char[500];
while (ros::ok()) while (ros::ok())
{ {
while(_queue.size() > 0) std_msgs::String msg;
{ std::stringstream ss;
MsgType msg = _queue.front();
ROS_INFO("send: '%s'", msg.data.c_str());
_sender.publish(msg);
_queue.pop();
}
usleep(50); memset(read_buf, 0, 500);
int len = _serial.read_data(read_buf, 500);
if (len <= 0)
{
continue;
}
ss << read_buf;
msg.data = ss.str();
ROS_INFO("send: '%s'", msg.data.c_str());
_sender.publish(msg);
} }
} }
@@ -43,7 +40,7 @@ int main(int argc, char *argv[])
ros::init(argc, argv, "test_pub_node"); ros::init(argc, argv, "test_pub_node");
MinPublisher nh; MinPublisher nh;
nh.run("/dev/ttyUSB1"); nh.run("/dev/ttyUSB0");
return 0; return 0;
} }

View File

@@ -2,7 +2,7 @@
MinSubscriber::MinSubscriber() MinSubscriber::MinSubscriber()
{ {
_sub = this->subscribe<MsgType>("test_topic_2", 200, boost::bind(&MinSubscriber::callback, this, _1)); _sub = this->subscribe<MsgType>("test_topic", 200, boost::bind(&MinSubscriber::callback, this, _1));
} }
MinSubscriber::~MinSubscriber() MinSubscriber::~MinSubscriber()
@@ -27,7 +27,7 @@ int main(int argc, char *argv[])
ros::init(argc, argv, "test_sub_node"); ros::init(argc, argv, "test_sub_node");
MinSubscriber nh; MinSubscriber nh;
nh.run("/dev/ttyUSB0"); nh.run("/dev/ttyUSB1");
return 0; return 0;
} }