MIP_SDK
v3.0.0
MicroStrain Communications Library for embedded systems
|
Go to the documentation of this file.
87 bool addField(uint8_t fieldDescriptor,
const uint8_t* payload, uint8_t payloadLength) {
return C::mip_packet_add_field(
this, fieldDescriptor, payload, payloadLength); }
120 assert(capacity() <= FIELD_PAYLOAD_LENGTH_MAX);
141 uint8_t
operator[](
unsigned int index)
const {
return pointer()[index]; }
153 #if __cpp_range_based_for >= 201603
156 std::nullptr_t
end()
const {
return nullptr; }
182 template<
class FieldType>
183 bool addField(
const FieldType& field, uint8_t fieldDescriptor=INVALID_FIELD_DESCRIPTOR)
185 if( fieldDescriptor == INVALID_FIELD_DESCRIPTOR )
186 fieldDescriptor = FieldType::FIELD_DESCRIPTOR;
208 template<
class FieldType>
209 static PacketView createFromField(uint8_t* buffer,
size_t bufferSize,
const FieldType& field, uint8_t fieldDescriptor=INVALID_FIELD_DESCRIPTOR)
211 if( fieldDescriptor == INVALID_FIELD_DESCRIPTOR )
212 fieldDescriptor = FieldType::FIELD_DESCRIPTOR;
214 packet.
addField<FieldType>(field, fieldDescriptor);
271 bool copyPacketTo(uint8_t* buffer,
size_t maxLength) { assert(isSane());
size_t copyLength = this->totalLength();
if(copyLength > maxLength)
return false; std::memcpy(buffer, pointer(), copyLength);
return true; }
289 template<
size_t BufferSize>
292 static_assert(BufferSize >= PACKET_LENGTH_MIN,
"BufferSize must be at least PACKET_LENGTH_MIN bytes");
310 template<
size_t OtherSize>
317 template<
size_t OtherSize>
327 template<
class FieldType>
329 const FieldType& field,
330 uint8_t fieldDescriptor=INVALID_FIELD_DESCRIPTOR,
331 typename std::enable_if<std::is_class<FieldType>::value,
void>::type* =
nullptr
334 createFromField<FieldType>(mData,
sizeof(mData), field, fieldDescriptor);
359 void copyFrom(
const uint8_t* data,
size_t length) { assert(length <=
sizeof(mData)); std::memcpy(mData, data, length); }
368 uint8_t mData[BufferSize];
@ MIP_PACKET_LENGTH_MAX
Definition: mip_offsets.h:28
constexpr pointer data() const noexcept
Definition: span.hpp:63
uint16_t mip_packet_checksum_value(const mip_packet_view *packet)
Returns the value of the checksum as written in the packet.
Definition: mip_packet.c:148
int mip_packet_cancel_last_field(mip_packet_view *packet, uint8_t *payload_ptr)
Removes the last field from the packet after having allocated it.
Definition: mip_packet.c:422
A collection of C++ classes and functions covering the full mip api.
Definition: commands_3dm.c:11
PacketView(const C::mip_packet_view &other)
Constructs a C++ PacketRef class from the base C object.
Definition: mip_packet.hpp:52
bool next()
Updates the mip_field to refer to the next field in a packet.
Definition: mip_field.hpp:69
void mip_packet_from_buffer(mip_packet_view *packet, const uint8_t *buffer, size_t length)
Initializes a MIP packet from an existing buffer.
Definition: mip_packet.c:44
SizedPacketBuf< mip::PACKET_LENGTH_MAX > PacketBuf
Typedef for SizedPacketBuf of max possible size.
Definition: mip_packet.hpp:377
Definition: mip_packet.hpp:111
Definition: mip_packet.hpp:225
int mip_packet_create_field(mip_packet_view *packet, uint8_t field_descriptor, uint8_t payload_length, uint8_t **payload_ptr_out)
Allocate a MIP field within the packet and return the payload pointer.
Definition: mip_packet.c:339
@ MIP_PACKET_LENGTH_MIN
Definition: mip_offsets.h:27
Serializes or deserializes data to/from a byte buffer.
Definition: serializer.hpp:125
PacketView(const uint8_t *buffer, size_t length)
Initializes a MIP packet from an existing buffer.
Definition: mip_packet.hpp:48
bool addField(const FieldType &field, uint8_t fieldDescriptor=INVALID_FIELD_DESCRIPTOR)
Adds a field of the given type to the packet.
Definition: mip_packet.hpp:183
uint8_t * buffer()
Returns a pointer to the underlying buffer. This is technically the same as PacketRef::pointer but is...
Definition: mip_packet.hpp:348
@ MIP_PACKET_PAYLOAD_LENGTH_MAX
Definition: mip_offsets.h:26
const FieldView & operator*() const
Dereference the iterator as a Field instance.
Definition: mip_packet.hpp:252
SizedPacketBuf(const PacketView &packet)
Definition: mip_packet.hpp:300
int mip_packet_remaining_space(const mip_packet_view *packet)
Returns the remaining space available for more payload data.
Definition: mip_packet.c:246
void copyFrom(const PacketView &packet)
Copies an existing packet. The packet is assumed to be valid (undefined behavior otherwise).
Definition: mip_packet.hpp:365
AllocatedField createField(uint8_t fieldDescriptor)
Definition: mip_packet.hpp:139
FieldView firstField() const
Returns the first field in the packet.
Definition: mip_packet.hpp:171
bool operator==(const FieldIterator &other) const
Definition: mip_packet.hpp:238
void mip_packet_reset(mip_packet_view *packet, uint8_t descriptor_set)
Reinitialize the packet with the given descriptor set.
Definition: mip_packet.c:469
TypedResult< Reset > reset(C::mip_interface &device)
Definition: commands_filter.cpp:32
FieldIterator end() const
Definition: mip_packet.hpp:158
FieldIterator & operator++()
Advance to the next field.
Definition: mip_packet.hpp:255
void cancel()
Definition: mip_packet.hpp:133
const uint8_t * mip_packet_pointer(const mip_packet_view *packet)
Returns a pointer to the data buffer containing the packet.
Definition: mip_packet.c:129
uint_least16_t mip_packet_total_length(const mip_packet_view *packet)
Returns the total length of the packet, in bytes.
Definition: mip_packet.c:113
constexpr size_t size() const noexcept
Definition: span.hpp:65
bool mip_packet_is_sane(const mip_packet_view *packet)
Returns true if the packet buffer is not NULL and is at least the minimum size (MIP_PACKET_LENGTH_MIN...
Definition: mip_packet.c:187
SizedPacketBuf(microstrain::Span< const uint8_t > data)
Construct from a span.
Definition: mip_packet.hpp:303
Implementation of std::span from C++20.
Definition: span.hpp:40
FieldIterator()
Empty iterator, which represents the "end" iterator of a packet.
Definition: mip_packet.hpp:229
Structure representing a MIP Packet.
Definition: mip_packet.h:50
PacketView(uint8_t *buffer, size_t bufferSize, uint8_t descriptorSet)
Create a brand-new MIP packet in the given buffer.
Definition: mip_packet.hpp:46
bool copyPacketTo(uint8_t *buffer, size_t maxLength)
Copies this packet to an external buffer.
Definition: mip_packet.hpp:271
SizedPacketBuf(const FieldType &field, uint8_t fieldDescriptor=INVALID_FIELD_DESCRIPTOR, typename std::enable_if< std::is_class< FieldType >::value, void >::type *=nullptr)
Create a packet containing just the given field.
Definition: mip_packet.hpp:328
PacketView(microstrain::Span< const uint8_t > buffer)
Create a reference to an existing MIP packet.
Definition: mip_packet.hpp:62
uint8_t mip_packet_descriptor_set(const mip_packet_view *packet)
Returns the MIP descriptor set for this packet.
Definition: mip_packet.c:95
bool mip_packet_is_valid(const mip_packet_view *packet)
Returns true if the packet is valid.
Definition: mip_packet.c:200
A mip packet with a self-contained buffer (useful with std::vector).
Definition: mip_packet.hpp:290
PacketView(const C::mip_packet_view *other)
Constructs a C++ PacketRef class from the base C object.
Definition: mip_packet.hpp:50
uint_least16_t mip_packet_buffer_size(const mip_packet_view *packet)
Returns the size of the buffer backing the MIP packet.
Definition: mip_packet.c:232
SizedPacketBuf & operator=(const SizedPacketBuf &other)
Copy assignment operator.
Definition: mip_packet.hpp:314
@ DESCRIPTOR_SET
Definition: commands_3dm.hpp:31
microstrain::Span< uint8_t, BufferSize > bufferSpan()
Returns a Span covering the entire buffer.
Definition: mip_packet.hpp:352
SizedPacketBuf(const SizedPacketBuf< OtherSize > &other)
Copy constructor (required to insert packets into std::vector in some cases).
Definition: mip_packet.hpp:311
void mip_packet_create(mip_packet_view *packet, uint8_t *buffer, size_t buffer_size, uint8_t descriptor_set)
Create a brand-new MIP packet in the given buffer.
Definition: mip_packet.c:70
static constexpr size_t PACKET_SIZE_MIN
Definition: mip_packet.hpp:39
bool mip_packet_add_field(mip_packet_view *packet, uint8_t field_descriptor, const uint8_t *payload, uint8_t payload_length)
Adds a pre-constructed MIP field to the packet.
Definition: mip_packet.c:297
int mip_packet_update_last_field_length(mip_packet_view *packet, uint8_t *payload_ptr, uint8_t new_payload_length)
Changes the size of the last field in the packet.
Definition: mip_packet.c:386
const uint8_t * mip_packet_payload(const mip_packet_view *packet)
Returns a pointer to the packet's payload (the first field).
Definition: mip_packet.c:137
C++ class representing a MIP field.
Definition: mip_field.hpp:25
static constexpr size_t PAYLOAD_LENGTH_MAX
Definition: mip_packet.hpp:38
uint16_t mip_packet_compute_checksum(const mip_packet_view *packet)
Computes the checksum of the MIP packet.
Definition: mip_packet.c:160
uint8_t fieldDescriptor() const
Returns the field descriptor.
Definition: mip_field.hpp:46
SizedPacketBuf & operator=(const SizedPacketBuf< OtherSize > &other)
Assignment operator, copies data from another buffer to this one.
Definition: mip_packet.hpp:318
microstrain::Span< const uint8_t > payloadSpan() const
Gets a span over just the payload.
Definition: mip_packet.hpp:108
bool copyPacketTo(microstrain::Span< uint8_t > buffer)
Copies this packet to an external buffer (span version).
Definition: mip_packet.hpp:282
mip_field_view mip_field_first_from_packet(const mip_packet_view *packet)
Extracts the first field from a MIP packet.
Definition: mip_field.c:170
const PacketView & ref() const
Explicitly obtains a const reference to the packet data.
Definition: mip_packet.hpp:344
static constexpr size_t PACKET_SIZE_MAX
Definition: mip_packet.hpp:40
static PacketView createFromField(uint8_t *buffer, size_t bufferSize, const FieldType &field, uint8_t fieldDescriptor=INVALID_FIELD_DESCRIPTOR)
Creates a new PacketRef containing a single MIP field from an instance of the field type.
Definition: mip_packet.hpp:209
bool isValid() const
Returns true if the field has a valid field descriptor.
Definition: mip_field.hpp:64
uint8_t mip_packet_payload_length(const mip_packet_view *packet)
Returns the length of the payload (MIP fields).
Definition: mip_packet.c:103
bool mip_packet_is_empty(const mip_packet_view *packet)
Returns true if the mip packet contains no payload.
Definition: mip_packet.c:218
AllocatedField & operator=(const AllocatedField &)=delete
bool operator==(std::nullptr_t) const
Definition: mip_packet.hpp:248
AllocatedField(mip::PacketView &packet, uint8_t *buffer, size_t space)
Definition: mip_packet.hpp:114
void copyFrom(const uint8_t *data, size_t length)
Copies the data from the pointer to this buffer. The data is not inspected.
Definition: mip_packet.hpp:359
bool commit()
Definition: mip_packet.hpp:118
bool operator!=(const FieldIterator &other) const
Definition: mip_packet.hpp:244
bool operator!=(std::nullptr_t) const
Definition: mip_packet.hpp:249
void mip_packet_finalize(mip_packet_view *packet)
Prepares the packet for transmission by adding the checksum.
Definition: mip_packet.c:451
uint8_t operator[](unsigned int index) const
Definition: mip_packet.hpp:141
PacketView ref()
Explicitly obtains a reference to the packet data.
Definition: mip_packet.hpp:340
SizedPacketBuf(const SizedPacketBuf &other)
Copy constructor.
Definition: mip_packet.hpp:306
SizedPacketBuf(uint8_t descriptorSet=INVALID_DESCRIPTOR_SET)
Definition: mip_packet.hpp:295
FieldIterator(const FieldView &first)
Definition: mip_packet.hpp:233
C++ class representing a view of a MIP packet.
Definition: mip_packet.hpp:35
FieldIterator begin() const
Definition: mip_packet.hpp:149
Serializer createField(uint8_t fieldDescriptor, uint8_t length)
Definition: mip_packet.hpp:88
microstrain::Span< const uint8_t > totalSpan() const
Gets a span over the whole packet.
Definition: mip_packet.hpp:104
bool isData() const
Definition: mip_packet.hpp:72
SizedPacketBuf(const uint8_t *data, size_t length)
Creates a PacketBuf by copying existing data.
Definition: mip_packet.hpp:299
uint8_t descriptorSet() const
Returns the descriptor set of the packet containing this field._.
Definition: mip_field.hpp:44
bool insert(const Ts &... values)
Serializes one or more values.
Definition: serializer.hpp:923
bool mip_packet_is_data(const mip_packet_view *packet)
Returns true if the packet is from a data descriptor set.
Definition: mip_packet.c:259
const uint8_t * payload() const
Returns the payload pointer for the field data.
Definition: mip_field.hpp:52
PacketView(microstrain::Span< uint8_t > buffer, uint8_t descriptorSet)
Create a new MIP packet in an existing buffer.
Definition: mip_packet.hpp:57