Mbed OS Reference
Loading...
Searching...
No Matches
mx_wifi_mbed_os.h
1/**
2 * <h2><center>&copy; Copyright (c) 2021 STMicroelectronics.
3 * SPDX-License-Identifier: BSD-3-Clause
4 * All rights reserved.</center></h2>
5 *
6 * This software component is licensed by ST under BSD 3-Clause license,
7 * the "License"; You may not use this file except in compliance with the
8 * License. You may obtain a copy of the License at:
9 * opensource.org/licenses/BSD-3-Clause
10 *
11 ******************************************************************************
12 */
13
14/* Define to prevent recursive inclusion -------------------------------------*/
15#ifndef MX_WIFI_CMSIS_OS_H
16#define MX_WIFI_CMSIS_OS_H
17
18#ifdef __cplusplus
19#include "CacheAlignedBuffer.h"
20#endif
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
26
27/* Includes ------------------------------------------------------------------*/
28#include <stdlib.h>
29#include <stdbool.h>
30#include <stdint.h>
31#include "mbed_assert.h"
32
33#ifndef MX_WIFI_MALLOC
34#define MX_WIFI_MALLOC malloc
35#endif /* MX_WIFI_MALLOC */
36
37#ifndef MX_WIFI_FREE
38#define MX_WIFI_FREE free
39#endif /* MX_WIFI_FREE */
40
41// Set to 1 to use basic memory allocation (new and delete).
42// Set to 0 to use emac3080b_global_memory_manager for memory allocations.
43#define BASIC_MALLOC 1
44
45#if BASIC_MALLOC
46
47#ifdef __cplusplus
48
49/**
50 * Structure for an MX wifi buffer.
51 * Only visible to C++ files -- to C files, it is an opaque void pointer.
52 */
53struct mx_buf
54{
55 DynamicCacheAlignedBuffer<uint8_t> buffer;
56 uint32_t header_len = 0;
57 uint32_t len;
58
59 mx_buf(size_t max_len):
60 buffer(max_len),
61 len(max_len)
62 {}
63};
64typedef mx_buf mx_buf_t;
65
66#else
67
68typedef void mx_buf_t;
69
70#endif
71
72#else /* BASIC_MALLOC */
73
74typedef void mx_buf_t;
75
76#endif /* BASIC_MALLOC */
77
78#define MX_NET_BUFFER_ALLOC(len) mx_buf_alloc(len)
79#define MX_NET_BUFFER_FREE(p) mx_buf_free((p))
80#define MX_NET_BUFFER_HIDE_HEADER(p, n) mx_buf_hide_header((p),(n))
81#define MX_NET_BUFFER_PAYLOAD(p) mx_buf_payload((p))
82#define MX_NET_BUFFER_SET_PAYLOAD_SIZE(p, size) mx_buf_set_size((p),(size))
83#define MX_NET_BUFFER_GET_PAYLOAD_SIZE(p) mx_buf_get_size((p))
84
85mx_buf_t *mx_buf_alloc(uint32_t len);
86void mx_buf_free(mx_buf_t *p);
87void mx_buf_hide_header(mx_buf_t *p, int32_t n);
88uint8_t *mx_buf_payload(mx_buf_t *p);
89uint32_t mx_buf_get_size(mx_buf_t *p);
90void mx_buf_set_size(mx_buf_t *p, int32_t n);
91
92void mbed_delay(uint32_t delay);
93void *mbed_mutex_new(void);
94void mbed_mutex_delete(void *);
95void mbed_mutex_lock(void *);
96void mbed_mutex_unlock(void *);
97
98
99void *mbed_sem_new(uint32_t count);
100void mbed_sem_delete(void *sem);
101bool mbed_sem_signal(void *sem);
102bool mbed_sem_wait(void *sem, uint32_t timeout);
103
104void *mbed_queue_new(uint32_t count);
105void mbed_queue_delete(void *sem);
106void *mbed_queue_pop(void *sem, uint32_t timeout);
107
108
109bool mbed_queue_push(void *sem, void *value, uint32_t timeout);
110
111void *mbed_thread_new(void (*thread_entry)(void), uint32_t stacksize, uint32_t priority);
112void mbed_thread_delete(void *thread);
113void mbed_thread_terminate(void *thread);
114
115
116#define MX_ASSERT(a) MBED_ASSERT(a)
117
118#define LOCK_DECLARE(A) void* A
119#define LOCK_INIT(A) A = mbed_mutex_new()
120#define LOCK_DEINIT(A) mbed_mutex_delete(A)
121#define LOCK(A) mbed_mutex_lock(A)
122#define UNLOCK(A) mbed_mutex_unlock(A)
123
124#define SEM_DECLARE(A) void *A
125#define SEM_INIT(A,COUNT) A = mbed_sem_new(COUNT);
126#define SEM_DEINIT(A) mbed_sem_delete(A)
127#define SEM_SIGNAL(A) mbed_sem_signal(A)
128#define SEM_WAIT(A,TIMEOUT,IDLE_FUNC) mbed_sem_wait(A,TIMEOUT)
129
130#define THREAD_DECLARE(A) void *A
131#define THREAD_INIT(A, THREAD_FUNC, THREAD_CONTEXT, STACKSIZE, PRIORITY) (((A = mbed_thread_new((THREAD_CONTEXT_FUNC_TYPE)THREAD_FUNC,STACKSIZE, PRIORITY))!= NULL)?true:false)
132#define THREAD_DEINIT(A) mbed_thread_delete(A)
133#define THREAD_TERMINATE(A) mbed_thread_terminate(A)
134#define THREAD_CONTEXT_TYPE void
135#define THREAD_CONTEXT_FUNC_TYPE void (*)(void)
136
137#define FIFO_DECLARE(QUEUE) void* QUEUE
138#define FIFO_PUSH(QUEUE, VALUE, TIMEOUT, IDLE_FUNC) mbed_queue_push(QUEUE, VALUE, TIMEOUT)
139#define FIFO_POP(QUEUE, TIMEOUT, IDLE_FUNC) mbed_queue_pop(QUEUE, TIMEOUT)
140#define FIFO_INIT(QUEUE,QSIZE) QUEUE = mbed_queue_new(QSIZE)
141#define FIFO_DEINIT(QUEUE) mbed_queue_delete(QUEUE)
142
143
144#define WAIT_FOREVER 0xffffffff
145#define SEM_OK true
146#define THREAD_OK true
147#define QUEUE_OK true
148#define FIFO_OK true
149#define OSPRIORITYNORMAL 1
150#define OSPRIORITYREALTIME 2
151#define OSPRIORITYABOVENORMAL 3
152#define DELAYms(n) mbed_delay(n)
153
154#ifdef __cplusplus
155}
156#endif
157
158
159#endif /* MX_WIFI_MBED_OS_H */
Structure for an MX wifi buffer.