data.h
Go to the documentation of this file.
1 //
2 // Created by ch on 24-11-23.
3 //
4 
5 #pragma once
6 
7 #include <ros/ros.h>
8 #include <unistd.h>
9 #include <serial/serial.h>
10 #include <nav_msgs/Odometry.h>
11 #include <sensor_msgs/JointState.h>
12 #include <std_msgs/Float64.h>
13 #include <std_msgs/Int8MultiArray.h>
14 #include <tf2_ros/buffer.h>
17 #include "std_msgs/UInt32.h"
18 #include "rm_msgs/VisualizeStateData.h"
19 #include "rm_msgs/CustomControllerData.h"
20 #include "rm_msgs/VTKeyboardMouseData.h"
21 #include "rm_msgs/VTReceiverControlData.h"
22 
23 #include "rm_vt/common/protocol.h"
24 
25 namespace rm_vt
26 {
27 class Base
28 {
29 public:
32 
33  void initSerial()
34  {
36  serial_.setPort("/dev/usbImagetran");
37  serial_.setBaudrate(921600);
39  if (serial_.isOpen())
40  return;
41  try
42  {
43  serial_.open();
44  }
45  catch (serial::IOException& e)
46  {
47  ROS_ERROR("Cannot open image transmitter port");
48  }
49  }
50 
51  // CRC check
52  uint8_t getCRC8CheckSum(unsigned char* pch_message, unsigned int dw_length, unsigned char uc_crc_8)
53  {
54  unsigned char uc_index;
55  while (dw_length--)
56  {
57  uc_index = uc_crc_8 ^ (*pch_message++);
58  uc_crc_8 = rm_vt::kCrc8Table[uc_index];
59  }
60  return (uc_crc_8);
61  }
62 
63  uint32_t verifyCRC8CheckSum(unsigned char* pch_message, unsigned int dw_length)
64  {
65  unsigned char uc_expected;
66  if ((pch_message == nullptr) || (dw_length <= 2))
67  return 0;
68  uc_expected = getCRC8CheckSum(pch_message, dw_length - 1, rm_vt::kCrc8Init);
69  return (uc_expected == pch_message[dw_length - 1]);
70  }
71 
72  void appendCRC8CheckSum(unsigned char* pch_message, unsigned int dw_length)
73  {
74  unsigned char uc_crc;
75  if ((pch_message == nullptr) || (dw_length <= 2))
76  return;
77  uc_crc = getCRC8CheckSum((unsigned char*)pch_message, dw_length - 1, rm_vt::kCrc8Init);
78  pch_message[dw_length - 1] = uc_crc;
79  }
80 
81  uint16_t getCRC16CheckSum(uint8_t* pch_message, uint32_t dw_length, uint16_t w_crc)
82  {
83  uint8_t chData;
84  if (pch_message == nullptr)
85  return 0xFFFF;
86  while (dw_length--)
87  {
88  chData = *pch_message++;
89  (w_crc) = (static_cast<uint16_t>(w_crc) >> 8) ^
90  rm_vt::wCRC_table[(static_cast<uint16_t>(w_crc) ^ static_cast<uint16_t>(chData)) & 0x00ff];
91  }
92  return w_crc;
93  }
94 
95  uint32_t verifyCRC16CheckSum(uint8_t* pch_message, uint32_t dw_length)
96  {
97  uint16_t w_expected;
98  if ((pch_message == nullptr) || (dw_length <= 2))
99  return 0;
100  w_expected = getCRC16CheckSum(pch_message, dw_length - 2, rm_vt::kCrc16Init);
101  return ((w_expected & 0xff) == pch_message[dw_length - 2] &&
102  ((w_expected >> 8) & 0xff) == pch_message[dw_length - 1]);
103  }
104 
105  void appendCRC16CheckSum(uint8_t* pch_message, uint32_t dw_length)
106  {
107  uint16_t wCRC;
108  if ((pch_message == nullptr) || (dw_length <= 2))
109  return;
110  wCRC = getCRC16CheckSum(static_cast<uint8_t*>(pch_message), dw_length - 2, rm_vt::kCrc16Init);
111  pch_message[dw_length - 2] = static_cast<uint8_t>((wCRC & 0x00ff));
112  pch_message[dw_length - 1] = static_cast<uint8_t>(((wCRC >> 8) & 0x00ff));
113  }
114 };
115 } // namespace rm_vt
rm_vt::kCrc8Init
const uint8_t kCrc8Init
Definition: protocol.h:124
serial::Serial::setBaudrate
void setBaudrate(uint32_t baudrate)
rm_vt::Base::serial_
serial::Serial serial_
Definition: data.h:30
rm_vt
Definition: data.h:25
serial::Serial::setTimeout
void setTimeout(Timeout &timeout)
ros.h
serial.h
rm_vt::Base::getCRC8CheckSum
uint8_t getCRC8CheckSum(unsigned char *pch_message, unsigned int dw_length, unsigned char uc_crc_8)
Definition: data.h:52
buffer.h
rm_vt::Base::appendCRC16CheckSum
void appendCRC16CheckSum(uint8_t *pch_message, uint32_t dw_length)
Definition: data.h:105
protocol.h
rm_vt::wCRC_table
const uint16_t wCRC_table[256]
Definition: protocol.h:142
serial::IOException
timeout
timeout
serial::Timeout::simpleTimeout
static Timeout simpleTimeout(uint32_t timeout)
rm_vt::Base::verifyCRC8CheckSum
uint32_t verifyCRC8CheckSum(unsigned char *pch_message, unsigned int dw_length)
Definition: data.h:63
rm_vt::Base::initSerial
void initSerial()
Definition: data.h:33
rm_vt::Base::verifyCRC16CheckSum
uint32_t verifyCRC16CheckSum(uint8_t *pch_message, uint32_t dw_length)
Definition: data.h:95
serial::Serial::setPort
void setPort(const std::string &port)
serial::Serial
rm_vt::kCrc16Init
const uint16_t kCrc16Init
Definition: protocol.h:141
transform_listener.h
serial::Serial::open
void open()
rm_vt::Base::getCRC16CheckSum
uint16_t getCRC16CheckSum(uint8_t *pch_message, uint32_t dw_length, uint16_t w_crc)
Definition: data.h:81
serial::Serial::isOpen
bool isOpen() const
ROS_ERROR
#define ROS_ERROR(...)
tf2_geometry_msgs.h
rm_vt::kCrc8Table
const uint8_t kCrc8Table[256]
Definition: protocol.h:125
rm_vt::Base
Definition: data.h:27
rm_vt::Base::appendCRC8CheckSum
void appendCRC8CheckSum(unsigned char *pch_message, unsigned int dw_length)
Definition: data.h:72
serial::Timeout
rm_vt::Base::video_transmission_is_online_
bool video_transmission_is_online_
Definition: data.h:31


rm_vt
Author(s):
autogenerated on Tue May 6 2025 02:23:53