• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  * Description: 线程适配层接口(此文件为DEMO,需集成方适配修改)
15  */
16 #ifndef HILINK_THREAD_ADAPTER_H
17 #define HILINK_THREAD_ADAPTER_H
18 
19 #include <stdint.h>
20 
21 #ifdef __cplusplus
22 extern "C" {
23 #endif
24 
25 #define HILINK_WAIT_FOREVER 0xFFFFFFFFU
26 
27 typedef void* HiLinkTaskId;
28 
29 typedef void* HiLinkMutexId;
30 
31 typedef void* HiLinkSemId;
32 
33 typedef void (*HiLinkTaskEntryFunc)(void *arg);
34 
35 typedef enum HiLinkTaskPrio {
36     HILINK_TASK_PRIORITY_MIN = 0,
37     HILINK_TASK_PRIORITY_LOW,
38     HILINK_TASK_PRIORITY_MID,
39     HILINK_TASK_PRIORITY_HIGH,
40     HILINK_TASK_PRIORITY_MAX,
41     /* 避免编译器优化,限制该枚举值为32-bit */
42     HILINK_TASK_PRIORITY_REVERSED = 0x7FFFFFFF
43 } HiLinkTaskPrio;
44 
45 typedef struct HiLinkTaskParam {
46     HiLinkTaskEntryFunc func;
47     HiLinkTaskPrio prio;
48     unsigned int stackSize;
49     void *arg;
50     const char *name;
51 } HiLinkTaskParam;
52 
53 /*
54  * 描述:创建线程接口
55  * 参数:param,线程参数
56  * 返回: NULL创建线程失败,其他线程句柄
57  */
58 HiLinkTaskId HILINK_CreateTask(HiLinkTaskParam *param);
59 
60 /*
61  * 描述:挂起线程接口
62  * 参数:handle,挂起线程句柄
63  * 返回:0成功, 其他失败
64  */
65 int HILINK_ThreadSuspend(HiLinkTaskId handle);
66 
67 /*
68  * 描述:恢复线程接口
69  * 参数:handle,恢复线程句柄
70  * 返回:0成功,其他失败
71  */
72 int HILINK_ThreadResume(HiLinkTaskId handle);
73 
74 /*
75  * 描述:删除线程接口
76  * 参数:handle,删除线程句柄
77  */
78 void HILINK_DeleteTask(HiLinkTaskId handle);
79 
80 /*
81  * 描述:获取当前运行线程的句柄
82  * 返回:当前运行线程的句柄
83  */
84 HiLinkTaskId HILINK_GetCurrentTaskId(void);
85 
86 /*
87  * 描述:创建互斥锁
88  * 返回:NULL失败, 其他互斥锁句柄
89  */
90 HiLinkMutexId HILINK_MutexCreate(void);
91 
92 /*
93  * 描述:互斥锁加锁
94  * 参数:mutex,互斥锁
95  *       ms,超时时间,为HILINK_WAIT_FOREVER不会超时
96  * 返回:0成功, 其他失败
97  */
98 int HILINK_MutexLock(HiLinkMutexId mutex, unsigned int ms);
99 
100 /*
101  * 描述:互斥锁解锁
102  * 参数:mutex,互斥锁句柄
103  * 返回:0成功,其他失败
104  */
105 int HILINK_MutexUnlock(HiLinkMutexId mutex);
106 
107 /*
108  * 描述:互斥锁释放
109  * 参数:mutex,互斥锁句柄
110  */
111 void HILINK_MutexDestroy(HiLinkMutexId mutex);
112 
113 /*
114  * 描述:创建信号量
115  * 参数:count,指定信号量值的初始值大小
116  * 返回:NULL失败, 其他信号量句柄
117  */
118 HiLinkSemId HILINK_SemCreate(unsigned int count);
119 
120 /*
121  * 描述:信号量的值减1
122  * 参数:handle,信号量句柄
123  *       ms,阻塞超时时间,为HILINK_WAIT_FOREVER不会超时
124  * 返回:0表示成功, 其他值表示失败
125  */
126 int HILINK_SemWait(HiLinkSemId handle, unsigned int ms);
127 
128 /*
129  * 描述:信号量的值加1
130  * 参数:handle,信号量句柄
131  * 返回:0表示成功, 其他值表示失败
132  */
133 int HILINK_SemPost(HiLinkSemId handle);
134 
135 /*
136  * 描述:销毁信号量
137  * 参数:handle,信号量句柄
138  */
139 void HILINK_SemDestroy(HiLinkSemId handle);
140 
141 /*
142  * 描述:将进程休眠指定的时间
143  * 参数:ms,休眠的毫秒数
144  * 返回:0成功,其他失败
145  */
146 int HILINK_MilliSleep(unsigned int ms);
147 
148 /**
149  * @brief 让出系统调度以使其他等待线程可以执行
150  */
151 void HILINK_SchedYield(void);
152 
153 #ifdef __cplusplus
154 }
155 #endif
156 
157 /* 打开互斥锁检测调试功能 */
158 #ifdef SUPPORT_MUTEX_DEBUG
159 #include "mutex_debug_utils.h"
160 #endif
161 
162 #endif /* HILINK_THREAD_ADAPTER_H */
163