pf_parser.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <ros/ros.h>
4 #include "pf_driver/pf/parser.h"
9 
10 template <typename T>
11 class PFParser : public Parser<PFPacket>
12 {
13 public:
14  virtual bool parse(uint8_t* buf, size_t buf_len, std::vector<std::unique_ptr<PFPacket>>& results, size_t& used)
15  {
16  std::unique_ptr<T> packet = std::make_unique<T>();
17  uint32_t serial_size = packet->get_size();
18  uint8_t* orig_buf = buf;
19  int count = 0;
20  used = 0;
21 
22  while (buf_len >= serial_size)
23  {
24  int start = packet->find_packet_start(buf, buf_len);
25  if (start == -1)
26  {
27  ROS_DEBUG("No magic number found. Invalid packet.");
28  break;
29  }
30  buf += start;
31  buf_len -= start;
32  if (buf_len < serial_size)
33  break;
34  size_t remainder = 0;
35  size_t p_size = 0;
36  if (!packet->parse_buf(buf, buf_len, remainder, p_size))
37  break;
38  packet->last_acquired_point_stamp = ros::Time::now();
39  results.push_back(std::move(packet));
40  ++count;
41 
42  buf += p_size;
43  buf_len -= p_size;
44  used = buf - orig_buf;
45  packet = std::make_unique<T>();
46  }
47 
48  if (count == 0)
49  ROS_DEBUG("Received data smaller than header size");
50 
51  return count > 0;
52  }
53 };
54 
58 
ROSCPP_DECL void start()
virtual bool parse(uint8_t *buf, size_t buf_len, std::vector< std::unique_ptr< PFPacket >> &results, size_t &used)
Definition: pf_parser.h:14
#define ROS_DEBUG(...)
static Time now()
Definition: parser.h:4


pf_driver
Author(s): Harsh Deshpande
autogenerated on Fri Feb 24 2023 03:59:35