commands_3dm.cpp
Go to the documentation of this file.
1 
2 #include "commands_3dm.hpp"
3 
4 #include "../utils/serialization.h"
5 #include "../mip_interface.h"
6 
7 #include <assert.h>
8 
9 
10 namespace mip {
11 class Serializer;
12 
13 namespace C {
14 struct mip_interface;
15 } // namespace C
16 
17 namespace commands_3dm {
18 
21 using namespace ::mip::C;
22 
24 // Shared Type Definitions
26 
27 void insert(Serializer& serializer, const NmeaMessage& self)
28 {
29  insert(serializer, self.message_id);
30 
31  insert(serializer, self.talker_id);
32 
33  insert(serializer, self.source_desc_set);
34 
35  insert(serializer, self.decimation);
36 
37 }
38 void extract(Serializer& serializer, NmeaMessage& self)
39 {
40  extract(serializer, self.message_id);
41 
42  extract(serializer, self.talker_id);
43 
44  extract(serializer, self.source_desc_set);
45 
46  extract(serializer, self.decimation);
47 
48 }
49 
50 
52 // Mip Fields
54 
55 void insert(Serializer& serializer, const PollImuMessage& self)
56 {
57  insert(serializer, self.suppress_ack);
58 
59  insert(serializer, self.num_descriptors);
60 
61  for(unsigned int i=0; i < self.num_descriptors; i++)
62  insert(serializer, self.descriptors[i]);
63 
64 }
65 void extract(Serializer& serializer, PollImuMessage& self)
66 {
67  extract(serializer, self.suppress_ack);
68 
69  C::extract_count(&serializer, &self.num_descriptors, sizeof(self.descriptors)/sizeof(self.descriptors[0]));
70  for(unsigned int i=0; i < self.num_descriptors; i++)
71  extract(serializer, self.descriptors[i]);
72 
73 }
74 
75 TypedResult<PollImuMessage> pollImuMessage(C::mip_interface& device, bool suppressAck, uint8_t numDescriptors, const DescriptorRate* descriptors)
76 {
77  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
78  Serializer serializer(buffer, sizeof(buffer));
79 
80  insert(serializer, suppressAck);
81 
82  insert(serializer, numDescriptors);
83 
84  assert(descriptors || (numDescriptors == 0));
85  for(unsigned int i=0; i < numDescriptors; i++)
86  insert(serializer, descriptors[i]);
87 
88  assert(serializer.isOk());
89 
90  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_POLL_IMU_MESSAGE, buffer, (uint8_t)mip_serializer_length(&serializer));
91 }
92 void insert(Serializer& serializer, const PollGnssMessage& self)
93 {
94  insert(serializer, self.suppress_ack);
95 
96  insert(serializer, self.num_descriptors);
97 
98  for(unsigned int i=0; i < self.num_descriptors; i++)
99  insert(serializer, self.descriptors[i]);
100 
101 }
102 void extract(Serializer& serializer, PollGnssMessage& self)
103 {
104  extract(serializer, self.suppress_ack);
105 
106  C::extract_count(&serializer, &self.num_descriptors, sizeof(self.descriptors)/sizeof(self.descriptors[0]));
107  for(unsigned int i=0; i < self.num_descriptors; i++)
108  extract(serializer, self.descriptors[i]);
109 
110 }
111 
112 TypedResult<PollGnssMessage> pollGnssMessage(C::mip_interface& device, bool suppressAck, uint8_t numDescriptors, const DescriptorRate* descriptors)
113 {
114  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
115  Serializer serializer(buffer, sizeof(buffer));
116 
117  insert(serializer, suppressAck);
118 
119  insert(serializer, numDescriptors);
120 
121  assert(descriptors || (numDescriptors == 0));
122  for(unsigned int i=0; i < numDescriptors; i++)
123  insert(serializer, descriptors[i]);
124 
125  assert(serializer.isOk());
126 
127  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_POLL_GNSS_MESSAGE, buffer, (uint8_t)mip_serializer_length(&serializer));
128 }
129 void insert(Serializer& serializer, const PollFilterMessage& self)
130 {
131  insert(serializer, self.suppress_ack);
132 
133  insert(serializer, self.num_descriptors);
134 
135  for(unsigned int i=0; i < self.num_descriptors; i++)
136  insert(serializer, self.descriptors[i]);
137 
138 }
139 void extract(Serializer& serializer, PollFilterMessage& self)
140 {
141  extract(serializer, self.suppress_ack);
142 
143  C::extract_count(&serializer, &self.num_descriptors, sizeof(self.descriptors)/sizeof(self.descriptors[0]));
144  for(unsigned int i=0; i < self.num_descriptors; i++)
145  extract(serializer, self.descriptors[i]);
146 
147 }
148 
149 TypedResult<PollFilterMessage> pollFilterMessage(C::mip_interface& device, bool suppressAck, uint8_t numDescriptors, const DescriptorRate* descriptors)
150 {
151  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
152  Serializer serializer(buffer, sizeof(buffer));
153 
154  insert(serializer, suppressAck);
155 
156  insert(serializer, numDescriptors);
157 
158  assert(descriptors || (numDescriptors == 0));
159  for(unsigned int i=0; i < numDescriptors; i++)
160  insert(serializer, descriptors[i]);
161 
162  assert(serializer.isOk());
163 
164  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_POLL_FILTER_MESSAGE, buffer, (uint8_t)mip_serializer_length(&serializer));
165 }
166 void insert(Serializer& serializer, const ImuMessageFormat& self)
167 {
168  insert(serializer, self.function);
169 
170  if( self.function == FunctionSelector::WRITE )
171  {
172  insert(serializer, self.num_descriptors);
173 
174  for(unsigned int i=0; i < self.num_descriptors; i++)
175  insert(serializer, self.descriptors[i]);
176 
177  }
178 }
179 void extract(Serializer& serializer, ImuMessageFormat& self)
180 {
181  extract(serializer, self.function);
182 
183  if( self.function == FunctionSelector::WRITE )
184  {
185  C::extract_count(&serializer, &self.num_descriptors, sizeof(self.descriptors)/sizeof(self.descriptors[0]));
186  for(unsigned int i=0; i < self.num_descriptors; i++)
187  extract(serializer, self.descriptors[i]);
188 
189  }
190 }
191 
192 void insert(Serializer& serializer, const ImuMessageFormat::Response& self)
193 {
194  insert(serializer, self.num_descriptors);
195 
196  for(unsigned int i=0; i < self.num_descriptors; i++)
197  insert(serializer, self.descriptors[i]);
198 
199 }
200 void extract(Serializer& serializer, ImuMessageFormat::Response& self)
201 {
202  C::extract_count(&serializer, &self.num_descriptors, sizeof(self.descriptors)/sizeof(self.descriptors[0]));
203  for(unsigned int i=0; i < self.num_descriptors; i++)
204  extract(serializer, self.descriptors[i]);
205 
206 }
207 
208 TypedResult<ImuMessageFormat> writeImuMessageFormat(C::mip_interface& device, uint8_t numDescriptors, const DescriptorRate* descriptors)
209 {
210  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
211  Serializer serializer(buffer, sizeof(buffer));
212 
213  insert(serializer, FunctionSelector::WRITE);
214  insert(serializer, numDescriptors);
215 
216  assert(descriptors || (numDescriptors == 0));
217  for(unsigned int i=0; i < numDescriptors; i++)
218  insert(serializer, descriptors[i]);
219 
220  assert(serializer.isOk());
221 
222  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_IMU_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer));
223 }
224 TypedResult<ImuMessageFormat> readImuMessageFormat(C::mip_interface& device, uint8_t* numDescriptorsOut, uint8_t numDescriptorsOutMax, DescriptorRate* descriptorsOut)
225 {
226  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
227  Serializer serializer(buffer, sizeof(buffer));
228 
229  insert(serializer, FunctionSelector::READ);
230  assert(serializer.isOk());
231 
232  uint8_t responseLength = sizeof(buffer);
233  TypedResult<ImuMessageFormat> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_IMU_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_IMU_MESSAGE_FORMAT, buffer, &responseLength);
234 
235  if( result == MIP_ACK_OK )
236  {
237  Serializer deserializer(buffer, responseLength);
238 
239  C::extract_count(&deserializer, numDescriptorsOut, numDescriptorsOutMax);
240  assert(descriptorsOut || (numDescriptorsOut == 0));
241  for(unsigned int i=0; i < *numDescriptorsOut; i++)
242  extract(deserializer, descriptorsOut[i]);
243 
244  if( deserializer.remaining() != 0 )
245  result = MIP_STATUS_ERROR;
246  }
247  return result;
248 }
249 TypedResult<ImuMessageFormat> saveImuMessageFormat(C::mip_interface& device)
250 {
251  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
252  Serializer serializer(buffer, sizeof(buffer));
253 
254  insert(serializer, FunctionSelector::SAVE);
255  assert(serializer.isOk());
256 
257  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_IMU_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer));
258 }
259 TypedResult<ImuMessageFormat> loadImuMessageFormat(C::mip_interface& device)
260 {
261  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
262  Serializer serializer(buffer, sizeof(buffer));
263 
264  insert(serializer, FunctionSelector::LOAD);
265  assert(serializer.isOk());
266 
267  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_IMU_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer));
268 }
269 TypedResult<ImuMessageFormat> defaultImuMessageFormat(C::mip_interface& device)
270 {
271  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
272  Serializer serializer(buffer, sizeof(buffer));
273 
274  insert(serializer, FunctionSelector::RESET);
275  assert(serializer.isOk());
276 
277  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_IMU_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer));
278 }
279 void insert(Serializer& serializer, const GpsMessageFormat& self)
280 {
281  insert(serializer, self.function);
282 
283  if( self.function == FunctionSelector::WRITE )
284  {
285  insert(serializer, self.num_descriptors);
286 
287  for(unsigned int i=0; i < self.num_descriptors; i++)
288  insert(serializer, self.descriptors[i]);
289 
290  }
291 }
292 void extract(Serializer& serializer, GpsMessageFormat& self)
293 {
294  extract(serializer, self.function);
295 
296  if( self.function == FunctionSelector::WRITE )
297  {
298  C::extract_count(&serializer, &self.num_descriptors, sizeof(self.descriptors)/sizeof(self.descriptors[0]));
299  for(unsigned int i=0; i < self.num_descriptors; i++)
300  extract(serializer, self.descriptors[i]);
301 
302  }
303 }
304 
305 void insert(Serializer& serializer, const GpsMessageFormat::Response& self)
306 {
307  insert(serializer, self.num_descriptors);
308 
309  for(unsigned int i=0; i < self.num_descriptors; i++)
310  insert(serializer, self.descriptors[i]);
311 
312 }
313 void extract(Serializer& serializer, GpsMessageFormat::Response& self)
314 {
315  C::extract_count(&serializer, &self.num_descriptors, sizeof(self.descriptors)/sizeof(self.descriptors[0]));
316  for(unsigned int i=0; i < self.num_descriptors; i++)
317  extract(serializer, self.descriptors[i]);
318 
319 }
320 
321 TypedResult<GpsMessageFormat> writeGpsMessageFormat(C::mip_interface& device, uint8_t numDescriptors, const DescriptorRate* descriptors)
322 {
323  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
324  Serializer serializer(buffer, sizeof(buffer));
325 
326  insert(serializer, FunctionSelector::WRITE);
327  insert(serializer, numDescriptors);
328 
329  assert(descriptors || (numDescriptors == 0));
330  for(unsigned int i=0; i < numDescriptors; i++)
331  insert(serializer, descriptors[i]);
332 
333  assert(serializer.isOk());
334 
335  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GNSS_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer));
336 }
337 TypedResult<GpsMessageFormat> readGpsMessageFormat(C::mip_interface& device, uint8_t* numDescriptorsOut, uint8_t numDescriptorsOutMax, DescriptorRate* descriptorsOut)
338 {
339  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
340  Serializer serializer(buffer, sizeof(buffer));
341 
342  insert(serializer, FunctionSelector::READ);
343  assert(serializer.isOk());
344 
345  uint8_t responseLength = sizeof(buffer);
346  TypedResult<GpsMessageFormat> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_GNSS_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_GNSS_MESSAGE_FORMAT, buffer, &responseLength);
347 
348  if( result == MIP_ACK_OK )
349  {
350  Serializer deserializer(buffer, responseLength);
351 
352  C::extract_count(&deserializer, numDescriptorsOut, numDescriptorsOutMax);
353  assert(descriptorsOut || (numDescriptorsOut == 0));
354  for(unsigned int i=0; i < *numDescriptorsOut; i++)
355  extract(deserializer, descriptorsOut[i]);
356 
357  if( deserializer.remaining() != 0 )
358  result = MIP_STATUS_ERROR;
359  }
360  return result;
361 }
362 TypedResult<GpsMessageFormat> saveGpsMessageFormat(C::mip_interface& device)
363 {
364  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
365  Serializer serializer(buffer, sizeof(buffer));
366 
367  insert(serializer, FunctionSelector::SAVE);
368  assert(serializer.isOk());
369 
370  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GNSS_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer));
371 }
372 TypedResult<GpsMessageFormat> loadGpsMessageFormat(C::mip_interface& device)
373 {
374  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
375  Serializer serializer(buffer, sizeof(buffer));
376 
377  insert(serializer, FunctionSelector::LOAD);
378  assert(serializer.isOk());
379 
380  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GNSS_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer));
381 }
382 TypedResult<GpsMessageFormat> defaultGpsMessageFormat(C::mip_interface& device)
383 {
384  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
385  Serializer serializer(buffer, sizeof(buffer));
386 
387  insert(serializer, FunctionSelector::RESET);
388  assert(serializer.isOk());
389 
390  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GNSS_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer));
391 }
392 void insert(Serializer& serializer, const FilterMessageFormat& self)
393 {
394  insert(serializer, self.function);
395 
396  if( self.function == FunctionSelector::WRITE )
397  {
398  insert(serializer, self.num_descriptors);
399 
400  for(unsigned int i=0; i < self.num_descriptors; i++)
401  insert(serializer, self.descriptors[i]);
402 
403  }
404 }
405 void extract(Serializer& serializer, FilterMessageFormat& self)
406 {
407  extract(serializer, self.function);
408 
409  if( self.function == FunctionSelector::WRITE )
410  {
411  C::extract_count(&serializer, &self.num_descriptors, sizeof(self.descriptors)/sizeof(self.descriptors[0]));
412  for(unsigned int i=0; i < self.num_descriptors; i++)
413  extract(serializer, self.descriptors[i]);
414 
415  }
416 }
417 
418 void insert(Serializer& serializer, const FilterMessageFormat::Response& self)
419 {
420  insert(serializer, self.num_descriptors);
421 
422  for(unsigned int i=0; i < self.num_descriptors; i++)
423  insert(serializer, self.descriptors[i]);
424 
425 }
426 void extract(Serializer& serializer, FilterMessageFormat::Response& self)
427 {
428  C::extract_count(&serializer, &self.num_descriptors, sizeof(self.descriptors)/sizeof(self.descriptors[0]));
429  for(unsigned int i=0; i < self.num_descriptors; i++)
430  extract(serializer, self.descriptors[i]);
431 
432 }
433 
434 TypedResult<FilterMessageFormat> writeFilterMessageFormat(C::mip_interface& device, uint8_t numDescriptors, const DescriptorRate* descriptors)
435 {
436  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
437  Serializer serializer(buffer, sizeof(buffer));
438 
439  insert(serializer, FunctionSelector::WRITE);
440  insert(serializer, numDescriptors);
441 
442  assert(descriptors || (numDescriptors == 0));
443  for(unsigned int i=0; i < numDescriptors; i++)
444  insert(serializer, descriptors[i]);
445 
446  assert(serializer.isOk());
447 
448  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_FILTER_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer));
449 }
450 TypedResult<FilterMessageFormat> readFilterMessageFormat(C::mip_interface& device, uint8_t* numDescriptorsOut, uint8_t numDescriptorsOutMax, DescriptorRate* descriptorsOut)
451 {
452  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
453  Serializer serializer(buffer, sizeof(buffer));
454 
455  insert(serializer, FunctionSelector::READ);
456  assert(serializer.isOk());
457 
458  uint8_t responseLength = sizeof(buffer);
459  TypedResult<FilterMessageFormat> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_FILTER_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_FILTER_MESSAGE_FORMAT, buffer, &responseLength);
460 
461  if( result == MIP_ACK_OK )
462  {
463  Serializer deserializer(buffer, responseLength);
464 
465  C::extract_count(&deserializer, numDescriptorsOut, numDescriptorsOutMax);
466  assert(descriptorsOut || (numDescriptorsOut == 0));
467  for(unsigned int i=0; i < *numDescriptorsOut; i++)
468  extract(deserializer, descriptorsOut[i]);
469 
470  if( deserializer.remaining() != 0 )
471  result = MIP_STATUS_ERROR;
472  }
473  return result;
474 }
475 TypedResult<FilterMessageFormat> saveFilterMessageFormat(C::mip_interface& device)
476 {
477  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
478  Serializer serializer(buffer, sizeof(buffer));
479 
480  insert(serializer, FunctionSelector::SAVE);
481  assert(serializer.isOk());
482 
483  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_FILTER_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer));
484 }
485 TypedResult<FilterMessageFormat> loadFilterMessageFormat(C::mip_interface& device)
486 {
487  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
488  Serializer serializer(buffer, sizeof(buffer));
489 
490  insert(serializer, FunctionSelector::LOAD);
491  assert(serializer.isOk());
492 
493  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_FILTER_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer));
494 }
495 TypedResult<FilterMessageFormat> defaultFilterMessageFormat(C::mip_interface& device)
496 {
497  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
498  Serializer serializer(buffer, sizeof(buffer));
499 
500  insert(serializer, FunctionSelector::RESET);
501  assert(serializer.isOk());
502 
503  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_FILTER_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer));
504 }
505 void insert(Serializer& serializer, const ImuGetBaseRate& self)
506 {
507  (void)serializer;
508  (void)self;
509 }
510 void extract(Serializer& serializer, ImuGetBaseRate& self)
511 {
512  (void)serializer;
513  (void)self;
514 }
515 
516 void insert(Serializer& serializer, const ImuGetBaseRate::Response& self)
517 {
518  insert(serializer, self.rate);
519 
520 }
521 void extract(Serializer& serializer, ImuGetBaseRate::Response& self)
522 {
523  extract(serializer, self.rate);
524 
525 }
526 
527 TypedResult<ImuGetBaseRate> imuGetBaseRate(C::mip_interface& device, uint16_t* rateOut)
528 {
529  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
530  uint8_t responseLength = sizeof(buffer);
531 
532  TypedResult<ImuGetBaseRate> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_GET_IMU_BASE_RATE, NULL, 0, REPLY_IMU_BASE_RATE, buffer, &responseLength);
533 
534  if( result == MIP_ACK_OK )
535  {
536  Serializer deserializer(buffer, responseLength);
537 
538  assert(rateOut);
539  extract(deserializer, *rateOut);
540 
541  if( deserializer.remaining() != 0 )
542  result = MIP_STATUS_ERROR;
543  }
544  return result;
545 }
546 void insert(Serializer& serializer, const GpsGetBaseRate& self)
547 {
548  (void)serializer;
549  (void)self;
550 }
551 void extract(Serializer& serializer, GpsGetBaseRate& self)
552 {
553  (void)serializer;
554  (void)self;
555 }
556 
557 void insert(Serializer& serializer, const GpsGetBaseRate::Response& self)
558 {
559  insert(serializer, self.rate);
560 
561 }
562 void extract(Serializer& serializer, GpsGetBaseRate::Response& self)
563 {
564  extract(serializer, self.rate);
565 
566 }
567 
568 TypedResult<GpsGetBaseRate> gpsGetBaseRate(C::mip_interface& device, uint16_t* rateOut)
569 {
570  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
571  uint8_t responseLength = sizeof(buffer);
572 
573  TypedResult<GpsGetBaseRate> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_GET_GNSS_BASE_RATE, NULL, 0, REPLY_GNSS_BASE_RATE, buffer, &responseLength);
574 
575  if( result == MIP_ACK_OK )
576  {
577  Serializer deserializer(buffer, responseLength);
578 
579  assert(rateOut);
580  extract(deserializer, *rateOut);
581 
582  if( deserializer.remaining() != 0 )
583  result = MIP_STATUS_ERROR;
584  }
585  return result;
586 }
587 void insert(Serializer& serializer, const FilterGetBaseRate& self)
588 {
589  (void)serializer;
590  (void)self;
591 }
592 void extract(Serializer& serializer, FilterGetBaseRate& self)
593 {
594  (void)serializer;
595  (void)self;
596 }
597 
598 void insert(Serializer& serializer, const FilterGetBaseRate::Response& self)
599 {
600  insert(serializer, self.rate);
601 
602 }
603 void extract(Serializer& serializer, FilterGetBaseRate::Response& self)
604 {
605  extract(serializer, self.rate);
606 
607 }
608 
609 TypedResult<FilterGetBaseRate> filterGetBaseRate(C::mip_interface& device, uint16_t* rateOut)
610 {
611  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
612  uint8_t responseLength = sizeof(buffer);
613 
614  TypedResult<FilterGetBaseRate> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_GET_FILTER_BASE_RATE, NULL, 0, REPLY_FILTER_BASE_RATE, buffer, &responseLength);
615 
616  if( result == MIP_ACK_OK )
617  {
618  Serializer deserializer(buffer, responseLength);
619 
620  assert(rateOut);
621  extract(deserializer, *rateOut);
622 
623  if( deserializer.remaining() != 0 )
624  result = MIP_STATUS_ERROR;
625  }
626  return result;
627 }
628 void insert(Serializer& serializer, const PollData& self)
629 {
630  insert(serializer, self.desc_set);
631 
632  insert(serializer, self.suppress_ack);
633 
634  insert(serializer, self.num_descriptors);
635 
636  for(unsigned int i=0; i < self.num_descriptors; i++)
637  insert(serializer, self.descriptors[i]);
638 
639 }
640 void extract(Serializer& serializer, PollData& self)
641 {
642  extract(serializer, self.desc_set);
643 
644  extract(serializer, self.suppress_ack);
645 
646  C::extract_count(&serializer, &self.num_descriptors, sizeof(self.descriptors)/sizeof(self.descriptors[0]));
647  for(unsigned int i=0; i < self.num_descriptors; i++)
648  extract(serializer, self.descriptors[i]);
649 
650 }
651 
652 TypedResult<PollData> pollData(C::mip_interface& device, uint8_t descSet, bool suppressAck, uint8_t numDescriptors, const uint8_t* descriptors)
653 {
654  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
655  Serializer serializer(buffer, sizeof(buffer));
656 
657  insert(serializer, descSet);
658 
659  insert(serializer, suppressAck);
660 
661  insert(serializer, numDescriptors);
662 
663  assert(descriptors || (numDescriptors == 0));
664  for(unsigned int i=0; i < numDescriptors; i++)
665  insert(serializer, descriptors[i]);
666 
667  assert(serializer.isOk());
668 
669  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_POLL_DATA, buffer, (uint8_t)mip_serializer_length(&serializer));
670 }
671 void insert(Serializer& serializer, const GetBaseRate& self)
672 {
673  insert(serializer, self.desc_set);
674 
675 }
676 void extract(Serializer& serializer, GetBaseRate& self)
677 {
678  extract(serializer, self.desc_set);
679 
680 }
681 
682 void insert(Serializer& serializer, const GetBaseRate::Response& self)
683 {
684  insert(serializer, self.desc_set);
685 
686  insert(serializer, self.rate);
687 
688 }
689 void extract(Serializer& serializer, GetBaseRate::Response& self)
690 {
691  extract(serializer, self.desc_set);
692 
693  extract(serializer, self.rate);
694 
695 }
696 
697 TypedResult<GetBaseRate> getBaseRate(C::mip_interface& device, uint8_t descSet, uint16_t* rateOut)
698 {
699  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
700  Serializer serializer(buffer, sizeof(buffer));
701 
702  insert(serializer, descSet);
703 
704  assert(serializer.isOk());
705 
706  uint8_t responseLength = sizeof(buffer);
707  TypedResult<GetBaseRate> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_GET_BASE_RATE, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_BASE_RATE, buffer, &responseLength);
708 
709  if( result == MIP_ACK_OK )
710  {
711  Serializer deserializer(buffer, responseLength);
712 
713  extract(deserializer, descSet);
714 
715  assert(rateOut);
716  extract(deserializer, *rateOut);
717 
718  if( deserializer.remaining() != 0 )
719  result = MIP_STATUS_ERROR;
720  }
721  return result;
722 }
723 void insert(Serializer& serializer, const MessageFormat& self)
724 {
725  insert(serializer, self.function);
726 
727  insert(serializer, self.desc_set);
728 
729  if( self.function == FunctionSelector::WRITE )
730  {
731  insert(serializer, self.num_descriptors);
732 
733  for(unsigned int i=0; i < self.num_descriptors; i++)
734  insert(serializer, self.descriptors[i]);
735 
736  }
737 }
738 void extract(Serializer& serializer, MessageFormat& self)
739 {
740  extract(serializer, self.function);
741 
742  extract(serializer, self.desc_set);
743 
744  if( self.function == FunctionSelector::WRITE )
745  {
746  C::extract_count(&serializer, &self.num_descriptors, sizeof(self.descriptors)/sizeof(self.descriptors[0]));
747  for(unsigned int i=0; i < self.num_descriptors; i++)
748  extract(serializer, self.descriptors[i]);
749 
750  }
751 }
752 
753 void insert(Serializer& serializer, const MessageFormat::Response& self)
754 {
755  insert(serializer, self.desc_set);
756 
757  insert(serializer, self.num_descriptors);
758 
759  for(unsigned int i=0; i < self.num_descriptors; i++)
760  insert(serializer, self.descriptors[i]);
761 
762 }
763 void extract(Serializer& serializer, MessageFormat::Response& self)
764 {
765  extract(serializer, self.desc_set);
766 
767  C::extract_count(&serializer, &self.num_descriptors, sizeof(self.descriptors)/sizeof(self.descriptors[0]));
768  for(unsigned int i=0; i < self.num_descriptors; i++)
769  extract(serializer, self.descriptors[i]);
770 
771 }
772 
773 TypedResult<MessageFormat> writeMessageFormat(C::mip_interface& device, uint8_t descSet, uint8_t numDescriptors, const DescriptorRate* descriptors)
774 {
775  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
776  Serializer serializer(buffer, sizeof(buffer));
777 
778  insert(serializer, FunctionSelector::WRITE);
779  insert(serializer, descSet);
780 
781  insert(serializer, numDescriptors);
782 
783  assert(descriptors || (numDescriptors == 0));
784  for(unsigned int i=0; i < numDescriptors; i++)
785  insert(serializer, descriptors[i]);
786 
787  assert(serializer.isOk());
788 
789  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer));
790 }
791 TypedResult<MessageFormat> readMessageFormat(C::mip_interface& device, uint8_t descSet, uint8_t* numDescriptorsOut, uint8_t numDescriptorsOutMax, DescriptorRate* descriptorsOut)
792 {
793  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
794  Serializer serializer(buffer, sizeof(buffer));
795 
796  insert(serializer, FunctionSelector::READ);
797  insert(serializer, descSet);
798 
799  assert(serializer.isOk());
800 
801  uint8_t responseLength = sizeof(buffer);
802  TypedResult<MessageFormat> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_MESSAGE_FORMAT, buffer, &responseLength);
803 
804  if( result == MIP_ACK_OK )
805  {
806  Serializer deserializer(buffer, responseLength);
807 
808  extract(deserializer, descSet);
809 
810  C::extract_count(&deserializer, numDescriptorsOut, numDescriptorsOutMax);
811  assert(descriptorsOut || (numDescriptorsOut == 0));
812  for(unsigned int i=0; i < *numDescriptorsOut; i++)
813  extract(deserializer, descriptorsOut[i]);
814 
815  if( deserializer.remaining() != 0 )
816  result = MIP_STATUS_ERROR;
817  }
818  return result;
819 }
820 TypedResult<MessageFormat> saveMessageFormat(C::mip_interface& device, uint8_t descSet)
821 {
822  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
823  Serializer serializer(buffer, sizeof(buffer));
824 
825  insert(serializer, FunctionSelector::SAVE);
826  insert(serializer, descSet);
827 
828  assert(serializer.isOk());
829 
830  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer));
831 }
832 TypedResult<MessageFormat> loadMessageFormat(C::mip_interface& device, uint8_t descSet)
833 {
834  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
835  Serializer serializer(buffer, sizeof(buffer));
836 
837  insert(serializer, FunctionSelector::LOAD);
838  insert(serializer, descSet);
839 
840  assert(serializer.isOk());
841 
842  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer));
843 }
844 TypedResult<MessageFormat> defaultMessageFormat(C::mip_interface& device, uint8_t descSet)
845 {
846  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
847  Serializer serializer(buffer, sizeof(buffer));
848 
849  insert(serializer, FunctionSelector::RESET);
850  insert(serializer, descSet);
851 
852  assert(serializer.isOk());
853 
854  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer));
855 }
856 void insert(Serializer& serializer, const NmeaPollData& self)
857 {
858  insert(serializer, self.suppress_ack);
859 
860  insert(serializer, self.count);
861 
862  for(unsigned int i=0; i < self.count; i++)
863  insert(serializer, self.format_entries[i]);
864 
865 }
866 void extract(Serializer& serializer, NmeaPollData& self)
867 {
868  extract(serializer, self.suppress_ack);
869 
870  C::extract_count(&serializer, &self.count, sizeof(self.format_entries)/sizeof(self.format_entries[0]));
871  for(unsigned int i=0; i < self.count; i++)
872  extract(serializer, self.format_entries[i]);
873 
874 }
875 
876 TypedResult<NmeaPollData> nmeaPollData(C::mip_interface& device, bool suppressAck, uint8_t count, const NmeaMessage* formatEntries)
877 {
878  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
879  Serializer serializer(buffer, sizeof(buffer));
880 
881  insert(serializer, suppressAck);
882 
883  insert(serializer, count);
884 
885  assert(formatEntries || (count == 0));
886  for(unsigned int i=0; i < count; i++)
887  insert(serializer, formatEntries[i]);
888 
889  assert(serializer.isOk());
890 
891  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_POLL_NMEA_MESSAGE, buffer, (uint8_t)mip_serializer_length(&serializer));
892 }
893 void insert(Serializer& serializer, const NmeaMessageFormat& self)
894 {
895  insert(serializer, self.function);
896 
897  if( self.function == FunctionSelector::WRITE )
898  {
899  insert(serializer, self.count);
900 
901  for(unsigned int i=0; i < self.count; i++)
902  insert(serializer, self.format_entries[i]);
903 
904  }
905 }
906 void extract(Serializer& serializer, NmeaMessageFormat& self)
907 {
908  extract(serializer, self.function);
909 
910  if( self.function == FunctionSelector::WRITE )
911  {
912  C::extract_count(&serializer, &self.count, sizeof(self.format_entries)/sizeof(self.format_entries[0]));
913  for(unsigned int i=0; i < self.count; i++)
914  extract(serializer, self.format_entries[i]);
915 
916  }
917 }
918 
919 void insert(Serializer& serializer, const NmeaMessageFormat::Response& self)
920 {
921  insert(serializer, self.count);
922 
923  for(unsigned int i=0; i < self.count; i++)
924  insert(serializer, self.format_entries[i]);
925 
926 }
927 void extract(Serializer& serializer, NmeaMessageFormat::Response& self)
928 {
929  C::extract_count(&serializer, &self.count, sizeof(self.format_entries)/sizeof(self.format_entries[0]));
930  for(unsigned int i=0; i < self.count; i++)
931  extract(serializer, self.format_entries[i]);
932 
933 }
934 
935 TypedResult<NmeaMessageFormat> writeNmeaMessageFormat(C::mip_interface& device, uint8_t count, const NmeaMessage* formatEntries)
936 {
937  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
938  Serializer serializer(buffer, sizeof(buffer));
939 
940  insert(serializer, FunctionSelector::WRITE);
941  insert(serializer, count);
942 
943  assert(formatEntries || (count == 0));
944  for(unsigned int i=0; i < count; i++)
945  insert(serializer, formatEntries[i]);
946 
947  assert(serializer.isOk());
948 
949  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_NMEA_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer));
950 }
951 TypedResult<NmeaMessageFormat> readNmeaMessageFormat(C::mip_interface& device, uint8_t* countOut, uint8_t countOutMax, NmeaMessage* formatEntriesOut)
952 {
953  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
954  Serializer serializer(buffer, sizeof(buffer));
955 
956  insert(serializer, FunctionSelector::READ);
957  assert(serializer.isOk());
958 
959  uint8_t responseLength = sizeof(buffer);
960  TypedResult<NmeaMessageFormat> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_NMEA_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_NMEA_MESSAGE_FORMAT, buffer, &responseLength);
961 
962  if( result == MIP_ACK_OK )
963  {
964  Serializer deserializer(buffer, responseLength);
965 
966  C::extract_count(&deserializer, countOut, countOutMax);
967  assert(formatEntriesOut || (countOut == 0));
968  for(unsigned int i=0; i < *countOut; i++)
969  extract(deserializer, formatEntriesOut[i]);
970 
971  if( deserializer.remaining() != 0 )
972  result = MIP_STATUS_ERROR;
973  }
974  return result;
975 }
976 TypedResult<NmeaMessageFormat> saveNmeaMessageFormat(C::mip_interface& device)
977 {
978  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
979  Serializer serializer(buffer, sizeof(buffer));
980 
981  insert(serializer, FunctionSelector::SAVE);
982  assert(serializer.isOk());
983 
984  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_NMEA_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer));
985 }
986 TypedResult<NmeaMessageFormat> loadNmeaMessageFormat(C::mip_interface& device)
987 {
988  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
989  Serializer serializer(buffer, sizeof(buffer));
990 
991  insert(serializer, FunctionSelector::LOAD);
992  assert(serializer.isOk());
993 
994  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_NMEA_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer));
995 }
996 TypedResult<NmeaMessageFormat> defaultNmeaMessageFormat(C::mip_interface& device)
997 {
998  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
999  Serializer serializer(buffer, sizeof(buffer));
1000 
1001  insert(serializer, FunctionSelector::RESET);
1002  assert(serializer.isOk());
1003 
1004  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_NMEA_MESSAGE_FORMAT, buffer, (uint8_t)mip_serializer_length(&serializer));
1005 }
1006 void insert(Serializer& serializer, const DeviceSettings& self)
1007 {
1008  insert(serializer, self.function);
1009 
1010 }
1011 void extract(Serializer& serializer, DeviceSettings& self)
1012 {
1013  extract(serializer, self.function);
1014 
1015 }
1016 
1017 TypedResult<DeviceSettings> saveDeviceSettings(C::mip_interface& device)
1018 {
1019  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1020  Serializer serializer(buffer, sizeof(buffer));
1021 
1022  insert(serializer, FunctionSelector::SAVE);
1023  assert(serializer.isOk());
1024 
1025  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_DEVICE_STARTUP_SETTINGS, buffer, (uint8_t)mip_serializer_length(&serializer));
1026 }
1027 TypedResult<DeviceSettings> loadDeviceSettings(C::mip_interface& device)
1028 {
1029  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1030  Serializer serializer(buffer, sizeof(buffer));
1031 
1032  insert(serializer, FunctionSelector::LOAD);
1033  assert(serializer.isOk());
1034 
1035  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_DEVICE_STARTUP_SETTINGS, buffer, (uint8_t)mip_serializer_length(&serializer));
1036 }
1037 TypedResult<DeviceSettings> defaultDeviceSettings(C::mip_interface& device)
1038 {
1039  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1040  Serializer serializer(buffer, sizeof(buffer));
1041 
1042  insert(serializer, FunctionSelector::RESET);
1043  assert(serializer.isOk());
1044 
1045  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_DEVICE_STARTUP_SETTINGS, buffer, (uint8_t)mip_serializer_length(&serializer));
1046 }
1047 void insert(Serializer& serializer, const UartBaudrate& self)
1048 {
1049  insert(serializer, self.function);
1050 
1051  if( self.function == FunctionSelector::WRITE )
1052  {
1053  insert(serializer, self.baud);
1054 
1055  }
1056 }
1057 void extract(Serializer& serializer, UartBaudrate& self)
1058 {
1059  extract(serializer, self.function);
1060 
1061  if( self.function == FunctionSelector::WRITE )
1062  {
1063  extract(serializer, self.baud);
1064 
1065  }
1066 }
1067 
1068 void insert(Serializer& serializer, const UartBaudrate::Response& self)
1069 {
1070  insert(serializer, self.baud);
1071 
1072 }
1073 void extract(Serializer& serializer, UartBaudrate::Response& self)
1074 {
1075  extract(serializer, self.baud);
1076 
1077 }
1078 
1079 TypedResult<UartBaudrate> writeUartBaudrate(C::mip_interface& device, uint32_t baud)
1080 {
1081  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1082  Serializer serializer(buffer, sizeof(buffer));
1083 
1084  insert(serializer, FunctionSelector::WRITE);
1085  insert(serializer, baud);
1086 
1087  assert(serializer.isOk());
1088 
1089  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_UART_BAUDRATE, buffer, (uint8_t)mip_serializer_length(&serializer));
1090 }
1091 TypedResult<UartBaudrate> readUartBaudrate(C::mip_interface& device, uint32_t* baudOut)
1092 {
1093  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1094  Serializer serializer(buffer, sizeof(buffer));
1095 
1096  insert(serializer, FunctionSelector::READ);
1097  assert(serializer.isOk());
1098 
1099  uint8_t responseLength = sizeof(buffer);
1100  TypedResult<UartBaudrate> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_UART_BAUDRATE, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_UART_BAUDRATE, buffer, &responseLength);
1101 
1102  if( result == MIP_ACK_OK )
1103  {
1104  Serializer deserializer(buffer, responseLength);
1105 
1106  assert(baudOut);
1107  extract(deserializer, *baudOut);
1108 
1109  if( deserializer.remaining() != 0 )
1110  result = MIP_STATUS_ERROR;
1111  }
1112  return result;
1113 }
1114 TypedResult<UartBaudrate> saveUartBaudrate(C::mip_interface& device)
1115 {
1116  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1117  Serializer serializer(buffer, sizeof(buffer));
1118 
1119  insert(serializer, FunctionSelector::SAVE);
1120  assert(serializer.isOk());
1121 
1122  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_UART_BAUDRATE, buffer, (uint8_t)mip_serializer_length(&serializer));
1123 }
1124 TypedResult<UartBaudrate> loadUartBaudrate(C::mip_interface& device)
1125 {
1126  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1127  Serializer serializer(buffer, sizeof(buffer));
1128 
1129  insert(serializer, FunctionSelector::LOAD);
1130  assert(serializer.isOk());
1131 
1132  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_UART_BAUDRATE, buffer, (uint8_t)mip_serializer_length(&serializer));
1133 }
1134 TypedResult<UartBaudrate> defaultUartBaudrate(C::mip_interface& device)
1135 {
1136  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1137  Serializer serializer(buffer, sizeof(buffer));
1138 
1139  insert(serializer, FunctionSelector::RESET);
1140  assert(serializer.isOk());
1141 
1142  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_UART_BAUDRATE, buffer, (uint8_t)mip_serializer_length(&serializer));
1143 }
1144 void insert(Serializer& serializer, const FactoryStreaming& self)
1145 {
1146  insert(serializer, self.action);
1147 
1148  insert(serializer, self.reserved);
1149 
1150 }
1151 void extract(Serializer& serializer, FactoryStreaming& self)
1152 {
1153  extract(serializer, self.action);
1154 
1155  extract(serializer, self.reserved);
1156 
1157 }
1158 
1159 TypedResult<FactoryStreaming> factoryStreaming(C::mip_interface& device, FactoryStreaming::Action action, uint8_t reserved)
1160 {
1161  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1162  Serializer serializer(buffer, sizeof(buffer));
1163 
1164  insert(serializer, action);
1165 
1166  insert(serializer, reserved);
1167 
1168  assert(serializer.isOk());
1169 
1170  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_CONFIGURE_FACTORY_STREAMING, buffer, (uint8_t)mip_serializer_length(&serializer));
1171 }
1172 void insert(Serializer& serializer, const DatastreamControl& self)
1173 {
1174  insert(serializer, self.function);
1175 
1176  insert(serializer, self.desc_set);
1177 
1178  if( self.function == FunctionSelector::WRITE )
1179  {
1180  insert(serializer, self.enable);
1181 
1182  }
1183 }
1184 void extract(Serializer& serializer, DatastreamControl& self)
1185 {
1186  extract(serializer, self.function);
1187 
1188  extract(serializer, self.desc_set);
1189 
1190  if( self.function == FunctionSelector::WRITE )
1191  {
1192  extract(serializer, self.enable);
1193 
1194  }
1195 }
1196 
1197 void insert(Serializer& serializer, const DatastreamControl::Response& self)
1198 {
1199  insert(serializer, self.desc_set);
1200 
1201  insert(serializer, self.enabled);
1202 
1203 }
1204 void extract(Serializer& serializer, DatastreamControl::Response& self)
1205 {
1206  extract(serializer, self.desc_set);
1207 
1208  extract(serializer, self.enabled);
1209 
1210 }
1211 
1212 TypedResult<DatastreamControl> writeDatastreamControl(C::mip_interface& device, uint8_t descSet, bool enable)
1213 {
1214  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1215  Serializer serializer(buffer, sizeof(buffer));
1216 
1217  insert(serializer, FunctionSelector::WRITE);
1218  insert(serializer, descSet);
1219 
1220  insert(serializer, enable);
1221 
1222  assert(serializer.isOk());
1223 
1224  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_CONTROL_DATA_STREAM, buffer, (uint8_t)mip_serializer_length(&serializer));
1225 }
1226 TypedResult<DatastreamControl> readDatastreamControl(C::mip_interface& device, uint8_t descSet, bool* enabledOut)
1227 {
1228  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1229  Serializer serializer(buffer, sizeof(buffer));
1230 
1231  insert(serializer, FunctionSelector::READ);
1232  insert(serializer, descSet);
1233 
1234  assert(serializer.isOk());
1235 
1236  uint8_t responseLength = sizeof(buffer);
1237  TypedResult<DatastreamControl> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_CONTROL_DATA_STREAM, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_DATASTREAM_ENABLE, buffer, &responseLength);
1238 
1239  if( result == MIP_ACK_OK )
1240  {
1241  Serializer deserializer(buffer, responseLength);
1242 
1243  extract(deserializer, descSet);
1244 
1245  assert(enabledOut);
1246  extract(deserializer, *enabledOut);
1247 
1248  if( deserializer.remaining() != 0 )
1249  result = MIP_STATUS_ERROR;
1250  }
1251  return result;
1252 }
1253 TypedResult<DatastreamControl> saveDatastreamControl(C::mip_interface& device, uint8_t descSet)
1254 {
1255  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1256  Serializer serializer(buffer, sizeof(buffer));
1257 
1258  insert(serializer, FunctionSelector::SAVE);
1259  insert(serializer, descSet);
1260 
1261  assert(serializer.isOk());
1262 
1263  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_CONTROL_DATA_STREAM, buffer, (uint8_t)mip_serializer_length(&serializer));
1264 }
1265 TypedResult<DatastreamControl> loadDatastreamControl(C::mip_interface& device, uint8_t descSet)
1266 {
1267  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1268  Serializer serializer(buffer, sizeof(buffer));
1269 
1270  insert(serializer, FunctionSelector::LOAD);
1271  insert(serializer, descSet);
1272 
1273  assert(serializer.isOk());
1274 
1275  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_CONTROL_DATA_STREAM, buffer, (uint8_t)mip_serializer_length(&serializer));
1276 }
1277 TypedResult<DatastreamControl> defaultDatastreamControl(C::mip_interface& device, uint8_t descSet)
1278 {
1279  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1280  Serializer serializer(buffer, sizeof(buffer));
1281 
1282  insert(serializer, FunctionSelector::RESET);
1283  insert(serializer, descSet);
1284 
1285  assert(serializer.isOk());
1286 
1287  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_CONTROL_DATA_STREAM, buffer, (uint8_t)mip_serializer_length(&serializer));
1288 }
1289 void insert(Serializer& serializer, const ConstellationSettings& self)
1290 {
1291  insert(serializer, self.function);
1292 
1293  if( self.function == FunctionSelector::WRITE )
1294  {
1295  insert(serializer, self.max_channels);
1296 
1297  insert(serializer, self.config_count);
1298 
1299  for(unsigned int i=0; i < self.config_count; i++)
1300  insert(serializer, self.settings[i]);
1301 
1302  }
1303 }
1304 void extract(Serializer& serializer, ConstellationSettings& self)
1305 {
1306  extract(serializer, self.function);
1307 
1308  if( self.function == FunctionSelector::WRITE )
1309  {
1310  extract(serializer, self.max_channels);
1311 
1312  C::extract_count(&serializer, &self.config_count, sizeof(self.settings)/sizeof(self.settings[0]));
1313  for(unsigned int i=0; i < self.config_count; i++)
1314  extract(serializer, self.settings[i]);
1315 
1316  }
1317 }
1318 
1319 void insert(Serializer& serializer, const ConstellationSettings::Response& self)
1320 {
1321  insert(serializer, self.max_channels_available);
1322 
1323  insert(serializer, self.max_channels_use);
1324 
1325  insert(serializer, self.config_count);
1326 
1327  for(unsigned int i=0; i < self.config_count; i++)
1328  insert(serializer, self.settings[i]);
1329 
1330 }
1331 void extract(Serializer& serializer, ConstellationSettings::Response& self)
1332 {
1333  extract(serializer, self.max_channels_available);
1334 
1335  extract(serializer, self.max_channels_use);
1336 
1337  C::extract_count(&serializer, &self.config_count, sizeof(self.settings)/sizeof(self.settings[0]));
1338  for(unsigned int i=0; i < self.config_count; i++)
1339  extract(serializer, self.settings[i]);
1340 
1341 }
1342 
1343 void insert(Serializer& serializer, const ConstellationSettings::Settings& self)
1344 {
1345  insert(serializer, self.constellation_id);
1346 
1347  insert(serializer, self.enable);
1348 
1349  insert(serializer, self.reserved_channels);
1350 
1351  insert(serializer, self.max_channels);
1352 
1353  insert(serializer, self.option_flags);
1354 
1355 }
1356 void extract(Serializer& serializer, ConstellationSettings::Settings& self)
1357 {
1358  extract(serializer, self.constellation_id);
1359 
1360  extract(serializer, self.enable);
1361 
1362  extract(serializer, self.reserved_channels);
1363 
1364  extract(serializer, self.max_channels);
1365 
1366  extract(serializer, self.option_flags);
1367 
1368 }
1369 
1370 TypedResult<ConstellationSettings> writeConstellationSettings(C::mip_interface& device, uint16_t maxChannels, uint8_t configCount, const ConstellationSettings::Settings* settings)
1371 {
1372  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1373  Serializer serializer(buffer, sizeof(buffer));
1374 
1375  insert(serializer, FunctionSelector::WRITE);
1376  insert(serializer, maxChannels);
1377 
1378  insert(serializer, configCount);
1379 
1380  assert(settings || (configCount == 0));
1381  for(unsigned int i=0; i < configCount; i++)
1382  insert(serializer, settings[i]);
1383 
1384  assert(serializer.isOk());
1385 
1386  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GNSS_CONSTELLATION_SETTINGS, buffer, (uint8_t)mip_serializer_length(&serializer));
1387 }
1388 TypedResult<ConstellationSettings> readConstellationSettings(C::mip_interface& device, uint16_t* maxChannelsAvailableOut, uint16_t* maxChannelsUseOut, uint8_t* configCountOut, uint8_t configCountOutMax, ConstellationSettings::Settings* settingsOut)
1389 {
1390  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1391  Serializer serializer(buffer, sizeof(buffer));
1392 
1393  insert(serializer, FunctionSelector::READ);
1394  assert(serializer.isOk());
1395 
1396  uint8_t responseLength = sizeof(buffer);
1397  TypedResult<ConstellationSettings> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_GNSS_CONSTELLATION_SETTINGS, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_GNSS_CONSTELLATION_SETTINGS, buffer, &responseLength);
1398 
1399  if( result == MIP_ACK_OK )
1400  {
1401  Serializer deserializer(buffer, responseLength);
1402 
1403  assert(maxChannelsAvailableOut);
1404  extract(deserializer, *maxChannelsAvailableOut);
1405 
1406  assert(maxChannelsUseOut);
1407  extract(deserializer, *maxChannelsUseOut);
1408 
1409  C::extract_count(&deserializer, configCountOut, configCountOutMax);
1410  assert(settingsOut || (configCountOut == 0));
1411  for(unsigned int i=0; i < *configCountOut; i++)
1412  extract(deserializer, settingsOut[i]);
1413 
1414  if( deserializer.remaining() != 0 )
1415  result = MIP_STATUS_ERROR;
1416  }
1417  return result;
1418 }
1419 TypedResult<ConstellationSettings> saveConstellationSettings(C::mip_interface& device)
1420 {
1421  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1422  Serializer serializer(buffer, sizeof(buffer));
1423 
1424  insert(serializer, FunctionSelector::SAVE);
1425  assert(serializer.isOk());
1426 
1427  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GNSS_CONSTELLATION_SETTINGS, buffer, (uint8_t)mip_serializer_length(&serializer));
1428 }
1429 TypedResult<ConstellationSettings> loadConstellationSettings(C::mip_interface& device)
1430 {
1431  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1432  Serializer serializer(buffer, sizeof(buffer));
1433 
1434  insert(serializer, FunctionSelector::LOAD);
1435  assert(serializer.isOk());
1436 
1437  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GNSS_CONSTELLATION_SETTINGS, buffer, (uint8_t)mip_serializer_length(&serializer));
1438 }
1439 TypedResult<ConstellationSettings> defaultConstellationSettings(C::mip_interface& device)
1440 {
1441  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1442  Serializer serializer(buffer, sizeof(buffer));
1443 
1444  insert(serializer, FunctionSelector::RESET);
1445  assert(serializer.isOk());
1446 
1447  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GNSS_CONSTELLATION_SETTINGS, buffer, (uint8_t)mip_serializer_length(&serializer));
1448 }
1449 void insert(Serializer& serializer, const GnssSbasSettings& self)
1450 {
1451  insert(serializer, self.function);
1452 
1453  if( self.function == FunctionSelector::WRITE )
1454  {
1455  insert(serializer, self.enable_sbas);
1456 
1457  insert(serializer, self.sbas_options);
1458 
1459  insert(serializer, self.num_included_prns);
1460 
1461  for(unsigned int i=0; i < self.num_included_prns; i++)
1462  insert(serializer, self.included_prns[i]);
1463 
1464  }
1465 }
1466 void extract(Serializer& serializer, GnssSbasSettings& self)
1467 {
1468  extract(serializer, self.function);
1469 
1470  if( self.function == FunctionSelector::WRITE )
1471  {
1472  extract(serializer, self.enable_sbas);
1473 
1474  extract(serializer, self.sbas_options);
1475 
1476  C::extract_count(&serializer, &self.num_included_prns, sizeof(self.included_prns)/sizeof(self.included_prns[0]));
1477  for(unsigned int i=0; i < self.num_included_prns; i++)
1478  extract(serializer, self.included_prns[i]);
1479 
1480  }
1481 }
1482 
1483 void insert(Serializer& serializer, const GnssSbasSettings::Response& self)
1484 {
1485  insert(serializer, self.enable_sbas);
1486 
1487  insert(serializer, self.sbas_options);
1488 
1489  insert(serializer, self.num_included_prns);
1490 
1491  for(unsigned int i=0; i < self.num_included_prns; i++)
1492  insert(serializer, self.included_prns[i]);
1493 
1494 }
1495 void extract(Serializer& serializer, GnssSbasSettings::Response& self)
1496 {
1497  extract(serializer, self.enable_sbas);
1498 
1499  extract(serializer, self.sbas_options);
1500 
1501  C::extract_count(&serializer, &self.num_included_prns, sizeof(self.included_prns)/sizeof(self.included_prns[0]));
1502  for(unsigned int i=0; i < self.num_included_prns; i++)
1503  extract(serializer, self.included_prns[i]);
1504 
1505 }
1506 
1507 TypedResult<GnssSbasSettings> writeGnssSbasSettings(C::mip_interface& device, uint8_t enableSbas, GnssSbasSettings::SBASOptions sbasOptions, uint8_t numIncludedPrns, const uint16_t* includedPrns)
1508 {
1509  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1510  Serializer serializer(buffer, sizeof(buffer));
1511 
1512  insert(serializer, FunctionSelector::WRITE);
1513  insert(serializer, enableSbas);
1514 
1515  insert(serializer, sbasOptions);
1516 
1517  insert(serializer, numIncludedPrns);
1518 
1519  assert(includedPrns || (numIncludedPrns == 0));
1520  for(unsigned int i=0; i < numIncludedPrns; i++)
1521  insert(serializer, includedPrns[i]);
1522 
1523  assert(serializer.isOk());
1524 
1525  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GNSS_SBAS_SETTINGS, buffer, (uint8_t)mip_serializer_length(&serializer));
1526 }
1527 TypedResult<GnssSbasSettings> readGnssSbasSettings(C::mip_interface& device, uint8_t* enableSbasOut, GnssSbasSettings::SBASOptions* sbasOptionsOut, uint8_t* numIncludedPrnsOut, uint8_t numIncludedPrnsOutMax, uint16_t* includedPrnsOut)
1528 {
1529  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1530  Serializer serializer(buffer, sizeof(buffer));
1531 
1532  insert(serializer, FunctionSelector::READ);
1533  assert(serializer.isOk());
1534 
1535  uint8_t responseLength = sizeof(buffer);
1536  TypedResult<GnssSbasSettings> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_GNSS_SBAS_SETTINGS, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_GNSS_SBAS_SETTINGS, buffer, &responseLength);
1537 
1538  if( result == MIP_ACK_OK )
1539  {
1540  Serializer deserializer(buffer, responseLength);
1541 
1542  assert(enableSbasOut);
1543  extract(deserializer, *enableSbasOut);
1544 
1545  assert(sbasOptionsOut);
1546  extract(deserializer, *sbasOptionsOut);
1547 
1548  C::extract_count(&deserializer, numIncludedPrnsOut, numIncludedPrnsOutMax);
1549  assert(includedPrnsOut || (numIncludedPrnsOut == 0));
1550  for(unsigned int i=0; i < *numIncludedPrnsOut; i++)
1551  extract(deserializer, includedPrnsOut[i]);
1552 
1553  if( deserializer.remaining() != 0 )
1554  result = MIP_STATUS_ERROR;
1555  }
1556  return result;
1557 }
1558 TypedResult<GnssSbasSettings> saveGnssSbasSettings(C::mip_interface& device)
1559 {
1560  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1561  Serializer serializer(buffer, sizeof(buffer));
1562 
1563  insert(serializer, FunctionSelector::SAVE);
1564  assert(serializer.isOk());
1565 
1566  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GNSS_SBAS_SETTINGS, buffer, (uint8_t)mip_serializer_length(&serializer));
1567 }
1568 TypedResult<GnssSbasSettings> loadGnssSbasSettings(C::mip_interface& device)
1569 {
1570  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1571  Serializer serializer(buffer, sizeof(buffer));
1572 
1573  insert(serializer, FunctionSelector::LOAD);
1574  assert(serializer.isOk());
1575 
1576  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GNSS_SBAS_SETTINGS, buffer, (uint8_t)mip_serializer_length(&serializer));
1577 }
1578 TypedResult<GnssSbasSettings> defaultGnssSbasSettings(C::mip_interface& device)
1579 {
1580  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1581  Serializer serializer(buffer, sizeof(buffer));
1582 
1583  insert(serializer, FunctionSelector::RESET);
1584  assert(serializer.isOk());
1585 
1586  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GNSS_SBAS_SETTINGS, buffer, (uint8_t)mip_serializer_length(&serializer));
1587 }
1588 void insert(Serializer& serializer, const GnssAssistedFix& self)
1589 {
1590  insert(serializer, self.function);
1591 
1592  if( self.function == FunctionSelector::WRITE )
1593  {
1594  insert(serializer, self.option);
1595 
1596  insert(serializer, self.flags);
1597 
1598  }
1599 }
1600 void extract(Serializer& serializer, GnssAssistedFix& self)
1601 {
1602  extract(serializer, self.function);
1603 
1604  if( self.function == FunctionSelector::WRITE )
1605  {
1606  extract(serializer, self.option);
1607 
1608  extract(serializer, self.flags);
1609 
1610  }
1611 }
1612 
1613 void insert(Serializer& serializer, const GnssAssistedFix::Response& self)
1614 {
1615  insert(serializer, self.option);
1616 
1617  insert(serializer, self.flags);
1618 
1619 }
1620 void extract(Serializer& serializer, GnssAssistedFix::Response& self)
1621 {
1622  extract(serializer, self.option);
1623 
1624  extract(serializer, self.flags);
1625 
1626 }
1627 
1628 TypedResult<GnssAssistedFix> writeGnssAssistedFix(C::mip_interface& device, GnssAssistedFix::AssistedFixOption option, uint8_t flags)
1629 {
1630  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1631  Serializer serializer(buffer, sizeof(buffer));
1632 
1633  insert(serializer, FunctionSelector::WRITE);
1634  insert(serializer, option);
1635 
1636  insert(serializer, flags);
1637 
1638  assert(serializer.isOk());
1639 
1640  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GNSS_ASSISTED_FIX_SETTINGS, buffer, (uint8_t)mip_serializer_length(&serializer));
1641 }
1642 TypedResult<GnssAssistedFix> readGnssAssistedFix(C::mip_interface& device, GnssAssistedFix::AssistedFixOption* optionOut, uint8_t* flagsOut)
1643 {
1644  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1645  Serializer serializer(buffer, sizeof(buffer));
1646 
1647  insert(serializer, FunctionSelector::READ);
1648  assert(serializer.isOk());
1649 
1650  uint8_t responseLength = sizeof(buffer);
1651  TypedResult<GnssAssistedFix> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_GNSS_ASSISTED_FIX_SETTINGS, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_GNSS_ASSISTED_FIX_SETTINGS, buffer, &responseLength);
1652 
1653  if( result == MIP_ACK_OK )
1654  {
1655  Serializer deserializer(buffer, responseLength);
1656 
1657  assert(optionOut);
1658  extract(deserializer, *optionOut);
1659 
1660  assert(flagsOut);
1661  extract(deserializer, *flagsOut);
1662 
1663  if( deserializer.remaining() != 0 )
1664  result = MIP_STATUS_ERROR;
1665  }
1666  return result;
1667 }
1668 TypedResult<GnssAssistedFix> saveGnssAssistedFix(C::mip_interface& device)
1669 {
1670  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1671  Serializer serializer(buffer, sizeof(buffer));
1672 
1673  insert(serializer, FunctionSelector::SAVE);
1674  assert(serializer.isOk());
1675 
1676  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GNSS_ASSISTED_FIX_SETTINGS, buffer, (uint8_t)mip_serializer_length(&serializer));
1677 }
1678 TypedResult<GnssAssistedFix> loadGnssAssistedFix(C::mip_interface& device)
1679 {
1680  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1681  Serializer serializer(buffer, sizeof(buffer));
1682 
1683  insert(serializer, FunctionSelector::LOAD);
1684  assert(serializer.isOk());
1685 
1686  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GNSS_ASSISTED_FIX_SETTINGS, buffer, (uint8_t)mip_serializer_length(&serializer));
1687 }
1688 TypedResult<GnssAssistedFix> defaultGnssAssistedFix(C::mip_interface& device)
1689 {
1690  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1691  Serializer serializer(buffer, sizeof(buffer));
1692 
1693  insert(serializer, FunctionSelector::RESET);
1694  assert(serializer.isOk());
1695 
1696  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GNSS_ASSISTED_FIX_SETTINGS, buffer, (uint8_t)mip_serializer_length(&serializer));
1697 }
1698 void insert(Serializer& serializer, const GnssTimeAssistance& self)
1699 {
1700  insert(serializer, self.function);
1701 
1702  if( self.function == FunctionSelector::WRITE )
1703  {
1704  insert(serializer, self.tow);
1705 
1706  insert(serializer, self.week_number);
1707 
1708  insert(serializer, self.accuracy);
1709 
1710  }
1711 }
1712 void extract(Serializer& serializer, GnssTimeAssistance& self)
1713 {
1714  extract(serializer, self.function);
1715 
1716  if( self.function == FunctionSelector::WRITE )
1717  {
1718  extract(serializer, self.tow);
1719 
1720  extract(serializer, self.week_number);
1721 
1722  extract(serializer, self.accuracy);
1723 
1724  }
1725 }
1726 
1727 void insert(Serializer& serializer, const GnssTimeAssistance::Response& self)
1728 {
1729  insert(serializer, self.tow);
1730 
1731  insert(serializer, self.week_number);
1732 
1733  insert(serializer, self.accuracy);
1734 
1735 }
1736 void extract(Serializer& serializer, GnssTimeAssistance::Response& self)
1737 {
1738  extract(serializer, self.tow);
1739 
1740  extract(serializer, self.week_number);
1741 
1742  extract(serializer, self.accuracy);
1743 
1744 }
1745 
1746 TypedResult<GnssTimeAssistance> writeGnssTimeAssistance(C::mip_interface& device, double tow, uint16_t weekNumber, float accuracy)
1747 {
1748  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1749  Serializer serializer(buffer, sizeof(buffer));
1750 
1751  insert(serializer, FunctionSelector::WRITE);
1752  insert(serializer, tow);
1753 
1754  insert(serializer, weekNumber);
1755 
1756  insert(serializer, accuracy);
1757 
1758  assert(serializer.isOk());
1759 
1760  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GNSS_TIME_ASSISTANCE, buffer, (uint8_t)mip_serializer_length(&serializer));
1761 }
1762 TypedResult<GnssTimeAssistance> readGnssTimeAssistance(C::mip_interface& device, double* towOut, uint16_t* weekNumberOut, float* accuracyOut)
1763 {
1764  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1765  Serializer serializer(buffer, sizeof(buffer));
1766 
1767  insert(serializer, FunctionSelector::READ);
1768  assert(serializer.isOk());
1769 
1770  uint8_t responseLength = sizeof(buffer);
1771  TypedResult<GnssTimeAssistance> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_GNSS_TIME_ASSISTANCE, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_GNSS_TIME_ASSISTANCE, buffer, &responseLength);
1772 
1773  if( result == MIP_ACK_OK )
1774  {
1775  Serializer deserializer(buffer, responseLength);
1776 
1777  assert(towOut);
1778  extract(deserializer, *towOut);
1779 
1780  assert(weekNumberOut);
1781  extract(deserializer, *weekNumberOut);
1782 
1783  assert(accuracyOut);
1784  extract(deserializer, *accuracyOut);
1785 
1786  if( deserializer.remaining() != 0 )
1787  result = MIP_STATUS_ERROR;
1788  }
1789  return result;
1790 }
1791 void insert(Serializer& serializer, const ImuLowpassFilter& self)
1792 {
1793  insert(serializer, self.function);
1794 
1795  insert(serializer, self.target_descriptor);
1796 
1797  if( self.function == FunctionSelector::WRITE )
1798  {
1799  insert(serializer, self.enable);
1800 
1801  insert(serializer, self.manual);
1802 
1803  insert(serializer, self.frequency);
1804 
1805  insert(serializer, self.reserved);
1806 
1807  }
1808 }
1809 void extract(Serializer& serializer, ImuLowpassFilter& self)
1810 {
1811  extract(serializer, self.function);
1812 
1813  extract(serializer, self.target_descriptor);
1814 
1815  if( self.function == FunctionSelector::WRITE )
1816  {
1817  extract(serializer, self.enable);
1818 
1819  extract(serializer, self.manual);
1820 
1821  extract(serializer, self.frequency);
1822 
1823  extract(serializer, self.reserved);
1824 
1825  }
1826 }
1827 
1828 void insert(Serializer& serializer, const ImuLowpassFilter::Response& self)
1829 {
1830  insert(serializer, self.target_descriptor);
1831 
1832  insert(serializer, self.enable);
1833 
1834  insert(serializer, self.manual);
1835 
1836  insert(serializer, self.frequency);
1837 
1838  insert(serializer, self.reserved);
1839 
1840 }
1841 void extract(Serializer& serializer, ImuLowpassFilter::Response& self)
1842 {
1843  extract(serializer, self.target_descriptor);
1844 
1845  extract(serializer, self.enable);
1846 
1847  extract(serializer, self.manual);
1848 
1849  extract(serializer, self.frequency);
1850 
1851  extract(serializer, self.reserved);
1852 
1853 }
1854 
1855 TypedResult<ImuLowpassFilter> writeImuLowpassFilter(C::mip_interface& device, uint8_t targetDescriptor, bool enable, bool manual, uint16_t frequency, uint8_t reserved)
1856 {
1857  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1858  Serializer serializer(buffer, sizeof(buffer));
1859 
1860  insert(serializer, FunctionSelector::WRITE);
1861  insert(serializer, targetDescriptor);
1862 
1863  insert(serializer, enable);
1864 
1865  insert(serializer, manual);
1866 
1867  insert(serializer, frequency);
1868 
1869  insert(serializer, reserved);
1870 
1871  assert(serializer.isOk());
1872 
1873  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_IMU_LOWPASS_FILTER, buffer, (uint8_t)mip_serializer_length(&serializer));
1874 }
1875 TypedResult<ImuLowpassFilter> readImuLowpassFilter(C::mip_interface& device, uint8_t targetDescriptor, bool* enableOut, bool* manualOut, uint16_t* frequencyOut, uint8_t* reservedOut)
1876 {
1877  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1878  Serializer serializer(buffer, sizeof(buffer));
1879 
1880  insert(serializer, FunctionSelector::READ);
1881  insert(serializer, targetDescriptor);
1882 
1883  assert(serializer.isOk());
1884 
1885  uint8_t responseLength = sizeof(buffer);
1886  TypedResult<ImuLowpassFilter> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_IMU_LOWPASS_FILTER, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_ADVANCED_DATA_FILTER, buffer, &responseLength);
1887 
1888  if( result == MIP_ACK_OK )
1889  {
1890  Serializer deserializer(buffer, responseLength);
1891 
1892  extract(deserializer, targetDescriptor);
1893 
1894  assert(enableOut);
1895  extract(deserializer, *enableOut);
1896 
1897  assert(manualOut);
1898  extract(deserializer, *manualOut);
1899 
1900  assert(frequencyOut);
1901  extract(deserializer, *frequencyOut);
1902 
1903  assert(reservedOut);
1904  extract(deserializer, *reservedOut);
1905 
1906  if( deserializer.remaining() != 0 )
1907  result = MIP_STATUS_ERROR;
1908  }
1909  return result;
1910 }
1911 TypedResult<ImuLowpassFilter> saveImuLowpassFilter(C::mip_interface& device, uint8_t targetDescriptor)
1912 {
1913  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1914  Serializer serializer(buffer, sizeof(buffer));
1915 
1916  insert(serializer, FunctionSelector::SAVE);
1917  insert(serializer, targetDescriptor);
1918 
1919  assert(serializer.isOk());
1920 
1921  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_IMU_LOWPASS_FILTER, buffer, (uint8_t)mip_serializer_length(&serializer));
1922 }
1923 TypedResult<ImuLowpassFilter> loadImuLowpassFilter(C::mip_interface& device, uint8_t targetDescriptor)
1924 {
1925  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1926  Serializer serializer(buffer, sizeof(buffer));
1927 
1928  insert(serializer, FunctionSelector::LOAD);
1929  insert(serializer, targetDescriptor);
1930 
1931  assert(serializer.isOk());
1932 
1933  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_IMU_LOWPASS_FILTER, buffer, (uint8_t)mip_serializer_length(&serializer));
1934 }
1935 TypedResult<ImuLowpassFilter> defaultImuLowpassFilter(C::mip_interface& device, uint8_t targetDescriptor)
1936 {
1937  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1938  Serializer serializer(buffer, sizeof(buffer));
1939 
1940  insert(serializer, FunctionSelector::RESET);
1941  insert(serializer, targetDescriptor);
1942 
1943  assert(serializer.isOk());
1944 
1945  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_IMU_LOWPASS_FILTER, buffer, (uint8_t)mip_serializer_length(&serializer));
1946 }
1947 void insert(Serializer& serializer, const PpsSource& self)
1948 {
1949  insert(serializer, self.function);
1950 
1951  if( self.function == FunctionSelector::WRITE )
1952  {
1953  insert(serializer, self.source);
1954 
1955  }
1956 }
1957 void extract(Serializer& serializer, PpsSource& self)
1958 {
1959  extract(serializer, self.function);
1960 
1961  if( self.function == FunctionSelector::WRITE )
1962  {
1963  extract(serializer, self.source);
1964 
1965  }
1966 }
1967 
1968 void insert(Serializer& serializer, const PpsSource::Response& self)
1969 {
1970  insert(serializer, self.source);
1971 
1972 }
1973 void extract(Serializer& serializer, PpsSource::Response& self)
1974 {
1975  extract(serializer, self.source);
1976 
1977 }
1978 
1979 TypedResult<PpsSource> writePpsSource(C::mip_interface& device, PpsSource::Source source)
1980 {
1981  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1982  Serializer serializer(buffer, sizeof(buffer));
1983 
1984  insert(serializer, FunctionSelector::WRITE);
1985  insert(serializer, source);
1986 
1987  assert(serializer.isOk());
1988 
1989  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_PPS_SOURCE, buffer, (uint8_t)mip_serializer_length(&serializer));
1990 }
1991 TypedResult<PpsSource> readPpsSource(C::mip_interface& device, PpsSource::Source* sourceOut)
1992 {
1993  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
1994  Serializer serializer(buffer, sizeof(buffer));
1995 
1996  insert(serializer, FunctionSelector::READ);
1997  assert(serializer.isOk());
1998 
1999  uint8_t responseLength = sizeof(buffer);
2000  TypedResult<PpsSource> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_PPS_SOURCE, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_PPS_SOURCE, buffer, &responseLength);
2001 
2002  if( result == MIP_ACK_OK )
2003  {
2004  Serializer deserializer(buffer, responseLength);
2005 
2006  assert(sourceOut);
2007  extract(deserializer, *sourceOut);
2008 
2009  if( deserializer.remaining() != 0 )
2010  result = MIP_STATUS_ERROR;
2011  }
2012  return result;
2013 }
2014 TypedResult<PpsSource> savePpsSource(C::mip_interface& device)
2015 {
2016  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2017  Serializer serializer(buffer, sizeof(buffer));
2018 
2019  insert(serializer, FunctionSelector::SAVE);
2020  assert(serializer.isOk());
2021 
2022  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_PPS_SOURCE, buffer, (uint8_t)mip_serializer_length(&serializer));
2023 }
2024 TypedResult<PpsSource> loadPpsSource(C::mip_interface& device)
2025 {
2026  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2027  Serializer serializer(buffer, sizeof(buffer));
2028 
2029  insert(serializer, FunctionSelector::LOAD);
2030  assert(serializer.isOk());
2031 
2032  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_PPS_SOURCE, buffer, (uint8_t)mip_serializer_length(&serializer));
2033 }
2034 TypedResult<PpsSource> defaultPpsSource(C::mip_interface& device)
2035 {
2036  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2037  Serializer serializer(buffer, sizeof(buffer));
2038 
2039  insert(serializer, FunctionSelector::RESET);
2040  assert(serializer.isOk());
2041 
2042  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_PPS_SOURCE, buffer, (uint8_t)mip_serializer_length(&serializer));
2043 }
2044 void insert(Serializer& serializer, const GpioConfig& self)
2045 {
2046  insert(serializer, self.function);
2047 
2048  insert(serializer, self.pin);
2049 
2050  if( self.function == FunctionSelector::WRITE )
2051  {
2052  insert(serializer, self.feature);
2053 
2054  insert(serializer, self.behavior);
2055 
2056  insert(serializer, self.pin_mode);
2057 
2058  }
2059 }
2060 void extract(Serializer& serializer, GpioConfig& self)
2061 {
2062  extract(serializer, self.function);
2063 
2064  extract(serializer, self.pin);
2065 
2066  if( self.function == FunctionSelector::WRITE )
2067  {
2068  extract(serializer, self.feature);
2069 
2070  extract(serializer, self.behavior);
2071 
2072  extract(serializer, self.pin_mode);
2073 
2074  }
2075 }
2076 
2077 void insert(Serializer& serializer, const GpioConfig::Response& self)
2078 {
2079  insert(serializer, self.pin);
2080 
2081  insert(serializer, self.feature);
2082 
2083  insert(serializer, self.behavior);
2084 
2085  insert(serializer, self.pin_mode);
2086 
2087 }
2088 void extract(Serializer& serializer, GpioConfig::Response& self)
2089 {
2090  extract(serializer, self.pin);
2091 
2092  extract(serializer, self.feature);
2093 
2094  extract(serializer, self.behavior);
2095 
2096  extract(serializer, self.pin_mode);
2097 
2098 }
2099 
2100 TypedResult<GpioConfig> writeGpioConfig(C::mip_interface& device, uint8_t pin, GpioConfig::Feature feature, GpioConfig::Behavior behavior, GpioConfig::PinMode pinMode)
2101 {
2102  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2103  Serializer serializer(buffer, sizeof(buffer));
2104 
2105  insert(serializer, FunctionSelector::WRITE);
2106  insert(serializer, pin);
2107 
2108  insert(serializer, feature);
2109 
2110  insert(serializer, behavior);
2111 
2112  insert(serializer, pinMode);
2113 
2114  assert(serializer.isOk());
2115 
2116  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GPIO_CONFIG, buffer, (uint8_t)mip_serializer_length(&serializer));
2117 }
2118 TypedResult<GpioConfig> readGpioConfig(C::mip_interface& device, uint8_t pin, GpioConfig::Feature* featureOut, GpioConfig::Behavior* behaviorOut, GpioConfig::PinMode* pinModeOut)
2119 {
2120  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2121  Serializer serializer(buffer, sizeof(buffer));
2122 
2123  insert(serializer, FunctionSelector::READ);
2124  insert(serializer, pin);
2125 
2126  assert(serializer.isOk());
2127 
2128  uint8_t responseLength = sizeof(buffer);
2129  TypedResult<GpioConfig> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_GPIO_CONFIG, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_GPIO_CONFIG, buffer, &responseLength);
2130 
2131  if( result == MIP_ACK_OK )
2132  {
2133  Serializer deserializer(buffer, responseLength);
2134 
2135  extract(deserializer, pin);
2136 
2137  assert(featureOut);
2138  extract(deserializer, *featureOut);
2139 
2140  assert(behaviorOut);
2141  extract(deserializer, *behaviorOut);
2142 
2143  assert(pinModeOut);
2144  extract(deserializer, *pinModeOut);
2145 
2146  if( deserializer.remaining() != 0 )
2147  result = MIP_STATUS_ERROR;
2148  }
2149  return result;
2150 }
2151 TypedResult<GpioConfig> saveGpioConfig(C::mip_interface& device, uint8_t pin)
2152 {
2153  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2154  Serializer serializer(buffer, sizeof(buffer));
2155 
2156  insert(serializer, FunctionSelector::SAVE);
2157  insert(serializer, pin);
2158 
2159  assert(serializer.isOk());
2160 
2161  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GPIO_CONFIG, buffer, (uint8_t)mip_serializer_length(&serializer));
2162 }
2163 TypedResult<GpioConfig> loadGpioConfig(C::mip_interface& device, uint8_t pin)
2164 {
2165  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2166  Serializer serializer(buffer, sizeof(buffer));
2167 
2168  insert(serializer, FunctionSelector::LOAD);
2169  insert(serializer, pin);
2170 
2171  assert(serializer.isOk());
2172 
2173  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GPIO_CONFIG, buffer, (uint8_t)mip_serializer_length(&serializer));
2174 }
2175 TypedResult<GpioConfig> defaultGpioConfig(C::mip_interface& device, uint8_t pin)
2176 {
2177  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2178  Serializer serializer(buffer, sizeof(buffer));
2179 
2180  insert(serializer, FunctionSelector::RESET);
2181  insert(serializer, pin);
2182 
2183  assert(serializer.isOk());
2184 
2185  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GPIO_CONFIG, buffer, (uint8_t)mip_serializer_length(&serializer));
2186 }
2187 void insert(Serializer& serializer, const GpioState& self)
2188 {
2189  insert(serializer, self.function);
2190 
2191  if( self.function == FunctionSelector::WRITE || self.function == FunctionSelector::READ )
2192  {
2193  insert(serializer, self.pin);
2194 
2195  }
2196  if( self.function == FunctionSelector::WRITE )
2197  {
2198  insert(serializer, self.state);
2199 
2200  }
2201 }
2202 void extract(Serializer& serializer, GpioState& self)
2203 {
2204  extract(serializer, self.function);
2205 
2206  if( self.function == FunctionSelector::WRITE || self.function == FunctionSelector::READ )
2207  {
2208  extract(serializer, self.pin);
2209 
2210  }
2211  if( self.function == FunctionSelector::WRITE )
2212  {
2213  extract(serializer, self.state);
2214 
2215  }
2216 }
2217 
2218 void insert(Serializer& serializer, const GpioState::Response& self)
2219 {
2220  insert(serializer, self.pin);
2221 
2222  insert(serializer, self.state);
2223 
2224 }
2225 void extract(Serializer& serializer, GpioState::Response& self)
2226 {
2227  extract(serializer, self.pin);
2228 
2229  extract(serializer, self.state);
2230 
2231 }
2232 
2233 TypedResult<GpioState> writeGpioState(C::mip_interface& device, uint8_t pin, bool state)
2234 {
2235  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2236  Serializer serializer(buffer, sizeof(buffer));
2237 
2238  insert(serializer, FunctionSelector::WRITE);
2239  insert(serializer, pin);
2240 
2241  insert(serializer, state);
2242 
2243  assert(serializer.isOk());
2244 
2245  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GPIO_STATE, buffer, (uint8_t)mip_serializer_length(&serializer));
2246 }
2247 TypedResult<GpioState> readGpioState(C::mip_interface& device, uint8_t pin, bool* stateOut)
2248 {
2249  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2250  Serializer serializer(buffer, sizeof(buffer));
2251 
2252  insert(serializer, FunctionSelector::READ);
2253  insert(serializer, pin);
2254 
2255  assert(serializer.isOk());
2256 
2257  uint8_t responseLength = sizeof(buffer);
2258  TypedResult<GpioState> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_GPIO_STATE, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_GPIO_STATE, buffer, &responseLength);
2259 
2260  if( result == MIP_ACK_OK )
2261  {
2262  Serializer deserializer(buffer, responseLength);
2263 
2264  extract(deserializer, pin);
2265 
2266  assert(stateOut);
2267  extract(deserializer, *stateOut);
2268 
2269  if( deserializer.remaining() != 0 )
2270  result = MIP_STATUS_ERROR;
2271  }
2272  return result;
2273 }
2274 void insert(Serializer& serializer, const Odometer& self)
2275 {
2276  insert(serializer, self.function);
2277 
2278  if( self.function == FunctionSelector::WRITE )
2279  {
2280  insert(serializer, self.mode);
2281 
2282  insert(serializer, self.scaling);
2283 
2284  insert(serializer, self.uncertainty);
2285 
2286  }
2287 }
2288 void extract(Serializer& serializer, Odometer& self)
2289 {
2290  extract(serializer, self.function);
2291 
2292  if( self.function == FunctionSelector::WRITE )
2293  {
2294  extract(serializer, self.mode);
2295 
2296  extract(serializer, self.scaling);
2297 
2298  extract(serializer, self.uncertainty);
2299 
2300  }
2301 }
2302 
2303 void insert(Serializer& serializer, const Odometer::Response& self)
2304 {
2305  insert(serializer, self.mode);
2306 
2307  insert(serializer, self.scaling);
2308 
2309  insert(serializer, self.uncertainty);
2310 
2311 }
2312 void extract(Serializer& serializer, Odometer::Response& self)
2313 {
2314  extract(serializer, self.mode);
2315 
2316  extract(serializer, self.scaling);
2317 
2318  extract(serializer, self.uncertainty);
2319 
2320 }
2321 
2322 TypedResult<Odometer> writeOdometer(C::mip_interface& device, Odometer::Mode mode, float scaling, float uncertainty)
2323 {
2324  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2325  Serializer serializer(buffer, sizeof(buffer));
2326 
2327  insert(serializer, FunctionSelector::WRITE);
2328  insert(serializer, mode);
2329 
2330  insert(serializer, scaling);
2331 
2332  insert(serializer, uncertainty);
2333 
2334  assert(serializer.isOk());
2335 
2336  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_ODOMETER_CONFIG, buffer, (uint8_t)mip_serializer_length(&serializer));
2337 }
2338 TypedResult<Odometer> readOdometer(C::mip_interface& device, Odometer::Mode* modeOut, float* scalingOut, float* uncertaintyOut)
2339 {
2340  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2341  Serializer serializer(buffer, sizeof(buffer));
2342 
2343  insert(serializer, FunctionSelector::READ);
2344  assert(serializer.isOk());
2345 
2346  uint8_t responseLength = sizeof(buffer);
2347  TypedResult<Odometer> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_ODOMETER_CONFIG, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_ODOMETER_CONFIG, buffer, &responseLength);
2348 
2349  if( result == MIP_ACK_OK )
2350  {
2351  Serializer deserializer(buffer, responseLength);
2352 
2353  assert(modeOut);
2354  extract(deserializer, *modeOut);
2355 
2356  assert(scalingOut);
2357  extract(deserializer, *scalingOut);
2358 
2359  assert(uncertaintyOut);
2360  extract(deserializer, *uncertaintyOut);
2361 
2362  if( deserializer.remaining() != 0 )
2363  result = MIP_STATUS_ERROR;
2364  }
2365  return result;
2366 }
2367 TypedResult<Odometer> saveOdometer(C::mip_interface& device)
2368 {
2369  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2370  Serializer serializer(buffer, sizeof(buffer));
2371 
2372  insert(serializer, FunctionSelector::SAVE);
2373  assert(serializer.isOk());
2374 
2375  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_ODOMETER_CONFIG, buffer, (uint8_t)mip_serializer_length(&serializer));
2376 }
2377 TypedResult<Odometer> loadOdometer(C::mip_interface& device)
2378 {
2379  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2380  Serializer serializer(buffer, sizeof(buffer));
2381 
2382  insert(serializer, FunctionSelector::LOAD);
2383  assert(serializer.isOk());
2384 
2385  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_ODOMETER_CONFIG, buffer, (uint8_t)mip_serializer_length(&serializer));
2386 }
2387 TypedResult<Odometer> defaultOdometer(C::mip_interface& device)
2388 {
2389  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2390  Serializer serializer(buffer, sizeof(buffer));
2391 
2392  insert(serializer, FunctionSelector::RESET);
2393  assert(serializer.isOk());
2394 
2395  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_ODOMETER_CONFIG, buffer, (uint8_t)mip_serializer_length(&serializer));
2396 }
2397 void insert(Serializer& serializer, const GetEventSupport& self)
2398 {
2399  insert(serializer, self.query);
2400 
2401 }
2402 void extract(Serializer& serializer, GetEventSupport& self)
2403 {
2404  extract(serializer, self.query);
2405 
2406 }
2407 
2408 void insert(Serializer& serializer, const GetEventSupport::Response& self)
2409 {
2410  insert(serializer, self.query);
2411 
2412  insert(serializer, self.max_instances);
2413 
2414  insert(serializer, self.num_entries);
2415 
2416  for(unsigned int i=0; i < self.num_entries; i++)
2417  insert(serializer, self.entries[i]);
2418 
2419 }
2420 void extract(Serializer& serializer, GetEventSupport::Response& self)
2421 {
2422  extract(serializer, self.query);
2423 
2424  extract(serializer, self.max_instances);
2425 
2426  C::extract_count(&serializer, &self.num_entries, sizeof(self.entries)/sizeof(self.entries[0]));
2427  for(unsigned int i=0; i < self.num_entries; i++)
2428  extract(serializer, self.entries[i]);
2429 
2430 }
2431 
2432 void insert(Serializer& serializer, const GetEventSupport::Info& self)
2433 {
2434  insert(serializer, self.type);
2435 
2436  insert(serializer, self.count);
2437 
2438 }
2439 void extract(Serializer& serializer, GetEventSupport::Info& self)
2440 {
2441  extract(serializer, self.type);
2442 
2443  extract(serializer, self.count);
2444 
2445 }
2446 
2447 TypedResult<GetEventSupport> getEventSupport(C::mip_interface& device, GetEventSupport::Query query, uint8_t* maxInstancesOut, uint8_t* numEntriesOut, uint8_t numEntriesOutMax, GetEventSupport::Info* entriesOut)
2448 {
2449  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2450  Serializer serializer(buffer, sizeof(buffer));
2451 
2452  insert(serializer, query);
2453 
2454  assert(serializer.isOk());
2455 
2456  uint8_t responseLength = sizeof(buffer);
2457  TypedResult<GetEventSupport> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_EVENT_SUPPORT, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_EVENT_SUPPORT, buffer, &responseLength);
2458 
2459  if( result == MIP_ACK_OK )
2460  {
2461  Serializer deserializer(buffer, responseLength);
2462 
2463  extract(deserializer, query);
2464 
2465  assert(maxInstancesOut);
2466  extract(deserializer, *maxInstancesOut);
2467 
2468  C::extract_count(&deserializer, numEntriesOut, numEntriesOutMax);
2469  assert(entriesOut || (numEntriesOut == 0));
2470  for(unsigned int i=0; i < *numEntriesOut; i++)
2471  extract(deserializer, entriesOut[i]);
2472 
2473  if( deserializer.remaining() != 0 )
2474  result = MIP_STATUS_ERROR;
2475  }
2476  return result;
2477 }
2478 void insert(Serializer& serializer, const EventControl& self)
2479 {
2480  insert(serializer, self.function);
2481 
2482  insert(serializer, self.instance);
2483 
2484  if( self.function == FunctionSelector::WRITE )
2485  {
2486  insert(serializer, self.mode);
2487 
2488  }
2489 }
2490 void extract(Serializer& serializer, EventControl& self)
2491 {
2492  extract(serializer, self.function);
2493 
2494  extract(serializer, self.instance);
2495 
2496  if( self.function == FunctionSelector::WRITE )
2497  {
2498  extract(serializer, self.mode);
2499 
2500  }
2501 }
2502 
2503 void insert(Serializer& serializer, const EventControl::Response& self)
2504 {
2505  insert(serializer, self.instance);
2506 
2507  insert(serializer, self.mode);
2508 
2509 }
2510 void extract(Serializer& serializer, EventControl::Response& self)
2511 {
2512  extract(serializer, self.instance);
2513 
2514  extract(serializer, self.mode);
2515 
2516 }
2517 
2518 TypedResult<EventControl> writeEventControl(C::mip_interface& device, uint8_t instance, EventControl::Mode mode)
2519 {
2520  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2521  Serializer serializer(buffer, sizeof(buffer));
2522 
2523  insert(serializer, FunctionSelector::WRITE);
2524  insert(serializer, instance);
2525 
2526  insert(serializer, mode);
2527 
2528  assert(serializer.isOk());
2529 
2530  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_EVENT_CONTROL, buffer, (uint8_t)mip_serializer_length(&serializer));
2531 }
2532 TypedResult<EventControl> readEventControl(C::mip_interface& device, uint8_t instance, EventControl::Mode* modeOut)
2533 {
2534  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2535  Serializer serializer(buffer, sizeof(buffer));
2536 
2537  insert(serializer, FunctionSelector::READ);
2538  insert(serializer, instance);
2539 
2540  assert(serializer.isOk());
2541 
2542  uint8_t responseLength = sizeof(buffer);
2543  TypedResult<EventControl> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_EVENT_CONTROL, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_EVENT_CONTROL, buffer, &responseLength);
2544 
2545  if( result == MIP_ACK_OK )
2546  {
2547  Serializer deserializer(buffer, responseLength);
2548 
2549  extract(deserializer, instance);
2550 
2551  assert(modeOut);
2552  extract(deserializer, *modeOut);
2553 
2554  if( deserializer.remaining() != 0 )
2555  result = MIP_STATUS_ERROR;
2556  }
2557  return result;
2558 }
2559 TypedResult<EventControl> saveEventControl(C::mip_interface& device, uint8_t instance)
2560 {
2561  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2562  Serializer serializer(buffer, sizeof(buffer));
2563 
2564  insert(serializer, FunctionSelector::SAVE);
2565  insert(serializer, instance);
2566 
2567  assert(serializer.isOk());
2568 
2569  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_EVENT_CONTROL, buffer, (uint8_t)mip_serializer_length(&serializer));
2570 }
2571 TypedResult<EventControl> loadEventControl(C::mip_interface& device, uint8_t instance)
2572 {
2573  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2574  Serializer serializer(buffer, sizeof(buffer));
2575 
2576  insert(serializer, FunctionSelector::LOAD);
2577  insert(serializer, instance);
2578 
2579  assert(serializer.isOk());
2580 
2581  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_EVENT_CONTROL, buffer, (uint8_t)mip_serializer_length(&serializer));
2582 }
2583 TypedResult<EventControl> defaultEventControl(C::mip_interface& device, uint8_t instance)
2584 {
2585  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2586  Serializer serializer(buffer, sizeof(buffer));
2587 
2588  insert(serializer, FunctionSelector::RESET);
2589  insert(serializer, instance);
2590 
2591  assert(serializer.isOk());
2592 
2593  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_EVENT_CONTROL, buffer, (uint8_t)mip_serializer_length(&serializer));
2594 }
2595 void insert(Serializer& serializer, const GetEventTriggerStatus& self)
2596 {
2597  insert(serializer, self.requested_count);
2598 
2599  for(unsigned int i=0; i < self.requested_count; i++)
2600  insert(serializer, self.requested_instances[i]);
2601 
2602 }
2603 void extract(Serializer& serializer, GetEventTriggerStatus& self)
2604 {
2605  C::extract_count(&serializer, &self.requested_count, sizeof(self.requested_instances)/sizeof(self.requested_instances[0]));
2606  for(unsigned int i=0; i < self.requested_count; i++)
2607  extract(serializer, self.requested_instances[i]);
2608 
2609 }
2610 
2611 void insert(Serializer& serializer, const GetEventTriggerStatus::Response& self)
2612 {
2613  insert(serializer, self.count);
2614 
2615  for(unsigned int i=0; i < self.count; i++)
2616  insert(serializer, self.triggers[i]);
2617 
2618 }
2619 void extract(Serializer& serializer, GetEventTriggerStatus::Response& self)
2620 {
2621  C::extract_count(&serializer, &self.count, sizeof(self.triggers)/sizeof(self.triggers[0]));
2622  for(unsigned int i=0; i < self.count; i++)
2623  extract(serializer, self.triggers[i]);
2624 
2625 }
2626 
2627 void insert(Serializer& serializer, const GetEventTriggerStatus::Entry& self)
2628 {
2629  insert(serializer, self.type);
2630 
2631  insert(serializer, self.status);
2632 
2633 }
2634 void extract(Serializer& serializer, GetEventTriggerStatus::Entry& self)
2635 {
2636  extract(serializer, self.type);
2637 
2638  extract(serializer, self.status);
2639 
2640 }
2641 
2642 TypedResult<GetEventTriggerStatus> getEventTriggerStatus(C::mip_interface& device, uint8_t requestedCount, const uint8_t* requestedInstances, uint8_t* countOut, uint8_t countOutMax, GetEventTriggerStatus::Entry* triggersOut)
2643 {
2644  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2645  Serializer serializer(buffer, sizeof(buffer));
2646 
2647  insert(serializer, requestedCount);
2648 
2649  assert(requestedInstances || (requestedCount == 0));
2650  for(unsigned int i=0; i < requestedCount; i++)
2651  insert(serializer, requestedInstances[i]);
2652 
2653  assert(serializer.isOk());
2654 
2655  uint8_t responseLength = sizeof(buffer);
2656  TypedResult<GetEventTriggerStatus> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_EVENT_TRIGGER_STATUS, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_EVENT_TRIGGER_STATUS, buffer, &responseLength);
2657 
2658  if( result == MIP_ACK_OK )
2659  {
2660  Serializer deserializer(buffer, responseLength);
2661 
2662  C::extract_count(&deserializer, countOut, countOutMax);
2663  assert(triggersOut || (countOut == 0));
2664  for(unsigned int i=0; i < *countOut; i++)
2665  extract(deserializer, triggersOut[i]);
2666 
2667  if( deserializer.remaining() != 0 )
2668  result = MIP_STATUS_ERROR;
2669  }
2670  return result;
2671 }
2672 void insert(Serializer& serializer, const GetEventActionStatus& self)
2673 {
2674  insert(serializer, self.requested_count);
2675 
2676  for(unsigned int i=0; i < self.requested_count; i++)
2677  insert(serializer, self.requested_instances[i]);
2678 
2679 }
2680 void extract(Serializer& serializer, GetEventActionStatus& self)
2681 {
2682  C::extract_count(&serializer, &self.requested_count, sizeof(self.requested_instances)/sizeof(self.requested_instances[0]));
2683  for(unsigned int i=0; i < self.requested_count; i++)
2684  extract(serializer, self.requested_instances[i]);
2685 
2686 }
2687 
2688 void insert(Serializer& serializer, const GetEventActionStatus::Response& self)
2689 {
2690  insert(serializer, self.count);
2691 
2692  for(unsigned int i=0; i < self.count; i++)
2693  insert(serializer, self.actions[i]);
2694 
2695 }
2696 void extract(Serializer& serializer, GetEventActionStatus::Response& self)
2697 {
2698  C::extract_count(&serializer, &self.count, sizeof(self.actions)/sizeof(self.actions[0]));
2699  for(unsigned int i=0; i < self.count; i++)
2700  extract(serializer, self.actions[i]);
2701 
2702 }
2703 
2704 void insert(Serializer& serializer, const GetEventActionStatus::Entry& self)
2705 {
2706  insert(serializer, self.action_type);
2707 
2708  insert(serializer, self.trigger_id);
2709 
2710 }
2711 void extract(Serializer& serializer, GetEventActionStatus::Entry& self)
2712 {
2713  extract(serializer, self.action_type);
2714 
2715  extract(serializer, self.trigger_id);
2716 
2717 }
2718 
2719 TypedResult<GetEventActionStatus> getEventActionStatus(C::mip_interface& device, uint8_t requestedCount, const uint8_t* requestedInstances, uint8_t* countOut, uint8_t countOutMax, GetEventActionStatus::Entry* actionsOut)
2720 {
2721  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2722  Serializer serializer(buffer, sizeof(buffer));
2723 
2724  insert(serializer, requestedCount);
2725 
2726  assert(requestedInstances || (requestedCount == 0));
2727  for(unsigned int i=0; i < requestedCount; i++)
2728  insert(serializer, requestedInstances[i]);
2729 
2730  assert(serializer.isOk());
2731 
2732  uint8_t responseLength = sizeof(buffer);
2733  TypedResult<GetEventActionStatus> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_EVENT_ACTION_STATUS, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_EVENT_ACTION_STATUS, buffer, &responseLength);
2734 
2735  if( result == MIP_ACK_OK )
2736  {
2737  Serializer deserializer(buffer, responseLength);
2738 
2739  C::extract_count(&deserializer, countOut, countOutMax);
2740  assert(actionsOut || (countOut == 0));
2741  for(unsigned int i=0; i < *countOut; i++)
2742  extract(deserializer, actionsOut[i]);
2743 
2744  if( deserializer.remaining() != 0 )
2745  result = MIP_STATUS_ERROR;
2746  }
2747  return result;
2748 }
2749 void insert(Serializer& serializer, const EventTrigger& self)
2750 {
2751  insert(serializer, self.function);
2752 
2753  insert(serializer, self.instance);
2754 
2755  if( self.function == FunctionSelector::WRITE )
2756  {
2757  insert(serializer, self.type);
2758 
2759  if( self.type == EventTrigger::Type::GPIO )
2760  {
2761  insert(serializer, self.parameters.gpio);
2762 
2763  }
2764  if( self.type == EventTrigger::Type::THRESHOLD )
2765  {
2766  insert(serializer, self.parameters.threshold);
2767 
2768  }
2769  if( self.type == EventTrigger::Type::COMBINATION )
2770  {
2771  insert(serializer, self.parameters.combination);
2772 
2773  }
2774  }
2775 }
2776 void extract(Serializer& serializer, EventTrigger& self)
2777 {
2778  extract(serializer, self.function);
2779 
2780  extract(serializer, self.instance);
2781 
2782  if( self.function == FunctionSelector::WRITE )
2783  {
2784  extract(serializer, self.type);
2785 
2786  if( self.type == EventTrigger::Type::GPIO )
2787  {
2788  extract(serializer, self.parameters.gpio);
2789 
2790  }
2791  if( self.type == EventTrigger::Type::THRESHOLD )
2792  {
2793  extract(serializer, self.parameters.threshold);
2794 
2795  }
2796  if( self.type == EventTrigger::Type::COMBINATION )
2797  {
2798  extract(serializer, self.parameters.combination);
2799 
2800  }
2801  }
2802 }
2803 
2804 void insert(Serializer& serializer, const EventTrigger::Response& self)
2805 {
2806  insert(serializer, self.instance);
2807 
2808  insert(serializer, self.type);
2809 
2810  if( self.type == EventTrigger::Type::GPIO )
2811  {
2812  insert(serializer, self.parameters.gpio);
2813 
2814  }
2815  if( self.type == EventTrigger::Type::THRESHOLD )
2816  {
2817  insert(serializer, self.parameters.threshold);
2818 
2819  }
2820  if( self.type == EventTrigger::Type::COMBINATION )
2821  {
2822  insert(serializer, self.parameters.combination);
2823 
2824  }
2825 }
2826 void extract(Serializer& serializer, EventTrigger::Response& self)
2827 {
2828  extract(serializer, self.instance);
2829 
2830  extract(serializer, self.type);
2831 
2832  if( self.type == EventTrigger::Type::GPIO )
2833  {
2834  extract(serializer, self.parameters.gpio);
2835 
2836  }
2837  if( self.type == EventTrigger::Type::THRESHOLD )
2838  {
2839  extract(serializer, self.parameters.threshold);
2840 
2841  }
2842  if( self.type == EventTrigger::Type::COMBINATION )
2843  {
2844  extract(serializer, self.parameters.combination);
2845 
2846  }
2847 }
2848 
2849 void insert(Serializer& serializer, const EventTrigger::GpioParams& self)
2850 {
2851  insert(serializer, self.pin);
2852 
2853  insert(serializer, self.mode);
2854 
2855 }
2856 void extract(Serializer& serializer, EventTrigger::GpioParams& self)
2857 {
2858  extract(serializer, self.pin);
2859 
2860  extract(serializer, self.mode);
2861 
2862 }
2863 
2864 void insert(Serializer& serializer, const EventTrigger::ThresholdParams& self)
2865 {
2866  insert(serializer, self.desc_set);
2867 
2868  insert(serializer, self.field_desc);
2869 
2870  insert(serializer, self.param_id);
2871 
2872  insert(serializer, self.type);
2873 
2874  if( self.type == EventTrigger::ThresholdParams::Type::WINDOW )
2875  {
2876  insert(serializer, self.low_thres);
2877 
2878  }
2879  if( self.type == EventTrigger::ThresholdParams::Type::INTERVAL )
2880  {
2881  insert(serializer, self.int_thres);
2882 
2883  }
2884  if( self.type == EventTrigger::ThresholdParams::Type::WINDOW )
2885  {
2886  insert(serializer, self.high_thres);
2887 
2888  }
2889  if( self.type == EventTrigger::ThresholdParams::Type::INTERVAL )
2890  {
2891  insert(serializer, self.interval);
2892 
2893  }
2894 }
2895 void extract(Serializer& serializer, EventTrigger::ThresholdParams& self)
2896 {
2897  extract(serializer, self.desc_set);
2898 
2899  extract(serializer, self.field_desc);
2900 
2901  extract(serializer, self.param_id);
2902 
2903  extract(serializer, self.type);
2904 
2905  if( self.type == EventTrigger::ThresholdParams::Type::WINDOW )
2906  {
2907  extract(serializer, self.low_thres);
2908 
2909  }
2910  if( self.type == EventTrigger::ThresholdParams::Type::INTERVAL )
2911  {
2912  extract(serializer, self.int_thres);
2913 
2914  }
2915  if( self.type == EventTrigger::ThresholdParams::Type::WINDOW )
2916  {
2917  extract(serializer, self.high_thres);
2918 
2919  }
2920  if( self.type == EventTrigger::ThresholdParams::Type::INTERVAL )
2921  {
2922  extract(serializer, self.interval);
2923 
2924  }
2925 }
2926 
2927 void insert(Serializer& serializer, const EventTrigger::CombinationParams& self)
2928 {
2929  insert(serializer, self.logic_table);
2930 
2931  for(unsigned int i=0; i < 4; i++)
2932  insert(serializer, self.input_triggers[i]);
2933 
2934 }
2935 void extract(Serializer& serializer, EventTrigger::CombinationParams& self)
2936 {
2937  extract(serializer, self.logic_table);
2938 
2939  for(unsigned int i=0; i < 4; i++)
2940  extract(serializer, self.input_triggers[i]);
2941 
2942 }
2943 
2944 TypedResult<EventTrigger> writeEventTrigger(C::mip_interface& device, uint8_t instance, EventTrigger::Type type, const EventTrigger::Parameters& parameters)
2945 {
2946  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2947  Serializer serializer(buffer, sizeof(buffer));
2948 
2949  insert(serializer, FunctionSelector::WRITE);
2950  insert(serializer, instance);
2951 
2952  insert(serializer, type);
2953 
2954  if( type == EventTrigger::Type::GPIO )
2955  {
2956  insert(serializer, parameters.gpio);
2957 
2958  }
2959  if( type == EventTrigger::Type::THRESHOLD )
2960  {
2961  insert(serializer, parameters.threshold);
2962 
2963  }
2964  if( type == EventTrigger::Type::COMBINATION )
2965  {
2966  insert(serializer, parameters.combination);
2967 
2968  }
2969  assert(serializer.isOk());
2970 
2971  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_EVENT_TRIGGER_CONFIG, buffer, (uint8_t)mip_serializer_length(&serializer));
2972 }
2973 TypedResult<EventTrigger> readEventTrigger(C::mip_interface& device, uint8_t instance, EventTrigger::Type* typeOut, EventTrigger::Parameters* parametersOut)
2974 {
2975  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
2976  Serializer serializer(buffer, sizeof(buffer));
2977 
2978  insert(serializer, FunctionSelector::READ);
2979  insert(serializer, instance);
2980 
2981  assert(serializer.isOk());
2982 
2983  uint8_t responseLength = sizeof(buffer);
2984  TypedResult<EventTrigger> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_EVENT_TRIGGER_CONFIG, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_EVENT_TRIGGER_CONFIG, buffer, &responseLength);
2985 
2986  if( result == MIP_ACK_OK )
2987  {
2988  Serializer deserializer(buffer, responseLength);
2989 
2990  extract(deserializer, instance);
2991 
2992  assert(typeOut);
2993  extract(deserializer, *typeOut);
2994 
2995  if( *typeOut == EventTrigger::Type::GPIO )
2996  {
2997  extract(deserializer, parametersOut->gpio);
2998 
2999  }
3000  if( *typeOut == EventTrigger::Type::THRESHOLD )
3001  {
3002  extract(deserializer, parametersOut->threshold);
3003 
3004  }
3005  if( *typeOut == EventTrigger::Type::COMBINATION )
3006  {
3007  extract(deserializer, parametersOut->combination);
3008 
3009  }
3010  if( deserializer.remaining() != 0 )
3011  result = MIP_STATUS_ERROR;
3012  }
3013  return result;
3014 }
3015 TypedResult<EventTrigger> saveEventTrigger(C::mip_interface& device, uint8_t instance)
3016 {
3017  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3018  Serializer serializer(buffer, sizeof(buffer));
3019 
3020  insert(serializer, FunctionSelector::SAVE);
3021  insert(serializer, instance);
3022 
3023  assert(serializer.isOk());
3024 
3025  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_EVENT_TRIGGER_CONFIG, buffer, (uint8_t)mip_serializer_length(&serializer));
3026 }
3027 TypedResult<EventTrigger> loadEventTrigger(C::mip_interface& device, uint8_t instance)
3028 {
3029  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3030  Serializer serializer(buffer, sizeof(buffer));
3031 
3032  insert(serializer, FunctionSelector::LOAD);
3033  insert(serializer, instance);
3034 
3035  assert(serializer.isOk());
3036 
3037  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_EVENT_TRIGGER_CONFIG, buffer, (uint8_t)mip_serializer_length(&serializer));
3038 }
3039 TypedResult<EventTrigger> defaultEventTrigger(C::mip_interface& device, uint8_t instance)
3040 {
3041  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3042  Serializer serializer(buffer, sizeof(buffer));
3043 
3044  insert(serializer, FunctionSelector::RESET);
3045  insert(serializer, instance);
3046 
3047  assert(serializer.isOk());
3048 
3049  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_EVENT_TRIGGER_CONFIG, buffer, (uint8_t)mip_serializer_length(&serializer));
3050 }
3051 void insert(Serializer& serializer, const EventAction& self)
3052 {
3053  insert(serializer, self.function);
3054 
3055  insert(serializer, self.instance);
3056 
3057  if( self.function == FunctionSelector::WRITE )
3058  {
3059  insert(serializer, self.trigger);
3060 
3061  insert(serializer, self.type);
3062 
3063  if( self.type == EventAction::Type::GPIO )
3064  {
3065  insert(serializer, self.parameters.gpio);
3066 
3067  }
3068  if( self.type == EventAction::Type::MESSAGE )
3069  {
3070  insert(serializer, self.parameters.message);
3071 
3072  }
3073  }
3074 }
3075 void extract(Serializer& serializer, EventAction& self)
3076 {
3077  extract(serializer, self.function);
3078 
3079  extract(serializer, self.instance);
3080 
3081  if( self.function == FunctionSelector::WRITE )
3082  {
3083  extract(serializer, self.trigger);
3084 
3085  extract(serializer, self.type);
3086 
3087  if( self.type == EventAction::Type::GPIO )
3088  {
3089  extract(serializer, self.parameters.gpio);
3090 
3091  }
3092  if( self.type == EventAction::Type::MESSAGE )
3093  {
3094  extract(serializer, self.parameters.message);
3095 
3096  }
3097  }
3098 }
3099 
3100 void insert(Serializer& serializer, const EventAction::Response& self)
3101 {
3102  insert(serializer, self.instance);
3103 
3104  insert(serializer, self.trigger);
3105 
3106  insert(serializer, self.type);
3107 
3108  if( self.type == EventAction::Type::GPIO )
3109  {
3110  insert(serializer, self.parameters.gpio);
3111 
3112  }
3113  if( self.type == EventAction::Type::MESSAGE )
3114  {
3115  insert(serializer, self.parameters.message);
3116 
3117  }
3118 }
3119 void extract(Serializer& serializer, EventAction::Response& self)
3120 {
3121  extract(serializer, self.instance);
3122 
3123  extract(serializer, self.trigger);
3124 
3125  extract(serializer, self.type);
3126 
3127  if( self.type == EventAction::Type::GPIO )
3128  {
3129  extract(serializer, self.parameters.gpio);
3130 
3131  }
3132  if( self.type == EventAction::Type::MESSAGE )
3133  {
3134  extract(serializer, self.parameters.message);
3135 
3136  }
3137 }
3138 
3139 void insert(Serializer& serializer, const EventAction::GpioParams& self)
3140 {
3141  insert(serializer, self.pin);
3142 
3143  insert(serializer, self.mode);
3144 
3145 }
3146 void extract(Serializer& serializer, EventAction::GpioParams& self)
3147 {
3148  extract(serializer, self.pin);
3149 
3150  extract(serializer, self.mode);
3151 
3152 }
3153 
3154 void insert(Serializer& serializer, const EventAction::MessageParams& self)
3155 {
3156  insert(serializer, self.desc_set);
3157 
3158  insert(serializer, self.decimation);
3159 
3160  insert(serializer, self.num_fields);
3161 
3162  for(unsigned int i=0; i < self.num_fields; i++)
3163  insert(serializer, self.descriptors[i]);
3164 
3165 }
3166 void extract(Serializer& serializer, EventAction::MessageParams& self)
3167 {
3168  extract(serializer, self.desc_set);
3169 
3170  extract(serializer, self.decimation);
3171 
3172  C::extract_count(&serializer, &self.num_fields, sizeof(self.descriptors)/sizeof(self.descriptors[0]));
3173  for(unsigned int i=0; i < self.num_fields; i++)
3174  extract(serializer, self.descriptors[i]);
3175 
3176 }
3177 
3178 TypedResult<EventAction> writeEventAction(C::mip_interface& device, uint8_t instance, uint8_t trigger, EventAction::Type type, const EventAction::Parameters& parameters)
3179 {
3180  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3181  Serializer serializer(buffer, sizeof(buffer));
3182 
3183  insert(serializer, FunctionSelector::WRITE);
3184  insert(serializer, instance);
3185 
3186  insert(serializer, trigger);
3187 
3188  insert(serializer, type);
3189 
3190  if( type == EventAction::Type::GPIO )
3191  {
3192  insert(serializer, parameters.gpio);
3193 
3194  }
3195  if( type == EventAction::Type::MESSAGE )
3196  {
3197  insert(serializer, parameters.message);
3198 
3199  }
3200  assert(serializer.isOk());
3201 
3202  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_EVENT_ACTION_CONFIG, buffer, (uint8_t)mip_serializer_length(&serializer));
3203 }
3204 TypedResult<EventAction> readEventAction(C::mip_interface& device, uint8_t instance, uint8_t* triggerOut, EventAction::Type* typeOut, EventAction::Parameters* parametersOut)
3205 {
3206  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3207  Serializer serializer(buffer, sizeof(buffer));
3208 
3209  insert(serializer, FunctionSelector::READ);
3210  insert(serializer, instance);
3211 
3212  assert(serializer.isOk());
3213 
3214  uint8_t responseLength = sizeof(buffer);
3215  TypedResult<EventAction> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_EVENT_ACTION_CONFIG, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_EVENT_ACTION_CONFIG, buffer, &responseLength);
3216 
3217  if( result == MIP_ACK_OK )
3218  {
3219  Serializer deserializer(buffer, responseLength);
3220 
3221  extract(deserializer, instance);
3222 
3223  assert(triggerOut);
3224  extract(deserializer, *triggerOut);
3225 
3226  assert(typeOut);
3227  extract(deserializer, *typeOut);
3228 
3229  if( *typeOut == EventAction::Type::GPIO )
3230  {
3231  extract(deserializer, parametersOut->gpio);
3232 
3233  }
3234  if( *typeOut == EventAction::Type::MESSAGE )
3235  {
3236  extract(deserializer, parametersOut->message);
3237 
3238  }
3239  if( deserializer.remaining() != 0 )
3240  result = MIP_STATUS_ERROR;
3241  }
3242  return result;
3243 }
3244 TypedResult<EventAction> saveEventAction(C::mip_interface& device, uint8_t instance)
3245 {
3246  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3247  Serializer serializer(buffer, sizeof(buffer));
3248 
3249  insert(serializer, FunctionSelector::SAVE);
3250  insert(serializer, instance);
3251 
3252  assert(serializer.isOk());
3253 
3254  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_EVENT_ACTION_CONFIG, buffer, (uint8_t)mip_serializer_length(&serializer));
3255 }
3256 TypedResult<EventAction> loadEventAction(C::mip_interface& device, uint8_t instance)
3257 {
3258  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3259  Serializer serializer(buffer, sizeof(buffer));
3260 
3261  insert(serializer, FunctionSelector::LOAD);
3262  insert(serializer, instance);
3263 
3264  assert(serializer.isOk());
3265 
3266  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_EVENT_ACTION_CONFIG, buffer, (uint8_t)mip_serializer_length(&serializer));
3267 }
3268 TypedResult<EventAction> defaultEventAction(C::mip_interface& device, uint8_t instance)
3269 {
3270  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3271  Serializer serializer(buffer, sizeof(buffer));
3272 
3273  insert(serializer, FunctionSelector::RESET);
3274  insert(serializer, instance);
3275 
3276  assert(serializer.isOk());
3277 
3278  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_EVENT_ACTION_CONFIG, buffer, (uint8_t)mip_serializer_length(&serializer));
3279 }
3280 void insert(Serializer& serializer, const AccelBias& self)
3281 {
3282  insert(serializer, self.function);
3283 
3284  if( self.function == FunctionSelector::WRITE )
3285  {
3286  for(unsigned int i=0; i < 3; i++)
3287  insert(serializer, self.bias[i]);
3288 
3289  }
3290 }
3291 void extract(Serializer& serializer, AccelBias& self)
3292 {
3293  extract(serializer, self.function);
3294 
3295  if( self.function == FunctionSelector::WRITE )
3296  {
3297  for(unsigned int i=0; i < 3; i++)
3298  extract(serializer, self.bias[i]);
3299 
3300  }
3301 }
3302 
3303 void insert(Serializer& serializer, const AccelBias::Response& self)
3304 {
3305  for(unsigned int i=0; i < 3; i++)
3306  insert(serializer, self.bias[i]);
3307 
3308 }
3309 void extract(Serializer& serializer, AccelBias::Response& self)
3310 {
3311  for(unsigned int i=0; i < 3; i++)
3312  extract(serializer, self.bias[i]);
3313 
3314 }
3315 
3316 TypedResult<AccelBias> writeAccelBias(C::mip_interface& device, const float* bias)
3317 {
3318  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3319  Serializer serializer(buffer, sizeof(buffer));
3320 
3321  insert(serializer, FunctionSelector::WRITE);
3322  assert(bias || (3 == 0));
3323  for(unsigned int i=0; i < 3; i++)
3324  insert(serializer, bias[i]);
3325 
3326  assert(serializer.isOk());
3327 
3328  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_ACCEL_BIAS, buffer, (uint8_t)mip_serializer_length(&serializer));
3329 }
3330 TypedResult<AccelBias> readAccelBias(C::mip_interface& device, float* biasOut)
3331 {
3332  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3333  Serializer serializer(buffer, sizeof(buffer));
3334 
3335  insert(serializer, FunctionSelector::READ);
3336  assert(serializer.isOk());
3337 
3338  uint8_t responseLength = sizeof(buffer);
3339  TypedResult<AccelBias> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_ACCEL_BIAS, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_ACCEL_BIAS_VECTOR, buffer, &responseLength);
3340 
3341  if( result == MIP_ACK_OK )
3342  {
3343  Serializer deserializer(buffer, responseLength);
3344 
3345  assert(biasOut || (3 == 0));
3346  for(unsigned int i=0; i < 3; i++)
3347  extract(deserializer, biasOut[i]);
3348 
3349  if( deserializer.remaining() != 0 )
3350  result = MIP_STATUS_ERROR;
3351  }
3352  return result;
3353 }
3354 TypedResult<AccelBias> saveAccelBias(C::mip_interface& device)
3355 {
3356  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3357  Serializer serializer(buffer, sizeof(buffer));
3358 
3359  insert(serializer, FunctionSelector::SAVE);
3360  assert(serializer.isOk());
3361 
3362  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_ACCEL_BIAS, buffer, (uint8_t)mip_serializer_length(&serializer));
3363 }
3364 TypedResult<AccelBias> loadAccelBias(C::mip_interface& device)
3365 {
3366  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3367  Serializer serializer(buffer, sizeof(buffer));
3368 
3369  insert(serializer, FunctionSelector::LOAD);
3370  assert(serializer.isOk());
3371 
3372  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_ACCEL_BIAS, buffer, (uint8_t)mip_serializer_length(&serializer));
3373 }
3374 TypedResult<AccelBias> defaultAccelBias(C::mip_interface& device)
3375 {
3376  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3377  Serializer serializer(buffer, sizeof(buffer));
3378 
3379  insert(serializer, FunctionSelector::RESET);
3380  assert(serializer.isOk());
3381 
3382  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_ACCEL_BIAS, buffer, (uint8_t)mip_serializer_length(&serializer));
3383 }
3384 void insert(Serializer& serializer, const GyroBias& self)
3385 {
3386  insert(serializer, self.function);
3387 
3388  if( self.function == FunctionSelector::WRITE )
3389  {
3390  for(unsigned int i=0; i < 3; i++)
3391  insert(serializer, self.bias[i]);
3392 
3393  }
3394 }
3395 void extract(Serializer& serializer, GyroBias& self)
3396 {
3397  extract(serializer, self.function);
3398 
3399  if( self.function == FunctionSelector::WRITE )
3400  {
3401  for(unsigned int i=0; i < 3; i++)
3402  extract(serializer, self.bias[i]);
3403 
3404  }
3405 }
3406 
3407 void insert(Serializer& serializer, const GyroBias::Response& self)
3408 {
3409  for(unsigned int i=0; i < 3; i++)
3410  insert(serializer, self.bias[i]);
3411 
3412 }
3413 void extract(Serializer& serializer, GyroBias::Response& self)
3414 {
3415  for(unsigned int i=0; i < 3; i++)
3416  extract(serializer, self.bias[i]);
3417 
3418 }
3419 
3420 TypedResult<GyroBias> writeGyroBias(C::mip_interface& device, const float* bias)
3421 {
3422  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3423  Serializer serializer(buffer, sizeof(buffer));
3424 
3425  insert(serializer, FunctionSelector::WRITE);
3426  assert(bias || (3 == 0));
3427  for(unsigned int i=0; i < 3; i++)
3428  insert(serializer, bias[i]);
3429 
3430  assert(serializer.isOk());
3431 
3432  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GYRO_BIAS, buffer, (uint8_t)mip_serializer_length(&serializer));
3433 }
3434 TypedResult<GyroBias> readGyroBias(C::mip_interface& device, float* biasOut)
3435 {
3436  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3437  Serializer serializer(buffer, sizeof(buffer));
3438 
3439  insert(serializer, FunctionSelector::READ);
3440  assert(serializer.isOk());
3441 
3442  uint8_t responseLength = sizeof(buffer);
3443  TypedResult<GyroBias> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_GYRO_BIAS, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_GYRO_BIAS_VECTOR, buffer, &responseLength);
3444 
3445  if( result == MIP_ACK_OK )
3446  {
3447  Serializer deserializer(buffer, responseLength);
3448 
3449  assert(biasOut || (3 == 0));
3450  for(unsigned int i=0; i < 3; i++)
3451  extract(deserializer, biasOut[i]);
3452 
3453  if( deserializer.remaining() != 0 )
3454  result = MIP_STATUS_ERROR;
3455  }
3456  return result;
3457 }
3458 TypedResult<GyroBias> saveGyroBias(C::mip_interface& device)
3459 {
3460  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3461  Serializer serializer(buffer, sizeof(buffer));
3462 
3463  insert(serializer, FunctionSelector::SAVE);
3464  assert(serializer.isOk());
3465 
3466  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GYRO_BIAS, buffer, (uint8_t)mip_serializer_length(&serializer));
3467 }
3468 TypedResult<GyroBias> loadGyroBias(C::mip_interface& device)
3469 {
3470  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3471  Serializer serializer(buffer, sizeof(buffer));
3472 
3473  insert(serializer, FunctionSelector::LOAD);
3474  assert(serializer.isOk());
3475 
3476  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GYRO_BIAS, buffer, (uint8_t)mip_serializer_length(&serializer));
3477 }
3478 TypedResult<GyroBias> defaultGyroBias(C::mip_interface& device)
3479 {
3480  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3481  Serializer serializer(buffer, sizeof(buffer));
3482 
3483  insert(serializer, FunctionSelector::RESET);
3484  assert(serializer.isOk());
3485 
3486  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_GYRO_BIAS, buffer, (uint8_t)mip_serializer_length(&serializer));
3487 }
3488 void insert(Serializer& serializer, const CaptureGyroBias& self)
3489 {
3490  insert(serializer, self.averaging_time_ms);
3491 
3492 }
3493 void extract(Serializer& serializer, CaptureGyroBias& self)
3494 {
3495  extract(serializer, self.averaging_time_ms);
3496 
3497 }
3498 
3499 void insert(Serializer& serializer, const CaptureGyroBias::Response& self)
3500 {
3501  for(unsigned int i=0; i < 3; i++)
3502  insert(serializer, self.bias[i]);
3503 
3504 }
3505 void extract(Serializer& serializer, CaptureGyroBias::Response& self)
3506 {
3507  for(unsigned int i=0; i < 3; i++)
3508  extract(serializer, self.bias[i]);
3509 
3510 }
3511 
3512 TypedResult<CaptureGyroBias> captureGyroBias(C::mip_interface& device, uint16_t averagingTimeMs, float* biasOut)
3513 {
3514  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3515  Serializer serializer(buffer, sizeof(buffer));
3516 
3517  insert(serializer, averagingTimeMs);
3518 
3519  assert(serializer.isOk());
3520 
3521  uint8_t responseLength = sizeof(buffer);
3522  TypedResult<CaptureGyroBias> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_CAPTURE_GYRO_BIAS, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_GYRO_BIAS_VECTOR, buffer, &responseLength);
3523 
3524  if( result == MIP_ACK_OK )
3525  {
3526  Serializer deserializer(buffer, responseLength);
3527 
3528  assert(biasOut || (3 == 0));
3529  for(unsigned int i=0; i < 3; i++)
3530  extract(deserializer, biasOut[i]);
3531 
3532  if( deserializer.remaining() != 0 )
3533  result = MIP_STATUS_ERROR;
3534  }
3535  return result;
3536 }
3537 void insert(Serializer& serializer, const MagHardIronOffset& self)
3538 {
3539  insert(serializer, self.function);
3540 
3541  if( self.function == FunctionSelector::WRITE )
3542  {
3543  for(unsigned int i=0; i < 3; i++)
3544  insert(serializer, self.offset[i]);
3545 
3546  }
3547 }
3548 void extract(Serializer& serializer, MagHardIronOffset& self)
3549 {
3550  extract(serializer, self.function);
3551 
3552  if( self.function == FunctionSelector::WRITE )
3553  {
3554  for(unsigned int i=0; i < 3; i++)
3555  extract(serializer, self.offset[i]);
3556 
3557  }
3558 }
3559 
3560 void insert(Serializer& serializer, const MagHardIronOffset::Response& self)
3561 {
3562  for(unsigned int i=0; i < 3; i++)
3563  insert(serializer, self.offset[i]);
3564 
3565 }
3566 void extract(Serializer& serializer, MagHardIronOffset::Response& self)
3567 {
3568  for(unsigned int i=0; i < 3; i++)
3569  extract(serializer, self.offset[i]);
3570 
3571 }
3572 
3573 TypedResult<MagHardIronOffset> writeMagHardIronOffset(C::mip_interface& device, const float* offset)
3574 {
3575  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3576  Serializer serializer(buffer, sizeof(buffer));
3577 
3578  insert(serializer, FunctionSelector::WRITE);
3579  assert(offset || (3 == 0));
3580  for(unsigned int i=0; i < 3; i++)
3581  insert(serializer, offset[i]);
3582 
3583  assert(serializer.isOk());
3584 
3585  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_HARD_IRON_OFFSET, buffer, (uint8_t)mip_serializer_length(&serializer));
3586 }
3587 TypedResult<MagHardIronOffset> readMagHardIronOffset(C::mip_interface& device, float* offsetOut)
3588 {
3589  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3590  Serializer serializer(buffer, sizeof(buffer));
3591 
3592  insert(serializer, FunctionSelector::READ);
3593  assert(serializer.isOk());
3594 
3595  uint8_t responseLength = sizeof(buffer);
3596  TypedResult<MagHardIronOffset> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_HARD_IRON_OFFSET, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_HARD_IRON_OFFSET_VECTOR, buffer, &responseLength);
3597 
3598  if( result == MIP_ACK_OK )
3599  {
3600  Serializer deserializer(buffer, responseLength);
3601 
3602  assert(offsetOut || (3 == 0));
3603  for(unsigned int i=0; i < 3; i++)
3604  extract(deserializer, offsetOut[i]);
3605 
3606  if( deserializer.remaining() != 0 )
3607  result = MIP_STATUS_ERROR;
3608  }
3609  return result;
3610 }
3611 TypedResult<MagHardIronOffset> saveMagHardIronOffset(C::mip_interface& device)
3612 {
3613  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3614  Serializer serializer(buffer, sizeof(buffer));
3615 
3616  insert(serializer, FunctionSelector::SAVE);
3617  assert(serializer.isOk());
3618 
3619  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_HARD_IRON_OFFSET, buffer, (uint8_t)mip_serializer_length(&serializer));
3620 }
3621 TypedResult<MagHardIronOffset> loadMagHardIronOffset(C::mip_interface& device)
3622 {
3623  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3624  Serializer serializer(buffer, sizeof(buffer));
3625 
3626  insert(serializer, FunctionSelector::LOAD);
3627  assert(serializer.isOk());
3628 
3629  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_HARD_IRON_OFFSET, buffer, (uint8_t)mip_serializer_length(&serializer));
3630 }
3631 TypedResult<MagHardIronOffset> defaultMagHardIronOffset(C::mip_interface& device)
3632 {
3633  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3634  Serializer serializer(buffer, sizeof(buffer));
3635 
3636  insert(serializer, FunctionSelector::RESET);
3637  assert(serializer.isOk());
3638 
3639  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_HARD_IRON_OFFSET, buffer, (uint8_t)mip_serializer_length(&serializer));
3640 }
3641 void insert(Serializer& serializer, const MagSoftIronMatrix& self)
3642 {
3643  insert(serializer, self.function);
3644 
3645  if( self.function == FunctionSelector::WRITE )
3646  {
3647  for(unsigned int i=0; i < 9; i++)
3648  insert(serializer, self.offset[i]);
3649 
3650  }
3651 }
3652 void extract(Serializer& serializer, MagSoftIronMatrix& self)
3653 {
3654  extract(serializer, self.function);
3655 
3656  if( self.function == FunctionSelector::WRITE )
3657  {
3658  for(unsigned int i=0; i < 9; i++)
3659  extract(serializer, self.offset[i]);
3660 
3661  }
3662 }
3663 
3664 void insert(Serializer& serializer, const MagSoftIronMatrix::Response& self)
3665 {
3666  for(unsigned int i=0; i < 9; i++)
3667  insert(serializer, self.offset[i]);
3668 
3669 }
3670 void extract(Serializer& serializer, MagSoftIronMatrix::Response& self)
3671 {
3672  for(unsigned int i=0; i < 9; i++)
3673  extract(serializer, self.offset[i]);
3674 
3675 }
3676 
3677 TypedResult<MagSoftIronMatrix> writeMagSoftIronMatrix(C::mip_interface& device, const float* offset)
3678 {
3679  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3680  Serializer serializer(buffer, sizeof(buffer));
3681 
3682  insert(serializer, FunctionSelector::WRITE);
3683  assert(offset || (9 == 0));
3684  for(unsigned int i=0; i < 9; i++)
3685  insert(serializer, offset[i]);
3686 
3687  assert(serializer.isOk());
3688 
3689  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_SOFT_IRON_MATRIX, buffer, (uint8_t)mip_serializer_length(&serializer));
3690 }
3691 TypedResult<MagSoftIronMatrix> readMagSoftIronMatrix(C::mip_interface& device, float* offsetOut)
3692 {
3693  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3694  Serializer serializer(buffer, sizeof(buffer));
3695 
3696  insert(serializer, FunctionSelector::READ);
3697  assert(serializer.isOk());
3698 
3699  uint8_t responseLength = sizeof(buffer);
3700  TypedResult<MagSoftIronMatrix> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_SOFT_IRON_MATRIX, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_SOFT_IRON_COMP_MATRIX, buffer, &responseLength);
3701 
3702  if( result == MIP_ACK_OK )
3703  {
3704  Serializer deserializer(buffer, responseLength);
3705 
3706  assert(offsetOut || (9 == 0));
3707  for(unsigned int i=0; i < 9; i++)
3708  extract(deserializer, offsetOut[i]);
3709 
3710  if( deserializer.remaining() != 0 )
3711  result = MIP_STATUS_ERROR;
3712  }
3713  return result;
3714 }
3715 TypedResult<MagSoftIronMatrix> saveMagSoftIronMatrix(C::mip_interface& device)
3716 {
3717  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3718  Serializer serializer(buffer, sizeof(buffer));
3719 
3720  insert(serializer, FunctionSelector::SAVE);
3721  assert(serializer.isOk());
3722 
3723  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_SOFT_IRON_MATRIX, buffer, (uint8_t)mip_serializer_length(&serializer));
3724 }
3725 TypedResult<MagSoftIronMatrix> loadMagSoftIronMatrix(C::mip_interface& device)
3726 {
3727  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3728  Serializer serializer(buffer, sizeof(buffer));
3729 
3730  insert(serializer, FunctionSelector::LOAD);
3731  assert(serializer.isOk());
3732 
3733  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_SOFT_IRON_MATRIX, buffer, (uint8_t)mip_serializer_length(&serializer));
3734 }
3735 TypedResult<MagSoftIronMatrix> defaultMagSoftIronMatrix(C::mip_interface& device)
3736 {
3737  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3738  Serializer serializer(buffer, sizeof(buffer));
3739 
3740  insert(serializer, FunctionSelector::RESET);
3741  assert(serializer.isOk());
3742 
3743  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_SOFT_IRON_MATRIX, buffer, (uint8_t)mip_serializer_length(&serializer));
3744 }
3745 void insert(Serializer& serializer, const ConingScullingEnable& self)
3746 {
3747  insert(serializer, self.function);
3748 
3749  if( self.function == FunctionSelector::WRITE )
3750  {
3751  insert(serializer, self.enable);
3752 
3753  }
3754 }
3755 void extract(Serializer& serializer, ConingScullingEnable& self)
3756 {
3757  extract(serializer, self.function);
3758 
3759  if( self.function == FunctionSelector::WRITE )
3760  {
3761  extract(serializer, self.enable);
3762 
3763  }
3764 }
3765 
3766 void insert(Serializer& serializer, const ConingScullingEnable::Response& self)
3767 {
3768  insert(serializer, self.enable);
3769 
3770 }
3771 void extract(Serializer& serializer, ConingScullingEnable::Response& self)
3772 {
3773  extract(serializer, self.enable);
3774 
3775 }
3776 
3777 TypedResult<ConingScullingEnable> writeConingScullingEnable(C::mip_interface& device, bool enable)
3778 {
3779  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3780  Serializer serializer(buffer, sizeof(buffer));
3781 
3782  insert(serializer, FunctionSelector::WRITE);
3783  insert(serializer, enable);
3784 
3785  assert(serializer.isOk());
3786 
3787  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_CONING_AND_SCULLING_ENABLE, buffer, (uint8_t)mip_serializer_length(&serializer));
3788 }
3789 TypedResult<ConingScullingEnable> readConingScullingEnable(C::mip_interface& device, bool* enableOut)
3790 {
3791  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3792  Serializer serializer(buffer, sizeof(buffer));
3793 
3794  insert(serializer, FunctionSelector::READ);
3795  assert(serializer.isOk());
3796 
3797  uint8_t responseLength = sizeof(buffer);
3798  TypedResult<ConingScullingEnable> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_CONING_AND_SCULLING_ENABLE, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_CONING_AND_SCULLING_ENABLE, buffer, &responseLength);
3799 
3800  if( result == MIP_ACK_OK )
3801  {
3802  Serializer deserializer(buffer, responseLength);
3803 
3804  assert(enableOut);
3805  extract(deserializer, *enableOut);
3806 
3807  if( deserializer.remaining() != 0 )
3808  result = MIP_STATUS_ERROR;
3809  }
3810  return result;
3811 }
3812 TypedResult<ConingScullingEnable> saveConingScullingEnable(C::mip_interface& device)
3813 {
3814  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3815  Serializer serializer(buffer, sizeof(buffer));
3816 
3817  insert(serializer, FunctionSelector::SAVE);
3818  assert(serializer.isOk());
3819 
3820  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_CONING_AND_SCULLING_ENABLE, buffer, (uint8_t)mip_serializer_length(&serializer));
3821 }
3822 TypedResult<ConingScullingEnable> loadConingScullingEnable(C::mip_interface& device)
3823 {
3824  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3825  Serializer serializer(buffer, sizeof(buffer));
3826 
3827  insert(serializer, FunctionSelector::LOAD);
3828  assert(serializer.isOk());
3829 
3830  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_CONING_AND_SCULLING_ENABLE, buffer, (uint8_t)mip_serializer_length(&serializer));
3831 }
3832 TypedResult<ConingScullingEnable> defaultConingScullingEnable(C::mip_interface& device)
3833 {
3834  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3835  Serializer serializer(buffer, sizeof(buffer));
3836 
3837  insert(serializer, FunctionSelector::RESET);
3838  assert(serializer.isOk());
3839 
3840  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_CONING_AND_SCULLING_ENABLE, buffer, (uint8_t)mip_serializer_length(&serializer));
3841 }
3842 void insert(Serializer& serializer, const Sensor2VehicleTransformEuler& self)
3843 {
3844  insert(serializer, self.function);
3845 
3846  if( self.function == FunctionSelector::WRITE )
3847  {
3848  insert(serializer, self.roll);
3849 
3850  insert(serializer, self.pitch);
3851 
3852  insert(serializer, self.yaw);
3853 
3854  }
3855 }
3856 void extract(Serializer& serializer, Sensor2VehicleTransformEuler& self)
3857 {
3858  extract(serializer, self.function);
3859 
3860  if( self.function == FunctionSelector::WRITE )
3861  {
3862  extract(serializer, self.roll);
3863 
3864  extract(serializer, self.pitch);
3865 
3866  extract(serializer, self.yaw);
3867 
3868  }
3869 }
3870 
3871 void insert(Serializer& serializer, const Sensor2VehicleTransformEuler::Response& self)
3872 {
3873  insert(serializer, self.roll);
3874 
3875  insert(serializer, self.pitch);
3876 
3877  insert(serializer, self.yaw);
3878 
3879 }
3880 void extract(Serializer& serializer, Sensor2VehicleTransformEuler::Response& self)
3881 {
3882  extract(serializer, self.roll);
3883 
3884  extract(serializer, self.pitch);
3885 
3886  extract(serializer, self.yaw);
3887 
3888 }
3889 
3890 TypedResult<Sensor2VehicleTransformEuler> writeSensor2VehicleTransformEuler(C::mip_interface& device, float roll, float pitch, float yaw)
3891 {
3892  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3893  Serializer serializer(buffer, sizeof(buffer));
3894 
3895  insert(serializer, FunctionSelector::WRITE);
3896  insert(serializer, roll);
3897 
3898  insert(serializer, pitch);
3899 
3900  insert(serializer, yaw);
3901 
3902  assert(serializer.isOk());
3903 
3904  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_SENSOR2VEHICLE_TRANSFORM_EUL, buffer, (uint8_t)mip_serializer_length(&serializer));
3905 }
3906 TypedResult<Sensor2VehicleTransformEuler> readSensor2VehicleTransformEuler(C::mip_interface& device, float* rollOut, float* pitchOut, float* yawOut)
3907 {
3908  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3909  Serializer serializer(buffer, sizeof(buffer));
3910 
3911  insert(serializer, FunctionSelector::READ);
3912  assert(serializer.isOk());
3913 
3914  uint8_t responseLength = sizeof(buffer);
3915  TypedResult<Sensor2VehicleTransformEuler> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_SENSOR2VEHICLE_TRANSFORM_EUL, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_SENSOR2VEHICLE_TRANSFORM_EUL, buffer, &responseLength);
3916 
3917  if( result == MIP_ACK_OK )
3918  {
3919  Serializer deserializer(buffer, responseLength);
3920 
3921  assert(rollOut);
3922  extract(deserializer, *rollOut);
3923 
3924  assert(pitchOut);
3925  extract(deserializer, *pitchOut);
3926 
3927  assert(yawOut);
3928  extract(deserializer, *yawOut);
3929 
3930  if( deserializer.remaining() != 0 )
3931  result = MIP_STATUS_ERROR;
3932  }
3933  return result;
3934 }
3935 TypedResult<Sensor2VehicleTransformEuler> saveSensor2VehicleTransformEuler(C::mip_interface& device)
3936 {
3937  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3938  Serializer serializer(buffer, sizeof(buffer));
3939 
3940  insert(serializer, FunctionSelector::SAVE);
3941  assert(serializer.isOk());
3942 
3943  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_SENSOR2VEHICLE_TRANSFORM_EUL, buffer, (uint8_t)mip_serializer_length(&serializer));
3944 }
3945 TypedResult<Sensor2VehicleTransformEuler> loadSensor2VehicleTransformEuler(C::mip_interface& device)
3946 {
3947  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3948  Serializer serializer(buffer, sizeof(buffer));
3949 
3950  insert(serializer, FunctionSelector::LOAD);
3951  assert(serializer.isOk());
3952 
3953  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_SENSOR2VEHICLE_TRANSFORM_EUL, buffer, (uint8_t)mip_serializer_length(&serializer));
3954 }
3955 TypedResult<Sensor2VehicleTransformEuler> defaultSensor2VehicleTransformEuler(C::mip_interface& device)
3956 {
3957  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
3958  Serializer serializer(buffer, sizeof(buffer));
3959 
3960  insert(serializer, FunctionSelector::RESET);
3961  assert(serializer.isOk());
3962 
3963  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_SENSOR2VEHICLE_TRANSFORM_EUL, buffer, (uint8_t)mip_serializer_length(&serializer));
3964 }
3965 void insert(Serializer& serializer, const Sensor2VehicleTransformQuaternion& self)
3966 {
3967  insert(serializer, self.function);
3968 
3969  if( self.function == FunctionSelector::WRITE )
3970  {
3971  for(unsigned int i=0; i < 4; i++)
3972  insert(serializer, self.q[i]);
3973 
3974  }
3975 }
3976 void extract(Serializer& serializer, Sensor2VehicleTransformQuaternion& self)
3977 {
3978  extract(serializer, self.function);
3979 
3980  if( self.function == FunctionSelector::WRITE )
3981  {
3982  for(unsigned int i=0; i < 4; i++)
3983  extract(serializer, self.q[i]);
3984 
3985  }
3986 }
3987 
3988 void insert(Serializer& serializer, const Sensor2VehicleTransformQuaternion::Response& self)
3989 {
3990  for(unsigned int i=0; i < 4; i++)
3991  insert(serializer, self.q[i]);
3992 
3993 }
3994 void extract(Serializer& serializer, Sensor2VehicleTransformQuaternion::Response& self)
3995 {
3996  for(unsigned int i=0; i < 4; i++)
3997  extract(serializer, self.q[i]);
3998 
3999 }
4000 
4001 TypedResult<Sensor2VehicleTransformQuaternion> writeSensor2VehicleTransformQuaternion(C::mip_interface& device, const float* q)
4002 {
4003  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4004  Serializer serializer(buffer, sizeof(buffer));
4005 
4006  insert(serializer, FunctionSelector::WRITE);
4007  assert(q || (4 == 0));
4008  for(unsigned int i=0; i < 4; i++)
4009  insert(serializer, q[i]);
4010 
4011  assert(serializer.isOk());
4012 
4013  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_SENSOR2VEHICLE_TRANSFORM_QUAT, buffer, (uint8_t)mip_serializer_length(&serializer));
4014 }
4015 TypedResult<Sensor2VehicleTransformQuaternion> readSensor2VehicleTransformQuaternion(C::mip_interface& device, float* qOut)
4016 {
4017  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4018  Serializer serializer(buffer, sizeof(buffer));
4019 
4020  insert(serializer, FunctionSelector::READ);
4021  assert(serializer.isOk());
4022 
4023  uint8_t responseLength = sizeof(buffer);
4024  TypedResult<Sensor2VehicleTransformQuaternion> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_SENSOR2VEHICLE_TRANSFORM_QUAT, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_SENSOR2VEHICLE_TRANSFORM_QUAT, buffer, &responseLength);
4025 
4026  if( result == MIP_ACK_OK )
4027  {
4028  Serializer deserializer(buffer, responseLength);
4029 
4030  assert(qOut || (4 == 0));
4031  for(unsigned int i=0; i < 4; i++)
4032  extract(deserializer, qOut[i]);
4033 
4034  if( deserializer.remaining() != 0 )
4035  result = MIP_STATUS_ERROR;
4036  }
4037  return result;
4038 }
4039 TypedResult<Sensor2VehicleTransformQuaternion> saveSensor2VehicleTransformQuaternion(C::mip_interface& device)
4040 {
4041  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4042  Serializer serializer(buffer, sizeof(buffer));
4043 
4044  insert(serializer, FunctionSelector::SAVE);
4045  assert(serializer.isOk());
4046 
4047  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_SENSOR2VEHICLE_TRANSFORM_QUAT, buffer, (uint8_t)mip_serializer_length(&serializer));
4048 }
4049 TypedResult<Sensor2VehicleTransformQuaternion> loadSensor2VehicleTransformQuaternion(C::mip_interface& device)
4050 {
4051  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4052  Serializer serializer(buffer, sizeof(buffer));
4053 
4054  insert(serializer, FunctionSelector::LOAD);
4055  assert(serializer.isOk());
4056 
4057  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_SENSOR2VEHICLE_TRANSFORM_QUAT, buffer, (uint8_t)mip_serializer_length(&serializer));
4058 }
4059 TypedResult<Sensor2VehicleTransformQuaternion> defaultSensor2VehicleTransformQuaternion(C::mip_interface& device)
4060 {
4061  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4062  Serializer serializer(buffer, sizeof(buffer));
4063 
4064  insert(serializer, FunctionSelector::RESET);
4065  assert(serializer.isOk());
4066 
4067  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_SENSOR2VEHICLE_TRANSFORM_QUAT, buffer, (uint8_t)mip_serializer_length(&serializer));
4068 }
4069 void insert(Serializer& serializer, const Sensor2VehicleTransformDcm& self)
4070 {
4071  insert(serializer, self.function);
4072 
4073  if( self.function == FunctionSelector::WRITE )
4074  {
4075  for(unsigned int i=0; i < 9; i++)
4076  insert(serializer, self.dcm[i]);
4077 
4078  }
4079 }
4080 void extract(Serializer& serializer, Sensor2VehicleTransformDcm& self)
4081 {
4082  extract(serializer, self.function);
4083 
4084  if( self.function == FunctionSelector::WRITE )
4085  {
4086  for(unsigned int i=0; i < 9; i++)
4087  extract(serializer, self.dcm[i]);
4088 
4089  }
4090 }
4091 
4092 void insert(Serializer& serializer, const Sensor2VehicleTransformDcm::Response& self)
4093 {
4094  for(unsigned int i=0; i < 9; i++)
4095  insert(serializer, self.dcm[i]);
4096 
4097 }
4098 void extract(Serializer& serializer, Sensor2VehicleTransformDcm::Response& self)
4099 {
4100  for(unsigned int i=0; i < 9; i++)
4101  extract(serializer, self.dcm[i]);
4102 
4103 }
4104 
4105 TypedResult<Sensor2VehicleTransformDcm> writeSensor2VehicleTransformDcm(C::mip_interface& device, const float* dcm)
4106 {
4107  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4108  Serializer serializer(buffer, sizeof(buffer));
4109 
4110  insert(serializer, FunctionSelector::WRITE);
4111  assert(dcm || (9 == 0));
4112  for(unsigned int i=0; i < 9; i++)
4113  insert(serializer, dcm[i]);
4114 
4115  assert(serializer.isOk());
4116 
4117  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_SENSOR2VEHICLE_TRANSFORM_DCM, buffer, (uint8_t)mip_serializer_length(&serializer));
4118 }
4119 TypedResult<Sensor2VehicleTransformDcm> readSensor2VehicleTransformDcm(C::mip_interface& device, float* dcmOut)
4120 {
4121  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4122  Serializer serializer(buffer, sizeof(buffer));
4123 
4124  insert(serializer, FunctionSelector::READ);
4125  assert(serializer.isOk());
4126 
4127  uint8_t responseLength = sizeof(buffer);
4128  TypedResult<Sensor2VehicleTransformDcm> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_SENSOR2VEHICLE_TRANSFORM_DCM, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_SENSOR2VEHICLE_TRANSFORM_DCM, buffer, &responseLength);
4129 
4130  if( result == MIP_ACK_OK )
4131  {
4132  Serializer deserializer(buffer, responseLength);
4133 
4134  assert(dcmOut || (9 == 0));
4135  for(unsigned int i=0; i < 9; i++)
4136  extract(deserializer, dcmOut[i]);
4137 
4138  if( deserializer.remaining() != 0 )
4139  result = MIP_STATUS_ERROR;
4140  }
4141  return result;
4142 }
4143 TypedResult<Sensor2VehicleTransformDcm> saveSensor2VehicleTransformDcm(C::mip_interface& device)
4144 {
4145  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4146  Serializer serializer(buffer, sizeof(buffer));
4147 
4148  insert(serializer, FunctionSelector::SAVE);
4149  assert(serializer.isOk());
4150 
4151  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_SENSOR2VEHICLE_TRANSFORM_DCM, buffer, (uint8_t)mip_serializer_length(&serializer));
4152 }
4153 TypedResult<Sensor2VehicleTransformDcm> loadSensor2VehicleTransformDcm(C::mip_interface& device)
4154 {
4155  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4156  Serializer serializer(buffer, sizeof(buffer));
4157 
4158  insert(serializer, FunctionSelector::LOAD);
4159  assert(serializer.isOk());
4160 
4161  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_SENSOR2VEHICLE_TRANSFORM_DCM, buffer, (uint8_t)mip_serializer_length(&serializer));
4162 }
4163 TypedResult<Sensor2VehicleTransformDcm> defaultSensor2VehicleTransformDcm(C::mip_interface& device)
4164 {
4165  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4166  Serializer serializer(buffer, sizeof(buffer));
4167 
4168  insert(serializer, FunctionSelector::RESET);
4169  assert(serializer.isOk());
4170 
4171  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_SENSOR2VEHICLE_TRANSFORM_DCM, buffer, (uint8_t)mip_serializer_length(&serializer));
4172 }
4173 void insert(Serializer& serializer, const ComplementaryFilter& self)
4174 {
4175  insert(serializer, self.function);
4176 
4177  if( self.function == FunctionSelector::WRITE )
4178  {
4179  insert(serializer, self.pitch_roll_enable);
4180 
4181  insert(serializer, self.heading_enable);
4182 
4183  insert(serializer, self.pitch_roll_time_constant);
4184 
4185  insert(serializer, self.heading_time_constant);
4186 
4187  }
4188 }
4189 void extract(Serializer& serializer, ComplementaryFilter& self)
4190 {
4191  extract(serializer, self.function);
4192 
4193  if( self.function == FunctionSelector::WRITE )
4194  {
4195  extract(serializer, self.pitch_roll_enable);
4196 
4197  extract(serializer, self.heading_enable);
4198 
4199  extract(serializer, self.pitch_roll_time_constant);
4200 
4201  extract(serializer, self.heading_time_constant);
4202 
4203  }
4204 }
4205 
4206 void insert(Serializer& serializer, const ComplementaryFilter::Response& self)
4207 {
4208  insert(serializer, self.pitch_roll_enable);
4209 
4210  insert(serializer, self.heading_enable);
4211 
4212  insert(serializer, self.pitch_roll_time_constant);
4213 
4214  insert(serializer, self.heading_time_constant);
4215 
4216 }
4217 void extract(Serializer& serializer, ComplementaryFilter::Response& self)
4218 {
4219  extract(serializer, self.pitch_roll_enable);
4220 
4221  extract(serializer, self.heading_enable);
4222 
4223  extract(serializer, self.pitch_roll_time_constant);
4224 
4225  extract(serializer, self.heading_time_constant);
4226 
4227 }
4228 
4229 TypedResult<ComplementaryFilter> writeComplementaryFilter(C::mip_interface& device, bool pitchRollEnable, bool headingEnable, float pitchRollTimeConstant, float headingTimeConstant)
4230 {
4231  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4232  Serializer serializer(buffer, sizeof(buffer));
4233 
4234  insert(serializer, FunctionSelector::WRITE);
4235  insert(serializer, pitchRollEnable);
4236 
4237  insert(serializer, headingEnable);
4238 
4239  insert(serializer, pitchRollTimeConstant);
4240 
4241  insert(serializer, headingTimeConstant);
4242 
4243  assert(serializer.isOk());
4244 
4245  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_LEGACY_COMP_FILTER, buffer, (uint8_t)mip_serializer_length(&serializer));
4246 }
4247 TypedResult<ComplementaryFilter> readComplementaryFilter(C::mip_interface& device, bool* pitchRollEnableOut, bool* headingEnableOut, float* pitchRollTimeConstantOut, float* headingTimeConstantOut)
4248 {
4249  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4250  Serializer serializer(buffer, sizeof(buffer));
4251 
4252  insert(serializer, FunctionSelector::READ);
4253  assert(serializer.isOk());
4254 
4255  uint8_t responseLength = sizeof(buffer);
4256  TypedResult<ComplementaryFilter> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_LEGACY_COMP_FILTER, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_LEGACY_COMP_FILTER, buffer, &responseLength);
4257 
4258  if( result == MIP_ACK_OK )
4259  {
4260  Serializer deserializer(buffer, responseLength);
4261 
4262  assert(pitchRollEnableOut);
4263  extract(deserializer, *pitchRollEnableOut);
4264 
4265  assert(headingEnableOut);
4266  extract(deserializer, *headingEnableOut);
4267 
4268  assert(pitchRollTimeConstantOut);
4269  extract(deserializer, *pitchRollTimeConstantOut);
4270 
4271  assert(headingTimeConstantOut);
4272  extract(deserializer, *headingTimeConstantOut);
4273 
4274  if( deserializer.remaining() != 0 )
4275  result = MIP_STATUS_ERROR;
4276  }
4277  return result;
4278 }
4279 TypedResult<ComplementaryFilter> saveComplementaryFilter(C::mip_interface& device)
4280 {
4281  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4282  Serializer serializer(buffer, sizeof(buffer));
4283 
4284  insert(serializer, FunctionSelector::SAVE);
4285  assert(serializer.isOk());
4286 
4287  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_LEGACY_COMP_FILTER, buffer, (uint8_t)mip_serializer_length(&serializer));
4288 }
4289 TypedResult<ComplementaryFilter> loadComplementaryFilter(C::mip_interface& device)
4290 {
4291  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4292  Serializer serializer(buffer, sizeof(buffer));
4293 
4294  insert(serializer, FunctionSelector::LOAD);
4295  assert(serializer.isOk());
4296 
4297  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_LEGACY_COMP_FILTER, buffer, (uint8_t)mip_serializer_length(&serializer));
4298 }
4299 TypedResult<ComplementaryFilter> defaultComplementaryFilter(C::mip_interface& device)
4300 {
4301  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4302  Serializer serializer(buffer, sizeof(buffer));
4303 
4304  insert(serializer, FunctionSelector::RESET);
4305  assert(serializer.isOk());
4306 
4307  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_LEGACY_COMP_FILTER, buffer, (uint8_t)mip_serializer_length(&serializer));
4308 }
4309 void insert(Serializer& serializer, const SensorRange& self)
4310 {
4311  insert(serializer, self.function);
4312 
4313  insert(serializer, self.sensor);
4314 
4315  if( self.function == FunctionSelector::WRITE )
4316  {
4317  insert(serializer, self.setting);
4318 
4319  }
4320 }
4321 void extract(Serializer& serializer, SensorRange& self)
4322 {
4323  extract(serializer, self.function);
4324 
4325  extract(serializer, self.sensor);
4326 
4327  if( self.function == FunctionSelector::WRITE )
4328  {
4329  extract(serializer, self.setting);
4330 
4331  }
4332 }
4333 
4334 void insert(Serializer& serializer, const SensorRange::Response& self)
4335 {
4336  insert(serializer, self.sensor);
4337 
4338  insert(serializer, self.setting);
4339 
4340 }
4341 void extract(Serializer& serializer, SensorRange::Response& self)
4342 {
4343  extract(serializer, self.sensor);
4344 
4345  extract(serializer, self.setting);
4346 
4347 }
4348 
4349 TypedResult<SensorRange> writeSensorRange(C::mip_interface& device, SensorRangeType sensor, uint8_t setting)
4350 {
4351  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4352  Serializer serializer(buffer, sizeof(buffer));
4353 
4354  insert(serializer, FunctionSelector::WRITE);
4355  insert(serializer, sensor);
4356 
4357  insert(serializer, setting);
4358 
4359  assert(serializer.isOk());
4360 
4361  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_SENSOR_RANGE, buffer, (uint8_t)mip_serializer_length(&serializer));
4362 }
4363 TypedResult<SensorRange> readSensorRange(C::mip_interface& device, SensorRangeType sensor, uint8_t* settingOut)
4364 {
4365  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4366  Serializer serializer(buffer, sizeof(buffer));
4367 
4368  insert(serializer, FunctionSelector::READ);
4369  insert(serializer, sensor);
4370 
4371  assert(serializer.isOk());
4372 
4373  uint8_t responseLength = sizeof(buffer);
4374  TypedResult<SensorRange> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_SENSOR_RANGE, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_SENSOR_RANGE, buffer, &responseLength);
4375 
4376  if( result == MIP_ACK_OK )
4377  {
4378  Serializer deserializer(buffer, responseLength);
4379 
4380  extract(deserializer, sensor);
4381 
4382  assert(settingOut);
4383  extract(deserializer, *settingOut);
4384 
4385  if( deserializer.remaining() != 0 )
4386  result = MIP_STATUS_ERROR;
4387  }
4388  return result;
4389 }
4390 TypedResult<SensorRange> saveSensorRange(C::mip_interface& device, SensorRangeType sensor)
4391 {
4392  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4393  Serializer serializer(buffer, sizeof(buffer));
4394 
4395  insert(serializer, FunctionSelector::SAVE);
4396  insert(serializer, sensor);
4397 
4398  assert(serializer.isOk());
4399 
4400  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_SENSOR_RANGE, buffer, (uint8_t)mip_serializer_length(&serializer));
4401 }
4402 TypedResult<SensorRange> loadSensorRange(C::mip_interface& device, SensorRangeType sensor)
4403 {
4404  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4405  Serializer serializer(buffer, sizeof(buffer));
4406 
4407  insert(serializer, FunctionSelector::LOAD);
4408  insert(serializer, sensor);
4409 
4410  assert(serializer.isOk());
4411 
4412  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_SENSOR_RANGE, buffer, (uint8_t)mip_serializer_length(&serializer));
4413 }
4414 TypedResult<SensorRange> defaultSensorRange(C::mip_interface& device, SensorRangeType sensor)
4415 {
4416  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4417  Serializer serializer(buffer, sizeof(buffer));
4418 
4419  insert(serializer, FunctionSelector::RESET);
4420  insert(serializer, sensor);
4421 
4422  assert(serializer.isOk());
4423 
4424  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_SENSOR_RANGE, buffer, (uint8_t)mip_serializer_length(&serializer));
4425 }
4426 void insert(Serializer& serializer, const CalibratedSensorRanges& self)
4427 {
4428  insert(serializer, self.sensor);
4429 
4430 }
4431 void extract(Serializer& serializer, CalibratedSensorRanges& self)
4432 {
4433  extract(serializer, self.sensor);
4434 
4435 }
4436 
4437 void insert(Serializer& serializer, const CalibratedSensorRanges::Response& self)
4438 {
4439  insert(serializer, self.sensor);
4440 
4441  insert(serializer, self.num_ranges);
4442 
4443  for(unsigned int i=0; i < self.num_ranges; i++)
4444  insert(serializer, self.ranges[i]);
4445 
4446 }
4447 void extract(Serializer& serializer, CalibratedSensorRanges::Response& self)
4448 {
4449  extract(serializer, self.sensor);
4450 
4451  C::extract_count(&serializer, &self.num_ranges, sizeof(self.ranges)/sizeof(self.ranges[0]));
4452  for(unsigned int i=0; i < self.num_ranges; i++)
4453  extract(serializer, self.ranges[i]);
4454 
4455 }
4456 
4457 void insert(Serializer& serializer, const CalibratedSensorRanges::Entry& self)
4458 {
4459  insert(serializer, self.setting);
4460 
4461  insert(serializer, self.range);
4462 
4463 }
4464 void extract(Serializer& serializer, CalibratedSensorRanges::Entry& self)
4465 {
4466  extract(serializer, self.setting);
4467 
4468  extract(serializer, self.range);
4469 
4470 }
4471 
4472 TypedResult<CalibratedSensorRanges> calibratedSensorRanges(C::mip_interface& device, SensorRangeType sensor, uint8_t* numRangesOut, uint8_t numRangesOutMax, CalibratedSensorRanges::Entry* rangesOut)
4473 {
4474  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4475  Serializer serializer(buffer, sizeof(buffer));
4476 
4477  insert(serializer, sensor);
4478 
4479  assert(serializer.isOk());
4480 
4481  uint8_t responseLength = sizeof(buffer);
4482  TypedResult<CalibratedSensorRanges> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_CALIBRATED_RANGES, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_CALIBRATED_RANGES, buffer, &responseLength);
4483 
4484  if( result == MIP_ACK_OK )
4485  {
4486  Serializer deserializer(buffer, responseLength);
4487 
4488  extract(deserializer, sensor);
4489 
4490  C::extract_count(&deserializer, numRangesOut, numRangesOutMax);
4491  assert(rangesOut || (numRangesOut == 0));
4492  for(unsigned int i=0; i < *numRangesOut; i++)
4493  extract(deserializer, rangesOut[i]);
4494 
4495  if( deserializer.remaining() != 0 )
4496  result = MIP_STATUS_ERROR;
4497  }
4498  return result;
4499 }
4500 void insert(Serializer& serializer, const LowpassFilter& self)
4501 {
4502  insert(serializer, self.function);
4503 
4504  insert(serializer, self.desc_set);
4505 
4506  insert(serializer, self.field_desc);
4507 
4508  if( self.function == FunctionSelector::WRITE )
4509  {
4510  insert(serializer, self.enable);
4511 
4512  insert(serializer, self.manual);
4513 
4514  insert(serializer, self.frequency);
4515 
4516  }
4517 }
4518 void extract(Serializer& serializer, LowpassFilter& self)
4519 {
4520  extract(serializer, self.function);
4521 
4522  extract(serializer, self.desc_set);
4523 
4524  extract(serializer, self.field_desc);
4525 
4526  if( self.function == FunctionSelector::WRITE )
4527  {
4528  extract(serializer, self.enable);
4529 
4530  extract(serializer, self.manual);
4531 
4532  extract(serializer, self.frequency);
4533 
4534  }
4535 }
4536 
4537 void insert(Serializer& serializer, const LowpassFilter::Response& self)
4538 {
4539  insert(serializer, self.desc_set);
4540 
4541  insert(serializer, self.field_desc);
4542 
4543  insert(serializer, self.enable);
4544 
4545  insert(serializer, self.manual);
4546 
4547  insert(serializer, self.frequency);
4548 
4549 }
4550 void extract(Serializer& serializer, LowpassFilter::Response& self)
4551 {
4552  extract(serializer, self.desc_set);
4553 
4554  extract(serializer, self.field_desc);
4555 
4556  extract(serializer, self.enable);
4557 
4558  extract(serializer, self.manual);
4559 
4560  extract(serializer, self.frequency);
4561 
4562 }
4563 
4564 TypedResult<LowpassFilter> writeLowpassFilter(C::mip_interface& device, uint8_t descSet, uint8_t fieldDesc, bool enable, bool manual, float frequency)
4565 {
4566  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4567  Serializer serializer(buffer, sizeof(buffer));
4568 
4569  insert(serializer, FunctionSelector::WRITE);
4570  insert(serializer, descSet);
4571 
4572  insert(serializer, fieldDesc);
4573 
4574  insert(serializer, enable);
4575 
4576  insert(serializer, manual);
4577 
4578  insert(serializer, frequency);
4579 
4580  assert(serializer.isOk());
4581 
4582  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_LOWPASS_FILTER, buffer, (uint8_t)mip_serializer_length(&serializer));
4583 }
4584 TypedResult<LowpassFilter> readLowpassFilter(C::mip_interface& device, uint8_t descSet, uint8_t fieldDesc, bool* enableOut, bool* manualOut, float* frequencyOut)
4585 {
4586  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4587  Serializer serializer(buffer, sizeof(buffer));
4588 
4589  insert(serializer, FunctionSelector::READ);
4590  insert(serializer, descSet);
4591 
4592  insert(serializer, fieldDesc);
4593 
4594  assert(serializer.isOk());
4595 
4596  uint8_t responseLength = sizeof(buffer);
4597  TypedResult<LowpassFilter> result = mip_interface_run_command_with_response(&device, DESCRIPTOR_SET, CMD_LOWPASS_FILTER, buffer, (uint8_t)mip_serializer_length(&serializer), REPLY_LOWPASS_FILTER, buffer, &responseLength);
4598 
4599  if( result == MIP_ACK_OK )
4600  {
4601  Serializer deserializer(buffer, responseLength);
4602 
4603  extract(deserializer, descSet);
4604 
4605  extract(deserializer, fieldDesc);
4606 
4607  assert(enableOut);
4608  extract(deserializer, *enableOut);
4609 
4610  assert(manualOut);
4611  extract(deserializer, *manualOut);
4612 
4613  assert(frequencyOut);
4614  extract(deserializer, *frequencyOut);
4615 
4616  if( deserializer.remaining() != 0 )
4617  result = MIP_STATUS_ERROR;
4618  }
4619  return result;
4620 }
4621 TypedResult<LowpassFilter> saveLowpassFilter(C::mip_interface& device, uint8_t descSet, uint8_t fieldDesc)
4622 {
4623  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4624  Serializer serializer(buffer, sizeof(buffer));
4625 
4626  insert(serializer, FunctionSelector::SAVE);
4627  insert(serializer, descSet);
4628 
4629  insert(serializer, fieldDesc);
4630 
4631  assert(serializer.isOk());
4632 
4633  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_LOWPASS_FILTER, buffer, (uint8_t)mip_serializer_length(&serializer));
4634 }
4635 TypedResult<LowpassFilter> loadLowpassFilter(C::mip_interface& device, uint8_t descSet, uint8_t fieldDesc)
4636 {
4637  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4638  Serializer serializer(buffer, sizeof(buffer));
4639 
4640  insert(serializer, FunctionSelector::LOAD);
4641  insert(serializer, descSet);
4642 
4643  insert(serializer, fieldDesc);
4644 
4645  assert(serializer.isOk());
4646 
4647  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_LOWPASS_FILTER, buffer, (uint8_t)mip_serializer_length(&serializer));
4648 }
4649 TypedResult<LowpassFilter> defaultLowpassFilter(C::mip_interface& device, uint8_t descSet, uint8_t fieldDesc)
4650 {
4651  uint8_t buffer[MIP_FIELD_PAYLOAD_LENGTH_MAX];
4652  Serializer serializer(buffer, sizeof(buffer));
4653 
4654  insert(serializer, FunctionSelector::RESET);
4655  insert(serializer, descSet);
4656 
4657  insert(serializer, fieldDesc);
4658 
4659  assert(serializer.isOk());
4660 
4661  return mip_interface_run_command(&device, DESCRIPTOR_SET, CMD_LOWPASS_FILTER, buffer, (uint8_t)mip_serializer_length(&serializer));
4662 }
4663 
4664 } // namespace commands_3dm
4665 } // namespace mip
4666 
mip::commands_3dm::factoryStreaming
TypedResult< FactoryStreaming > factoryStreaming(C::mip_interface &device, FactoryStreaming::Action action, uint8_t reserved)
Definition: commands_3dm.cpp:1159
mip::commands_3dm::writeGpioConfig
TypedResult< GpioConfig > writeGpioConfig(C::mip_interface &device, uint8_t pin, GpioConfig::Feature feature, GpioConfig::Behavior behavior, GpioConfig::PinMode pinMode)
Definition: commands_3dm.cpp:2100
mip::commands_3dm::defaultUartBaudrate
TypedResult< UartBaudrate > defaultUartBaudrate(C::mip_interface &device)
Definition: commands_3dm.cpp:1134
mip_interface
struct mip_interface mip_interface
State of the interface for communicating with a MIP device.
mip::commands_3dm::saveDeviceSettings
TypedResult< DeviceSettings > saveDeviceSettings(C::mip_interface &device)
Definition: commands_3dm.cpp:1017
mip::commands_3dm::writeSensor2VehicleTransformDcm
TypedResult< Sensor2VehicleTransformDcm > writeSensor2VehicleTransformDcm(C::mip_interface &device, const float *dcm)
Definition: commands_3dm.cpp:4105
mip
Definition: ping.cpp:12
mip::commands_3dm::saveSensor2VehicleTransformQuaternion
TypedResult< Sensor2VehicleTransformQuaternion > saveSensor2VehicleTransformQuaternion(C::mip_interface &device)
Definition: commands_3dm.cpp:4039
mip::commands_3dm::saveNmeaMessageFormat
TypedResult< NmeaMessageFormat > saveNmeaMessageFormat(C::mip_interface &device)
Definition: commands_3dm.cpp:976
mip::commands_3dm::loadGyroBias
TypedResult< GyroBias > loadGyroBias(C::mip_interface &device)
Definition: commands_3dm.cpp:3468
mip::commands_3dm::loadUartBaudrate
TypedResult< UartBaudrate > loadUartBaudrate(C::mip_interface &device)
Definition: commands_3dm.cpp:1124
mip_interface_run_command
enum mip_cmd_result mip_interface_run_command(mip_interface *device, uint8_t descriptor_set, uint8_t cmd_descriptor, const uint8_t *cmd_data, uint8_t cmd_length)
Runs a command using a pre-serialized payload.
Definition: mip_interface.c:568
mip::commands_3dm::defaultMagHardIronOffset
TypedResult< MagHardIronOffset > defaultMagHardIronOffset(C::mip_interface &device)
Definition: commands_3dm.cpp:3631
mip::commands_3dm::writeEventControl
TypedResult< EventControl > writeEventControl(C::mip_interface &device, uint8_t instance, EventControl::Mode mode)
Definition: commands_3dm.cpp:2518
mip::commands_3dm::writeNmeaMessageFormat
TypedResult< NmeaMessageFormat > writeNmeaMessageFormat(C::mip_interface &device, uint8_t count, const NmeaMessage *formatEntries)
Definition: commands_3dm.cpp:935
mip::commands_3dm::readMagSoftIronMatrix
TypedResult< MagSoftIronMatrix > readMagSoftIronMatrix(C::mip_interface &device, float *offsetOut)
Definition: commands_3dm.cpp:3691
mip::commands_3dm::readEventControl
TypedResult< EventControl > readEventControl(C::mip_interface &device, uint8_t instance, EventControl::Mode *modeOut)
Definition: commands_3dm.cpp:2532
mip::commands_3dm::loadSensorRange
TypedResult< SensorRange > loadSensorRange(C::mip_interface &device, SensorRangeType sensor)
Definition: commands_3dm.cpp:4402
mip::commands_3dm::gpsGetBaseRate
TypedResult< GpsGetBaseRate > gpsGetBaseRate(C::mip_interface &device, uint16_t *rateOut)
Definition: commands_3dm.cpp:568
mip::commands_3dm::readAccelBias
TypedResult< AccelBias > readAccelBias(C::mip_interface &device, float *biasOut)
Definition: commands_3dm.cpp:3330
mip::commands_3dm::readDatastreamControl
TypedResult< DatastreamControl > readDatastreamControl(C::mip_interface &device, uint8_t descSet, bool *enabledOut)
Definition: commands_3dm.cpp:1226
mip::commands_3dm::writeGnssTimeAssistance
TypedResult< GnssTimeAssistance > writeGnssTimeAssistance(C::mip_interface &device, double tow, uint16_t weekNumber, float accuracy)
Definition: commands_3dm.cpp:1746
mip::commands_3dm::extract
void extract(Serializer &serializer, NmeaMessage &self)
Definition: commands_3dm.cpp:38
mip::commands_3dm::loadDeviceSettings
TypedResult< DeviceSettings > loadDeviceSettings(C::mip_interface &device)
Definition: commands_3dm.cpp:1027
mip::commands_3dm::writePpsSource
TypedResult< PpsSource > writePpsSource(C::mip_interface &device, PpsSource::Source source)
Definition: commands_3dm.cpp:1979
mip::commands_3dm::loadEventTrigger
TypedResult< EventTrigger > loadEventTrigger(C::mip_interface &device, uint8_t instance)
Definition: commands_3dm.cpp:3027
mip::commands_3dm::saveComplementaryFilter
TypedResult< ComplementaryFilter > saveComplementaryFilter(C::mip_interface &device)
Definition: commands_3dm.cpp:4279
mip::commands_3dm::getBaseRate
TypedResult< GetBaseRate > getBaseRate(C::mip_interface &device, uint8_t descSet, uint16_t *rateOut)
Definition: commands_3dm.cpp:697
mip::commands_3dm::defaultGnssSbasSettings
TypedResult< GnssSbasSettings > defaultGnssSbasSettings(C::mip_interface &device)
Definition: commands_3dm.cpp:1578
mip::commands_3dm::readNmeaMessageFormat
TypedResult< NmeaMessageFormat > readNmeaMessageFormat(C::mip_interface &device, uint8_t *countOut, uint8_t countOutMax, NmeaMessage *formatEntriesOut)
Definition: commands_3dm.cpp:951
mip_serializer_length
size_t mip_serializer_length(const mip_serializer *serializer)
Determines the length of the data in the buffer.
Definition: serialization.c:131
mip::commands_3dm::saveUartBaudrate
TypedResult< UartBaudrate > saveUartBaudrate(C::mip_interface &device)
Definition: commands_3dm.cpp:1114
mip::commands_3dm::writeConingScullingEnable
TypedResult< ConingScullingEnable > writeConingScullingEnable(C::mip_interface &device, bool enable)
Definition: commands_3dm.cpp:3777
mip::commands_3dm::readEventTrigger
TypedResult< EventTrigger > readEventTrigger(C::mip_interface &device, uint8_t instance, EventTrigger::Type *typeOut, EventTrigger::Parameters *parametersOut)
Definition: commands_3dm.cpp:2973
mip::commands_3dm::writeEventTrigger
TypedResult< EventTrigger > writeEventTrigger(C::mip_interface &device, uint8_t instance, EventTrigger::Type type, const EventTrigger::Parameters &parameters)
Definition: commands_3dm.cpp:2944
mip::commands_3dm::writeGnssAssistedFix
TypedResult< GnssAssistedFix > writeGnssAssistedFix(C::mip_interface &device, GnssAssistedFix::AssistedFixOption option, uint8_t flags)
Definition: commands_3dm.cpp:1628
mip::commands_3dm::extract
void extract(Serializer &serializer, LowpassFilter::Response &self)
Definition: commands_3dm.cpp:4550
mip::commands_3dm::writeGpioState
TypedResult< GpioState > writeGpioState(C::mip_interface &device, uint8_t pin, bool state)
Definition: commands_3dm.cpp:2233
mip::commands_3dm::loadOdometer
TypedResult< Odometer > loadOdometer(C::mip_interface &device)
Definition: commands_3dm.cpp:2377
mip::commands_3dm::defaultNmeaMessageFormat
TypedResult< NmeaMessageFormat > defaultNmeaMessageFormat(C::mip_interface &device)
Definition: commands_3dm.cpp:996
mip::commands_3dm::saveDatastreamControl
TypedResult< DatastreamControl > saveDatastreamControl(C::mip_interface &device, uint8_t descSet)
Definition: commands_3dm.cpp:1253
mip::commands_3dm::saveFilterMessageFormat
TypedResult< FilterMessageFormat > saveFilterMessageFormat(C::mip_interface &device)
Definition: commands_3dm.cpp:475
mip::commands_3dm::loadGpsMessageFormat
TypedResult< GpsMessageFormat > loadGpsMessageFormat(C::mip_interface &device)
Definition: commands_3dm.cpp:372
mip::commands_3dm::readGyroBias
TypedResult< GyroBias > readGyroBias(C::mip_interface &device, float *biasOut)
Definition: commands_3dm.cpp:3434
mip::commands_3dm::writeSensorRange
TypedResult< SensorRange > writeSensorRange(C::mip_interface &device, SensorRangeType sensor, uint8_t setting)
Definition: commands_3dm.cpp:4349
mip::commands_3dm::saveSensor2VehicleTransformDcm
TypedResult< Sensor2VehicleTransformDcm > saveSensor2VehicleTransformDcm(C::mip_interface &device)
Definition: commands_3dm.cpp:4143
mip::commands_3dm::loadGnssAssistedFix
TypedResult< GnssAssistedFix > loadGnssAssistedFix(C::mip_interface &device)
Definition: commands_3dm.cpp:1678
mip::commands_3dm::defaultGnssAssistedFix
TypedResult< GnssAssistedFix > defaultGnssAssistedFix(C::mip_interface &device)
Definition: commands_3dm.cpp:1688
mip::commands_3dm::loadEventControl
TypedResult< EventControl > loadEventControl(C::mip_interface &device, uint8_t instance)
Definition: commands_3dm.cpp:2571
mip::commands_3dm::readGnssSbasSettings
TypedResult< GnssSbasSettings > readGnssSbasSettings(C::mip_interface &device, uint8_t *enableSbasOut, GnssSbasSettings::SBASOptions *sbasOptionsOut, uint8_t *numIncludedPrnsOut, uint8_t numIncludedPrnsOutMax, uint16_t *includedPrnsOut)
Definition: commands_3dm.cpp:1527
mip::commands_3dm::readFilterMessageFormat
TypedResult< FilterMessageFormat > readFilterMessageFormat(C::mip_interface &device, uint8_t *numDescriptorsOut, uint8_t numDescriptorsOutMax, DescriptorRate *descriptorsOut)
Definition: commands_3dm.cpp:450
mip::commands_3dm::saveConingScullingEnable
TypedResult< ConingScullingEnable > saveConingScullingEnable(C::mip_interface &device)
Definition: commands_3dm.cpp:3812
mip::commands_3dm::defaultEventAction
TypedResult< EventAction > defaultEventAction(C::mip_interface &device, uint8_t instance)
Definition: commands_3dm.cpp:3268
mip::commands_3dm::imuGetBaseRate
TypedResult< ImuGetBaseRate > imuGetBaseRate(C::mip_interface &device, uint16_t *rateOut)
Definition: commands_3dm.cpp:527
mip::commands_3dm::writeGnssSbasSettings
TypedResult< GnssSbasSettings > writeGnssSbasSettings(C::mip_interface &device, uint8_t enableSbas, GnssSbasSettings::SBASOptions sbasOptions, uint8_t numIncludedPrns, const uint16_t *includedPrns)
Definition: commands_3dm.cpp:1507
mip::commands_3dm::defaultMessageFormat
TypedResult< MessageFormat > defaultMessageFormat(C::mip_interface &device, uint8_t descSet)
Definition: commands_3dm.cpp:844
mip::commands_3dm::writeLowpassFilter
TypedResult< LowpassFilter > writeLowpassFilter(C::mip_interface &device, uint8_t descSet, uint8_t fieldDesc, bool enable, bool manual, float frequency)
Definition: commands_3dm.cpp:4564
mip::commands_3dm::defaultComplementaryFilter
TypedResult< ComplementaryFilter > defaultComplementaryFilter(C::mip_interface &device)
Definition: commands_3dm.cpp:4299
mip::commands_3dm::saveMagHardIronOffset
TypedResult< MagHardIronOffset > saveMagHardIronOffset(C::mip_interface &device)
Definition: commands_3dm.cpp:3611
mip::commands_3dm::saveGnssSbasSettings
TypedResult< GnssSbasSettings > saveGnssSbasSettings(C::mip_interface &device)
Definition: commands_3dm.cpp:1558
mip::commands_3dm::saveGpioConfig
TypedResult< GpioConfig > saveGpioConfig(C::mip_interface &device, uint8_t pin)
Definition: commands_3dm.cpp:2151
mip::commands_3dm::writeMagSoftIronMatrix
TypedResult< MagSoftIronMatrix > writeMagSoftIronMatrix(C::mip_interface &device, const float *offset)
Definition: commands_3dm.cpp:3677
mip::commands_3dm::writeGpsMessageFormat
TypedResult< GpsMessageFormat > writeGpsMessageFormat(C::mip_interface &device, uint8_t numDescriptors, const DescriptorRate *descriptors)
Definition: commands_3dm.cpp:321
MIP_STATUS_ERROR
@ MIP_STATUS_ERROR
Command could not be executed (error sending/receiving)
Definition: mip_result.h:30
mip::commands_3dm::saveSensorRange
TypedResult< SensorRange > saveSensorRange(C::mip_interface &device, SensorRangeType sensor)
Definition: commands_3dm.cpp:4390
mip::commands_3dm::loadConingScullingEnable
TypedResult< ConingScullingEnable > loadConingScullingEnable(C::mip_interface &device)
Definition: commands_3dm.cpp:3822
mip::commands_3dm::readImuLowpassFilter
TypedResult< ImuLowpassFilter > readImuLowpassFilter(C::mip_interface &device, uint8_t targetDescriptor, bool *enableOut, bool *manualOut, uint16_t *frequencyOut, uint8_t *reservedOut)
Definition: commands_3dm.cpp:1875
mip::commands_3dm::readGpsMessageFormat
TypedResult< GpsMessageFormat > readGpsMessageFormat(C::mip_interface &device, uint8_t *numDescriptorsOut, uint8_t numDescriptorsOutMax, DescriptorRate *descriptorsOut)
Definition: commands_3dm.cpp:337
mip::commands_3dm::pollFilterMessage
TypedResult< PollFilterMessage > pollFilterMessage(C::mip_interface &device, bool suppressAck, uint8_t numDescriptors, const DescriptorRate *descriptors)
Definition: commands_3dm.cpp:149
mip::commands_3dm::writeSensor2VehicleTransformQuaternion
TypedResult< Sensor2VehicleTransformQuaternion > writeSensor2VehicleTransformQuaternion(C::mip_interface &device, const float *q)
Definition: commands_3dm.cpp:4001
mip::commands_3dm::defaultDeviceSettings
TypedResult< DeviceSettings > defaultDeviceSettings(C::mip_interface &device)
Definition: commands_3dm.cpp:1037
mip::commands_3dm::saveEventTrigger
TypedResult< EventTrigger > saveEventTrigger(C::mip_interface &device, uint8_t instance)
Definition: commands_3dm.cpp:3015
mip::commands_3dm::readComplementaryFilter
TypedResult< ComplementaryFilter > readComplementaryFilter(C::mip_interface &device, bool *pitchRollEnableOut, bool *headingEnableOut, float *pitchRollTimeConstantOut, float *headingTimeConstantOut)
Definition: commands_3dm.cpp:4247
mip::commands_3dm::saveEventAction
TypedResult< EventAction > saveEventAction(C::mip_interface &device, uint8_t instance)
Definition: commands_3dm.cpp:3244
mip::commands_3dm::readConstellationSettings
TypedResult< ConstellationSettings > readConstellationSettings(C::mip_interface &device, uint16_t *maxChannelsAvailableOut, uint16_t *maxChannelsUseOut, uint8_t *configCountOut, uint8_t configCountOutMax, ConstellationSettings::Settings *settingsOut)
Definition: commands_3dm.cpp:1388
mip::commands_3dm::writeMagHardIronOffset
TypedResult< MagHardIronOffset > writeMagHardIronOffset(C::mip_interface &device, const float *offset)
Definition: commands_3dm.cpp:3573
mip::commands_3dm::saveGnssAssistedFix
TypedResult< GnssAssistedFix > saveGnssAssistedFix(C::mip_interface &device)
Definition: commands_3dm.cpp:1668
mip::commands_3dm::loadLowpassFilter
TypedResult< LowpassFilter > loadLowpassFilter(C::mip_interface &device, uint8_t descSet, uint8_t fieldDesc)
Definition: commands_3dm.cpp:4635
mip::commands_3dm::loadSensor2VehicleTransformEuler
TypedResult< Sensor2VehicleTransformEuler > loadSensor2VehicleTransformEuler(C::mip_interface &device)
Definition: commands_3dm.cpp:3945
mip::commands_3dm::readGnssAssistedFix
TypedResult< GnssAssistedFix > readGnssAssistedFix(C::mip_interface &device, GnssAssistedFix::AssistedFixOption *optionOut, uint8_t *flagsOut)
Definition: commands_3dm.cpp:1642
mip::commands_3dm::nmeaPollData
TypedResult< NmeaPollData > nmeaPollData(C::mip_interface &device, bool suppressAck, uint8_t count, const NmeaMessage *formatEntries)
Definition: commands_3dm.cpp:876
mip::commands_3dm::saveAccelBias
TypedResult< AccelBias > saveAccelBias(C::mip_interface &device)
Definition: commands_3dm.cpp:3354
mip::commands_3dm::loadMagSoftIronMatrix
TypedResult< MagSoftIronMatrix > loadMagSoftIronMatrix(C::mip_interface &device)
Definition: commands_3dm.cpp:3725
mip::commands_3dm::insert
void insert(Serializer &serializer, const NmeaMessage &self)
Definition: commands_3dm.cpp:27
mip::commands_3dm::getEventSupport
TypedResult< GetEventSupport > getEventSupport(C::mip_interface &device, GetEventSupport::Query query, uint8_t *maxInstancesOut, uint8_t *numEntriesOut, uint8_t numEntriesOutMax, GetEventSupport::Info *entriesOut)
Definition: commands_3dm.cpp:2447
mip::C
Definition: ping.cpp:14
mip::commands_3dm::writeOdometer
TypedResult< Odometer > writeOdometer(C::mip_interface &device, Odometer::Mode mode, float scaling, float uncertainty)
Definition: commands_3dm.cpp:2322
mip::commands_3dm::defaultAccelBias
TypedResult< AccelBias > defaultAccelBias(C::mip_interface &device)
Definition: commands_3dm.cpp:3374
mip::commands_3dm::defaultEventTrigger
TypedResult< EventTrigger > defaultEventTrigger(C::mip_interface &device, uint8_t instance)
Definition: commands_3dm.cpp:3039
mip::commands_3dm::loadGnssSbasSettings
TypedResult< GnssSbasSettings > loadGnssSbasSettings(C::mip_interface &device)
Definition: commands_3dm.cpp:1568
mip::commands_3dm::savePpsSource
TypedResult< PpsSource > savePpsSource(C::mip_interface &device)
Definition: commands_3dm.cpp:2014
mip::commands_3dm::readMagHardIronOffset
TypedResult< MagHardIronOffset > readMagHardIronOffset(C::mip_interface &device, float *offsetOut)
Definition: commands_3dm.cpp:3587
device
mip_interface device
Definition: CV7_example.c:47
mip::commands_3dm::loadGpioConfig
TypedResult< GpioConfig > loadGpioConfig(C::mip_interface &device, uint8_t pin)
Definition: commands_3dm.cpp:2163
mip::commands_3dm::readSensor2VehicleTransformEuler
TypedResult< Sensor2VehicleTransformEuler > readSensor2VehicleTransformEuler(C::mip_interface &device, float *rollOut, float *pitchOut, float *yawOut)
Definition: commands_3dm.cpp:3906
MIP_ACK_OK
@ MIP_ACK_OK
Command completed successfully.
Definition: mip_result.h:38
mip::commands_3dm::writeImuMessageFormat
TypedResult< ImuMessageFormat > writeImuMessageFormat(C::mip_interface &device, uint8_t numDescriptors, const DescriptorRate *descriptors)
Definition: commands_3dm.cpp:208
mip::commands_3dm::readSensor2VehicleTransformQuaternion
TypedResult< Sensor2VehicleTransformQuaternion > readSensor2VehicleTransformQuaternion(C::mip_interface &device, float *qOut)
Definition: commands_3dm.cpp:4015
extract_count
void extract_count(mip_serializer *serializer, uint8_t *count_out, uint8_t max_count)
Similar to extract_u8 but allows a maximum value to be specified.
Definition: serialization.c:259
mip::commands_3dm::readUartBaudrate
TypedResult< UartBaudrate > readUartBaudrate(C::mip_interface &device, uint32_t *baudOut)
Definition: commands_3dm.cpp:1091
mip::commands_3dm::saveEventControl
TypedResult< EventControl > saveEventControl(C::mip_interface &device, uint8_t instance)
Definition: commands_3dm.cpp:2559
mip::commands_3dm::defaultGpsMessageFormat
TypedResult< GpsMessageFormat > defaultGpsMessageFormat(C::mip_interface &device)
Definition: commands_3dm.cpp:382
MIP_FIELD_PAYLOAD_LENGTH_MAX
@ MIP_FIELD_PAYLOAD_LENGTH_MAX
Definition: mip_offsets.h:35
mip::commands_3dm::writeConstellationSettings
TypedResult< ConstellationSettings > writeConstellationSettings(C::mip_interface &device, uint16_t maxChannels, uint8_t configCount, const ConstellationSettings::Settings *settings)
Definition: commands_3dm.cpp:1370
mip::commands_3dm::defaultEventControl
TypedResult< EventControl > defaultEventControl(C::mip_interface &device, uint8_t instance)
Definition: commands_3dm.cpp:2583
mip::commands_3dm::pollData
TypedResult< PollData > pollData(C::mip_interface &device, uint8_t descSet, bool suppressAck, uint8_t numDescriptors, const uint8_t *descriptors)
Definition: commands_3dm.cpp:652
mip::commands_3dm::writeGyroBias
TypedResult< GyroBias > writeGyroBias(C::mip_interface &device, const float *bias)
Definition: commands_3dm.cpp:3420
mip::commands_3dm::saveImuMessageFormat
TypedResult< ImuMessageFormat > saveImuMessageFormat(C::mip_interface &device)
Definition: commands_3dm.cpp:249
mip::commands_3dm::writeFilterMessageFormat
TypedResult< FilterMessageFormat > writeFilterMessageFormat(C::mip_interface &device, uint8_t numDescriptors, const DescriptorRate *descriptors)
Definition: commands_3dm.cpp:434
mip::commands_3dm::defaultGyroBias
TypedResult< GyroBias > defaultGyroBias(C::mip_interface &device)
Definition: commands_3dm.cpp:3478
mip::commands_3dm::readGpioState
TypedResult< GpioState > readGpioState(C::mip_interface &device, uint8_t pin, bool *stateOut)
Definition: commands_3dm.cpp:2247
mip::commands_3dm::saveOdometer
TypedResult< Odometer > saveOdometer(C::mip_interface &device)
Definition: commands_3dm.cpp:2367
mip::commands_3dm::saveGyroBias
TypedResult< GyroBias > saveGyroBias(C::mip_interface &device)
Definition: commands_3dm.cpp:3458
mip::commands_3dm::defaultPpsSource
TypedResult< PpsSource > defaultPpsSource(C::mip_interface &device)
Definition: commands_3dm.cpp:2034
mip::commands_3dm::defaultImuMessageFormat
TypedResult< ImuMessageFormat > defaultImuMessageFormat(C::mip_interface &device)
Definition: commands_3dm.cpp:269
mip::commands_3dm::getEventActionStatus
TypedResult< GetEventActionStatus > getEventActionStatus(C::mip_interface &device, uint8_t requestedCount, const uint8_t *requestedInstances, uint8_t *countOut, uint8_t countOutMax, GetEventActionStatus::Entry *actionsOut)
Definition: commands_3dm.cpp:2719
mip::commands_3dm::defaultImuLowpassFilter
TypedResult< ImuLowpassFilter > defaultImuLowpassFilter(C::mip_interface &device, uint8_t targetDescriptor)
Definition: commands_3dm.cpp:1935
mip::commands_3dm::loadEventAction
TypedResult< EventAction > loadEventAction(C::mip_interface &device, uint8_t instance)
Definition: commands_3dm.cpp:3256
mip::commands_3dm::defaultMagSoftIronMatrix
TypedResult< MagSoftIronMatrix > defaultMagSoftIronMatrix(C::mip_interface &device)
Definition: commands_3dm.cpp:3735
mip::commands_3dm::readConingScullingEnable
TypedResult< ConingScullingEnable > readConingScullingEnable(C::mip_interface &device, bool *enableOut)
Definition: commands_3dm.cpp:3789
mip::commands_3dm::readEventAction
TypedResult< EventAction > readEventAction(C::mip_interface &device, uint8_t instance, uint8_t *triggerOut, EventAction::Type *typeOut, EventAction::Parameters *parametersOut)
Definition: commands_3dm.cpp:3204
mip::commands_3dm::saveGpsMessageFormat
TypedResult< GpsMessageFormat > saveGpsMessageFormat(C::mip_interface &device)
Definition: commands_3dm.cpp:362
mip::commands_3dm::readMessageFormat
TypedResult< MessageFormat > readMessageFormat(C::mip_interface &device, uint8_t descSet, uint8_t *numDescriptorsOut, uint8_t numDescriptorsOutMax, DescriptorRate *descriptorsOut)
Definition: commands_3dm.cpp:791
mip::commands_3dm::loadPpsSource
TypedResult< PpsSource > loadPpsSource(C::mip_interface &device)
Definition: commands_3dm.cpp:2024
mip::commands_3dm::loadDatastreamControl
TypedResult< DatastreamControl > loadDatastreamControl(C::mip_interface &device, uint8_t descSet)
Definition: commands_3dm.cpp:1265
mip::commands_3dm::writeImuLowpassFilter
TypedResult< ImuLowpassFilter > writeImuLowpassFilter(C::mip_interface &device, uint8_t targetDescriptor, bool enable, bool manual, uint16_t frequency, uint8_t reserved)
Definition: commands_3dm.cpp:1855
mip::commands_3dm::saveLowpassFilter
TypedResult< LowpassFilter > saveLowpassFilter(C::mip_interface &device, uint8_t descSet, uint8_t fieldDesc)
Definition: commands_3dm.cpp:4621
mip::commands_3dm::defaultConingScullingEnable
TypedResult< ConingScullingEnable > defaultConingScullingEnable(C::mip_interface &device)
Definition: commands_3dm.cpp:3832
mip::commands_3dm::loadComplementaryFilter
TypedResult< ComplementaryFilter > loadComplementaryFilter(C::mip_interface &device)
Definition: commands_3dm.cpp:4289
mip::commands_3dm::saveMessageFormat
TypedResult< MessageFormat > saveMessageFormat(C::mip_interface &device, uint8_t descSet)
Definition: commands_3dm.cpp:820
mip::commands_3dm::pollGnssMessage
TypedResult< PollGnssMessage > pollGnssMessage(C::mip_interface &device, bool suppressAck, uint8_t numDescriptors, const DescriptorRate *descriptors)
Definition: commands_3dm.cpp:112
mip::commands_3dm::readGpioConfig
TypedResult< GpioConfig > readGpioConfig(C::mip_interface &device, uint8_t pin, GpioConfig::Feature *featureOut, GpioConfig::Behavior *behaviorOut, GpioConfig::PinMode *pinModeOut)
Definition: commands_3dm.cpp:2118
mip::commands_3dm::pollImuMessage
TypedResult< PollImuMessage > pollImuMessage(C::mip_interface &device, bool suppressAck, uint8_t numDescriptors, const DescriptorRate *descriptors)
Definition: commands_3dm.cpp:75
mip::commands_3dm::loadMagHardIronOffset
TypedResult< MagHardIronOffset > loadMagHardIronOffset(C::mip_interface &device)
Definition: commands_3dm.cpp:3621
mip::commands_3dm::filterGetBaseRate
TypedResult< FilterGetBaseRate > filterGetBaseRate(C::mip_interface &device, uint16_t *rateOut)
Definition: commands_3dm.cpp:609
mip::commands_3dm::getEventTriggerStatus
TypedResult< GetEventTriggerStatus > getEventTriggerStatus(C::mip_interface &device, uint8_t requestedCount, const uint8_t *requestedInstances, uint8_t *countOut, uint8_t countOutMax, GetEventTriggerStatus::Entry *triggersOut)
Definition: commands_3dm.cpp:2642
mip::commands_3dm::writeEventAction
TypedResult< EventAction > writeEventAction(C::mip_interface &device, uint8_t instance, uint8_t trigger, EventAction::Type type, const EventAction::Parameters &parameters)
Definition: commands_3dm.cpp:3178
mip::commands_3dm::loadSensor2VehicleTransformQuaternion
TypedResult< Sensor2VehicleTransformQuaternion > loadSensor2VehicleTransformQuaternion(C::mip_interface &device)
Definition: commands_3dm.cpp:4049
mip::commands_3dm::writeAccelBias
TypedResult< AccelBias > writeAccelBias(C::mip_interface &device, const float *bias)
Definition: commands_3dm.cpp:3316
mip::commands_3dm::saveMagSoftIronMatrix
TypedResult< MagSoftIronMatrix > saveMagSoftIronMatrix(C::mip_interface &device)
Definition: commands_3dm.cpp:3715
mip::commands_3dm::insert
void insert(Serializer &serializer, const LowpassFilter::Response &self)
Definition: commands_3dm.cpp:4537
mip::commands_3dm::loadImuMessageFormat
TypedResult< ImuMessageFormat > loadImuMessageFormat(C::mip_interface &device)
Definition: commands_3dm.cpp:259
mip::commands_3dm::readGnssTimeAssistance
TypedResult< GnssTimeAssistance > readGnssTimeAssistance(C::mip_interface &device, double *towOut, uint16_t *weekNumberOut, float *accuracyOut)
Definition: commands_3dm.cpp:1762
mip::commands_3dm::saveSensor2VehicleTransformEuler
TypedResult< Sensor2VehicleTransformEuler > saveSensor2VehicleTransformEuler(C::mip_interface &device)
Definition: commands_3dm.cpp:3935
mip::commands_3dm::defaultSensor2VehicleTransformQuaternion
TypedResult< Sensor2VehicleTransformQuaternion > defaultSensor2VehicleTransformQuaternion(C::mip_interface &device)
Definition: commands_3dm.cpp:4059
mip::commands_3dm::writeDatastreamControl
TypedResult< DatastreamControl > writeDatastreamControl(C::mip_interface &device, uint8_t descSet, bool enable)
Definition: commands_3dm.cpp:1212
mip::commands_3dm::readLowpassFilter
TypedResult< LowpassFilter > readLowpassFilter(C::mip_interface &device, uint8_t descSet, uint8_t fieldDesc, bool *enableOut, bool *manualOut, float *frequencyOut)
Definition: commands_3dm.cpp:4584
mip::commands_3dm::readOdometer
TypedResult< Odometer > readOdometer(C::mip_interface &device, Odometer::Mode *modeOut, float *scalingOut, float *uncertaintyOut)
Definition: commands_3dm.cpp:2338
mip::commands_3dm::defaultSensor2VehicleTransformDcm
TypedResult< Sensor2VehicleTransformDcm > defaultSensor2VehicleTransformDcm(C::mip_interface &device)
Definition: commands_3dm.cpp:4163
mip::commands_3dm::writeSensor2VehicleTransformEuler
TypedResult< Sensor2VehicleTransformEuler > writeSensor2VehicleTransformEuler(C::mip_interface &device, float roll, float pitch, float yaw)
Definition: commands_3dm.cpp:3890
mip::commands_3dm::loadImuLowpassFilter
TypedResult< ImuLowpassFilter > loadImuLowpassFilter(C::mip_interface &device, uint8_t targetDescriptor)
Definition: commands_3dm.cpp:1923
mip::commands_3dm::defaultFilterMessageFormat
TypedResult< FilterMessageFormat > defaultFilterMessageFormat(C::mip_interface &device)
Definition: commands_3dm.cpp:495
mip::commands_3dm::loadAccelBias
TypedResult< AccelBias > loadAccelBias(C::mip_interface &device)
Definition: commands_3dm.cpp:3364
mip_interface
State of the interface for communicating with a MIP device.
Definition: mip_interface.h:44
mip::commands_3dm::defaultOdometer
TypedResult< Odometer > defaultOdometer(C::mip_interface &device)
Definition: commands_3dm.cpp:2387
mip::commands_3dm::defaultDatastreamControl
TypedResult< DatastreamControl > defaultDatastreamControl(C::mip_interface &device, uint8_t descSet)
Definition: commands_3dm.cpp:1277
mip::commands_3dm::writeUartBaudrate
TypedResult< UartBaudrate > writeUartBaudrate(C::mip_interface &device, uint32_t baud)
Definition: commands_3dm.cpp:1079
mip::commands_3dm::calibratedSensorRanges
TypedResult< CalibratedSensorRanges > calibratedSensorRanges(C::mip_interface &device, SensorRangeType sensor, uint8_t *numRangesOut, uint8_t numRangesOutMax, CalibratedSensorRanges::Entry *rangesOut)
Definition: commands_3dm.cpp:4472
mip::commands_3dm::writeComplementaryFilter
TypedResult< ComplementaryFilter > writeComplementaryFilter(C::mip_interface &device, bool pitchRollEnable, bool headingEnable, float pitchRollTimeConstant, float headingTimeConstant)
Definition: commands_3dm.cpp:4229
assert.h
mip::commands_3dm::defaultConstellationSettings
TypedResult< ConstellationSettings > defaultConstellationSettings(C::mip_interface &device)
Definition: commands_3dm.cpp:1439
mip::commands_3dm::defaultSensor2VehicleTransformEuler
TypedResult< Sensor2VehicleTransformEuler > defaultSensor2VehicleTransformEuler(C::mip_interface &device)
Definition: commands_3dm.cpp:3955
mip::commands_3dm::loadSensor2VehicleTransformDcm
TypedResult< Sensor2VehicleTransformDcm > loadSensor2VehicleTransformDcm(C::mip_interface &device)
Definition: commands_3dm.cpp:4153
mip::commands_3dm::loadConstellationSettings
TypedResult< ConstellationSettings > loadConstellationSettings(C::mip_interface &device)
Definition: commands_3dm.cpp:1429
mip::commands_3dm::saveImuLowpassFilter
TypedResult< ImuLowpassFilter > saveImuLowpassFilter(C::mip_interface &device, uint8_t targetDescriptor)
Definition: commands_3dm.cpp:1911
mip::commands_3dm::loadMessageFormat
TypedResult< MessageFormat > loadMessageFormat(C::mip_interface &device, uint8_t descSet)
Definition: commands_3dm.cpp:832
mip::commands_3dm::defaultSensorRange
TypedResult< SensorRange > defaultSensorRange(C::mip_interface &device, SensorRangeType sensor)
Definition: commands_3dm.cpp:4414
mip::commands_3dm::readSensorRange
TypedResult< SensorRange > readSensorRange(C::mip_interface &device, SensorRangeType sensor, uint8_t *settingOut)
Definition: commands_3dm.cpp:4363
status
status
mip::commands_3dm::readSensor2VehicleTransformDcm
TypedResult< Sensor2VehicleTransformDcm > readSensor2VehicleTransformDcm(C::mip_interface &device, float *dcmOut)
Definition: commands_3dm.cpp:4119
mip::commands_3dm::captureGyroBias
TypedResult< CaptureGyroBias > captureGyroBias(C::mip_interface &device, uint16_t averagingTimeMs, float *biasOut)
Definition: commands_3dm.cpp:3512
mip::commands_3dm::writeMessageFormat
TypedResult< MessageFormat > writeMessageFormat(C::mip_interface &device, uint8_t descSet, uint8_t numDescriptors, const DescriptorRate *descriptors)
Definition: commands_3dm.cpp:773
mip::commands_3dm::defaultLowpassFilter
TypedResult< LowpassFilter > defaultLowpassFilter(C::mip_interface &device, uint8_t descSet, uint8_t fieldDesc)
Definition: commands_3dm.cpp:4649
mip_interface_run_command_with_response
enum mip_cmd_result mip_interface_run_command_with_response(mip_interface *device, uint8_t descriptor_set, uint8_t cmd_descriptor, const uint8_t *cmd_data, uint8_t cmd_length, uint8_t response_descriptor, uint8_t *response_buffer, uint8_t *response_length_inout)
Runs a command using a pre-serialized payload.
Definition: mip_interface.c:597
mip::commands_3dm::saveConstellationSettings
TypedResult< ConstellationSettings > saveConstellationSettings(C::mip_interface &device)
Definition: commands_3dm.cpp:1419
mip::commands_3dm::loadFilterMessageFormat
TypedResult< FilterMessageFormat > loadFilterMessageFormat(C::mip_interface &device)
Definition: commands_3dm.cpp:485
mip::commands_3dm::loadNmeaMessageFormat
TypedResult< NmeaMessageFormat > loadNmeaMessageFormat(C::mip_interface &device)
Definition: commands_3dm.cpp:986
mip::commands_3dm::readImuMessageFormat
TypedResult< ImuMessageFormat > readImuMessageFormat(C::mip_interface &device, uint8_t *numDescriptorsOut, uint8_t numDescriptorsOutMax, DescriptorRate *descriptorsOut)
Definition: commands_3dm.cpp:224
mip::commands_3dm::defaultGpioConfig
TypedResult< GpioConfig > defaultGpioConfig(C::mip_interface &device, uint8_t pin)
Definition: commands_3dm.cpp:2175
mip::commands_3dm::readPpsSource
TypedResult< PpsSource > readPpsSource(C::mip_interface &device, PpsSource::Source *sourceOut)
Definition: commands_3dm.cpp:1991


microstrain_inertial_driver
Author(s): Brian Bingham, Parker Hannifin Corp
autogenerated on Mon Jun 24 2024 02:51:39