Z-Wave Protocol Controller Reference
zwave_tx_queue.hpp
Go to the documentation of this file.
1/******************************************************************************
2 * # License
3 * <b>Copyright 2021 Silicon Laboratories Inc. www.silabs.com</b>
4 ******************************************************************************
5 * The licensor of this software is Silicon Laboratories Inc. Your use of this
6 * software is governed by the terms of Silicon Labs Master Software License
7 * Agreement (MSLA) available at
8 * www.silabs.com/about-us/legal/master-software-license-agreement. This
9 * software is distributed to you in Source Code format and is governed by the
10 * sections of the MSLA applicable to Source Code.
11 *
12 *****************************************************************************/
13
14#ifndef ZWAVE_TX_QUEUE_HPP
15#define ZWAVE_TX_QUEUE_HPP
16
17// Includes from this component
18#include "zwave_tx.h"
19
20// Includes from other components
21#include "sl_status.h"
22
23// Contiki includes
24#include "sys/etimer.h"
25
26#include "priority_queue.hpp"
27
48typedef struct zwave_tx_queue_element {
52 uint16_t data_length;
64 // if it should still be sent.
65 clock_time_t queue_timestamp;
70 clock_time_t transmission_time;
77 void *user;
82
85 const zwave_tx_queue_element_t &rhs) const
86 {
88 }
89};
90
105{
106 private:
107 // Global variable used to get new session IDs.
109
110 public:
128 zwave_tx_session_id_t *user_session_id);
129
140
148
153 void clear();
154
160 bool empty() const;
161
165 int size() const noexcept;
166
168 // Getter functions
170
181 const zwave_tx_session_id_t session_id) const;
182
190 bool contains(const zwave_tx_session_id_t session_id) const;
205 const zwave_tx_session_id_t session_id) const;
206
208 // Setter functions
210
224 uint8_t status,
225 zwapi_tx_report_t *tx_status);
226
239
251
260 const uint8_t *get_frame(const zwave_tx_session_id_t session_id);
261
269 uint16_t get_frame_length(const zwave_tx_session_id_t session_id);
270
286
302
316
325
327 // Print functions
329
335 void log(bool log_messages_payload) const;
336
345 void log_element(const zwave_tx_session_id_t session_id,
346 bool log_frame_payload) const;
347
354
355 private:
358 queue_element_qos_compare>::iterator;
362 queue_element_qos_compare>::const_iterator;
363
366
371};
372
375#endif // ZWAVE_TX_QUEUE_HPP
Priority Queue.
Definition: priority_queue.hpp:56
Definition: zwave_tx_queue.hpp:105
void clear()
clears the tx queue
uint32_t zwave_tx_session_id_counter
Definition: zwave_tx_queue.hpp:108
bool contains(const zwave_tx_session_id_t session_id) const
Verifies if a session ID is in the queue.
bool empty() const
const uint8_t * get_frame(const zwave_tx_session_id_t session_id)
Returns a pointer to the payload of a frame in the Tx Queue.
bool zwave_tx_has_frames_for_node(const zwave_node_id_t node_id)
Finds if we have elements to send to a NodeID destination.
priority_queue< zwave_tx_queue_element_t, ZWAVE_TX_QUEUE_BUFFER_SIZE, queue_element_qos_compare >::iterator queue_iterator
Definition: zwave_tx_queue.hpp:358
priority_queue< zwave_tx_queue_element_t, ZWAVE_TX_QUEUE_BUFFER_SIZE, queue_element_qos_compare >::const_iterator const_queue_iterator
Definition: zwave_tx_queue.hpp:362
uint8_t get_number_of_responses(const zwave_tx_session_id_t session_id)
Finds the total the number of expected responses for an element and its parents in the queue.
sl_status_t pop(const zwave_tx_session_id_t session_id)
Removes an element from the queue.
sl_status_t reset_transmission_timestamp(const zwave_tx_session_id_t session_id)
Reset the timestamp for the transmission of an element.
int size() const noexcept
sl_status_t get_highest_priority_child(zwave_tx_queue_element_t *element, const zwave_tx_session_id_t session_id) const
Find the child in the queue with the highest priority.
void log_element(const zwave_tx_session_id_t session_id, bool log_frame_payload) const
Logs the content one element of the queue using sl_log.
sl_status_t disable_fasttack(const zwave_tx_session_id_t session_id)
Disables the fasttrack options from the Z-Wave Tx Options.
sl_status_t decrement_expected_responses(const zwave_tx_session_id_t session_id)
Decrement the number of expected responses for an element in the queue.
queue_iterator find(const zwave_tx_session_id_t key)
sl_status_t set_transmissions_results(const zwave_tx_session_id_t session_id, uint8_t status, zwapi_tx_report_t *tx_status)
Sets Z-Wave API transmission results for an element in the queue.
uint16_t get_frame_length(const zwave_tx_session_id_t session_id)
Returns the length of a frame in the Z-Wave Tx Queue.
void simple_log(zwave_tx_queue_element_t *e) const
Short log of one element using sl_log.
sl_status_t enqueue(const zwave_tx_queue_element_t &new_element, zwave_tx_session_id_t *user_session_id)
Adds a new element into the queue.
sl_status_t set_transmission_timestamp(const zwave_tx_session_id_t session_id)
Records a timestamp of the current time for the transmission of an element.
priority_queue< zwave_tx_queue_element_t, ZWAVE_TX_QUEUE_BUFFER_SIZE, queue_element_qos_compare > queue
Definition: zwave_tx_queue.hpp:370
void log(bool log_messages_payload) const
Logs the content of the queue using sl_log.
sl_status_t get_by_id(zwave_tx_queue_element_t *element, const zwave_tx_session_id_t session_id) const
Gets a copy of the data for an element in the queue.
zwave_tx_queue_element_t * first_in_queue()
gets the element which has the highest priority
uint32_t sl_status_t
Definition: sl_status.h:139
#define ZWAVE_MAX_FRAME_SIZE
Definition: zwave_node_id_definitions.h:53
uint16_t zwave_node_id_t
Z-Wave NodeID type.
Definition: zwave_node_id_definitions.h:84
void * zwave_tx_session_id_t
Handle that can be used for aborting ongoing transmissions or identifying TX Queue elements.
Definition: zwave_tx_definitions.h:77
struct zwave_tx_queue_element zwave_tx_queue_element_t
Z-Wave TX queue element.
void(* on_zwave_tx_send_data_complete_t)(uint8_t status, const zwapi_tx_report_t *tx_info, void *user)
Function signature for callbacks invoked when send data has completed.
Definition: zwave_tx.h:168
SL Status Codes.
Definition: zwave_tx_queue.hpp:83
bool operator()(const zwave_tx_queue_element_t &lhs, const zwave_tx_queue_element_t &rhs) const
Definition: zwave_tx_queue.hpp:84
Detailed report and data about Z-Wave transmissions.
Definition: zwapi_protocol_transport.h:225
Structure holding information about the source and destination when transmitting and receiving Z-Wave...
Definition: zwave_controller_connection_info.h:87
Definition: zwave_tx_definitions.h:131
uint32_t qos_priority
Definition: zwave_tx_definitions.h:148
Z-Wave TX queue element.
Definition: zwave_tx_queue.hpp:48
clock_time_t transmission_time
Definition: zwave_tx_queue.hpp:70
clock_time_t queue_timestamp
Definition: zwave_tx_queue.hpp:65
uint16_t data_length
Size of the frame payload.
Definition: zwave_tx_queue.hpp:52
zwapi_tx_report_t send_data_tx_status
Definition: zwave_tx_queue.hpp:55
uint8_t send_data_status
Definition: zwave_tx_queue.hpp:80
zwave_controller_connection_info_t connection_info
Requested connection_info (transport/encapsulation information)
Definition: zwave_tx_queue.hpp:59
clock_time_t transmission_timestamp
Transmissions timestamp, used to record when the frame is sent.
Definition: zwave_tx_queue.hpp:67
void * user
Definition: zwave_tx_queue.hpp:77
uint8_t data[ZWAVE_MAX_FRAME_SIZE]
Frame payload.
Definition: zwave_tx_queue.hpp:50
zwave_tx_session_id_t zwave_tx_session_id
Session ID for this element. It's a unique identifier.
Definition: zwave_tx_queue.hpp:61
on_zwave_tx_send_data_complete_t callback_function
Definition: zwave_tx_queue.hpp:74
zwave_tx_options_t options
Options for transmitting this element. Refer to zwave_tx_options_t.
Definition: zwave_tx_queue.hpp:57
const zwave_node_id_t node_id
#define ZWAVE_TX_QUEUE_BUFFER_SIZE
Definition: zwave_tx.h:26