Go to the documentation of this file.00001
00002
00003
00004
00024
00025
00026
00033
00034
00035 #include <sick_safetyscanners/data_processing/ParseDatagramHeader.h>
00036
00037 namespace sick {
00038 namespace data_processing {
00039
00040 ParseDatagramHeader::ParseDatagramHeader()
00041 {
00042 m_reader_ptr = std::make_shared<sick::data_processing::ReadWriteHelper>();
00043 }
00044
00045 bool ParseDatagramHeader::parseUDPSequence(const datastructure::PacketBuffer& buffer,
00046 datastructure::DatagramHeader& header) const
00047 {
00048 const uint8_t* data_ptr(buffer.getBuffer().data());
00049 setDataInHeader(data_ptr, header);
00050 return true;
00051 }
00052
00053 void ParseDatagramHeader::setDataInHeader(const uint8_t*& data_ptr,
00054 datastructure::DatagramHeader& header) const
00055 {
00056 setDatagramMarkerInHeader(data_ptr, header);
00057 setProtocolInHeader(data_ptr, header);
00058 setMajorVersionInHeader(data_ptr, header);
00059 setMinorVersionInHeader(data_ptr, header);
00060 setTotalLengthInHeader(data_ptr, header);
00061 setIdentificationInHeader(data_ptr, header);
00062 setFragmentOffsetInHeader(data_ptr, header);
00063 }
00064
00065 void ParseDatagramHeader::setDatagramMarkerInHeader(const uint8_t*& data_ptr,
00066 datastructure::DatagramHeader& header) const
00067 {
00068 header.setDatagramMarker(m_reader_ptr->readuint32_tBigEndian(data_ptr, 0));
00069 }
00070
00071 void ParseDatagramHeader::setProtocolInHeader(const uint8_t*& data_ptr,
00072 datastructure::DatagramHeader& header) const
00073 {
00074 header.setProtocol(m_reader_ptr->readuint16_tBigEndian(data_ptr, 4));
00075 }
00076
00077 void ParseDatagramHeader::setMajorVersionInHeader(const uint8_t*& data_ptr,
00078 datastructure::DatagramHeader& header) const
00079 {
00080 header.setMajorVersion(m_reader_ptr->readuint8_tLittleEndian(data_ptr, 6));
00081 }
00082
00083 void ParseDatagramHeader::setMinorVersionInHeader(const uint8_t*& data_ptr,
00084 datastructure::DatagramHeader& header) const
00085 {
00086 header.setMinorVersion(m_reader_ptr->readuint8_tLittleEndian(data_ptr, 7));
00087 }
00088
00089 void ParseDatagramHeader::setTotalLengthInHeader(const uint8_t*& data_ptr,
00090 datastructure::DatagramHeader& header) const
00091 {
00092 header.setTotalLength(m_reader_ptr->readuint32_tLittleEndian(data_ptr, 8));
00093 }
00094
00095 void ParseDatagramHeader::setIdentificationInHeader(const uint8_t*& data_ptr,
00096 datastructure::DatagramHeader& header) const
00097 {
00098 header.setIdentification(m_reader_ptr->readuint32_tLittleEndian(data_ptr, 12));
00099 }
00100
00101 void ParseDatagramHeader::setFragmentOffsetInHeader(const uint8_t*& data_ptr,
00102 datastructure::DatagramHeader& header) const
00103 {
00104 header.setFragmentOffset(m_reader_ptr->readuint32_tLittleEndian(data_ptr, 16));
00105 }
00106
00107 }
00108 }