MIP SDK  0.0.1
MicroStrain Communications Library for embedded systems
Classes | Typedefs | Functions
MIP C++ API

This module contains functions and classes for communicating with a MIP device in C++. More...

Classes

class  mip::Field
 C++ class representing a MIP field. More...
 
class  mip::Packet
 C++ class representing a MIP Packet. More...
 
class  mip::Parser
 C++ class representing a MIP parser. More...
 
struct  mip::Dispatcher
 
struct  mip::CmdQueue
 C++ wrapper around a command queue. More...
 
struct  mip::PendingCmd
 C++ class representing the state of a MIP command. More...
 
class  mip::Connection
 Represents a type of connection to a MIP device. More...
 
class  mip::DeviceInterface
 Represents a connected MIP device. More...
 

Typedefs

using mip::DispatchHandler = C::mip_dispatch_handler
 

Functions

template<class Function >
bool mip::parseMipDataFromSource (C::mip_parser &parser, Function reader, size_t maxPackets)
 Read data from a source into the internal parsing buffer. More...
 
template<class Cmd >
CmdResult mip::runCommand (C::mip_interface &device, const Cmd &cmd, Timeout additionalTime=0)
 
template<class Cmd >
CmdResult mip::runCommand (C::mip_interface &device, const Cmd &cmd, typename Cmd::Response &response, Timeout additionalTime=0)
 
template<class Cmd , class... Args>
CmdResult mip::runCommand (C::mip_interface &device, const Args &&... args, Timeout additionalTime)
 
template<class Cmd >
bool mip::startCommand (C::mip_interface &device, C::mip_pending_cmd &pending, const Cmd &cmd, Timeout additionalTime)
 
template<class T , bool(T::*)(const Packet &, Timestamp) Callback>
void mip::Parser::setCallback (T &object)
 Initializes the MIP Parser. More...
 
template<bool(*)(DeviceInterface &, bool) Function>
void mip::DeviceInterface::setUpdateFunction ()
 Sets the update function to a function taking a MipDevice reference. More...
 
template<void(*)(void *, const Packet &, Timestamp) Callback>
void mip::DeviceInterface::registerPacketCallback (C::mip_dispatch_handler &handler, uint8_t descriptorSet, bool afterFields, void *userData=nullptr)
 Registers a packet callback (free function version). More...
 
template<class Object , void(Object::*)(const Packet &, Timestamp) Callback>
void mip::DeviceInterface::registerPacketCallback (C::mip_dispatch_handler &handler, uint8_t descriptorSet, bool afterFields, Object *object)
 Registers a packet callback (member function version). More...
 
template<void(*)(void *, const Field &, Timestamp) Callback>
void mip::DeviceInterface::registerFieldCallback (C::mip_dispatch_handler &handler, uint8_t descriptorSet, uint8_t fieldDescriptor, void *userData=nullptr)
 Registers a field callback (free function version). More...
 
template<class Object , void(Object::*)(const Field &field, Timestamp) Callback>
void mip::DeviceInterface::registerFieldCallback (C::mip_dispatch_handler &handler, uint8_t descriptorSet, uint8_t fieldDescriptor, Object *object)
 Registers a field callback (member function version). More...
 
template<class DataField , void(*)(void *, const DataField &, Timestamp) Callback>
void mip::DeviceInterface::registerDataCallback (C::mip_dispatch_handler &handler, void *userData=nullptr, uint8_t descriptorSet=DataField::DESCRIPTOR_SET)
 Registers a data callback (free function version). More...
 
template<class DataField , class Object , void(Object::*)(const DataField &, Timestamp) Callback>
void mip::DeviceInterface::registerDataCallback (C::mip_dispatch_handler &handler, Object *object, uint8_t descriptorSet=DataField::DESCRIPTOR_SET)
 Registers a data callback (member function version). More...
 
template<class DataField >
void mip::DeviceInterface::registerExtractor (C::mip_dispatch_handler &handler, DataField *field, uint8_t descriptorSet=DataField::DESCRIPTOR_SET)
 

Detailed Description

This module contains functions and classes for communicating with a MIP device in C++.

See also
mip namespace

Typedef Documentation

◆ DispatchHandler

Function Documentation

◆ parseMipDataFromSource()

template<class Function >
bool mip::parseMipDataFromSource ( C::mip_parser parser,
Function  reader,
size_t  maxPackets 
)

Read data from a source into the internal parsing buffer.

Template Parameters
FunctionA function-like object with the following signature: bool read(size_t maxCount, size_t* count_out, Timestamp* timestamp_out); The parameters are as follows:
  • buffer - Buffer into which to write data.
  • maxCount - The maximum number of bytes to read.
  • count_out - Updated with the number of bytes actually read.
  • timestamp_out - Updated with the timestamp of the data.
Parameters
parser
readerA callback function, lambda, or similar which will read data into the buffer and capture the timestamp. It should return true if successful or false otherwise. If it returns false, parsing is skipped. The read function may also throw an exception instead of returning false.
maxPacketsMaximum number of packets to parse, just like for Parser::parse().
Returns
Same as the return value of reader.

◆ registerDataCallback() [1/2]

template<class DataField , class Object , void(Object::*)(const DataField &, Timestamp) Callback>
void mip::DeviceInterface::registerDataCallback ( C::mip_dispatch_handler handler,
Object *  object,
uint8_t  descriptorSet = DataField::DESCRIPTOR_SET 
)

Registers a data callback (member function version).

Template Parameters
CallbackA pointer to the function to call. This must be a constant member function pointer.
Parameters
handlerThis must exist as long as the hander remains registered.
objectA pointer to the object. The object must exist while the handler remains registered.
descriptorSetIf specified, overrides the descriptor set. Intended to be used with with shared data quantities.

Example usage:

class MySystem
{
void handleAccel(const ScaledAccel& accel, Timestamp timestamp)
{
}
void setup()
{
// setup device...
device.registerDataHandler<ScaledAccel, MySystem, &MySystem::handleAccel>(accelHandler, this);
}
DispatchHandler accelHandler;
};
DeviceInterface(Connection *connection, uint8_t *parseBuffer, size_t parseBufferSize, Timeout parseTimeout, Timeout baseReplyTimeout)
Definition: mip_device.hpp:155
C::mip_dispatch_handler DispatchHandler
Definition: mip_device.hpp:16
C::timestamp_type Timestamp
Definition: mip_types.h:43

◆ registerDataCallback() [2/2]

template<class DataField , void(*)(void *, const DataField &, Timestamp) Callback>
void mip::DeviceInterface::registerDataCallback ( C::mip_dispatch_handler handler,
void *  userData = nullptr,
uint8_t  descriptorSet = DataField::DESCRIPTOR_SET 
)

Registers a data callback (free function version).

Template Parameters
CallbackA pointer to the function to call. This must be a constant function pointer.
Parameters
handlerThis must exist as long as the hander remains registered.
userDataOptional data to pass to the callback function.
descriptorSetIf specified, overrides the descriptor set. Intended to be used with with shared data quantities.

Example usage:

void handle_packet(void* context, const Packet& packet, Timestamp timestamp)
{
// Use the packet data
}
void setup()
{
// Set up device...
device.registerDataCallback<&handle_packet>(handler, descriptorSet, nullptr);
}

◆ registerExtractor()

template<class DataField >
void mip::DeviceInterface::registerExtractor ( C::mip_dispatch_handler handler,
DataField *  field,
uint8_t  descriptorSet = DataField::DESCRIPTOR_SET 
)

◆ registerFieldCallback() [1/2]

template<class Object , void(Object::*)(const Field &, Timestamp) Callback>
void mip::DeviceInterface::registerFieldCallback ( C::mip_dispatch_handler handler,
uint8_t  descriptorSet,
uint8_t  fieldDescriptor,
Object *  object 
)

Registers a field callback (member function version).

Template Parameters
CallbackA pointer to the function to call. This must be a constant member function pointer.
Parameters
handler
descriptorSet
fieldDescriptor
objectExample usage:
class MySystem
{
void handleField(const Field& field, Timestamp timestamp)
{
}
void setup()
{
// setup device...
device.registerFieldHandler<MySystem, &MySystem::handleField>(fieldHandler, descriptorSet, fieldDescriptor, this);
}
DispatchHandler fieldHandler;
};

◆ registerFieldCallback() [2/2]

template<void(*)(void *, const Field &, Timestamp) Callback>
void mip::DeviceInterface::registerFieldCallback ( C::mip_dispatch_handler handler,
uint8_t  descriptorSet,
uint8_t  fieldDescriptor,
void *  userData = nullptr 
)

Registers a field callback (free function version).

Template Parameters
CallbackA pointer to the function to call. This must be a constant function pointer.
Parameters
handler
descriptorSet
fieldDescriptor
userDataExample usage:
void handle_field(void* context, const Field& field, Timestamp timestamp)
{
// Use the field data
}
void setup()
{
// Set up device...
device.registerFieldCallback<&handle_field>(handler, descriptorSet, nullptr);
}

◆ registerPacketCallback() [1/2]

template<class Object , void(Object::*)(const Packet &, Timestamp) Callback>
void mip::DeviceInterface::registerPacketCallback ( C::mip_dispatch_handler handler,
uint8_t  descriptorSet,
bool  afterFields,
Object *  object 
)

Registers a packet callback (member function version).

Template Parameters
CallbackA pointer to the function to call. This must be a constant member function pointer.
Parameters
handler
descriptorSet
afterFields
objectExample usage:
class MySystem
{
void handlePacket(const Packet& packet, Timestamp timestamp)
{
}
void setup()
{
// setup device...
device.registerPacketHandler<MySystem, &MySystem::handlePacket>(packetHandler, descriptorSet, this);
}
DispatchHandler packetHandler;
};

◆ registerPacketCallback() [2/2]

template<void(*)(void *, const Packet &, Timestamp) Callback>
void mip::DeviceInterface::registerPacketCallback ( C::mip_dispatch_handler handler,
uint8_t  descriptorSet,
bool  afterFields,
void *  userData = nullptr 
)

Registers a packet callback (free function version).

Template Parameters
CallbackA pointer to the function to call. This must be a constant function pointer.
Parameters
handler
descriptorSet
afterFields
userDataExample usage:
void handle_packet(void* context, const Packet& packet, Timestamp timestamp)
{
// Use the packet data
}
void setup()
{
// Set up device...
device.registerPacketCallback<&handle_packet>(handler, descriptorSet, nullptr);
}

◆ runCommand() [1/3]

template<class Cmd , class... Args>
CmdResult mip::runCommand ( C::mip_interface device,
const Args &&...  args,
Timeout  additionalTime 
)

◆ runCommand() [2/3]

template<class Cmd >
CmdResult mip::runCommand ( C::mip_interface device,
const Cmd &  cmd,
Timeout  additionalTime = 0 
)

◆ runCommand() [3/3]

template<class Cmd >
CmdResult mip::runCommand ( C::mip_interface device,
const Cmd &  cmd,
typename Cmd::Response &  response,
Timeout  additionalTime = 0 
)

◆ setCallback()

template<class T , bool(T::*)(const Packet &, Timestamp) Callback>
void mip::Parser::setCallback ( T &  object)

Initializes the MIP Parser.

This version allows binding a member function instead of a C-style callback. Example:

struct MyClass
{
void handlePacket(const Packet& packet, Timeout timeout);
};
MyClass myInstance;
Parser parser<MyClass, &MyClass::handlePacket>(myInstance);
Parser(uint8_t *buffer, size_t bufferSize, C::mip_packet_callback callback, void *callbackObject, Timeout timeout)
Definition: mip.hpp:227
Timeout timeout() const
Definition: mip.hpp:243
C::timeout_type Timeout
Definition: mip_types.h:44
Template Parameters
TClass type containing the member function to be called.
CallbackA pointer to a member function on a T to be called when a packet is parsed.
Parameters
objectInstance of T to call the callback.

◆ setUpdateFunction()

template<bool(*)(DeviceInterface &, bool) Function>
void mip::DeviceInterface::setUpdateFunction

Sets the update function to a function taking a MipDevice reference.

bool updateDevice(DeviceInterface& device, bool blocking)
{
return device.defaultUpdate(blocking);
}
device.setUpdateFunction<&updateDevice>();

◆ startCommand()

template<class Cmd >
bool mip::startCommand ( C::mip_interface device,
C::mip_pending_cmd pending,
const Cmd &  cmd,
Timeout  additionalTime 
)