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 #include "../mip_result.h"
8 
9 #ifdef __cplusplus
10 
11 #include <tuple>
12 #include <type_traits>
13 #include <functional>
14 
15 namespace mip {
16 namespace C {
17 extern "C" {
18 #endif // __cplusplus
19 
20 enum {
24 
29 
31 };
32 
33 bool mip_is_valid_descriptor_set(uint8_t descriptor_set);
34 bool mip_is_data_descriptor_set(uint8_t descriptor_set);
35 bool mip_is_cmd_descriptor_set(uint8_t descriptor_set);
36 bool mip_is_reserved_descriptor_set(uint8_t descriptor_set);
37 bool mip_is_gnss_data_descriptor_set(uint8_t descriptor_set);
38 
39 bool mip_is_valid_field_descriptor(uint8_t field_descriptor);
40 bool mip_is_cmd_field_descriptor(uint8_t field_descriptor);
41 bool mip_is_reply_field_descriptor(uint8_t field_descriptor);
42 bool mip_is_response_field_descriptor(uint8_t field_descriptor);
43 bool mip_is_reserved_cmd_field_descriptor(uint8_t field_descriptor);
44 bool mip_is_shared_data_field_descriptor(uint8_t field_descriptor);
45 
47 {
53 };
57 
58 
59 #ifdef __cplusplus
60 
61 } // extern "C"
62 } // namespace "C"
63 
64 
68 struct CompositeDescriptor
69 {
70  uint8_t descriptorSet;
71  uint8_t fieldDescriptor;
72 
73  constexpr CompositeDescriptor(uint8_t descSet, uint8_t fieldDesc) : descriptorSet(descSet), fieldDescriptor(fieldDesc) {}
74  constexpr CompositeDescriptor(uint16_t combo) : descriptorSet(combo >> 8), fieldDescriptor(combo & 0xFF) {}
75 
76  CompositeDescriptor& operator=(uint16_t combo) { return *this = CompositeDescriptor(combo); }
77 
78  constexpr uint16_t as_u16() const { return (uint16_t(descriptorSet) << 8) | fieldDescriptor; }
79 
80 // operator uint16_t() const { return as_u16(); }
81 
82  constexpr bool operator==(const CompositeDescriptor& other) const { return other.descriptorSet == descriptorSet && other.fieldDescriptor == fieldDescriptor; }
83  constexpr bool operator<(const CompositeDescriptor& other) const { return as_u16() < other.as_u16(); }
84 
85 };
86 
87 
90 template<typename DerivedT> struct Bitfield {};
91 
92 template<class Derived> void insert (Serializer& serializer, const Bitfield<Derived>& bitfield) { insert(serializer, static_cast<const Derived&>(bitfield).value); }
93 template<class Derived> void extract(Serializer& serializer, Bitfield<Derived>& bitfield) { extract(serializer, static_cast<Derived&>(bitfield).value); }
94 
95 
96 enum class FunctionSelector : uint8_t
97 {
98  WRITE = C::MIP_FUNCTION_WRITE,
99  READ = C::MIP_FUNCTION_READ,
100  SAVE = C::MIP_FUNCTION_SAVE,
101  LOAD = C::MIP_FUNCTION_LOAD,
102  RESET = C::MIP_FUNCTION_RESET,
103 };
104 
105 static constexpr uint8_t INVALID_FIELD_DESCRIPTOR = C::MIP_INVALID_FIELD_DESCRIPTOR;
106 static constexpr uint8_t INVALID_DESCRIPTOR_SET = C::MIP_INVALID_DESCRIPTOR_SET;
107 
108 inline bool isValidDescriptorSet (uint8_t descriptorSet) { return C::mip_is_valid_descriptor_set(descriptorSet); }
109 inline bool isDataDescriptorSet (uint8_t descriptorSet) { return C::mip_is_data_descriptor_set(descriptorSet); }
110 inline bool isCommandDescriptorSet (uint8_t descriptorSet) { return C::mip_is_cmd_descriptor_set(descriptorSet); }
111 inline bool isReservedDescriptorSet(uint8_t descriptorSet) { return C::mip_is_reserved_descriptor_set(descriptorSet); }
112 inline bool isGnssDataDescriptorSet(uint8_t descriptorSet) { return C::mip_is_gnss_data_descriptor_set(descriptorSet); }
113 
114 inline bool isValidFieldDescriptor (uint8_t fieldDescriptor) { return C::mip_is_valid_field_descriptor(fieldDescriptor); }
115 inline bool isCommandFieldDescriptor (uint8_t fieldDescriptor) { return C::mip_is_cmd_field_descriptor(fieldDescriptor); }
116 inline bool isReplyFieldDescriptor (uint8_t fieldDescriptor) { return C::mip_is_reply_field_descriptor(fieldDescriptor); }
117 inline bool isResponseFieldDescriptor(uint8_t fieldDescriptor) { return C::mip_is_response_field_descriptor(fieldDescriptor); }
118 inline bool isReservedFieldDescriptor(uint8_t fieldDescriptor) { return C::mip_is_reserved_cmd_field_descriptor(fieldDescriptor); }
119 inline bool isSharedDataFieldDescriptor(uint8_t fieldDescriptor) { return C::mip_is_shared_data_field_descriptor(fieldDescriptor); }
120 
121 
127 template<class MipCmd>
128 struct TypedResult : public CmdResult
129 {
130  using Cmd = MipCmd;
131 
132  // Same constructor as CmdResult.
133  using CmdResult::CmdResult;
134 
137  static constexpr CompositeDescriptor DESCRIPTOR = MipCmd::DESCRIPTOR;
138 
141  constexpr CompositeDescriptor descriptor() const { return DESCRIPTOR; }
142 };
143 
144 } // namespace mip
145 
146 #endif // __cplusplus
mip_function_selector
mip_function_selector
Definition: descriptors.h:46
MIP_DATA_DESCRIPTOR_SET_START
@ MIP_DATA_DESCRIPTOR_SET_START
Definition: descriptors.h:22
MIP_RESPONSE_DESCRIPTOR_START
@ MIP_RESPONSE_DESCRIPTOR_START
Definition: descriptors.h:28
mip
Definition: ping.cpp:12
MIP_RESERVED_DESCRIPTOR_START
@ MIP_RESERVED_DESCRIPTOR_START
Definition: descriptors.h:27
mip::commands_3dm::extract
void extract(Serializer &serializer, NmeaMessage &self)
Definition: commands_3dm.cpp:38
mip_is_data_descriptor_set
bool mip_is_data_descriptor_set(uint8_t descriptor_set)
Determines if the descriptor set represents some kind of data.
Definition: descriptors.c:31
mip_is_cmd_descriptor_set
bool mip_is_cmd_descriptor_set(uint8_t descriptor_set)
Determines if the descriptor set contains commands.
Definition: descriptors.c:43
MIP_SHARED_DATA_FIELD_DESCRIPTOR_START
@ MIP_SHARED_DATA_FIELD_DESCRIPTOR_START
Definition: descriptors.h:30
mip_serializer
Structure used for serialization.
Definition: serialization.h:45
MIP_FUNCTION_SAVE
@ MIP_FUNCTION_SAVE
Definition: descriptors.h:50
mip::commands_3dm::insert
void insert(Serializer &serializer, const NmeaMessage &self)
Definition: commands_3dm.cpp:27
extract_mip_function_selector
void extract_mip_function_selector(mip_serializer *serializer, enum mip_function_selector *self)
Definition: descriptors.c:159
mip_is_reserved_cmd_field_descriptor
bool mip_is_reserved_cmd_field_descriptor(uint8_t field_descriptor)
Determines if the field descriptor is reserved.
Definition: descriptors.c:134
mip_is_valid_descriptor_set
bool mip_is_valid_descriptor_set(uint8_t descriptor_set)
Determines if the descriptor set is valid.
Definition: descriptors.c:19
mip_is_reserved_descriptor_set
bool mip_is_reserved_descriptor_set(uint8_t descriptor_set)
Determines if the descriptor is reserved for special purposes.
Definition: descriptors.c:55
mip_is_shared_data_field_descriptor
bool mip_is_shared_data_field_descriptor(uint8_t field_descriptor)
Determines if the field descriptor is from the shared data set.
Definition: descriptors.c:148
mip_is_reply_field_descriptor
bool mip_is_reply_field_descriptor(uint8_t field_descriptor)
Determines if the field descriptor is for an ack/nack reply.
Definition: descriptors.c:105
operator==
bool operator==(const GTEST_10_TUPLE_(T)&t, const GTEST_10_TUPLE_(U)&u)
MIP_FUNCTION_WRITE
@ MIP_FUNCTION_WRITE
Definition: descriptors.h:48
mip_is_response_field_descriptor
bool mip_is_response_field_descriptor(uint8_t field_descriptor)
Determines if the field descriptor contains response data from a command.
Definition: descriptors.c:120
mip_is_valid_field_descriptor
bool mip_is_valid_field_descriptor(uint8_t field_descriptor)
Determines if the field descriptor is valid.
Definition: descriptors.c:81
MIP_INVALID_DESCRIPTOR_SET
@ MIP_INVALID_DESCRIPTOR_SET
Definition: descriptors.h:21
MIP_FUNCTION_LOAD
@ MIP_FUNCTION_LOAD
Definition: descriptors.h:51
MIP_REPLY_DESCRIPTOR
@ MIP_REPLY_DESCRIPTOR
Definition: descriptors.h:26
MIP_INVALID_FIELD_DESCRIPTOR
@ MIP_INVALID_FIELD_DESCRIPTOR
Definition: descriptors.h:25
mip_is_cmd_field_descriptor
bool mip_is_cmd_field_descriptor(uint8_t field_descriptor)
Determines if the field descriptor is a command.
Definition: descriptors.c:93
MIP_FUNCTION_RESET
@ MIP_FUNCTION_RESET
Definition: descriptors.h:52
MIP_RESERVED_DESCRIPTOR_SET_START
@ MIP_RESERVED_DESCRIPTOR_SET_START
Definition: descriptors.h:23
MIP_FUNCTION_READ
@ MIP_FUNCTION_READ
Definition: descriptors.h:49
mip_is_gnss_data_descriptor_set
bool mip_is_gnss_data_descriptor_set(uint8_t descriptor_set)
Determines if the descriptor set represents some kind of GNSS data.
Definition: descriptors.c:67
insert_mip_function_selector
void insert_mip_function_selector(mip_serializer *serializer, enum mip_function_selector self)
Definition: descriptors.c:154


microstrain_inertial_driver
Author(s): Brian Bingham, Parker Hannifin Corp
autogenerated on Fri May 24 2024 06:48:21