app_rtos_cfg.h
Go to the documentation of this file.
1 /**
2  ****************************************************************************************
3  *
4  * @file app_rtos_cfg.h
5  * @author BLE Driver Team
6  * @brief Header file of app rtos config code.
7  *
8  ****************************************************************************************
9  * @attention
10  #####Copyright (c) 2019 GOODIX
11  All rights reserved.
12 
13  Redistribution and use in source and binary forms, with or without
14  modification, are permitted provided that the following conditions are met:
15  * Redistributions of source code must retain the above copyright
16  notice, this list of conditions and the following disclaimer.
17  * Redistributions in binary form must reproduce the above copyright
18  notice, this list of conditions and the following disclaimer in the
19  documentation and/or other materials provided with the distribution.
20  * Neither the name of GOODIX nor the names of its contributors may be used
21  to endorse or promote products derived from this software without
22  specific prior written permission.
23 
24  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
25  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
26  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
27  ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS AND CONTRIBUTORS BE
28  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29  CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30  SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31  INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32  CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33  ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34  POSSIBILITY OF SUCH DAMAGE.
35  ****************************************************************************************
36  */
37 
38 /** @addtogroup PERIPHERAL Peripheral Driver
39  * @{
40  */
41 
42 /** @addtogroup APP_DRIVER APP DRIVER
43  * @{
44  */
45 
46 /** @defgroup APP_RTOS_CONFIG RTOS CONFIG
47  * @brief ADC RTOS CONFIG
48  * @{
49  */
50 
51 
52 #ifndef __APP_RTOS_ADAPTER_H
53 #define __APP_RTOS_ADAPTER_H
54 /*
55  * INCLUDE FILES
56  *****************************************************************************************
57  */
58 #include <string.h>
59 #include <stdint.h>
60 
61 #ifdef ENV_USE_FREERTOS
62 
63 #include "FreeRTOS.h"
64 #include "semphr.h"
65 
66 /** @addtogroup APP_RTOS_CONFIG_DEFINES Defines
67  * @{
68  */
69 #define ENV_USE_RTOS
70 /** @} */
71 
72 /**
73  * @defgroup APP_RTOS_CONFIG_TYPEDEF Type definitions
74  * @{
75  */
76 
77 /**
78  * @brief Semaphore type definition
79  */
80 typedef SemaphoreHandle_t sem_t;
81 
82 /**
83  * @brief mutex type definition
84  */
85 typedef SemaphoreHandle_t mutex_t;
86 
87 /** @} */
88 
89 /** @addtogroup APP_RTOS_CONFIG_DEFINES Defines
90  * @{
91  */
92 #define OS_WAIT_FOREVER portMAX_DELAY /**< Block forever until get resource */
93 
94 #define SEM_WAIT_FOREVER portMAX_DELAY /**< Wait for the semaphore forever */
95 #define SEM_NO_WAIT (0) /**< Non-block */
96 
97 #define MUTEX_WAIT_FOREVER portMAX_DELAY /**< Wait for the mutex forever */
98 #define MUTEX_NO_WAIT (0) /**< Non-block */
99 /** @} */
100 
101 #else
102 
103 /**
104  * @defgroup APP_RTOS_CONFIG_TYPEDEF Typedefs
105  * @{
106  */
107 
108 /**
109  * @brief Semaphore type definition
110  */
111 typedef void * sem_t;
112 
113 /**
114  * @brief mutex type definition
115  */
116 typedef void * mutex_t;
117 /** @} */
118 
119 /** @addtogroup APP_RTOS_CONFIG_DEFINES Defines
120  * @{
121  */
122 #define SEM_WAIT_FOREVER (0xFFFFUL) /**< Wait for the semaphore forever. */
123 #define SEM_NO_WAIT (0) /**< Non-block */
124 
125 #define MUTEX_WAIT_FOREVER (0xFFFFUL) /**< Wait for the mutex forever */
126 #define MUTEX_NO_WAIT (0) /**< Non-block */
127 /** @} */
128 
129 #endif
130 
131 /** @addtogroup APP_RTOS_CONFIG_DEFINES Defines
132  * @{
133  */
134 #define APP_DRV_SEM_DECL(sem) sem_t sem /**< Define a semaphore instance */
135 #define APP_DRV_MUTEX_DECL(mutex) mutex_t mutex /**< Define a mutex instance */
136 
137 #define APP_DRV_SEM_STATIC(sem) static APP_DRV_SEM_DECL(sem) /**< Define a static semaphore instance */
138 #define APP_DRV_MUTEX_STATIC(mutex) static APP_DRV_MUTEX_DECL(mutex) /**< Define a static mutex instance */
139 /** @} */
140 
141 #ifdef ENV_USE_RTOS
142 /** @addtogroup APP_RTOS_CONFIG_DEFINES Defines
143  * @{
144  */
145 #define ENV_RTOS_USE_SEMP 1 /**< Enable semaphore in app driver */
146 //#define ENV_RTOS_USE_MUTEX 1 /**< Enable mutex in app driver */
147 /** @} */
148 
149 /** @addtogroup APP_RTOS_CONFIG_FUNCTIONS Functions
150  * @{
151  */
152 /**
153  ****************************************************************************************
154  * @brief Initialize a semaphore.
155  *
156  * @param[in] sem: Pointer to a sem_t parameter which contains the address of the semaphore object.
157  *
158  * @return Result of initialization.
159  ****************************************************************************************
160  */
161 uint16_t app_driver_sem_init(sem_t *sem);
162 
163 /**
164  ****************************************************************************************
165  * @brief De-initialize a semaphore.
166  *
167  * @param[in] sem: the semaphore object.
168  *
169  * @return Result of De-initialization.
170  ****************************************************************************************
171  */
172 void app_driver_sem_deinit(sem_t sem);
173 
174 /**
175  ****************************************************************************************
176  * @brief This function will take a semaphore, if the semaphore is unavailable, the
177  thread shall wait for a specified time.
178  *
179  * @param[in] sem: The semaphore object.
180  * @param[in] time_out: The waiting time in milliseconds.
181  *
182  * @return Result of operation.
183  ****************************************************************************************
184  */
185 uint16_t app_driver_sem_pend(sem_t sem, uint32_t time_out);
186 
187 /**
188  ****************************************************************************************
189  * @brief This function will release a semaphore, if there are threads suspended on
190  * semaphore, it will be waked up.
191  *
192  * @param[in] sem: The semaphore object.
193  *
194  * @return Result of operation.
195  ****************************************************************************************
196  */
197 uint16_t app_driver_sem_post(sem_t sem);
198 
199 /**
200  ****************************************************************************************
201  * @brief This function will release a semaphore, it is used in interrupt service function,
202  * if there are threads suspended on semaphore, it will be waked up.
203  *
204  * @param[in] sem: The semaphore object.
205  *
206  * @return Result of operation.
207  ****************************************************************************************
208  */
209 uint16_t app_driver_sem_post_from_isr(sem_t sem);
210 
211 /**
212  ****************************************************************************************
213  * @brief Initialize a mutex.
214  *
215  * @param[in] mutex: Pointer to mutex_t parameter which contains the address of the mutex object.
216  *
217  * @return Result of initialization.
218  ****************************************************************************************
219  */
220 uint16_t app_driver_mutex_init(mutex_t *mutex);
221 
222 /**
223  ****************************************************************************************
224  * @brief De-initialize a mutex.
225  *
226  * @param[in] mutex: the mutex object.
227  *
228  * @return Result of De-initialization.
229  ****************************************************************************************
230  */
231 void app_driver_mutex_deinit(mutex_t mutex);
232 
233 /**
234  ****************************************************************************************
235  * @brief This function will take a mutex, if the mutex is unavailable, the thread shall
236  * wait for a specified time.
237  *
238  * @param[in] mutex: The mutex object.
239  * @param[in] time_out: The waiting time in milliseconds.
240  *
241  * @return Result of operation.
242  ****************************************************************************************
243  */
244 uint16_t app_driver_mutex_pend(mutex_t mutex, uint32_t time_out);
245 
246 /**
247  ****************************************************************************************
248  * @brief This function will release a mutex, if there are threads suspended on mutex,
249  * it will be waked up.
250  *
251  * @param[in] mutex: The mutex object.
252  *
253  * @return Result of operation.
254  ****************************************************************************************
255  */
256 uint16_t app_driver_mutex_post(mutex_t mutex);
257 /** @} */
258 
259 #else
260 /** @addtogroup APP_RTOS_CONFIG_DEFINES Defines
261  * @{
262  */
263 #define app_driver_sem_init(x) (0) /**< Initialize the semaphore. */
264 #define app_driver_sem_deinit(x) /**< Deinitialize the semaphore. */
265 #define app_driver_sem_pend(x, y) (0) /**< Pend the semaphore. */
266 #define app_driver_sem_post(x) /**< Post the semaphore. */
267 #define app_driver_sem_post_from_isr(x) /**< Post the semaphore from interrupt. */
268 
269 #define app_driver_mutex_init(x) (0) /**< Initialize the mutex. */
270 #define app_driver_mutex_deinit(x) /**< Deinitialize the mutex. */
271 #define app_driver_mutex_pend(x, y) /**< Pend the mutex. */
272 #define app_driver_mutex_post(x) /**< Post the mutex. */
273 /** @} */
274 
275 #endif
276 
277 #endif
278 /** @} */
279 /** @} */
280 /** @} */
app_driver_sem_post_from_isr
#define app_driver_sem_post_from_isr(x)
Definition: app_rtos_cfg.h:267
app_driver_sem_deinit
#define app_driver_sem_deinit(x)
Definition: app_rtos_cfg.h:264
app_driver_mutex_deinit
#define app_driver_mutex_deinit(x)
Definition: app_rtos_cfg.h:270
app_driver_mutex_pend
#define app_driver_mutex_pend(x, y)
Definition: app_rtos_cfg.h:271
app_driver_mutex_post
#define app_driver_mutex_post(x)
Definition: app_rtos_cfg.h:272
app_driver_sem_post
#define app_driver_sem_post(x)
Definition: app_rtos_cfg.h:266
app_driver_sem_init
#define app_driver_sem_init(x)
Definition: app_rtos_cfg.h:263
app_driver_mutex_init
#define app_driver_mutex_init(x)
Definition: app_rtos_cfg.h:269
mutex_t
void * mutex_t
mutex type definition
Definition: app_rtos_cfg.h:116
app_driver_sem_pend
#define app_driver_sem_pend(x, y)
Definition: app_rtos_cfg.h:265
sem_t
void * sem_t
Semaphore type definition.
Definition: app_rtos_cfg.h:111