rm_control
Loading...
Searching...
No Matches
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>
15#include <tf2_ros/transform_listener.h>
16#include <tf2_geometry_msgs/tf2_geometry_msgs.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
24
25namespace rm_vt
26{
27class Base
28{
29public:
30 serial::Serial serial_;
32
34 {
35 serial::Timeout timeout = serial::Timeout::simpleTimeout(50);
36 serial_.setPort("/dev/usbImagetran");
37 serial_.setBaudrate(921600);
38 serial_.setTimeout(timeout);
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
Definition data.h:28
uint32_t verifyCRC8CheckSum(unsigned char *pch_message, unsigned int dw_length)
Definition data.h:63
serial::Serial serial_
Definition data.h:30
void initSerial()
Definition data.h:33
uint8_t getCRC8CheckSum(unsigned char *pch_message, unsigned int dw_length, unsigned char uc_crc_8)
Definition data.h:52
void appendCRC16CheckSum(uint8_t *pch_message, uint32_t dw_length)
Definition data.h:105
uint32_t verifyCRC16CheckSum(uint8_t *pch_message, uint32_t dw_length)
Definition data.h:95
bool video_transmission_is_online_
Definition data.h:31
void appendCRC8CheckSum(unsigned char *pch_message, unsigned int dw_length)
Definition data.h:72
uint16_t getCRC16CheckSum(uint8_t *pch_message, uint32_t dw_length, uint16_t w_crc)
Definition data.h:81
Definition data.h:26
const uint16_t wCRC_table[256]
Definition protocol.h:142
const uint16_t kCrc16Init
Definition protocol.h:141
const uint8_t kCrc8Init
Definition protocol.h:124
const uint8_t kCrc8Table[256]
Definition protocol.h:125