ParseTypeCodeData.cpp
Go to the documentation of this file.
00001 // this is for emacs file handling -*- mode: c++; indent-tabs-mode: nil -*-
00002 
00003 // -- BEGIN LICENSE BLOCK ----------------------------------------------
00004 
00024 // -- END LICENSE BLOCK ------------------------------------------------
00025 
00026 //----------------------------------------------------------------------
00033 //----------------------------------------------------------------------
00034 
00035 #include <sick_safetyscanners/data_processing/ParseTypeCodeData.h>
00036 
00037 #include <sick_safetyscanners/cola2/Command.h>
00038 
00039 namespace sick {
00040 namespace data_processing {
00041 
00042 ParseTypeCodeData::ParseTypeCodeData()
00043 {
00044   m_reader_ptr = std::make_shared<sick::data_processing::ReadWriteHelper>();
00045 }
00046 
00047 
00048 bool ParseTypeCodeData::parseTCPSequence(const datastructure::PacketBuffer& buffer,
00049                                          sick::datastructure::TypeCode& type_code) const
00050 {
00051   const uint8_t* data_ptr(buffer.getBuffer().data());
00052   type_code.setInterfaceType(readInterfaceType(data_ptr));
00053   type_code.setMaxRange(readMaxRange(data_ptr));
00054   return true;
00055 }
00056 
00057 
00058 uint8_t ParseTypeCodeData::readInterfaceType(const uint8_t*& data_ptr) const
00059 {
00060   uint8_t type_code_interface_1 = m_reader_ptr->readuint8_t(data_ptr, 14);
00061   uint8_t type_code_interface_2 = m_reader_ptr->readuint8_t(data_ptr, 15);
00062 
00063   uint8_t res = sick::datastructure::e_interface_type::E_EFIPRO;
00064 
00065   if ((type_code_interface_1 == 'Z' && type_code_interface_2 == 'A') ||
00066       (type_code_interface_1 == 'A' && type_code_interface_2 == 'A'))
00067   {
00068     res = sick::datastructure::e_interface_type::E_EFIPRO;
00069   }
00070   else if (type_code_interface_1 == 'I' && type_code_interface_2 == 'Z')
00071   {
00072     res = sick::datastructure::e_interface_type::E_ETHERNET_IP;
00073   }
00074   else if ((type_code_interface_1 == 'P' && type_code_interface_2 == 'Z') ||
00075            (type_code_interface_1 == 'L' && type_code_interface_2 == 'Z'))
00076   {
00077     res = sick::datastructure::e_interface_type::E_PROFINET;
00078   }
00079   else if (type_code_interface_1 == 'A' && type_code_interface_2 == 'N')
00080   {
00081     res = sick::datastructure::e_interface_type::E_NONSAFE_ETHERNET;
00082   }
00083 
00084   return res;
00085 }
00086 
00087 float ParseTypeCodeData::readMaxRange(const uint8_t*& data_ptr) const
00088 {
00089   uint8_t type_code_interface_1 = m_reader_ptr->readuint8_t(data_ptr, 12);
00090   uint8_t type_code_interface_2 = m_reader_ptr->readuint8_t(data_ptr, 13);
00091 
00092   int res = sick::datastructure::e_ranges::E_NORMAL_RANGE;
00093 
00094   if ((type_code_interface_1 == '3' && type_code_interface_2 == '0') ||
00095       (type_code_interface_1 == '4' && type_code_interface_2 == '0') ||
00096       (type_code_interface_1 == '5' && type_code_interface_2 == '5'))
00097   {
00098     res = sick::datastructure::e_ranges::E_NORMAL_RANGE;
00099   }
00100   else if (type_code_interface_1 == '9' && type_code_interface_2 == '0')
00101   {
00102     res = sick::datastructure::e_ranges::E_LONG_RANGE;
00103   }
00104 
00105   return (float)res;
00106 }
00107 
00108 
00109 } // namespace data_processing
00110 } // namespace sick


sick_safetyscanners
Author(s): Lennart Puck
autogenerated on Tue May 7 2019 03:27:36