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
Go to the documentation of this file.
1
12
14#include "freertos/FreeRTOS.h"
15#include "freertos/queue.h"
16
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}
47
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}
67
80meshx_err_t meshx_msg_q_send(meshx_msg_q_t *msg_q_handle, void const *msg, size_t msg_len, uint32_t delay_ms)
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}
99
112meshx_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)
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}
131
142meshx_err_t meshx_msg_q_recv(meshx_msg_q_t *msg_q_handle, void *msg, uint32_t delay_ms)
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}
160
172meshx_err_t meshx_msg_q_peek(meshx_msg_q_t *msg_q_handle, void *msg, uint32_t delay_ms)
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}
189
meshx_err_t
MeshX Error Codes.
Definition meshx_err.h:39
@ MESHX_SUCCESS
Definition meshx_err.h:40
@ MESHX_INVALID_ARG
Definition meshx_err.h:42
@ MESHX_FAIL
Definition meshx_err.h:41
@ MESHX_NO_MEM
Definition meshx_err.h:44
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.
meshx_err_t meshx_msg_q_create(meshx_msg_q_t *msg_q_handle)
Create a MeshX Message Queue.
Definition meshx_msg_q.c:26
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_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.
Definition meshx_msg_q.c:80
meshx_err_t meshx_msg_q_delete(meshx_msg_q_t *msg_q_handle)
Delete a MeshX Message Queue.
Definition meshx_msg_q.c:55
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 Message Queue Interface.
struct meshx_msg_q meshx_msg_q_t
MeshX Message Queue Structure.
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