1 /*
2  * Copyright (c) 2006-2021, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2021-04-27     flybreak     the first version.
9  */
10 
11 #pragma once
12 #ifndef __cplusplus
13 void ARMTPLInit();
14 #else
15 #include <rtthread.h>
16 
17 #define ARM_TPL_MAX_DELAY 1000
18 #define ARM_TPL_THREAD_STACK_SIZE 4096
19 
20 enum arm_tpl_mutex_type
21 {
22     NORMAL,
23     RECURSIVE,
24 };
25 
26 struct arm_tpl_mutex_struct
27 {
28     rt_mutex_t mutex;
29     arm_tpl_mutex_type type;
30 };
31 
32 struct arm_tpl_thread_struct
33 {
34     rt_thread_t task;
35     void *(*func)(void *);
36     void *arg;
37     rt_sem_t join_sem;
38     rt_sem_t detach_sem;
39 };
40 
41 class arm_tpl_cv
42 {
43 public:
44     arm_tpl_cv();
45     ~arm_tpl_cv();
46     void wait(rt_mutex_t lock, bool recursive);
47     int timedwait(rt_mutex_t lock, bool recursive, unsigned int timeout_ms);
48     void signal();
49     void broadcast();
50 private:
51     rt_sem_t s;
52     rt_sem_t h;
53     rt_mutex_t x;
54 };
55 
56 #endif
57