15 #include <boost/make_shared.hpp>
29 novatel_gps_msgs::NovatelPsrdop2Ptr
33 if (bin_msg.
data_.size() != (BINARY_SYSTEM_LENGTH * num_systems) + BINARY_BODY_LENGTH)
35 std::stringstream error;
36 error <<
"Unexpected PSRDOP2 message size: " << bin_msg.
data_.size();
40 auto ros_msg = boost::make_shared<novatel_gps_msgs::NovatelPsrdop2>();
43 ros_msg->novatel_msg_header = header_parser.
ParseBinary(bin_msg);
44 ros_msg->novatel_msg_header.message_name = MESSAGE_NAME;
54 ros_msg->systems.reserve(num_systems);
55 for (uint32_t i = 0; i < num_systems; i++)
57 size_t system_offset = BINARY_BODY_LENGTH + i * BINARY_SYSTEM_LENGTH;
58 novatel_gps_msgs::NovatelPsrdop2System system;
63 ros_msg->systems.push_back(system);
69 novatel_gps_msgs::NovatelPsrdop2Ptr
72 if (sentence.
body.size() < ASCII_BODY_FIELDS)
74 std::stringstream error;
75 error <<
"Unexpected number of body fields in PSRDOP2 log: " << sentence.
body.size();
79 uint32_t num_systems = 0;
82 if (sentence.
body.size() != ASCII_BODY_FIELDS + num_systems * ASCII_SYSTEM_FIELDS)
84 std::stringstream error;
85 error <<
"Size of PSRDOP2 log (" << sentence.
body.size() <<
") did not match expected size ("
86 << ASCII_BODY_FIELDS + num_systems * ASCII_SYSTEM_FIELDS <<
").";
91 auto msg = boost::make_shared<novatel_gps_msgs::NovatelPsrdop2>();
99 msg->systems.reserve(num_systems);
100 for (
size_t i = 0; i < num_systems; i++)
102 novatel_gps_msgs::NovatelPsrdop2System system;
103 size_t offset = 5 + i * ASCII_SYSTEM_FIELDS;
104 system.system = sentence.
body[offset];
106 msg->systems.push_back(system);
111 std::stringstream error;
112 error <<
"Error parsing PSRDOP2 log.";