1 /*
2  * ===========================================================================================
3  *
4  *       Filename:  thread.c
5  *
6  *    Description:  thread osal for hal layer
7  *
8  *        Version:  Melis3.0
9  *         Create:  2019-11-25 20:29:13
10  *       Revision:  none
11  *       Compiler:  GCC:version 7.2.1 20170904 (release),ARM/embedded-7-branch revision 255204
12  *
13  *         Author:  caozilong@allwinnertech.com
14  *   Organization:  BU1-PSW
15  *  Last Modified:  2020-03-05 09:01:13
16  *
17  * ===========================================================================================
18  */
19 
20 #include <stdint.h>
21 #include <hal_thread.h>
22 #include <kconfig.h>
23 #include <log.h>
24 #include <init.h>
25 
kthread_create(void (* threadfn)(void * data),void * data,const char * namefmt,...)26 void *kthread_create(void (*threadfn)(void *data), void *data, const char *namefmt, ...)
27 {
28     rt_thread_t thr;
29 
30     thr = rt_thread_create(namefmt, threadfn, data, \
31                            HAL_THREAD_STACK_SIZE, \
32                            HAL_THREAD_PRIORITY, \
33                            HAL_THREAD_TIMESLICE);
34 
35     RT_ASSERT(thr != RT_NULL);
36 
37     return (void *)thr;
38 }
39 
kthread_start(void * thread)40 int kthread_start(void *thread)
41 {
42     rt_thread_t thr;
43     rt_err_t ret;
44 
45     RT_ASSERT(thread != RT_NULL);
46 
47     thr = (rt_thread_t)thread;
48 
49     ret = rt_thread_startup(thr);
50 
51     return ret;
52 }
53 
kthread_stop(void * thread)54 int kthread_stop(void *thread)
55 {
56     rt_thread_t thr;
57 
58     RT_ASSERT(thread != RT_NULL);
59 
60     thr = (rt_thread_t)thread;
61 
62     rt_thread_delete(thr);
63 
64     return 0;
65 }
66 
kthread_wakeup(void * thread)67 int kthread_wakeup(void *thread)
68 {
69     rt_thread_t thr;
70     rt_err_t err;
71 
72     RT_ASSERT(thread != RT_NULL);
73 
74     thr = (rt_thread_t)thread;
75 
76     err = rt_thread_resume(thr);
77     if (err)
78     {
79         return -1;
80     }
81 
82     return 0;
83 }
84 
kthread_suspend(void * thread)85 int kthread_suspend(void *thread)
86 {
87     rt_thread_t thr;
88     rt_err_t err;
89 
90     RT_ASSERT(thread != RT_NULL);
91 
92     thr = (rt_thread_t)thread;
93 
94     err = rt_thread_suspend(thr);
95     if (err)
96     {
97         return -1;
98     }
99 
100     return 0;
101 }
102