ParseApplicationData.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) const
48 {
49  datastructure::ApplicationData application_data;
50 
51  if (!checkIfPreconditionsAreMet(data))
52  {
53  application_data.setIsEmpty(true);
54  return application_data;
55  }
56  const uint8_t* data_ptr(buffer.getBuffer().data() +
57  data.getDataHeaderPtr()->getApplicationDataBlockOffset());
58 
59  setDataInApplicationData(data_ptr, application_data);
60  return application_data;
61 }
62 
64 {
66  {
67  return false;
68  }
70  {
71  return false;
72  }
73  return true;
74 }
75 
77 {
78  if (data.getDataHeaderPtr()->getApplicationDataBlockOffset() == 0 &&
79  data.getDataHeaderPtr()->getApplicationDataBlockSize() == 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  return true;
94 }
95 
97  const uint8_t*& data_ptr, datastructure::ApplicationData& application_data) const
98 {
99  setApplicationInputsInApplicationData(data_ptr, application_data);
100  setApplicationOutputsInApplicationData(data_ptr, application_data);
101 }
102 
104  const uint8_t*& data_ptr, datastructure::ApplicationData& application_data) const
105 {
107  setDataInApplicationInputs(data_ptr, inputs);
108  application_data.setInputs(inputs);
109 }
110 
112  const uint8_t*& data_ptr, datastructure::ApplicationData& application_data) const
113 {
115  setDataInApplicationOutputs(data_ptr, outputs);
116  application_data.setOutputs(outputs);
117 }
118 
120  const uint8_t*& data_ptr, datastructure::ApplicationInputs& inputs) const
121 {
122  setUnsafeInputsInApplicationInputs(data_ptr, inputs);
125  setSleepModeInputInApplicationInputs(data_ptr, inputs);
126 }
127 
129  const uint8_t*& data_ptr, datastructure::ApplicationOutputs& outputs) const
130 {
133  setSleepModeOutputInApplicationOutputs(data_ptr, outputs);
134  setErrorFlagsInApplicationOutputs(data_ptr, outputs);
137  setOutputFlagsinApplicationOutput(data_ptr, outputs);
138 }
139 
141  const uint8_t*& data_ptr, datastructure::ApplicationInputs& inputs) const
142 {
144  setUnsafeInputsFlagsInApplicationInputs(data_ptr, inputs);
145 }
146 
148  const uint8_t*& data_ptr, datastructure::ApplicationInputs& inputs) const
149 {
150  uint32_t word32 = m_reader_ptr->readuint32_tLittleEndian(data_ptr, 0);
151  std::vector<bool> input_sources;
152  for (uint8_t i = 0; i < 32; i++)
153  {
154  input_sources.push_back(static_cast<bool>(word32 & (0x01 << i)));
155  }
156  inputs.setUnsafeInputsInputSourcesVector(input_sources);
157 }
158 
160  const uint8_t*& data_ptr, datastructure::ApplicationInputs& inputs) const
161 {
162  uint32_t word32 = m_reader_ptr->readuint32_tLittleEndian(data_ptr, 4);
163  std::vector<bool> input_flags;
164  for (uint8_t i = 0; i < 32; i++)
165  {
166  input_flags.push_back(static_cast<bool>(word32 & (0x01 << i)));
167  }
168  inputs.setUnsafeInputsFlagsVector(input_flags);
169 }
170 
172  const uint8_t*& data_ptr, datastructure::ApplicationInputs& inputs) const
173 {
176 }
177 
179  const uint8_t*& data_ptr, datastructure::ApplicationInputs& inputs) const
180 {
181  std::vector<uint16_t> monitoring_cases;
182  for (uint8_t i = 0; i < 20; i++)
183  {
184  monitoring_cases.push_back(m_reader_ptr->readuint16_tLittleEndian(data_ptr, 12 + i * 2));
185  }
186  inputs.setMonitoringCaseVector(monitoring_cases);
187 }
188 
189 
191  const uint8_t*& data_ptr, datastructure::ApplicationInputs& inputs) const
192 {
193  uint32_t word32 = m_reader_ptr->readuint32_tLittleEndian(data_ptr, 52);
194  std::vector<bool> monitoring_flags;
195  // 20 for each case one
196  for (uint8_t i = 0; i < 20; i++)
197  {
198  monitoring_flags.push_back(static_cast<bool>(word32 & (0x01 << i)));
199  }
200  inputs.setMonitoringCaseFlagsVector(monitoring_flags);
201 }
202 
204  const uint8_t*& data_ptr, datastructure::ApplicationInputs& inputs) const
205 {
206  setLinearVelocity0InApplicationInputs(data_ptr, inputs);
207  setLinearVelocity1InApplicationInputs(data_ptr, inputs);
209 }
210 
212  const uint8_t*& data_ptr, datastructure::ApplicationInputs& inputs) const
213 {
214  inputs.setVelocity0(m_reader_ptr->readuint16_tLittleEndian(data_ptr, 56));
215 }
216 
218  const uint8_t*& data_ptr, datastructure::ApplicationInputs& inputs) const
219 {
220  inputs.setVelocity1(m_reader_ptr->readuint16_tLittleEndian(data_ptr, 58));
221 }
222 
224  const uint8_t*& data_ptr, datastructure::ApplicationInputs& inputs) const
225 {
226  uint8_t word8 = m_reader_ptr->readuint8_tLittleEndian(data_ptr, 60);
227 
228  inputs.setVelocity0Valid(static_cast<bool>(word8 & (0x01 << 0)));
229  inputs.setVelocity1Valid(static_cast<bool>(word8 & (0x01 << 1)));
230  // reserved bits 2,3
231  inputs.setVelocity0TransmittedSafely(static_cast<bool>(word8 & (0x01 << 4)));
232  inputs.setVelocity1TransmittedSafely(static_cast<bool>(word8 & (0x01 << 5)));
233 }
234 
236  const uint8_t*& data_ptr, datastructure::ApplicationInputs& inputs) const
237 {
238  inputs.setSleepModeInput(m_reader_ptr->readuint8_tLittleEndian(data_ptr, 74));
239 }
240 
241 
243  const uint8_t*& data_ptr, datastructure::ApplicationOutputs& outputs) const
244 {
248 }
249 
251  const uint8_t*& data_ptr, datastructure::ApplicationOutputs& outputs) const
252 {
253  uint32_t word32 = m_reader_ptr->readuint32_tLittleEndian(data_ptr, 140);
254 
255  std::vector<bool> eval_out;
256  for (uint8_t i = 0; i < 20; i++)
257  {
258  eval_out.push_back(word32 & (0x01 << i));
259  }
260  outputs.setEvalOutVector(eval_out);
261 }
262 
264  const uint8_t*& data_ptr, datastructure::ApplicationOutputs& outputs) const
265 {
266  uint32_t word32 = m_reader_ptr->readuint32_tLittleEndian(data_ptr, 144);
267 
268  std::vector<bool> eval_out_is_safe;
269  for (uint8_t i = 0; i < 20; i++)
270  {
271  eval_out_is_safe.push_back(word32 & (0x01 << i));
272  }
273  outputs.setEvalOutIsSafeVector(eval_out_is_safe);
274 }
275 
276 
278  const uint8_t*& data_ptr, datastructure::ApplicationOutputs& outputs) const
279 {
280  uint32_t word32 = m_reader_ptr->readuint32_tLittleEndian(data_ptr, 148);
281 
282  std::vector<bool> eval_out_is_valid;
283  for (uint8_t i = 0; i < 20; i++)
284  {
285  eval_out_is_valid.push_back(word32 & (0x01 << i));
286  }
287  outputs.setEvalOutIsValidVector(eval_out_is_valid);
288 }
289 
291  const uint8_t*& data_ptr, datastructure::ApplicationOutputs& outputs) const
292 {
295 }
296 
298  const uint8_t*& data_ptr, datastructure::ApplicationOutputs& outputs) const
299 {
300  std::vector<uint16_t> output_monitoring_cases;
301 
302  for (uint8_t i = 0; i < 20; i++)
303  {
304  output_monitoring_cases.push_back(
305  m_reader_ptr->readuint16_tLittleEndian(data_ptr, 152 + i * 2));
306  }
307  outputs.setMonitoringCaseVector(output_monitoring_cases);
308 }
309 
310 
312  const uint8_t*& data_ptr, datastructure::ApplicationOutputs& outputs) const
313 {
314  uint32_t word32 = m_reader_ptr->readuint32_tLittleEndian(data_ptr, 192);
315 
316  std::vector<bool> output_monitoring_flags;
317  // 20 for each case one
318  for (uint8_t i = 0; i < 20; i++)
319  {
320  output_monitoring_flags.push_back(static_cast<bool>(word32 & (0x01 << i)));
321  }
322  outputs.setMonitoringCaseFlagsVector(output_monitoring_flags);
323 }
324 
326  const uint8_t*& data_ptr, datastructure::ApplicationOutputs& outputs) const
327 {
328  outputs.setSleepModeOutput(m_reader_ptr->readuint8_tLittleEndian(data_ptr, 193));
329 }
330 
332  const uint8_t*& data_ptr, datastructure::ApplicationOutputs& outputs) const
333 {
334  uint8_t word8 = m_reader_ptr->readuint8_tLittleEndian(data_ptr, 194);
335 
336  outputs.setHostErrorFlagContaminationWarning(static_cast<bool>(word8 & (0x01 << 0)));
337  outputs.setHostErrorFlagContaminationError(static_cast<bool>(word8 & (0x01 << 1)));
338  outputs.setHostErrorFlagManipulationError(static_cast<bool>(word8 & (0x01 << 2)));
339  outputs.setHostErrorFlagGlare(static_cast<bool>(word8 & (0x01 << 3)));
340  outputs.setHostErrorFlagReferenceContourIntruded(static_cast<bool>(word8 & (0x01 << 4)));
341  outputs.setHostErrorFlagCriticalError(static_cast<bool>(word8 & (0x01 << 5)));
342 }
343 
345  const uint8_t*& data_ptr, datastructure::ApplicationOutputs& outputs) const
346 {
347  setLinearVelocity0InApplicationOutputs(data_ptr, outputs);
348  setLinearVelocity1InApplicationOutputs(data_ptr, outputs);
350 }
351 
353  const uint8_t*& data_ptr, datastructure::ApplicationOutputs& outputs) const
354 {
355  outputs.setVelocity0(m_reader_ptr->readuint16_tLittleEndian(data_ptr, 200));
356 }
357 
359  const uint8_t*& data_ptr, datastructure::ApplicationOutputs& outputs) const
360 {
361  outputs.setVelocity1(m_reader_ptr->readuint16_tLittleEndian(data_ptr, 202));
362 }
363 
365  const uint8_t*& data_ptr, datastructure::ApplicationOutputs& outputs) const
366 {
367  uint8_t word8 = m_reader_ptr->readuint8_tLittleEndian(data_ptr, 204);
368 
369  outputs.setVelocity0Valid(static_cast<bool>(word8 & (0x01 << 0)));
370  outputs.setVelocity1Valid(static_cast<bool>(word8 & (0x01 << 1)));
371  // reserved bits 2,3
372  outputs.setVelocity0TransmittedSafely(static_cast<bool>(word8 & (0x01 << 4)));
373  outputs.setVelocity1TransmittedSafely(static_cast<bool>(word8 & (0x01 << 5)));
374  // reserved bits 6,7
375 }
376 
378  const uint8_t*& data_ptr, datastructure::ApplicationOutputs& outputs) const
379 {
380  setResultingVelocityInApplicationOutputs(data_ptr, outputs);
382 }
383 
385  const uint8_t*& data_ptr, datastructure::ApplicationOutputs& outputs) const
386 {
387  std::vector<int16_t> resulting_velocities;
388  for (uint8_t i = 0; i < 20; i++)
389  {
390  resulting_velocities.push_back(m_reader_ptr->readint16_tLittleEndian(data_ptr, 208 + i * 2));
391  }
392  outputs.setResultingVelocityVector(resulting_velocities);
393 }
394 
396  const uint8_t*& data_ptr, datastructure::ApplicationOutputs& outputs) const
397 {
398  uint32_t word32 = m_reader_ptr->readuint32_tLittleEndian(data_ptr, 248);
399 
400  std::vector<bool> resulting_velocities_flags;
401  // 20 for each case one
402  for (uint8_t i = 0; i < 20; i++)
403  {
404  resulting_velocities_flags.push_back(static_cast<bool>(word32 & (0x01 << i)));
405  }
406  outputs.setResultingVelocityIsValidVector(resulting_velocities_flags);
407 }
408 
410  const uint8_t*& data_ptr, datastructure::ApplicationOutputs& outputs) const
411 {
412  uint8_t word8 = m_reader_ptr->readuint8_tLittleEndian(data_ptr, 259);
413 
414  outputs.setFlagsSleepModeOutputIsValid(static_cast<bool>(word8 & (0x01 << 0)));
415  outputs.setFlagsHostErrorFlagsAreValid(static_cast<bool>(word8 & (0x01 << 1)));
416 }
417 
418 
419 } // namespace data_processing
420 } // namespace sick
void setVelocity1TransmittedSafely(bool velocity_1_transmitted_safely)
Sets if the second linear velocity output is transmitted safely.
void setIsEmpty(bool is_empty)
Sets if application data is empty.
void setEvaluationPathsOutputsValidFlagsInApplicationOutputs(const uint8_t *&data_ptr, datastructure::ApplicationOutputs &outputs) const
void setHostErrorFlagGlare(bool host_error_flag_glare)
Sets if glare is present.
void setEvaluationPathsOutputsEvalOutInApplicationOutputs(const uint8_t *&data_ptr, datastructure::ApplicationOutputs &outputs) const
void setSleepModeInputInApplicationInputs(const uint8_t *&data_ptr, datastructure::ApplicationInputs &inputs) const
void setLinearVelocityFlagsInApplicationInputs(const uint8_t *&data_ptr, datastructure::ApplicationInputs &inputs) const
void setMonitoringCaseInputsInApplicationInputs(const uint8_t *&data_ptr, datastructure::ApplicationInputs &inputs) const
void setResultingVelocityFlagsInApplicationOutputs(const uint8_t *&data_ptr, datastructure::ApplicationOutputs &outputs) const
void setResultingVelocityIsValidVector(const std::vector< bool > &resulting_velocity_is_valid_vector)
Sets if the resulting velocities are valid.
bool checkIfDataContainsNeededParsedBlocks(const datastructure::Data &data) const
void setLinearVelocityFlagsInApplicationOutputs(const uint8_t *&data_ptr, datastructure::ApplicationOutputs &outputs) const
A packetbuffer for the raw data from the sensor.
Definition: PacketBuffer.h:61
void setResultingVelocityVector(const std::vector< int16_t > &resulting_velocity_vector)
Sets the resulting velocity for each monitoring case table.
void setMonitoringCaseNumbersInApplicationOutputs(const uint8_t *&data_ptr, datastructure::ApplicationOutputs &outputs) const
void setVelocity0Valid(bool velocity_0_valid)
Sets if the first linear velocity output is valid.
void setOutputFlagsinApplicationOutput(const uint8_t *&data_ptr, datastructure::ApplicationOutputs &outputs) const
void setUnsafeInputsInApplicationInputs(const uint8_t *&data_ptr, datastructure::ApplicationInputs &inputs) const
The applications inputs from a udp data packet.
void setMonitoringCaseVector(const std::vector< uint16_t > &monitoring_case_vector)
Sets the currently active monitoring case numbers.
void setLinearVelocity1InApplicationOutputs(const uint8_t *&data_ptr, datastructure::ApplicationOutputs &outputs) const
void setVelocity1(const int16_t &velocity_1)
Sets the second linear velocity input.
void setVelocity0TransmittedSafely(bool velocity_0_transmitted_safely)
Sets if first linear velocity input is transmitted safely.
void setEvalutaionPathsOutputsInApplicationOutputs(const uint8_t *&data_ptr, datastructure::ApplicationOutputs &outputs) const
void setVelocity1Valid(bool velocity_1_valid)
Sets if the second linear velocity output is valid.
The data class containing all data blocks of a measurement.
Definition: Data.h:55
The application io class, bundles application input and output.
void setDataInApplicationOutputs(const uint8_t *&data_ptr, datastructure::ApplicationOutputs &outputs) const
void setSleepModeOutput(const int8_t &sleep_mode_output)
Sets the state of the sleep mode.
void setApplicationInputsInApplicationData(const uint8_t *&data_ptr, datastructure::ApplicationData &application_data) const
void setMonitoringCaseVector(const std::vector< uint16_t > &monitoring_case_vector)
Sets the monitoring case vector.
void setVelocity0(const int16_t &velocity_0)
Sets the first linear velocity output.
void setResultingVelocityOutputsInApplicationOutputs(const uint8_t *&data_ptr, datastructure::ApplicationOutputs &outputs) const
std::shared_ptr< sick::data_processing::ReadWriteHelper > m_reader_ptr
void setHostErrorFlagReferenceContourIntruded(bool host_error_flag_reference_contour_intruded)
Sets if a reference contour is intruded.
void setVelocity0TransmittedSafely(bool velocity_0_transmitted_safely)
Sets if the first linear velocity output is transmitted safely.
void setResultingVelocityInApplicationOutputs(const uint8_t *&data_ptr, datastructure::ApplicationOutputs &outputs) const
void setEvalOutIsValidVector(const std::vector< bool > &eval_out_is_valid_vector)
Sets if an output path is valid.
const VectorBuffer & getBuffer() const
Getter to return the VectorBuffer saved in the PacketBuffer.
void setInputs(const ApplicationInputs &inputs)
Sets the application input.
void setHostErrorFlagContaminationWarning(bool host_error_flag_contamination_warning)
Sets if a contamination warning is present.
void setSleepModeInput(const int8_t &sleep_mode_input)
Sets the state of the sleep mode.
void setHostErrorFlagCriticalError(bool host_error_flag_critical_error)
Sets if a critical error is present.
void setVelocity0(const int16_t &velocity_0)
Sets the first linear velocity input.
void setMonitoringCaseNumbersInApplicationInputs(const uint8_t *&data_ptr, datastructure::ApplicationInputs &inputs) const
void setEvalOutIsSafeVector(const std::vector< bool > &eval_out_is_safe_vector)
Sets if an cut-off path is safe.
void setFlagsSleepModeOutputIsValid(bool flags_sleep_mode_output_is_valid)
Sets if the sleep mode is valid.
void setMonitoringCaseFlagsVector(const std::vector< bool > &monitoring_case_flags_vector)
Set is the corresponding monitoring case number is valid.
void setEvaluationPathsOutputsIsSafeInApplicationOutputs(const uint8_t *&data_ptr, datastructure::ApplicationOutputs &outputs) const
void setHostErrorFlagContaminationError(bool host_error_flag_contamination_error)
Sets if a contamination error is present.
void setHostErrorFlagManipulationError(bool host_error_flag_manipulation_error)
Sets if a manipulation error is present.
void setUnsafeInputsFlagsVector(const std::vector< bool > &unsafe_inputs_flags_vector)
Sets the unsafe input sources flags.
datastructure::ApplicationData parseUDPSequence(const sick::datastructure::PacketBuffer &buffer, datastructure::Data &data) const
Parses the application data from the packet buffer.
void setVelocity1Valid(bool velocity_1_valid)
If second linear velocity input is valid.
bool checkIfApplicationDataIsPublished(const datastructure::Data &data) const
void setErrorFlagsInApplicationOutputs(const uint8_t *&data_ptr, datastructure::ApplicationOutputs &outputs) const
bool checkIfPreconditionsAreMet(const datastructure::Data &data) const
void setEvalOutVector(const std::vector< bool > &eval_out_vector)
Set the state of the non safe cut-off paths.
void setSleepModeOutputInApplicationOutputs(const uint8_t *&data_ptr, datastructure::ApplicationOutputs &outputs) const
The application outputs from a udp data packet.
void setDataInApplicationData(const uint8_t *&data_ptr, datastructure::ApplicationData &application_data) const
void setOutputs(const ApplicationOutputs &outputs)
Sets the application output.
void setVelocity1TransmittedSafely(bool velocity_1_transmitted_safely)
Sets if second linear velocity input is transmitted safely.
void setUnsafeInputsFlagsInApplicationInputs(const uint8_t *&data_ptr, datastructure::ApplicationInputs &inputs) const
void setUnsafeInputsSourcesInApplicationInputs(const uint8_t *&data_ptr, datastructure::ApplicationInputs &inputs) const
void setLinearVelocity0InApplicationOutputs(const uint8_t *&data_ptr, datastructure::ApplicationOutputs &outputs) const
void setMonitoringCaseFlagsVector(const std::vector< bool > &monitoring_case_flags_vector)
Sets the monitoring case flags.
void setMonitoringCaseFlagsInApplicationOutputs(const uint8_t *&data_ptr, datastructure::ApplicationOutputs &outputs) const
void setFlagsHostErrorFlagsAreValid(bool flags_host_error_flags_are_valid)
Sets if the error flags are valid.
void setMonitoringCaseOutputsInApplicationOutputs(const uint8_t *&data_ptr, datastructure::ApplicationOutputs &outputs) const
std::shared_ptr< DataHeader > getDataHeaderPtr() const
Gets the data header.
Definition: Data.cpp:42
void setUnsafeInputsInputSourcesVector(const std::vector< bool > &unsafe_inputs_input_sources_vector)
Sets the unsafe input sources.
void setLinearVelocityInputsInApplicationInputs(const uint8_t *&data_ptr, datastructure::ApplicationInputs &inputs) const
void setVelocity0Valid(bool velocity_0_valid)
Sets if first linear velocity input is valid.
void setMonitoringCaseFlagsInApplicationInputs(const uint8_t *&data_ptr, datastructure::ApplicationInputs &inputs) const
void setLinearVelocity1InApplicationInputs(const uint8_t *&data_ptr, datastructure::ApplicationInputs &inputs) const
void setVelocity1(const int16_t &velocity_1)
Sets the second linear velocity output.
void setLinearVelocity0InApplicationInputs(const uint8_t *&data_ptr, datastructure::ApplicationInputs &inputs) const
void setLinearVelocityOutoutsInApplicationOutputs(const uint8_t *&data_ptr, datastructure::ApplicationOutputs &outputs) const
void setDataInApplicationInputs(const uint8_t *&data_ptr, datastructure::ApplicationInputs &inputs) const
void setApplicationOutputsInApplicationData(const uint8_t *&data_ptr, datastructure::ApplicationData &application_data) const


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