Skip to content

Commit 1a1680e

Browse files
add THREADX semaphore support for multithreaded cases
1 parent 53d4fb9 commit 1a1680e

2 files changed

Lines changed: 33 additions & 0 deletions

File tree

src/mqtt_client.c

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,35 @@ static int MqttClient_CancelMessage(MqttClient *client, MqttObject* msg);
186186
return 0;
187187
}
188188

189+
#elif defined(THREADX)
190+
/* ThreadX semaphore */
191+
int wm_SemInit(wm_Sem *s) {
192+
if (tx_semaphore_create(s, NULL, 1) != TX_SUCCESS) {
193+
return MQTT_TRACE_ERROR(MQTT_CODE_ERROR_SYSTEM);
194+
}
195+
return 0;
196+
}
197+
int wm_SemFree(wm_Sem *s) {
198+
if (tx_semaphore_delete(s) != TX_SUCCESS) {
199+
return MQTT_TRACE_ERROR(MQTT_CODE_ERROR_SYSTEM);
200+
}
201+
return 0;
202+
}
203+
204+
static UINT semstatus;
205+
int wm_SemLock(wm_Sem *s) {
206+
semstatus = tx_semaphore_get(s, TX_WAIT_FOREVER);
207+
if (semstatus != TX_SUCCESS) {
208+
return MQTT_TRACE_ERROR(MQTT_CODE_ERROR_SYSTEM);
209+
}
210+
return 0;
211+
}
212+
int wm_SemUnlock(wm_Sem *s) {
213+
if (tx_semaphore_put(s) != TX_SUCCESS) {
214+
return MQTT_TRACE_ERROR(MQTT_CODE_ERROR_SYSTEM);
215+
}
216+
return 0;
217+
}
189218
#endif /* MUTEX */
190219
#endif /* WOLFMQTT_MULTITHREAD */
191220

wolfmqtt/mqtt_types.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,10 @@
126126
#include <windows.h>
127127
typedef HANDLE wm_Sem;
128128

129+
#elif defined(THREADX)
130+
#include <tx_api.h>
131+
typedef TX_SEMAPHORE wm_Sem;
132+
129133
#else
130134
#error "Multithreading requires binary semaphore implementation!"
131135
#endif

0 commit comments

Comments
 (0)