MIP SDK  0.0.1
MicroStrain Communications Library for embedded systems
mip_interface.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <stdint.h>
4 #include <stddef.h>
5 
6 #include "mip_parser.h"
7 #include "mip_cmdqueue.h"
8 #include "mip_dispatch.h"
9 
10 #ifdef __cplusplus
11 namespace mip{
12 namespace C {
13 extern "C" {
14 #endif
15 
32 
33 struct mip_interface;
34 
46 typedef bool (*mip_update_callback)(struct mip_interface* device, bool blocking);
47 
51 typedef struct mip_interface
52 {
53  mip_parser _parser;
54  mip_cmd_queue _queue;
55  mip_dispatcher _dispatcher;
56  unsigned int _max_update_pkts;
57  mip_update_callback _update_function;
58  void* _user_pointer;
60 
61 void mip_interface_init(mip_interface* device, uint8_t* parse_buffer, size_t parse_buffer_size, timeout_type parse_timeout, timeout_type base_reply_timeout);
62 
63 //
64 // Communications
65 //
66 
67 remaining_count mip_interface_receive_bytes(mip_interface* device, const uint8_t* data, size_t length, timestamp_type timestamp);
69 bool mip_interface_update(mip_interface* device, bool blocking);
70 bool mip_interface_default_update(mip_interface* device, bool blocking);
71 
72 bool mip_interface_send_to_device(mip_interface* device, const uint8_t* data, size_t length);
73 
74 bool mip_interface_parse_callback(void* device, const mip_packet* packet, timestamp_type timestamp);
75 void mip_interface_receive_packet(mip_interface* device, const mip_packet* packet, timestamp_type timestamp);
76 
77 //
78 // Commands
79 //
80 
82 enum mip_cmd_result mip_interface_run_command(mip_interface* device, uint8_t descriptor_set, uint8_t field_descriptor, const uint8_t* payload, uint8_t payload_length);
83 enum mip_cmd_result mip_interface_run_command_with_response(mip_interface* device, uint8_t descriptor_set, uint8_t field_descriptor, const uint8_t* payload, uint8_t payload_length, uint8_t response_descriptor, uint8_t* response_data, uint8_t* response_length_inout);
85 
87 
88 //
89 // Data Callbacks
90 //
91 
92 void mip_interface_register_packet_callback(mip_interface* device, mip_dispatch_handler* handler, uint8_t descriptor_set, bool after_fields, mip_dispatch_packet_callback callback, void* user_data);
93 void mip_interface_register_field_callback(mip_interface* device, mip_dispatch_handler* handler, uint8_t descriptor_set, uint8_t field_descriptor, mip_dispatch_field_callback callback, void* user_data);
94 void mip_interface_register_extractor(mip_interface* device, mip_dispatch_handler* handler, uint8_t descriptor_set, uint8_t field_descriptor, mip_dispatch_extractor callback, void* field_ptr);
95 
96 //
97 // Accessors
98 //
99 
101 void mip_interface_set_user_pointer(mip_interface* device, void* pointer);
102 void mip_interface_set_max_packets_per_update(mip_interface* device, unsigned int max_packets);
104 
109 
116 
143 extern bool mip_interface_user_recv_from_device(mip_interface* device, uint8_t* buffer, size_t max_length, size_t* out_length, timestamp_type* timestamp_out);
144 
145 
154 extern bool mip_interface_user_send_to_device(mip_interface* device, const uint8_t* data, size_t length);
155 
156 
159 
160 
161 #ifdef __cplusplus
162 } // namespace mip
163 } // namespace C
164 } // extern "C"
165 #endif
void(* mip_dispatch_packet_callback)(void *context, const mip_packet *packet, timestamp_type timestamp)
Signature for packet-level callbacks.
Definition: mip_dispatch.h:38
bool(* mip_dispatch_extractor)(const mip_field *field, void *ptr)
Signature for extraction callbacks.
Definition: mip_dispatch.h:55
void(* mip_dispatch_field_callback)(void *context, const mip_field *field, timestamp_type timestamp)
Signature for field-level callbacks.
Definition: mip_dispatch.h:47
mip_cmd_result
Represents the status of a MIP command.
Definition: mip_result.h:24
bool mip_interface_send_to_device(mip_interface *device, const uint8_t *data, size_t length)
bool(* mip_update_callback)(struct mip_interface *device, bool blocking)
Callback function typedef for custom update behavior.
Definition: mip_interface.h:46
enum mip_cmd_result mip_interface_run_command_with_response(mip_interface *device, uint8_t descriptor_set, uint8_t field_descriptor, const uint8_t *payload, uint8_t payload_length, uint8_t response_descriptor, uint8_t *response_data, uint8_t *response_length_inout)
void mip_interface_set_update_function(mip_interface *device, mip_update_callback function)
void mip_interface_set_max_packets_per_update(mip_interface *device, unsigned int max_packets)
void mip_interface_register_packet_callback(mip_interface *device, mip_dispatch_handler *handler, uint8_t descriptor_set, bool after_fields, mip_dispatch_packet_callback callback, void *user_data)
bool mip_interface_update(mip_interface *device, bool blocking)
bool mip_interface_default_update(mip_interface *device, bool blocking)
bool mip_interface_start_command_packet(mip_interface *device, const mip_packet *packet, mip_pending_cmd *cmd)
enum mip_cmd_result mip_interface_run_command_packet(mip_interface *device, const mip_packet *packet, mip_pending_cmd *cmd)
void mip_interface_register_field_callback(mip_interface *device, mip_dispatch_handler *handler, uint8_t descriptor_set, uint8_t field_descriptor, mip_dispatch_field_callback callback, void *user_data)
unsigned int mip_interface_max_packets_per_update(const mip_interface *device)
mip_cmd_queue * mip_interface_cmd_queue(mip_interface *device)
struct mip::C::mip_interface mip_interface
State of the interface for communicating with a MIP device.
mip_parser * mip_interface_parser(mip_interface *device)
mip_update_callback mip_interface_update_function(mip_interface *device)
enum mip_cmd_result mip_interface_wait_for_reply(mip_interface *device, const mip_pending_cmd *cmd)
enum mip_cmd_result mip_interface_run_command(mip_interface *device, uint8_t descriptor_set, uint8_t field_descriptor, const uint8_t *payload, uint8_t payload_length)
void mip_interface_receive_packet(mip_interface *device, const mip_packet *packet, timestamp_type timestamp)
void mip_interface_init(mip_interface *device, uint8_t *parse_buffer, size_t parse_buffer_size, timeout_type parse_timeout, timeout_type base_reply_timeout)
bool mip_interface_parse_callback(void *device, const mip_packet *packet, timestamp_type timestamp)
void * mip_interface_user_pointer(const mip_interface *device)
remaining_count mip_interface_receive_bytes(mip_interface *device, const uint8_t *data, size_t length, timestamp_type timestamp)
void mip_interface_process_unparsed_packets(mip_interface *device)
void mip_interface_set_user_pointer(mip_interface *device, void *pointer)
void mip_interface_register_extractor(mip_interface *device, mip_dispatch_handler *handler, uint8_t descriptor_set, uint8_t field_descriptor, mip_dispatch_extractor callback, void *field_ptr)
bool mip_interface_user_recv_from_device(mip_interface *device, uint8_t *buffer, size_t max_length, size_t *out_length, timestamp_type *timestamp_out)
Receives new data from the device. Called repeatedly by mip_interface_update() while waiting for comm...
Definition: mip_device.cpp:8
bool mip_interface_user_send_to_device(mip_interface *device, const uint8_t *data, size_t length)
Definition: mip_device.cpp:13
timestamp_type timeout_type
Definition: mip_types.h:35
int_least16_t remaining_count
Definition: mip_types.h:16
uint64_t timestamp_type
Type used for packet timestamps and timeouts.
Definition: mip_types.h:32
A collection of C++ classes and functions covering the full mip api.
Definition: commands_3dm.c:11
Holds a list of pending commands.
Definition: mip_cmdqueue.h:93
Handler information for MIP Packet or Field callbacks.
Definition: mip_dispatch.h:88
Holds the state of the MIP dispatch system.
Definition: mip_dispatch.h:122
State of the interface for communicating with a MIP device.
Definition: mip_interface.h:52
Structure representing a MIP Packet.
Definition: mip_packet.h:44
MIP Parser state.
Definition: mip_parser.h:56
Represents a command awaiting a reply from the device.
Definition: mip_cmdqueue.h:42