MeshX 0.3
This repository provides an implementation for Bluetooth Low Energy (BLE) Mesh network nodes. The project allows you to create BLE mesh nodes that can communicate with each other, enabling the development of smart home solutions or other IoT-based applications.
Loading...
Searching...
No Matches
meshx_msg_q.c File Reference

Implementation of MeshX Message Queue using FreeRTOS queues. This file provides functions to create, delete, send, and receive messages using a message queue abstraction for the MeshX framework. More...

#include "interface/rtos/meshx_msg_q.h"
#include "freertos/FreeRTOS.h"
#include "freertos/queue.h"
Include dependency graph for meshx_msg_q.c:

Go to the source code of this file.

Functions

meshx_err_t meshx_msg_q_create (meshx_msg_q_t *msg_q_handle)
 Create a MeshX Message Queue.
 
meshx_err_t meshx_msg_q_delete (meshx_msg_q_t *msg_q_handle)
 Delete a MeshX Message Queue.
 
meshx_err_t meshx_msg_q_send (meshx_msg_q_t *msg_q_handle, void const *msg, size_t msg_len, uint32_t delay_ms)
 Send a Message to a MeshX Message Queue Back.
 
meshx_err_t meshx_msg_q_send_front (meshx_msg_q_t *msg_q_handle, void const *msg, size_t msg_len, uint32_t delay_ms)
 Send a Message to the front of a MeshX Message Queue.
 
meshx_err_t meshx_msg_q_recv (meshx_msg_q_t *msg_q_handle, void *msg, uint32_t delay_ms)
 Receive a Message from a MeshX Message Queue.
 
meshx_err_t meshx_msg_q_peek (meshx_msg_q_t *msg_q_handle, void *msg, uint32_t delay_ms)
 Peek a Message from a MeshX Message Queue.
 

Detailed Description

Implementation of MeshX Message Queue using FreeRTOS queues. This file provides functions to create, delete, send, and receive messages using a message queue abstraction for the MeshX framework.

Copyright (c) 2024 - 2025 MeshX

Author
Pranjal Chanda

Definition in file meshx_msg_q.c.

Function Documentation

◆ meshx_msg_q_create()

meshx_err_t meshx_msg_q_create ( meshx_msg_q_t * msg_q_handle)

Create a MeshX Message Queue.

This function creates a MeshX Message Queue.

Parameters
[in,out]msg_q_handleMessage Queue Handle
Returns
Message Queue Handle

Definition at line 26 of file meshx_msg_q.c.

27{
28 if (msg_q_handle == NULL)
29 {
30 return MESHX_INVALID_ARG;
31 }
32
33 // Create a FreeRTOS queue
34 QueueHandle_t queue = xQueueCreate(msg_q_handle->max_msg_length, msg_q_handle->max_msg_depth);
35
36 if (queue == NULL)
37 {
38 // Failed to create queue
39 return MESHX_NO_MEM;
40 }
41
42 // Store the queue handle in the msg_q_handle
43 msg_q_handle->__msg_q_handle = queue;
44
45 return MESHX_SUCCESS;
46}
@ MESHX_SUCCESS
Definition meshx_err.h:40
@ MESHX_INVALID_ARG
Definition meshx_err.h:42
@ MESHX_NO_MEM
Definition meshx_err.h:44
int max_msg_length
Definition meshx_msg_q.h:25
int max_msg_depth
Definition meshx_msg_q.h:24
void * __msg_q_handle
Definition meshx_msg_q.h:27
Here is the caller graph for this function:

◆ meshx_msg_q_delete()

meshx_err_t meshx_msg_q_delete ( meshx_msg_q_t * msg_q_handle)

Delete a MeshX Message Queue.

This function deletes a MeshX Message Queue.

Parameters
[in]msg_q_handleMessage Queue Handle

Definition at line 55 of file meshx_msg_q.c.

56{
57 if (msg_q_handle == NULL)
58 {
59 return MESHX_INVALID_ARG;
60 }
61
62 // Delete the FreeRTOS queue
63 vQueueDelete((QueueHandle_t)msg_q_handle->__msg_q_handle);
64
65 return MESHX_SUCCESS;
66}

◆ meshx_msg_q_peek()

meshx_err_t meshx_msg_q_peek ( meshx_msg_q_t * msg_q_handle,
void * msg,
uint32_t delay_ms )

Peek a Message from a MeshX Message Queue.

This function peeks a message from a MeshX Message Queue.

Parameters
[in]msg_q_handleMessage Queue Handle
[in]msgMessage
[in]delay_msDelay in milliseconds
Returns
Message Queue Handle

Definition at line 172 of file meshx_msg_q.c.

173{
174 if (msg_q_handle == NULL || msg == NULL)
175 {
176 return MESHX_INVALID_ARG;
177 }
178
179 BaseType_t ret = xPortInIsrContext() ? xQueuePeekFromISR(msg_q_handle->__msg_q_handle, msg)
180 : xQueuePeek(msg_q_handle->__msg_q_handle, msg, pdMS_TO_TICKS(delay_ms));
181
182 if (ret!= pdPASS)
183 {
184 return MESHX_FAIL;
185 }
186
187 return MESHX_SUCCESS;
188}
@ MESHX_FAIL
Definition meshx_err.h:41

◆ meshx_msg_q_recv()

meshx_err_t meshx_msg_q_recv ( meshx_msg_q_t * msg_q_handle,
void * msg,
uint32_t delay_ms )

Receive a Message from a MeshX Message Queue.

This function receives a message from a MeshX Message Queue.

Parameters
[in]msg_q_handleMessage Queue Handle
[in]msgMessage
[in]delay_msDelay in milliseconds
Returns
Message Queue Handle

Definition at line 142 of file meshx_msg_q.c.

143{
144 if (msg_q_handle == NULL || msg == NULL)
145 {
146 return MESHX_INVALID_ARG;
147 }
148 BaseType_t pxHigherPriorityTaskWoken = pdFALSE;
149
150 BaseType_t ret = xPortInIsrContext() ? xQueueReceiveFromISR(msg_q_handle->__msg_q_handle, msg, &pxHigherPriorityTaskWoken)
151 : xQueueReceive(msg_q_handle->__msg_q_handle, msg, pdMS_TO_TICKS(delay_ms));
152
153 if (ret!= pdPASS)
154 {
155 return MESHX_FAIL;
156 }
157
158 return MESHX_SUCCESS;
159}
Here is the caller graph for this function:

◆ meshx_msg_q_send()

meshx_err_t meshx_msg_q_send ( meshx_msg_q_t * msg_q_handle,
void const * msg,
size_t msg_len,
uint32_t delay_ms )

Send a Message to a MeshX Message Queue Back.

This function sends a message to a MeshX Message Queue.

Parameters
[in]msg_q_handleMessage Queue Handle
[in]msgMessage
[in]msg_lenMessage Length
[in]delay_msDelay in milliseconds
Returns
None

Definition at line 80 of file meshx_msg_q.c.

81{
82 if (msg_q_handle == NULL || msg == NULL || msg_len == 0)
83 {
84 return MESHX_INVALID_ARG;
85 }
86
87 BaseType_t pxHigherPriorityTaskWoken = pdFALSE;
88
89 BaseType_t ret = xPortInIsrContext() ? xQueueSendFromISR(msg_q_handle->__msg_q_handle, msg, &pxHigherPriorityTaskWoken)
90 : xQueueSend(msg_q_handle->__msg_q_handle, msg, pdMS_TO_TICKS(delay_ms));
91
92 if (ret!= pdPASS)
93 {
94 return MESHX_FAIL;
95 }
96
97 return MESHX_SUCCESS;
98}
Here is the caller graph for this function:

◆ meshx_msg_q_send_front()

meshx_err_t meshx_msg_q_send_front ( meshx_msg_q_t * msg_q_handle,
void const * msg,
size_t msg_len,
uint32_t delay_ms )

Send a Message to the front of a MeshX Message Queue.

This function sends a message to the front of a MeshX Message Queue.

Parameters
[in]msg_q_handleMessage Queue Handle
[in]msgMessage
[in]msg_lenMessage Length
[in]delay_msDelay in milliseconds
Returns
None

Definition at line 112 of file meshx_msg_q.c.

113{
114 if (msg_q_handle == NULL || msg == NULL || msg_len == 0)
115 {
116 return MESHX_INVALID_ARG;
117 }
118
119 BaseType_t pxHigherPriorityTaskWoken = pdFALSE;
120
121 BaseType_t ret = xPortInIsrContext() ? xQueueSendToFrontFromISR(msg_q_handle->__msg_q_handle, msg, &pxHigherPriorityTaskWoken)
122 : xQueueSendToFront(msg_q_handle->__msg_q_handle, msg, pdMS_TO_TICKS(delay_ms));
123
124 if (ret!= pdPASS)
125 {
126 return MESHX_FAIL;
127 }
128
129 return MESHX_SUCCESS;
130}