ParseTCPPacket.cpp
Go to the documentation of this file.
1 // this is for emacs file handling -*- mode: c++; indent-tabs-mode: nil -*-
2 
3 // -- BEGIN LICENSE BLOCK ----------------------------------------------
4 
24 // -- END LICENSE BLOCK ------------------------------------------------
25 
26 //----------------------------------------------------------------------
33 //----------------------------------------------------------------------
34 
36 
38 
39 namespace sick {
40 namespace data_processing {
41 
43 {
44  m_reader_ptr = std::make_shared<sick::data_processing::ReadWriteHelper>();
45 }
46 
48 {
49  const uint8_t* data_ptr(buffer.getBuffer().data());
50  return readLength(data_ptr) + 8; // for STX and Length which is not included in length datafield
51 }
52 
54 {
55  const uint8_t* data_ptr(buffer.getBuffer().data());
56  return readRequestID(data_ptr);
57 }
58 
59 
61  sick::cola2::Command& command) const
62 {
63  setCommandValuesFromPacket(buffer, command);
64 
65  std::vector<uint8_t> byteVector;
66  readData(buffer, byteVector);
67  command.setDataVector(byteVector);
68 
69  return true;
70 }
71 
73  sick::cola2::Command& command) const
74 {
75  const uint8_t* data_ptr(buffer.getBuffer().data());
76  command.setSessionID(readSessionID(data_ptr));
77  command.setRequestID(readRequestID(data_ptr));
78  command.setCommandType(readCommandType(data_ptr));
79  command.setCommandMode(readCommandMode(data_ptr));
80 }
81 
82 uint32_t ParseTCPPacket::readSTx(const uint8_t*& data_ptr) const
83 {
84  return m_reader_ptr->readuint32_tBigEndian(data_ptr, 0);
85 }
86 
87 uint32_t ParseTCPPacket::readLength(const uint8_t*& data_ptr) const
88 {
89  return m_reader_ptr->readuint32_tBigEndian(data_ptr, 4);
90 }
91 
92 uint8_t ParseTCPPacket::readHubCntr(const uint8_t*& data_ptr) const
93 {
94  return m_reader_ptr->readuint8_tBigEndian(data_ptr, 8);
95 }
96 uint8_t ParseTCPPacket::readNoC(const uint8_t*& data_ptr) const
97 {
98  return m_reader_ptr->readuint8_tBigEndian(data_ptr, 9);
99 }
100 uint32_t ParseTCPPacket::readSessionID(const uint8_t*& data_ptr) const
101 {
102  return m_reader_ptr->readuint32_tBigEndian(data_ptr, 10);
103 }
104 
105 uint16_t ParseTCPPacket::readRequestID(const uint8_t*& data_ptr) const
106 {
107  return m_reader_ptr->readuint16_tBigEndian(data_ptr, 14);
108 }
109 
110 uint8_t ParseTCPPacket::readCommandType(const uint8_t*& data_ptr) const
111 {
112  return m_reader_ptr->readuint8_tBigEndian(data_ptr, 16);
113 }
114 uint8_t ParseTCPPacket::readCommandMode(const uint8_t*& data_ptr) const
115 {
116  return m_reader_ptr->readuint8_tBigEndian(data_ptr, 17);
117 }
118 uint16_t ParseTCPPacket::readErrorCode(const uint8_t*& data_ptr) const
119 {
120  return m_reader_ptr->readuint16_tBigEndian(data_ptr, 18);
121 }
122 
124  std::vector<uint8_t>& byteVector) const
125 {
126  if (buffer.getLength() < 20)
127  {
128  return;
129  }
130  else
131  {
132  byteVector.insert(byteVector.end(), buffer.getBuffer().begin() + 20, buffer.getBuffer().end());
133  }
134 }
135 
136 } // namespace data_processing
137 } // namespace sick
void setCommandMode(const uint8_t &command_mode)
Sets the command mode.
Definition: Command.cpp:97
void setSessionID(const uint32_t &session_id)
Sets the session ID.
Definition: Command.cpp:107
void setDataVector(const std::vector< uint8_t > &data)
Sets the data vector.
Definition: Command.cpp:142
bool parseTCPSequence(const datastructure::PacketBuffer &buffer, sick::cola2::Command &command) const
Parse the tcp sequence to get the header information of the cola2 protocol.
std::shared_ptr< sick::data_processing::ReadWriteHelper > m_reader_ptr
A packetbuffer for the raw data from the sensor.
Definition: PacketBuffer.h:61
void setRequestID(const uint16_t &request_id)
Sets the request ID of the command.
Definition: Command.cpp:117
uint32_t readLength(const uint8_t *&data_ptr) const
uint32_t readSTx(const uint8_t *&data_ptr) const
ParseTCPPacket()
Constructor of parser.
uint16_t readRequestID(const uint8_t *&data_ptr) const
void setCommandType(const uint8_t &command_type)
Sets the command type.
Definition: Command.cpp:87
Base class for commands. Defines the base interface and does the common tasks.
Definition: Command.h:61
uint32_t readSessionID(const uint8_t *&data_ptr) const
uint16_t getRequestID(const datastructure::PacketBuffer &buffer) const
Gets the request ID of the incoming tcp packet.
void readData(const datastructure::PacketBuffer &buffer, std::vector< uint8_t > &byteVector) const
const VectorBuffer & getBuffer() const
Getter to return the VectorBuffer saved in the PacketBuffer.
uint32_t getExpectedPacketLength(const datastructure::PacketBuffer &buffer)
Gets the expected packet length for a buffer.
uint16_t readErrorCode(const uint8_t *&data_ptr) const
uint8_t readHubCntr(const uint8_t *&data_ptr) const
size_t getLength() const
Returns length of the current PacketBuffer.
uint8_t readCommandMode(const uint8_t *&data_ptr) const
void setCommandValuesFromPacket(const sick::datastructure::PacketBuffer &buffer, sick::cola2::Command &command) const
uint8_t readNoC(const uint8_t *&data_ptr) const
uint8_t readCommandType(const uint8_t *&data_ptr) const


sick_safetyscanners
Author(s): Lennart Puck
autogenerated on Thu May 9 2019 02:41:08