1 #include <stdlib.h>
2 #include <hal_mutex.h>
3 
4 #define PEND_TICK_MAX (0x7FFFFFFF - 1)
5 #define HAL_MUTEX_OK 0
6 
hal_mutex_create(void)7 hal_mutex_t hal_mutex_create(void)
8 {
9     return rt_mutex_create("hal_mutex", RT_IPC_FLAG_FIFO);
10 }
11 
hal_mutex_delete(hal_mutex_t mutex)12 int hal_mutex_delete(hal_mutex_t mutex)
13 {
14     if (!mutex)
15     {
16         return -1;
17     }
18     return rt_mutex_delete(mutex);
19 }
20 
hal_mutex_lock(hal_mutex_t mutex)21 int hal_mutex_lock(hal_mutex_t mutex)
22 {
23     if (!mutex)
24     {
25         return -1;
26     }
27     return rt_mutex_take(mutex, PEND_TICK_MAX);
28 }
29 
hal_mutex_unlock(hal_mutex_t mutex)30 int hal_mutex_unlock(hal_mutex_t mutex)
31 {
32     if (!mutex)
33     {
34         return -1;
35     }
36     return rt_mutex_release(mutex);
37 }
38 
hal_mutex_trylock(hal_mutex_t mutex)39 int hal_mutex_trylock(hal_mutex_t mutex)
40 {
41     if (!mutex)
42     {
43         return -1;
44     }
45     if (rt_mutex_take(mutex, 0) == 0)
46     {
47         return 0;
48     }
49     return -2;
50 }
51 
hal_mutex_timedwait(hal_mutex_t mutex,int ticks)52 int hal_mutex_timedwait(hal_mutex_t mutex, int ticks)
53 {
54     if (!mutex)
55     {
56         return -1;
57     }
58     return rt_mutex_take(mutex, ticks);
59 }
60