ParseMonitoringCaseData.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 
47 
49  const datastructure::PacketBuffer& buffer,
50  sick::datastructure::MonitoringCaseData& monitoring_case_data) const
51 {
52  const uint8_t* data_ptr(buffer.getBuffer().data());
53  bool valid = isValid(data_ptr);
54  monitoring_case_data.setIsValid(valid);
55  if (valid)
56  {
57  monitoring_case_data.setMonitoringCaseNumber(readMonitoringCaseNumber(data_ptr));
58 
59  std::vector<uint16_t> indices;
60  std::vector<bool> fields_valid;
61  for (uint8_t i = 0; i < 8; i++)
62  {
63  indices.push_back(readFieldIndex(data_ptr, i));
64  fields_valid.push_back(readFieldValid(data_ptr, i));
65  }
66  monitoring_case_data.setFieldIndices(indices);
67  monitoring_case_data.setFieldsValid(fields_valid);
68  }
69  return true;
70 }
71 
72 bool ParseMonitoringCaseData::isValid(const uint8_t*& data_ptr) const
73 {
74  bool res = false;
75  uint8_t byte = m_reader_ptr->readuint8_t(data_ptr, 0);
76  if (byte == 'R' || byte == 'Y')
77  {
78  res = true;
79  }
80  return res;
81 }
82 
83 uint16_t ParseMonitoringCaseData::readMonitoringCaseNumber(const uint8_t*& data_ptr) const
84 {
85  return m_reader_ptr->readuint16_tLittleEndian(data_ptr, 6);
86 }
87 
88 uint16_t ParseMonitoringCaseData::readFieldIndex(const uint8_t*& data_ptr,
89  const uint8_t index) const
90 {
91  return m_reader_ptr->readuint16_tLittleEndian(data_ptr, 158 + (index * 4));
92 }
93 
94 bool ParseMonitoringCaseData::readFieldValid(const uint8_t*& data_ptr, const uint8_t index) const
95 {
96  uint8_t byte = m_reader_ptr->readuint8_t(data_ptr, 157 + (index * 4));
97 
98  return byte & (0x01 << 0);
99 }
100 
101 } // namespace data_processing
102 } // namespace sick
bool parseTCPSequence(const datastructure::PacketBuffer &buffer, datastructure::MonitoringCaseData &monitoring_case_data) const
Parses a tcp sequence and return the monitoring case data.
uint16_t readMonitoringCaseNumber(const uint8_t *&data_ptr) const
A packetbuffer for the raw data from the sensor.
Definition: PacketBuffer.h:61
void setFieldsValid(const std::vector< bool > &fields_valid)
Sets if the fields are valid.
bool isValid(const uint8_t *&data_ptr) const
void setMonitoringCaseNumber(const uint16_t monitoring_case_number)
Sets the monitoring case number.
const VectorBuffer & getBuffer() const
Getter to return the VectorBuffer saved in the PacketBuffer.
uint16_t readFieldIndex(const uint8_t *&data_ptr, const uint8_t index) const
Stores the data for the different monitoring cases.
std::shared_ptr< sick::data_processing::ReadWriteHelper > m_reader_ptr
bool readFieldValid(const uint8_t *&data_ptr, const uint8_t index) const
void setIsValid(const bool is_valid)
Sets if the monitoring case data is valid.
void setFieldIndices(const std::vector< uint16_t > &field_indices)
Sets the field indices.


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