ParseIntrusionData.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 
37 namespace sick {
38 namespace data_processing {
39 
41 {
42  m_reader_ptr = std::make_shared<sick::data_processing::ReadWriteHelper>();
43 }
44 
47  datastructure::Data& data)
48 {
49  datastructure::IntrusionData intrusion_data;
50  if (!checkIfPreconditionsAreMet(data))
51  {
52  intrusion_data.setIsEmpty(true);
53  return intrusion_data;
54  }
55 
56  const uint8_t* data_ptr(buffer.getBuffer().data() +
57  data.getDataHeaderPtr()->getIntrusionDataBlockOffset());
58  setNumScanPoints(data.getDerivedValuesPtr()->getNumberOfBeams());
59  setDataInIntrusionData(data_ptr, intrusion_data);
60  return intrusion_data;
61 }
62 
64 {
66  {
67  return false;
68  }
70  {
71  return false;
72  }
73  return true;
74 }
75 
77 {
78  if (data.getDataHeaderPtr()->getIntrusionDataBlockOffset() == 0 &&
79  data.getDataHeaderPtr()->getIntrusionDataBlockSize() == 0)
80  {
81  return false;
82  }
83  return true;
84 }
85 
87  const datastructure::Data& data) const
88 {
89  if (data.getDataHeaderPtr()->isEmpty())
90  {
91  return false;
92  }
93  if (data.getDerivedValuesPtr()->isEmpty())
94  {
95  return false;
96  }
97  return true;
98 }
99 
101 {
102  return m_num_scan_points;
103 }
104 
105 void ParseIntrusionData::setNumScanPoints(const uint16_t num_scan_points)
106 {
107  m_num_scan_points = num_scan_points;
108 }
109 
110 void ParseIntrusionData::setDataInIntrusionData(const uint8_t*& data_ptr,
111  datastructure::IntrusionData& intrusion_data) const
112 {
113  std::vector<sick::datastructure::IntrusionDatum> intrusion_datums;
114  setDataInIntrusionDatums(data_ptr, intrusion_datums);
115  intrusion_data.setIntrusionDataVector(intrusion_datums);
116 }
117 
119  const uint8_t*& data_ptr,
120  std::vector<sick::datastructure::IntrusionDatum>& intrusion_datums) const
121 {
122  uint16_t offset = 0;
123  // Repeats for 24 CutOffPaths
124  for (uint8_t i_set = 0; i_set < 24; ++i_set)
125  {
127  setSizeInIntrusionDatum(offset, data_ptr, datum);
128  offset += 4;
129  setFlagsInIntrusionDatum(offset, data_ptr, datum);
130  offset += datum.getSize();
131  intrusion_datums.push_back(datum);
132  }
133 }
134 
135 
137  const uint16_t offset, const uint8_t*& data_ptr, sick::datastructure::IntrusionDatum& datum) const
138 {
139  uint32_t numBytesToRead = m_reader_ptr->readuint32_tLittleEndian(data_ptr, offset);
140  datum.setSize(numBytesToRead);
141  return offset;
142 }
143 
145  const uint16_t offset, const uint8_t*& data_ptr, sick::datastructure::IntrusionDatum& datum) const
146 {
147  uint32_t num_read_flags = 0;
148  std::vector<bool> flags;
149  for (uint16_t num_read_bytes = 0;
150  (num_read_bytes < datum.getSize()) && (num_read_flags < m_num_scan_points);
151  num_read_bytes++)
152  {
153  uint8_t bitset = m_reader_ptr->readuint8_tLittleEndian(data_ptr, offset + num_read_bytes);
154  for (uint32_t i_bit = 0; (i_bit < 8) && (num_read_flags < m_num_scan_points);
155  i_bit++, num_read_flags++)
156  {
157  flags.push_back(static_cast<bool>(bitset & (0x01 << i_bit)));
158  }
159  }
160  datum.setFlagsVector(flags);
161  return offset;
162 }
163 
164 } // namespace data_processing
165 } // namespace sick
bool checkIfIntrusionDataIsPublished(const datastructure::Data &data) const
datastructure::IntrusionData parseUDPSequence(const datastructure::PacketBuffer &buffer, datastructure::Data &data)
Parse a udp sequence to read the intrusion data if enabled.
int32_t getSize() const
Returns size of flag vector.
A packetbuffer for the raw data from the sensor.
Definition: PacketBuffer.h:61
uint16_t setSizeInIntrusionDatum(const uint16_t offset, const uint8_t *&data_ptr, sick::datastructure::IntrusionDatum &datum) const
Class containing a single IntrusionDatum.
void setFlagsVector(const std::vector< bool > &flags_vector)
Setter for the flag vector.
std::shared_ptr< sick::data_processing::ReadWriteHelper > m_reader_ptr
uint16_t setFlagsInIntrusionDatum(const uint16_t offset, const uint8_t *&data_ptr, sick::datastructure::IntrusionDatum &datum) const
The data class containing all data blocks of a measurement.
Definition: Data.h:55
Class containing all IntrusionDatums.
Definition: IntrusionData.h:48
const VectorBuffer & getBuffer() const
Getter to return the VectorBuffer saved in the PacketBuffer.
void setNumScanPoints(const uint16_t num_scan_points)
void setIntrusionDataVector(const std::vector< IntrusionDatum > &intrusion_data_vector)
Setter for the vector of IntrusionDatums.
bool checkIfPreconditionsAreMet(const datastructure::Data &data) const
bool checkIfDataContainsNeededParsedBlocks(const datastructure::Data &data) const
void setDataInIntrusionData(const uint8_t *&data_ptr, datastructure::IntrusionData &intrusion_data) const
std::shared_ptr< DataHeader > getDataHeaderPtr() const
Gets the data header.
Definition: Data.cpp:42
void setIsEmpty(bool is_empty)
Set if intrusion data has been enabled.
void setSize(const int32_t &size)
Setter of the size for the flag vector.
ParseIntrusionData()
Constructor of the parser.
std::shared_ptr< DerivedValues > getDerivedValuesPtr() const
Gets the derived values.
Definition: Data.cpp:64
void setDataInIntrusionDatums(const uint8_t *&data_ptr, std::vector< sick::datastructure::IntrusionDatum > &intrusion_datums) const


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