MIP_SDK  v3.0.0-187-g93c7302
MicroStrain Communications Library for embedded systems
commands_system.hpp
Go to the documentation of this file.
1 #pragma once
2 
5 #include <mip/mip_result.hpp>
6 #include <mip/mip_interface.hpp>
7 
8 #include <stdint.h>
9 #include <stddef.h>
10 
11 namespace mip {
12 namespace C {
13 struct mip_interface;
14 } // namespace C
15 
16 namespace commands_system {
17 
24 
26 // Descriptors
28 
29 enum
30 {
32 
33  CMD_ENUMERATE = 0x01,
35  CMD_COM_MODE = 0x10,
38 
43 };
44 
46 // Shared Type Definitions
48 
49 static constexpr const uint8_t MIP_SYSTEM_COMMAND_COMM_MODE_PASSTHRU = 0x00;
50 static constexpr const uint8_t MIP_SYSTEM_COMMAND_COMM_MODE_NORMAL = 0x01;
51 static constexpr const uint8_t MIP_SYSTEM_COMMAND_COMM_MODE_IMU = 0x02;
52 static constexpr const uint8_t MIP_SYSTEM_COMMAND_COMM_MODE_GPS = 0x03;
53 enum class CommsInterface : uint8_t
54 {
55  ALL = 0,
56  MAIN = 1,
57  UART_1 = 17,
58  UART_2 = 18,
59  UART_3 = 19,
60  USB_1 = 33,
61  USB_2 = 34,
62 };
63 
64 struct CommsProtocol : Bitfield<CommsProtocol>
65 {
66  typedef uint32_t Type;
67  enum _enumType : uint32_t
68  {
69  NONE = 0x00000000,
70  MIP = 0x00000001,
71  NMEA = 0x00000100,
72  RTCM = 0x00000200,
73  SPARTN = 0x01000000,
74  ALL = 0x01000301,
75  };
76  uint32_t value = NONE;
77 
78  constexpr CommsProtocol() : value(NONE) {}
79  constexpr CommsProtocol(int val) : value((uint32_t)val) {}
80  constexpr operator uint32_t() const { return value; }
81  constexpr CommsProtocol& operator=(uint32_t val) { value = val; return *this; }
82  constexpr CommsProtocol& operator=(int val) { value = uint32_t(val); return *this; }
83  constexpr CommsProtocol& operator|=(uint32_t val) { return *this = value | val; }
84  constexpr CommsProtocol& operator&=(uint32_t val) { return *this = value & val; }
85 
86  constexpr bool mip() const { return (value & MIP) > 0; }
87  constexpr void mip(bool val) { value &= ~MIP; if(val) value |= MIP; }
88  constexpr bool nmea() const { return (value & NMEA) > 0; }
89  constexpr void nmea(bool val) { value &= ~NMEA; if(val) value |= NMEA; }
90  constexpr bool rtcm() const { return (value & RTCM) > 0; }
91  constexpr void rtcm(bool val) { value &= ~RTCM; if(val) value |= RTCM; }
92  constexpr bool spartn() const { return (value & SPARTN) > 0; }
93  constexpr void spartn(bool val) { value &= ~SPARTN; if(val) value |= SPARTN; }
94  constexpr bool allSet() const { return value == ALL; }
95  constexpr void setAll() { value |= ALL; }
96 };
97 
99 // Mip Fields
101 
115 
116 struct CommMode
117 {
119  FunctionSelector function = static_cast<FunctionSelector>(0);
120  uint8_t mode = 0;
121 
123  static constexpr const uint8_t DESCRIPTOR_SET = ::mip::commands_system::DESCRIPTOR_SET;
124  static constexpr const uint8_t FIELD_DESCRIPTOR = ::mip::commands_system::CMD_COM_MODE;
126  static constexpr const char* NAME = "CommMode";
127  static constexpr const char* DOC_NAME = "CommMode";
128  static constexpr const bool HAS_FUNCTION_SELECTOR = true;
129 
130  auto asTuple() const
131  {
132  return std::make_tuple(mode);
133  }
134 
135  auto asTuple()
136  {
137  return std::make_tuple(std::ref(mode));
138  }
139 
141  {
142  CommMode cmd;
143  cmd.function = function;
144  return cmd;
145  }
146 
148  void insert(Serializer& serializer) const;
149  void extract(Serializer& serializer);
150 
151  struct Response
152  {
154  uint8_t mode = 0;
155 
157  static constexpr const uint8_t DESCRIPTOR_SET = ::mip::commands_system::DESCRIPTOR_SET;
160  static constexpr const char* NAME = "CommMode::Response";
161  static constexpr const char* DOC_NAME = "CommMode Response";
162  static constexpr const bool HAS_FUNCTION_SELECTOR = false;
163 
164  auto asTuple() const
165  {
166  return std::make_tuple(mode);
167  }
168 
169  auto asTuple()
170  {
171  return std::make_tuple(std::ref(mode));
172  }
173 
175  void insert(Serializer& serializer) const;
176  void extract(Serializer& serializer);
177 
178  };
179 };
181 TypedResult<CommMode> readCommMode(C::mip_interface& device, uint8_t* modeOut);
183 
204 
206 {
208  FunctionSelector function = static_cast<FunctionSelector>(0);
209  CommsInterface port = static_cast<CommsInterface>(0);
212 
214  static constexpr const uint8_t DESCRIPTOR_SET = ::mip::commands_system::DESCRIPTOR_SET;
217  static constexpr const char* NAME = "InterfaceControl";
218  static constexpr const char* DOC_NAME = "Interface Control";
219  static constexpr const bool HAS_FUNCTION_SELECTOR = true;
220 
221  auto asTuple() const
222  {
223  return std::make_tuple(port,protocols_incoming,protocols_outgoing);
224  }
225 
226  auto asTuple()
227  {
228  return std::make_tuple(std::ref(port),std::ref(protocols_incoming),std::ref(protocols_outgoing));
229  }
230 
232  {
233  InterfaceControl cmd;
234  cmd.function = function;
236  return cmd;
237  }
238 
240  void insert(Serializer& serializer) const;
241  void extract(Serializer& serializer);
242 
243  struct Response
244  {
246  CommsInterface port = static_cast<CommsInterface>(0);
249 
251  static constexpr const uint8_t DESCRIPTOR_SET = ::mip::commands_system::DESCRIPTOR_SET;
254  static constexpr const char* NAME = "InterfaceControl::Response";
255  static constexpr const char* DOC_NAME = "Interface Control Response";
256  static constexpr const bool HAS_FUNCTION_SELECTOR = false;
257 
258  auto asTuple() const
259  {
260  return std::make_tuple(port,protocols_incoming,protocols_outgoing);
261  }
262 
263  auto asTuple()
264  {
265  return std::make_tuple(std::ref(port),std::ref(protocols_incoming),std::ref(protocols_outgoing));
266  }
267 
269  void insert(Serializer& serializer) const;
270  void extract(Serializer& serializer);
271 
272  };
273 };
274 TypedResult<InterfaceControl> writeInterfaceControl(C::mip_interface& device, CommsInterface port, CommsProtocol protocolsIncoming, CommsProtocol protocolsOutgoing);
275 TypedResult<InterfaceControl> readInterfaceControl(C::mip_interface& device, CommsInterface port, CommsProtocol* protocolsIncomingOut, CommsProtocol* protocolsOutgoingOut);
279 
282 
287 } // namespace commands_system
288 } // namespace mip
289 
mip::commands_system::CommsInterface::MAIN
@ MAIN
An alias that directs to Main USB if it's connected, or Main UART otherwise.
mip::commands_system::CommsProtocol::nmea
constexpr bool nmea() const
Definition: commands_system.hpp:88
mip::commands_system::CommsProtocol::mip
constexpr void mip(bool val)
Definition: commands_system.hpp:87
mip::commands_system::CommsProtocol::rtcm
constexpr bool rtcm() const
Definition: commands_system.hpp:90
mip::commands_system::InterfaceControl::Response::asTuple
auto asTuple()
Definition: commands_system.hpp:263
mip
A collection of C++ classes and functions covering the full mip api.
Definition: commands_3dm.c:11
mip::commands_system::CommsProtocol::value
uint32_t value
Definition: commands_system.hpp:76
mip::commands_system::CMD_HARDWARE_CONTROL_2
@ CMD_HARDWARE_CONTROL_2
Definition: commands_system.hpp:37
mip::commands_system::CommsInterface::UART_1
@ UART_1
Depending on your device, this may mean either the first UART currently configured,...
mip::commands_system::CMD_HARDWARE_CONTROL
@ CMD_HARDWARE_CONTROL
Definition: commands_system.hpp:36
mip::commands_system::CommsProtocol::ALL
@ ALL
Definition: commands_system.hpp:74
mip_descriptors.hpp
mip::commands_system::InterfaceControl
Definition: commands_system.hpp:205
mip::commands_system::InterfaceControl::asTuple
auto asTuple() const
Definition: commands_system.hpp:221
mip::commands_system::defaultCommMode
TypedResult< CommMode > defaultCommMode(C::mip_interface &device)
Definition: commands_system.cpp:90
mip::commands_system::InterfaceControl::NAME
static constexpr const char * NAME
Definition: commands_system.hpp:217
mip::commands_system::CommMode::insert
void insert(Serializer &serializer) const
Serialization.
Definition: commands_system.cpp:23
microstrain::Serializer
Serializes or deserializes data to/from a byte buffer.
Definition: serializer.hpp:125
mip::commands_system::InterfaceControl::Response::NAME
static constexpr const char * NAME
Definition: commands_system.hpp:254
mip::commands_system::CommsProtocol::allSet
constexpr bool allSet() const
Definition: commands_system.hpp:94
mip::commands_system::CommMode::extract
void extract(Serializer &serializer)
Definition: commands_system.cpp:33
mip::commands_system::CommsInterface
CommsInterface
Definition: commands_system.hpp:53
mip::commands_system::CommMode::asTuple
auto asTuple()
Definition: commands_system.hpp:135
mip::commands_system::CommsInterface::UART_3
@ UART_3
mip::commands_system::InterfaceControl::insert
void insert(Serializer &serializer) const
Serialization.
Definition: commands_system.cpp:100
mip::commands_system::InterfaceControl::create_sld_all
static InterfaceControl create_sld_all(::mip::FunctionSelector function)
Definition: commands_system.hpp:231
mip::commands_system::CMD_ENUMERATE
@ CMD_ENUMERATE
Definition: commands_system.hpp:33
mip::commands_system::InterfaceControl::function
FunctionSelector function
Parameters.
Definition: commands_system.hpp:208
mip::commands_system::InterfaceControl::Response::DESCRIPTOR
static constexpr const CompositeDescriptor DESCRIPTOR
Definition: commands_system.hpp:253
mip::commands_system::CommMode::Response::asTuple
auto asTuple() const
Definition: commands_system.hpp:164
mip::commands_system::defaultInterfaceControl
TypedResult< InterfaceControl > defaultInterfaceControl(C::mip_interface &device, CommsInterface port)
Definition: commands_system.cpp:218
mip::C::mip_interface
struct mip::C::mip_interface mip_interface
State of the interface for communicating with a MIP device.
mip::commands_system::CommMode::Response::DOC_NAME
static constexpr const char * DOC_NAME
Definition: commands_system.hpp:161
mip::commands_system::CommsProtocol::operator=
constexpr CommsProtocol & operator=(int val)
Definition: commands_system.hpp:82
mip::commands_system::InterfaceControl::Response::extract
void extract(Serializer &serializer)
Definition: commands_system.cpp:138
mip::commands_system::CommsInterface::USB_1
@ USB_1
The first virtual serial port over USB (ie. COM5)
mip::commands_system::CommMode::Response::FIELD_DESCRIPTOR
static constexpr const uint8_t FIELD_DESCRIPTOR
Definition: commands_system.hpp:158
mip::commands_system::CommMode::create_sld_all
static CommMode create_sld_all(::mip::FunctionSelector function)
Definition: commands_system.hpp:140
mip::commands_system::InterfaceControl::Response
Definition: commands_system.hpp:243
mip::commands_system::InterfaceControl::port
CommsInterface port
Which physical interface is being selected (USB, serial, etc)
Definition: commands_system.hpp:209
mip::commands_system::CommMode::Response::insert
void insert(Serializer &serializer) const
Serialization.
Definition: commands_system.cpp:44
mip::commands_system::CommsInterface::USB_2
@ USB_2
The second virtual serial port over USB (ie. COM6), only available on GNSS/INS devices....
mip::commands_system::InterfaceControl::Response::protocols_incoming
CommsProtocol protocols_incoming
Input protocol(s) the port will accept. If the protocol supports ACK/NACK or detailed responses,...
Definition: commands_system.hpp:247
mip::commands_system::CommsInterface::ALL
@ ALL
mip::commands_system::CommsProtocol::spartn
constexpr void spartn(bool val)
Definition: commands_system.hpp:93
mip::commands_system::CommMode::asTuple
auto asTuple() const
Definition: commands_system.hpp:130
mip::commands_system::CommsProtocol::operator|=
constexpr CommsProtocol & operator|=(uint32_t val)
Definition: commands_system.hpp:83
mip::commands_system::CommsInterface::UART_2
@ UART_2
mip::commands_system::CommsProtocol::SPARTN
@ SPARTN
Definition: commands_system.hpp:73
mip::commands_system::REPLY_COM_MODE
@ REPLY_COM_MODE
Definition: commands_system.hpp:39
mip::commands_system::CommsProtocol::NONE
@ NONE
Definition: commands_system.hpp:69
mip::commands_system::writeCommMode
TypedResult< CommMode > writeCommMode(C::mip_interface &device, uint8_t mode)
Definition: commands_system.cpp:55
mip::commands_system::InterfaceControl::Response::port
CommsInterface port
Parameters.
Definition: commands_system.hpp:246
mip::commands_system::CommsProtocol::nmea
constexpr void nmea(bool val)
Definition: commands_system.hpp:89
mip::commands_system::CommsProtocol::MIP
@ MIP
Microstrain Inertial Protocol.
Definition: commands_system.hpp:70
mip::FunctionSelector
FunctionSelector
Definition: mip_descriptors.hpp:66
mip::commands_system::InterfaceControl::Response::protocols_outgoing
CommsProtocol protocols_outgoing
Data protocol(s) the port will output.
Definition: commands_system.hpp:248
mip::commands_system::CommsProtocol
Definition: commands_system.hpp:64
mip::commands_system::CommMode::Response
Definition: commands_system.hpp:151
mip::commands_system::InterfaceControl::DOC_NAME
static constexpr const char * DOC_NAME
Definition: commands_system.hpp:218
mip::commands_system::CommMode::Response::asTuple
auto asTuple()
Definition: commands_system.hpp:169
mip::commands_system::CommMode::Response::HAS_FUNCTION_SELECTOR
static constexpr const bool HAS_FUNCTION_SELECTOR
Definition: commands_system.hpp:162
mip::commands_system::CommMode::Response::NAME
static constexpr const char * NAME
Definition: commands_system.hpp:160
mip::commands_system::CommMode::NAME
static constexpr const char * NAME
Definition: commands_system.hpp:126
mip::commands_system::CommMode::HAS_FUNCTION_SELECTOR
static constexpr const bool HAS_FUNCTION_SELECTOR
Definition: commands_system.hpp:128
mip::commands_system::InterfaceControl::HAS_FUNCTION_SELECTOR
static constexpr const bool HAS_FUNCTION_SELECTOR
Definition: commands_system.hpp:219
mip::commands_system::InterfaceControl::Response::DESCRIPTOR_SET
static constexpr const uint8_t DESCRIPTOR_SET
Descriptors.
Definition: commands_system.hpp:251
mip::commands_system::CommMode::FIELD_DESCRIPTOR
static constexpr const uint8_t FIELD_DESCRIPTOR
Definition: commands_system.hpp:124
mip::commands_system::InterfaceControl::Response::FIELD_DESCRIPTOR
static constexpr const uint8_t FIELD_DESCRIPTOR
Definition: commands_system.hpp:252
mip::commands_system::CMD_INTERFACE_CONTROL
@ CMD_INTERFACE_CONTROL
Definition: commands_system.hpp:34
mip::commands_system::CommsProtocol::setAll
constexpr void setAll()
Definition: commands_system.hpp:95
mip::commands_system::REPLY_HARDWARE_CONTROL_2
@ REPLY_HARDWARE_CONTROL_2
Definition: commands_system.hpp:41
mip::commands_system::CMD_COM_MODE
@ CMD_COM_MODE
Definition: commands_system.hpp:35
mip::commands_system::InterfaceControl::Response::asTuple
auto asTuple() const
Definition: commands_system.hpp:258
mip::C::mip_interface
State of the interface for communicating with a MIP device.
Definition: mip_interface.h:44
mip::commands_system::readInterfaceControl
TypedResult< InterfaceControl > readInterfaceControl(C::mip_interface &device, CommsInterface port, CommsProtocol *protocolsIncomingOut, CommsProtocol *protocolsOutgoingOut)
Definition: commands_system.cpp:164
mip::commands_system::CommsProtocol::operator&=
constexpr CommsProtocol & operator&=(uint32_t val)
Definition: commands_system.hpp:84
mip::commands_system::REPLY_HARDWARE_CONTROL
@ REPLY_HARDWARE_CONTROL
Definition: commands_system.hpp:40
mip::commands_system::CommMode::DOC_NAME
static constexpr const char * DOC_NAME
Definition: commands_system.hpp:127
mip::commands_system::CommsProtocol::NMEA
@ NMEA
Definition: commands_system.hpp:71
mip::commands_system::saveInterfaceControl
TypedResult< InterfaceControl > saveInterfaceControl(C::mip_interface &device, CommsInterface port)
Definition: commands_system.cpp:194
mip::commands_system::CommMode::function
FunctionSelector function
Parameters.
Definition: commands_system.hpp:119
mip::commands_system::CommMode::DESCRIPTOR
static constexpr const CompositeDescriptor DESCRIPTOR
Definition: commands_system.hpp:125
mip::commands_system::InterfaceControl::asTuple
auto asTuple()
Definition: commands_system.hpp:226
mip_interface.hpp
mip::commands_system::InterfaceControl::FIELD_DESCRIPTOR
static constexpr const uint8_t FIELD_DESCRIPTOR
Definition: commands_system.hpp:215
mip::commands_system::CommsProtocol::RTCM
@ RTCM
Definition: commands_system.hpp:72
mip::commands_system::InterfaceControl::extract
void extract(Serializer &serializer)
Definition: commands_system.cpp:114
mip::commands_system::CommMode::Response::mode
uint8_t mode
Parameters.
Definition: commands_system.hpp:154
mip::commands_system::CommsProtocol::_enumType
_enumType
Definition: commands_system.hpp:67
mip::commands_system::InterfaceControl::Response::HAS_FUNCTION_SELECTOR
static constexpr const bool HAS_FUNCTION_SELECTOR
Definition: commands_system.hpp:256
mip::commands_system::CommsProtocol::Type
uint32_t Type
Definition: commands_system.hpp:66
mip::commands_system::CommsProtocol::rtcm
constexpr void rtcm(bool val)
Definition: commands_system.hpp:91
mip::commands_system::InterfaceControl::protocols_incoming
CommsProtocol protocols_incoming
Input protocol(s) the port will accept. If the protocol supports ACK/NACK or detailed responses,...
Definition: commands_system.hpp:210
mip::commands_system::REPLY_INTERFACE_CONTROL
@ REPLY_INTERFACE_CONTROL
Definition: commands_system.hpp:42
mip::commands_system::InterfaceControl::protocols_outgoing
CommsProtocol protocols_outgoing
Data protocol(s) the port will output.
Definition: commands_system.hpp:211
mip::commands_system::readCommMode
TypedResult< CommMode > readCommMode(C::mip_interface &device, uint8_t *modeOut)
Definition: commands_system.cpp:67
mip::commands_system::CommMode::Response::extract
void extract(Serializer &serializer)
Definition: commands_system.cpp:49
mip::commands_system::CommMode::Response::DESCRIPTOR
static constexpr const CompositeDescriptor DESCRIPTOR
Definition: commands_system.hpp:159
mip::commands_system::InterfaceControl::Response::insert
void insert(Serializer &serializer) const
Serialization.
Definition: commands_system.cpp:129
mip::commands_system::CommMode::DESCRIPTOR_SET
static constexpr const uint8_t DESCRIPTOR_SET
Descriptors.
Definition: commands_system.hpp:123
mip::commands_system::CommMode::Response::DESCRIPTOR_SET
static constexpr const uint8_t DESCRIPTOR_SET
Descriptors.
Definition: commands_system.hpp:157
mip::commands_system::CommsProtocol::CommsProtocol
constexpr CommsProtocol()
Definition: commands_system.hpp:78
mip::commands_system::InterfaceControl::DESCRIPTOR
static constexpr const CompositeDescriptor DESCRIPTOR
Definition: commands_system.hpp:216
mip::CompositeDescriptor
Convenience struct holding both descriptor set and field descriptor.
Definition: mip_descriptors.hpp:21
mip::commands_system::loadInterfaceControl
TypedResult< InterfaceControl > loadInterfaceControl(C::mip_interface &device, CommsInterface port)
Definition: commands_system.cpp:206
mip::commands_system::CommsProtocol::operator=
constexpr CommsProtocol & operator=(uint32_t val)
Definition: commands_system.hpp:81
mip::commands_system::DESCRIPTOR_SET
@ DESCRIPTOR_SET
Definition: commands_system.hpp:31
mip::commands_system::CommsProtocol::spartn
constexpr bool spartn() const
Definition: commands_system.hpp:92
mip::Bitfield
A dummy struct which is used to mark bitfield objects.
Definition: mip_descriptors.hpp:61
mip::commands_system::CommMode
Definition: commands_system.hpp:116
mip::commands_system::InterfaceControl::DESCRIPTOR_SET
static constexpr const uint8_t DESCRIPTOR_SET
Descriptors.
Definition: commands_system.hpp:214
mip::commands_system::InterfaceControl::Response::DOC_NAME
static constexpr const char * DOC_NAME
Definition: commands_system.hpp:255
mip::commands_system::CommsProtocol::CommsProtocol
constexpr CommsProtocol(int val)
Definition: commands_system.hpp:79
mip::TypedResult
A CmdResult that knows the corresponding command type.
Definition: mip_descriptors.hpp:97
common.hpp
mip_result.hpp
mip::commands_system::CommMode::mode
uint8_t mode
Definition: commands_system.hpp:120
mip::commands_system::writeInterfaceControl
TypedResult< InterfaceControl > writeInterfaceControl(C::mip_interface &device, CommsInterface port, CommsProtocol protocolsIncoming, CommsProtocol protocolsOutgoing)
Definition: commands_system.cpp:148
mip::commands_system::CommsProtocol::mip
constexpr bool mip() const
Definition: commands_system.hpp:86