mip_cmdqueue.h
Go to the documentation of this file.
1 
2 #pragma once
3 
4 #include <stdint.h>
5 
6 #include "mip_types.h"
7 #include "mip_result.h"
8 #include "mip_packet.h"
9 
10 #ifdef __cplusplus
11 namespace mip {
12 namespace C {
13 extern "C" {
14 #endif
15 
19 
26 
27 
32 
40 
41 typedef struct mip_pending_cmd
42 {
44  uint8_t* _response_buffer;
45  union {
49  };
50  uint8_t _descriptor_set;
53  union {
55  uint8_t _response_length;
56  };
57  volatile enum mip_cmd_result _status;
59 
60 void mip_pending_cmd_init(mip_pending_cmd* cmd, uint8_t descriptor_set, uint8_t field_descriptor);
61 void mip_pending_cmd_init_with_timeout(mip_pending_cmd* cmd, uint8_t descriptor_set, uint8_t field_descriptor, mip_timeout additional_time);
62 void mip_pending_cmd_init_with_response(mip_pending_cmd* cmd, uint8_t descriptor_set, uint8_t field_descriptor, uint8_t response_descriptor, uint8_t* response_buffer, uint8_t response_buffer_size);
63 void mip_pending_cmd_init_full(mip_pending_cmd* cmd, uint8_t descriptor_set, uint8_t field_descriptor, uint8_t response_descriptor, uint8_t* response_buffer, uint8_t response_size, mip_timeout additional_time);
64 
67 const uint8_t* mip_pending_cmd_response(const mip_pending_cmd* cmd);
69 
72 
82 
92 
93 typedef struct mip_cmd_queue
94 {
97 
98 #ifdef MIP_ENABLE_DIAGNOSTICS
99  uint16_t _diag_cmds_queued;
100  uint16_t _diag_cmds_acked;
101  uint8_t _diag_cmds_nacked;
102  uint8_t _diag_cmds_timedout;
103  uint8_t _diag_cmds_failed;
104 #endif // MIP_ENABLE_DIAGNOSTICS
105 
106 } mip_cmd_queue;
107 
108 void mip_cmd_queue_init(mip_cmd_queue* queue, mip_timeout base_reply_timeout);
111 
113 
114 void mip_cmd_queue_update(mip_cmd_queue* queue, mip_timestamp timestamp);
115 
118 
119 void mip_cmd_queue_process_packet(mip_cmd_queue* queue, const mip_packet* packet, mip_timestamp timestamp);
120 
121 
122 #ifdef MIP_ENABLE_DIAGNOSTICS
123 uint16_t mip_cmd_queue_diagnostic_cmds_queued(const mip_cmd_queue* queue);
124 uint16_t mip_cmd_queue_diagnostic_cmds_failed(const mip_cmd_queue* queue);
125 uint16_t mip_cmd_queue_diagnostic_cmds_successful(const mip_cmd_queue* queue);
126 
127 uint16_t mip_cmd_queue_diagnostic_cmd_acks(const mip_cmd_queue* queue);
128 uint16_t mip_cmd_queue_diagnostic_cmd_nacks(const mip_cmd_queue* queue);
129 uint16_t mip_cmd_queue_diagnostic_cmd_timeouts(const mip_cmd_queue* queue);
130 uint16_t mip_cmd_queue_diagnostic_cmd_errors(const mip_cmd_queue* queue);
131 #endif // MIP_ENABLE_DIAGNOSTICS
132 
137 
138 #ifdef __cplusplus
139 } // namespace C
140 } // namespace mip
141 } // extern "C"
142 #endif
mip_packet.h
mip_pending_cmd_response_descriptor
uint8_t mip_pending_cmd_response_descriptor(const mip_pending_cmd *cmd)
Returns the response descriptor.
Definition: mip_cmdqueue.c:112
mip_pending_cmd::_next
struct mip_pending_cmd * _next
Next command in the queue.
Definition: mip_cmdqueue.h:43
mip_pending_cmd::_field_descriptor
uint8_t _field_descriptor
Command field descriptor.
Definition: mip_cmdqueue.h:51
mip_pending_cmd::_descriptor_set
uint8_t _descriptor_set
Command descriptor set.
Definition: mip_cmdqueue.h:50
mip
Definition: ping.cpp:12
mip_pending_cmd::_reply_time
mip_timestamp _reply_time
If MIP_STATUS_COMPLETED: timestamp_type from the packet containing the ack/nack.
Definition: mip_cmdqueue.h:48
mip_pending_cmd_init_full
void mip_pending_cmd_init_full(mip_pending_cmd *cmd, uint8_t descriptor_set, uint8_t field_descriptor, uint8_t response_descriptor, uint8_t *response_buffer, uint8_t response_size, mip_timeout additional_time)
Initialize a pending mip commmand with all parameters.
Definition: mip_cmdqueue.c:84
mip_types.h
mip_cmd_queue_init
void mip_cmd_queue_init(mip_cmd_queue *queue, mip_timeout base_reply_timeout)
Initializes a command queue.
Definition: mip_cmdqueue.c:200
mip_cmd_queue_set_base_reply_timeout
void mip_cmd_queue_set_base_reply_timeout(mip_cmd_queue *queue, mip_timeout timeout)
Sets the base reply timeout for all commands.
Definition: mip_cmdqueue.c:477
mip_pending_cmd::_response_descriptor
uint8_t _response_descriptor
Response field descriptor, or 0x00 if no response field expected.
Definition: mip_cmdqueue.h:52
mip_pending_cmd::_response_length
uint8_t _response_length
If status == MIP_STATUS_COMPLETED, the length of the reply data.
Definition: mip_cmdqueue.h:55
mip_pending_cmd_remaining_time
int mip_pending_cmd_remaining_time(const mip_pending_cmd *cmd, mip_timestamp now)
Determines how much time is remaining before the command times out.
Definition: mip_cmdqueue.c:158
mip_cmd_queue::_base_timeout
mip_timeout _base_timeout
Definition: mip_cmdqueue.h:96
mip_result.h
mip_cmd_result
mip_cmd_result
Represents the status of a MIP command.
Definition: mip_result.h:25
mip_cmd_queue_clear
void mip_cmd_queue_clear(mip_cmd_queue *queue)
Clears the command queue.
Definition: mip_cmdqueue.c:417
mip_pending_cmd::_response_buffer
uint8_t * _response_buffer
Buffer for response data if response_descriptor != 0x00.
Definition: mip_cmdqueue.h:44
mip_cmd_queue
struct mip_cmd_queue mip_cmd_queue
Holds a list of pending commands.
mip_pending_cmd_init
void mip_pending_cmd_init(mip_pending_cmd *cmd, uint8_t descriptor_set, uint8_t field_descriptor)
Initialize a pending command with no reponse data or additional time.
Definition: mip_cmdqueue.c:26
mip_timestamp
uint64_t mip_timestamp
Type used for packet timestamps and timeouts.
Definition: mip_types.h:32
mip_pending_cmd
Represents a command awaiting a reply from the device.
Definition: mip_cmdqueue.h:41
mip_cmd_queue_base_reply_timeout
mip_timeout mip_cmd_queue_base_reply_timeout(const mip_cmd_queue *queue)
Gets the base reply timeout for all commands.
Definition: mip_cmdqueue.c:487
mip_pending_cmd_response_length
uint8_t mip_pending_cmd_response_length(const mip_pending_cmd *cmd)
Returns the length of the response data.
Definition: mip_cmdqueue.c:136
mip_cmd_queue
Holds a list of pending commands.
Definition: mip_cmdqueue.h:93
mip_pending_cmd_response
const uint8_t * mip_pending_cmd_response(const mip_pending_cmd *cmd)
Returns the response payload pointer.
Definition: mip_cmdqueue.c:122
mip_pending_cmd::_timeout_time
mip_timestamp _timeout_time
If MIP_STATUS_WAITING: timestamp_type after which the command will be timed out.
Definition: mip_cmdqueue.h:47
mip_cmd_queue_update
void mip_cmd_queue_update(mip_cmd_queue *queue, mip_timestamp timestamp)
Call periodically to make sure commands time out if no packets are received.
Definition: mip_cmdqueue.c:440
mip_pending_cmd
struct mip_pending_cmd mip_pending_cmd
Represents a command awaiting a reply from the device.
mip_pending_cmd::_extra_timeout
mip_timeout _extra_timeout
<
Definition: mip_cmdqueue.h:46
mip_cmd_queue::_first_pending_cmd
mip_pending_cmd * _first_pending_cmd
Definition: mip_cmdqueue.h:95
mip_cmd_queue_dequeue
void mip_cmd_queue_dequeue(mip_cmd_queue *queue, mip_pending_cmd *cmd)
Removes a pending command from the queue.
Definition: mip_cmdqueue.c:244
mip_pending_cmd_status
enum mip_cmd_result mip_pending_cmd_status(const mip_pending_cmd *cmd)
Returns the status of the pending command.
Definition: mip_cmdqueue.c:104
mip_timeout
mip_timestamp mip_timeout
Definition: mip_types.h:35
mip_pending_cmd_init_with_timeout
void mip_pending_cmd_init_with_timeout(mip_pending_cmd *cmd, uint8_t descriptor_set, uint8_t field_descriptor, mip_timeout additional_time)
Initialize a pending mip commmand with extra timeout time.
Definition: mip_cmdqueue.c:42
mip_packet
Structure representing a MIP Packet.
Definition: mip_packet.h:41
mip_pending_cmd_check_timeout
bool mip_pending_cmd_check_timeout(const mip_pending_cmd *cmd, mip_timestamp now)
Checks if the command should time out.
Definition: mip_cmdqueue.c:176
mip_cmd_queue_process_packet
void mip_cmd_queue_process_packet(mip_cmd_queue *queue, const mip_packet *packet, mip_timestamp timestamp)
Process an incoming packet and check for replies to pending commands.
Definition: mip_cmdqueue.c:375
mip_pending_cmd::_response_buffer_size
uint8_t _response_buffer_size
If status < MIP_STATUS_COMPLETED, the size of the reply data buffer.
Definition: mip_cmdqueue.h:54
mip_cmd_queue_enqueue
void mip_cmd_queue_enqueue(mip_cmd_queue *queue, mip_pending_cmd *cmd)
Queue a command to wait for replies.
Definition: mip_cmdqueue.c:221
mip_pending_cmd_init_with_response
void mip_pending_cmd_init_with_response(mip_pending_cmd *cmd, uint8_t descriptor_set, uint8_t field_descriptor, uint8_t response_descriptor, uint8_t *response_buffer, uint8_t response_buffer_size)
Initialize a pending mip commmand with expected response data.
Definition: mip_cmdqueue.c:62


microstrain_inertial_driver
Author(s): Brian Bingham, Parker Hannifin Corp
autogenerated on Mon Jun 24 2024 02:51:40