monitored_items.cpp
Go to the documentation of this file.
1 
11 #include "binary_serialization.h"
12 
16 
17 #include <iostream> //for debug
18 #include <opc/ua/protocol/string_utils.h> //for debug
19 
20 namespace OpcUa
21 {
22 
24 {
27 }
28 
30 {
33 }
34 
36 {
39 }
40 
41 namespace Binary
42 {
43 
45 // AttributeOperand
47 
48 template<>
50 {
51  return RawSize(params.Node) +
52  RawSize(params.Alias) +
53  RawSize(params.Path) +
54  RawSize(params.AttributeId) +
55  RawSizeContainer(params.IndexRange);
56 }
57 
58 template<>
59 void DataDeserializer::Deserialize<AttributeOperand>(AttributeOperand & params)
60 {
61  *this >> params.Node;
62  *this >> params.Alias;
63  *this >> params.Path;
64  *this >> params.AttributeId;
65  *this >> params.IndexRange;
66 }
67 
68 template<>
69 void DataSerializer::Serialize<AttributeOperand>(const AttributeOperand & params)
70 {
71  *this << params.Node;
72  *this << params.Alias;
73  *this << params.Path;
74  *this << params.AttributeId;
75  *this << params.IndexRange;
76 }
77 
79 // SimpleAttributeOperand
81 
82 template<>
84 {
85  return RawSize(params.TypeId) +
86  RawSizeContainer(params.BrowsePath) +
87  RawSize(params.Attribute) +
88  RawSizeContainer(params.IndexRange);
89 }
90 
91 template<>
92 void DataDeserializer::Deserialize<SimpleAttributeOperand>(SimpleAttributeOperand & params)
93 {
94  *this >> params.TypeId;
95  *this >> params.BrowsePath;
96  *this >> params.Attribute;
97  *this >> params.IndexRange;
98 }
99 
100 template<>
101 void DataSerializer::Serialize<SimpleAttributeOperand>(const SimpleAttributeOperand & params)
102 {
103  *this << params.TypeId;
104  *this << params.BrowsePath;
105  *this << params.Attribute;
106  *this << params.IndexRange;
107 }
108 
109 template<>
110 void DataSerializer::Serialize<std::vector<SimpleAttributeOperand>>(const std::vector<SimpleAttributeOperand> & targets)
111 {
112  SerializeContainer(*this, targets);
113 }
114 
115 template<>
116 void DataDeserializer::Deserialize<std::vector<SimpleAttributeOperand>>(std::vector<SimpleAttributeOperand> & targets)
117 {
118  DeserializeContainer(*this, targets);
119 }
120 
121 
123 // LiteralOperand
125 
126 template<>
128 {
129  return RawSize(params.Value);
130 }
131 
132 template<>
133 void DataDeserializer::Deserialize<LiteralOperand>(LiteralOperand & params)
134 {
135  *this >> params.Value;
136 }
137 
138 template<>
139 void DataSerializer::Serialize<LiteralOperand>(const LiteralOperand & params)
140 {
141  *this << params.Value;
142 }
143 
144 
145 
147 // ElementOperand
149 
150 template<>
152 {
153  return RawSize(params.Index);
154 }
155 
156 template<>
157 void DataDeserializer::Deserialize<ElementOperand>(ElementOperand & params)
158 {
159  *this >> params.Index;
160 }
161 
162 template<>
163 void DataSerializer::Serialize<ElementOperand>(const ElementOperand & params)
164 {
165  *this << params.Index;
166 }
167 
168 
170 // FilterOperand
172 
173 template<>
174 std::size_t RawSize<FilterOperand>(const OpcUa::FilterOperand & params)
175 {
176  size_t total = RawSize(params.Header);
177 
178  if (params.Header.TypeId == ExpandedObjectId::ElementOperand)
179  {
180  total += 4;
181  total += RawSize(params.Element);
182  }
183 
184  else if (params.Header.TypeId == ExpandedObjectId::LiteralOperand)
185  {
186  total += 4;
187  total += RawSize(params.Literal);
188  }
189 
190  else if (params.Header.TypeId == ExpandedObjectId::AttributeOperand)
191  {
192  total += 4;
193  total += RawSize(params.Attribute);
194  }
195 
196  else if (params.Header.TypeId == ExpandedObjectId::SimpleAttributeOperand)
197  {
198  total += 4;
199  total += RawSize(params.SimpleAttribute);
200  }
201 
202  return total;
203 }
204 
205 template<>
206 void DataDeserializer::Deserialize<FilterOperand>(FilterOperand & params)
207 {
208  *this >> params.Header;
209  uint32_t size;
210  *this >> size;
211 
212  if (params.Header.TypeId == ExpandedObjectId::ElementOperand)
213  {
214  *this >> params.Element;
215  }
216 
217  else if (params.Header.TypeId == ExpandedObjectId::LiteralOperand)
218  {
219  *this >> params.Literal;
220  }
221 
222  else if (params.Header.TypeId == ExpandedObjectId::AttributeOperand)
223  {
224  *this >> params.Attribute;
225  }
226 
227  else if (params.Header.TypeId == ExpandedObjectId::SimpleAttributeOperand)
228  {
229  *this >> params.SimpleAttribute;
230  }
231 }
232 
233 template<>
234 void DataSerializer::Serialize<FilterOperand>(const FilterOperand & params)
235 {
236  *this << params.Header;
237 
238  if (params.Header.TypeId == ExpandedObjectId::ElementOperand)
239  {
240  uint32_t size = RawSize(params.Element);
241  *this << size;
242  *this << params.Element;
243  }
244 
245  else if (params.Header.TypeId == ExpandedObjectId::LiteralOperand)
246  {
247  uint32_t size = RawSize(params.Literal);
248  *this << size;
249  *this << params.Literal;
250  }
251 
252  else if (params.Header.TypeId == ExpandedObjectId::AttributeOperand)
253  {
254  uint32_t size = RawSize(params.Attribute);
255  *this << size;
256  *this << params.Attribute;
257  }
258 
259  else if (params.Header.TypeId == ExpandedObjectId::SimpleAttributeOperand)
260  {
261  uint32_t size = RawSize(params.SimpleAttribute);
262  *this << size;
263  *this << params.SimpleAttribute;
264  }
265 }
266 
267 template<>
268 void DataSerializer::Serialize<std::vector<FilterOperand>>(const std::vector<FilterOperand> & targets)
269 {
270  SerializeContainer(*this, targets);
271 }
272 
273 template<>
274 void DataDeserializer::Deserialize<std::vector<FilterOperand>>(std::vector<FilterOperand> & targets)
275 {
276  DeserializeContainer(*this, targets);
277 }
278 
279 
280 
282 // ContentFilterElement
284 
285 template<>
287 {
288  return RawSize(params.Operator) +
289  RawSizeContainer(params.FilterOperands);
290 }
291 
292 template<>
293 void DataDeserializer::Deserialize<ContentFilterElement>(ContentFilterElement & params)
294 {
295  *this >> params.Operator;
296  //*this >> params.FilterOperands;
297  DeserializeContainer(*this, params.FilterOperands);
298 }
299 
300 template<>
301 void DataSerializer::Serialize<ContentFilterElement>(const ContentFilterElement & params)
302 {
303  *this << params.Operator;
304  //*this << params.FilterOperands;
305  SerializeContainer(*this, params.FilterOperands);
306 }
307 
308 
309 
310 
312 // AggregateFilter
314 
315 template<>
317 {
318  return RawSize(params.StartTime) +
319  RawSize(params.AggregateType) +
320  RawSize(params.ProcessingInterval) +
321  RawSize(params.UseServerCapabilitiesDefaults) +
322  RawSize(params.TreatUncertainAsBad) +
323  RawSize(params.PercentDataBad) +
324  RawSize(params.PercentDataGood) +
325  RawSize(params.SteppedSlopedExtrapolation);
326 }
327 
328 template<>
329 void DataDeserializer::Deserialize<AggregateFilter>(AggregateFilter & params)
330 {
331  *this >> params.StartTime;
332  *this >> params.AggregateType;
333  *this >> params.ProcessingInterval;
334  *this >> params.UseServerCapabilitiesDefaults;
335  *this >> params.TreatUncertainAsBad;
336  *this >> params.PercentDataBad;
337  *this >> params.PercentDataGood;
338  *this >> params.SteppedSlopedExtrapolation;
339 }
340 
341 template<>
342 void DataSerializer::Serialize<AggregateFilter>(const AggregateFilter & params)
343 {
344  *this << params.StartTime;
345  *this << params.AggregateType;
346  *this << params.ProcessingInterval;
347  *this << params.UseServerCapabilitiesDefaults;
348  *this << params.TreatUncertainAsBad;
349  *this << params.PercentDataBad;
350  *this << params.PercentDataGood;
351  *this << params.SteppedSlopedExtrapolation;
352 }
353 
354 
355 
357 // EventFilter
359 
360 template<>
361 std::size_t RawSize<EventFilter>(const OpcUa::EventFilter & params)
362 {
363  return RawSizeContainer(params.SelectClauses) +
364  RawSizeContainer(params.WhereClause);
365 }
366 
367 template<>
368 void DataDeserializer::Deserialize<EventFilter>(EventFilter & params)
369 {
370  *this >> params.SelectClauses;
371  DeserializeContainer(*this, params.WhereClause);
372 }
373 
374 template<>
375 void DataSerializer::Serialize<EventFilter>(const EventFilter & params)
376 {
377  *this << params.SelectClauses;
378  SerializeContainer(*this, params.WhereClause);
379 }
380 
381 
383 // DataChangeFilter
385 
386 template<>
388 {
389  return RawSize(params.Trigger) +
390  RawSize(params.Deadband) +
391  RawSize(params.DeadbandValue);
392 }
393 
394 template<>
395 void DataDeserializer::Deserialize<DataChangeFilter>(DataChangeFilter & params)
396 {
397  *this >> params.Trigger;
398  *this >> params.Deadband;
399  *this >> params.DeadbandValue;
400 }
401 
402 template<>
403 void DataSerializer::Serialize<DataChangeFilter>(const DataChangeFilter & params)
404 {
405  *this << params.Trigger;
406  *this << params.Deadband;
407  *this << params.DeadbandValue;
408 }
409 
410 
412 // MonitoringFilter
414 
415 template<>
417 {
418  size_t total = 0;
419  total += RawSize(data.Header);
420 
421  if (data.Header.TypeId == ExpandedObjectId::DataChangeFilter)
422  {
423  total += 4;
424  total += RawSize(data.DataChange);
425  }
426 
427  else if (data.Header.TypeId == ExpandedObjectId::EventFilter)
428  {
429  total += 4;
430  total += RawSize(data.Event);
431  }
432 
433  else if (data.Header.TypeId == ExpandedObjectId::AggregateFilter)
434  {
435  total += 4;
436  total += RawSize(data.Aggregate);
437  }
438 
439  else if (data.Header.TypeId == NodeId(0, 0))
440  {
441  //No filter is used
442  }
443  else
444  {
445  throw std::runtime_error("MonitoringFilter type not implemented");
446  }
447 
448  return total;
449 }
450 
451 
452 template<>
453 void DataDeserializer::Deserialize<MonitoringFilter>(MonitoringFilter & data)
454 {
455  *this >> data.Header;
456  int32_t size;
457 
458  if (data.Header.TypeId == ExpandedObjectId::DataChangeFilter)
459  {
460  *this >> size; //not used yet
461  *this >> data.DataChange;
462  }
463 
464  else if (data.Header.TypeId == ExpandedObjectId::EventFilter)
465  {
466  *this >> size; //not used yet
467  *this >> data.Event;
468  }
469 
470  else if (data.Header.TypeId == ExpandedObjectId::AggregateFilter)
471  {
472  *this >> size; //not used yet
473  *this >> data.Aggregate;
474  }
475 
476  else if (data.Header.TypeId == NodeId(0, 0))
477  {
478  //No filter is used
479  }
480  else
481  {
482  throw std::runtime_error("Filter data type not supported in deserialization");
483  }
484 }
485 
486 template<>
487 void DataSerializer::Serialize<MonitoringFilter>(const MonitoringFilter & data)
488 {
489  *this << data.Header;
490 
491  if (data.Header.TypeId == ExpandedObjectId::DataChangeFilter)
492  {
493  *this << (uint32_t) RawSize(data.DataChange);
494  *this << data.DataChange;
495  }
496 
497  else if (data.Header.TypeId == ExpandedObjectId::EventFilter)
498  {
499  *this << (uint32_t) RawSize(data.Event);
500  *this << data.Event;
501  }
502 
503  else if (data.Header.TypeId == ExpandedObjectId::AggregateFilter)
504  {
505  *this << (uint32_t) RawSize(data.Aggregate);
506  *this << data.Aggregate;
507  }
508 
509  else if (data.Header.TypeId == NodeId(0, 0))
510  {
511  //No filter is used
512  }
513  else
514  {
515  throw std::runtime_error("Filter data type not supported in serialization");
516  }
517 }
518 
520 // MonitoredItemCreateRequest
522 
523 template<>
524 void DataSerializer::Serialize<std::vector<MonitoredItemCreateRequest>>(const std::vector<MonitoredItemCreateRequest> & targets)
525 {
526  SerializeContainer(*this, targets);
527 }
528 
529 template<>
530 void DataDeserializer::Deserialize<std::vector<MonitoredItemCreateRequest>>(std::vector<MonitoredItemCreateRequest> & targets)
531 {
532  DeserializeContainer(*this, targets);
533 }
534 
536 // CreateMonitoredItemsRequest
538 
540 
541 template<>
542 void DataSerializer::Serialize<std::vector<MonitoredItemCreateResult>>(const std::vector<MonitoredItemCreateResult> & targets)
543 {
544  SerializeContainer(*this, targets);
545 }
546 
547 template<>
548 void DataDeserializer::Deserialize<std::vector<MonitoredItemCreateResult>>(std::vector<MonitoredItemCreateResult> & targets)
549 {
550  DeserializeContainer(*this, targets);
551 }
552 
553 
554 
555 
556 
557 }
558 }
std::size_t RawSize< AttributeOperand >(const OpcUa::AttributeOperand &params)
ExtensionObjectEncoding
Definition: types.h:276
void SerializeContainer(Stream &out, const Container &c, uint32_t emptySizeValue=~uint32_t())
std::size_t RawSize< DataChangeFilter >(const OpcUa::DataChangeFilter &params)
void DeserializeContainer(Stream &in, Container &c)
std::size_t RawSize< MonitoringFilter >(const MonitoringFilter &data)
std::size_t RawSize< AggregateFilter >(const OpcUa::AggregateFilter &params)
std::size_t RawSize< FilterOperand >(const OpcUa::FilterOperand &params)
std::size_t RawSize< EventFilter >(const OpcUa::EventFilter &params)
OPC UA Address space part. GNU LGPL.
const char * Binary(const char *input, short n)
std::size_t RawSize< LiteralOperand >(const OpcUa::LiteralOperand &params)
AggregateFilter Aggregate
Definition: types_manual.h:158
std::size_t RawSize< ContentFilterElement >(const OpcUa::ContentFilterElement &params)
std::size_t RawSize< SimpleAttributeOperand >(const OpcUa::SimpleAttributeOperand &params)
std::size_t RawSizeContainer(const T &container)
std::size_t RawSize< ElementOperand >(const OpcUa::ElementOperand &params)
std::size_t RawSize(const T &obj)


ros_opcua_impl_freeopcua
Author(s): Denis Štogl
autogenerated on Tue Jan 19 2021 03:12:06