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