MIP SDK  0.0.1
MicroStrain Communications Library for embedded systems
descriptors.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <stddef.h>
4 #include <stdint.h>
5 #include <stdbool.h>
6 #include "../utils/serialization.h"
7 
8 #ifdef __cplusplus
9 
10 #include <tuple>
11 #include <type_traits>
12 
13 namespace mip {
14 namespace C {
15 extern "C" {
16 #endif // __cplusplus
17 
18 enum {
22 
27 
29 };
30 
31 bool mip_is_valid_descriptor_set(uint8_t descriptor_set);
32 bool mip_is_data_descriptor_set(uint8_t descriptor_set);
33 bool mip_is_cmd_descriptor_set(uint8_t descriptor_set);
34 bool mip_is_reserved_descriptor_set(uint8_t descriptor_set);
35 
36 bool mip_is_valid_field_descriptor(uint8_t field_descriptor);
37 bool mip_is_cmd_field_descriptor(uint8_t field_descriptor);
38 bool mip_is_reply_field_descriptor(uint8_t field_descriptor);
39 bool mip_is_response_field_descriptor(uint8_t field_descriptor);
40 bool mip_is_reserved_cmd_field_descriptor(uint8_t field_descriptor);
41 bool mip_is_shared_data_field_descriptor(uint8_t field_descriptor);
42 
44 {
50 };
54 
55 typedef struct mip_descriptor_rate
56 {
57  uint8_t descriptor;
58  uint16_t decimation;
60 
63 
64 #ifdef __cplusplus
65 
66 } // extern "C"
67 } // namespace "C"
68 
69 
74 {
75  uint8_t descriptorSet;
76  uint8_t fieldDescriptor;
77 
78  CompositeDescriptor(uint8_t descSet, uint8_t fieldDesc) : descriptorSet(descSet), fieldDescriptor(fieldDesc) {}
79  CompositeDescriptor(uint16_t combo) : descriptorSet(combo >> 8), fieldDescriptor(combo & 0xFF) {}
80 
81  CompositeDescriptor& operator=(uint16_t combo) { return *this = CompositeDescriptor(combo); }
82 
83  uint16_t as_u16() const { return (uint16_t(descriptorSet) << 8) | fieldDescriptor; }
84 
85 // operator uint16_t() const { return as_u16(); }
86 
87  bool operator==(const CompositeDescriptor& other) const { return other.descriptorSet == descriptorSet && other.fieldDescriptor == fieldDescriptor; }
88  bool operator<(const CompositeDescriptor& other) const { return descriptorSet < other.descriptorSet || (!(descriptorSet > other.descriptorSet) && (fieldDescriptor < other.fieldDescriptor)); }
89 
90 };
91 
92 
95 template<typename DerivedT> struct Bitfield {};
96 
97 template<class Derived> void insert (Serializer& serializer, const Bitfield<Derived>& bitfield) { insert(serializer, static_cast<const Derived&>(bitfield).value); }
98 template<class Derived> void extract(Serializer& serializer, Bitfield<Derived>& bitfield) { extract(serializer, static_cast<Derived&>(bitfield).value); }
99 
100 
101 enum class FunctionSelector : uint8_t
102 {
108 };
109 
111 
112 inline bool isValidDescriptorSet (uint8_t descriptorSet) { return C::mip_is_valid_descriptor_set(descriptorSet); }
113 inline bool isDataDescriptorSet (uint8_t descriptorSet) { return C::mip_is_data_descriptor_set(descriptorSet); }
114 inline bool isCommandDescriptorSet (uint8_t descriptorSet) { return C::mip_is_cmd_descriptor_set(descriptorSet); }
115 inline bool isReservedDescriptorSet(uint8_t descriptorSet) { return C::mip_is_reserved_descriptor_set(descriptorSet); }
116 
117 inline bool isValidFieldDescriptor (uint8_t fieldDescriptor) { return C::mip_is_valid_field_descriptor(fieldDescriptor); }
118 inline bool isCommandFieldDescriptor (uint8_t fieldDescriptor) { return C::mip_is_cmd_field_descriptor(fieldDescriptor); }
119 inline bool isReplyFieldDescriptor (uint8_t fieldDescriptor) { return C::mip_is_reply_field_descriptor(fieldDescriptor); }
120 inline bool isResponseFieldDescriptor(uint8_t fieldDescriptor) { return C::mip_is_response_field_descriptor(fieldDescriptor); }
121 inline bool isReservedFieldDescriptor(uint8_t fieldDescriptor) { return C::mip_is_reserved_cmd_field_descriptor(fieldDescriptor); }
122 inline bool isSharedDataFieldDescriptor(uint8_t fieldDescriptor) { return C::mip_is_shared_data_field_descriptor(fieldDescriptor); }
123 
124 
125 inline void insert(Serializer& serializer, const DescriptorRate& self) { return C::insert_mip_descriptor_rate(&serializer, &self); }
126 inline void extract(Serializer& serializer, DescriptorRate& self) { return C::extract_mip_descriptor_rate(&serializer, &self); }
127 
128 } // namespace mip
129 
130 #endif // __cplusplus
Serialization class.
Definition: serialization.h:145
bool mip_is_reserved_cmd_field_descriptor(uint8_t field_descriptor)
bool mip_is_shared_data_field_descriptor(uint8_t field_descriptor)
bool mip_is_cmd_field_descriptor(uint8_t field_descriptor)
bool mip_is_reply_field_descriptor(uint8_t field_descriptor)
bool mip_is_reserved_descriptor_set(uint8_t descriptor_set)
struct mip::C::mip_descriptor_rate mip_descriptor_rate
void insert_mip_descriptor_rate(mip_serializer *serializer, const mip_descriptor_rate *self)
bool mip_is_valid_field_descriptor(uint8_t field_descriptor)
void extract_mip_function_selector(mip_serializer *serializer, enum mip_function_selector *self)
mip_function_selector
Definition: descriptors.h:44
@ MIP_FUNCTION_WRITE
Definition: descriptors.h:45
@ MIP_FUNCTION_READ
Definition: descriptors.h:46
@ MIP_FUNCTION_RESET
Definition: descriptors.h:49
@ MIP_FUNCTION_LOAD
Definition: descriptors.h:48
@ MIP_FUNCTION_SAVE
Definition: descriptors.h:47
bool mip_is_response_field_descriptor(uint8_t field_descriptor)
void insert_mip_function_selector(mip_serializer *serializer, enum mip_function_selector self)
bool mip_is_valid_descriptor_set(uint8_t descriptor_set)
void extract_mip_descriptor_rate(mip_serializer *serializer, mip_descriptor_rate *self)
bool mip_is_data_descriptor_set(uint8_t descriptor_set)
@ MIP_REPLY_DESCRIPTOR
Definition: descriptors.h:24
@ MIP_INVALID_DESCRIPTOR_SET
Definition: descriptors.h:19
@ MIP_RESPONSE_DESCRIPTOR_START
Definition: descriptors.h:26
@ MIP_DATA_DESCRIPTOR_SET_START
Definition: descriptors.h:20
@ MIP_SHARED_DATA_FIELD_DESCRIPTOR_START
Definition: descriptors.h:28
@ MIP_INVALID_FIELD_DESCRIPTOR
Definition: descriptors.h:23
@ MIP_RESERVED_DESCRIPTOR_START
Definition: descriptors.h:25
@ MIP_RESERVED_DESCRIPTOR_SET_START
Definition: descriptors.h:21
bool mip_is_cmd_descriptor_set(uint8_t descriptor_set)
A collection of C++ classes and functions covering the full mip api.
Definition: commands_3dm.c:11
FunctionSelector
Definition: descriptors.h:102
void extract(Serializer &serializer, Bitfield< Derived > &bitfield)
Definition: descriptors.h:98
bool isReplyFieldDescriptor(uint8_t fieldDescriptor)
Definition: descriptors.h:119
void insert(Serializer &serializer, const Bitfield< Derived > &bitfield)
Definition: descriptors.h:97
bool isResponseFieldDescriptor(uint8_t fieldDescriptor)
Definition: descriptors.h:120
bool isCommandFieldDescriptor(uint8_t fieldDescriptor)
Definition: descriptors.h:118
bool isDataDescriptorSet(uint8_t descriptorSet)
Definition: descriptors.h:113
bool isValidFieldDescriptor(uint8_t fieldDescriptor)
Definition: descriptors.h:117
bool isReservedDescriptorSet(uint8_t descriptorSet)
Definition: descriptors.h:115
bool isValidDescriptorSet(uint8_t descriptorSet)
Definition: descriptors.h:112
bool isSharedDataFieldDescriptor(uint8_t fieldDescriptor)
Definition: descriptors.h:122
bool isReservedFieldDescriptor(uint8_t fieldDescriptor)
Definition: descriptors.h:121
bool isCommandDescriptorSet(uint8_t descriptorSet)
Definition: descriptors.h:114
A dummy struct which is used to mark bitfield objects.
Definition: descriptors.h:95
Definition: descriptors.h:56
uint16_t decimation
Definition: descriptors.h:58
uint8_t descriptor
Definition: descriptors.h:57
Structure used for serialization.
Definition: serialization.h:44
Convenience struct holding both descriptor set and field descriptor.
Definition: descriptors.h:74
CompositeDescriptor & operator=(uint16_t combo)
Definition: descriptors.h:81
uint8_t fieldDescriptor
MIP field descriptor.
Definition: descriptors.h:76
uint8_t descriptorSet
MIP descriptor set.
Definition: descriptors.h:75
CompositeDescriptor(uint16_t combo)
Definition: descriptors.h:79
CompositeDescriptor(uint8_t descSet, uint8_t fieldDesc)
Definition: descriptors.h:78
bool operator<(const CompositeDescriptor &other) const
Definition: descriptors.h:88
uint16_t as_u16() const
Definition: descriptors.h:83
bool operator==(const CompositeDescriptor &other) const
Definition: descriptors.h:87