xref: /nrf52832-nimble/rt-thread/include/rtthread.h (revision 104654410c56c573564690304ae786df310c91fc)
1*10465441SEvalZero /*
2*10465441SEvalZero  * Copyright (c) 2006-2018, RT-Thread Development Team
3*10465441SEvalZero  *
4*10465441SEvalZero  * SPDX-License-Identifier: Apache-2.0
5*10465441SEvalZero  *
6*10465441SEvalZero  * Change Logs:
7*10465441SEvalZero  * Date           Author       Notes
8*10465441SEvalZero  * 2006-03-18     Bernard      the first version
9*10465441SEvalZero  * 2006-04-26     Bernard      add semaphore APIs
10*10465441SEvalZero  * 2006-08-10     Bernard      add version information
11*10465441SEvalZero  * 2007-01-28     Bernard      rename RT_OBJECT_Class_Static to RT_Object_Class_Static
12*10465441SEvalZero  * 2007-03-03     Bernard      clean up the definitions to rtdef.h
13*10465441SEvalZero  * 2010-04-11     yi.qiu       add module feature
14*10465441SEvalZero  * 2013-06-24     Bernard      add rt_kprintf re-define when not use RT_USING_CONSOLE.
15*10465441SEvalZero  * 2016-08-09     ArdaFu       add new thread and interrupt hook.
16*10465441SEvalZero  * 2018-11-22     Jesven       add all cpu's lock and ipi handler
17*10465441SEvalZero  */
18*10465441SEvalZero 
19*10465441SEvalZero #ifndef __RT_THREAD_H__
20*10465441SEvalZero #define __RT_THREAD_H__
21*10465441SEvalZero 
22*10465441SEvalZero #include <rtconfig.h>
23*10465441SEvalZero #include <rtdebug.h>
24*10465441SEvalZero #include <rtdef.h>
25*10465441SEvalZero #include <rtservice.h>
26*10465441SEvalZero #include <rtm.h>
27*10465441SEvalZero 
28*10465441SEvalZero #ifdef __cplusplus
29*10465441SEvalZero extern "C" {
30*10465441SEvalZero #endif
31*10465441SEvalZero 
32*10465441SEvalZero /**
33*10465441SEvalZero  * @addtogroup KernelObject
34*10465441SEvalZero  */
35*10465441SEvalZero 
36*10465441SEvalZero /**@{*/
37*10465441SEvalZero 
38*10465441SEvalZero /*
39*10465441SEvalZero  * kernel object interface
40*10465441SEvalZero  */
41*10465441SEvalZero void rt_system_object_init(void);
42*10465441SEvalZero struct rt_object_information *
43*10465441SEvalZero rt_object_get_information(enum rt_object_class_type type);
44*10465441SEvalZero void rt_object_init(struct rt_object         *object,
45*10465441SEvalZero                     enum rt_object_class_type type,
46*10465441SEvalZero                     const char               *name);
47*10465441SEvalZero void rt_object_detach(rt_object_t object);
48*10465441SEvalZero rt_object_t rt_object_allocate(enum rt_object_class_type type,
49*10465441SEvalZero                                const char               *name);
50*10465441SEvalZero void rt_object_delete(rt_object_t object);
51*10465441SEvalZero rt_bool_t rt_object_is_systemobject(rt_object_t object);
52*10465441SEvalZero rt_uint8_t rt_object_get_type(rt_object_t object);
53*10465441SEvalZero rt_object_t rt_object_find(const char *name, rt_uint8_t type);
54*10465441SEvalZero 
55*10465441SEvalZero #ifdef RT_USING_HOOK
56*10465441SEvalZero void rt_object_attach_sethook(void (*hook)(struct rt_object *object));
57*10465441SEvalZero void rt_object_detach_sethook(void (*hook)(struct rt_object *object));
58*10465441SEvalZero void rt_object_trytake_sethook(void (*hook)(struct rt_object *object));
59*10465441SEvalZero void rt_object_take_sethook(void (*hook)(struct rt_object *object));
60*10465441SEvalZero void rt_object_put_sethook(void (*hook)(struct rt_object *object));
61*10465441SEvalZero #endif
62*10465441SEvalZero 
63*10465441SEvalZero /**@}*/
64*10465441SEvalZero 
65*10465441SEvalZero /**
66*10465441SEvalZero  * @addtogroup Clock
67*10465441SEvalZero  */
68*10465441SEvalZero 
69*10465441SEvalZero /**@{*/
70*10465441SEvalZero 
71*10465441SEvalZero /*
72*10465441SEvalZero  * clock & timer interface
73*10465441SEvalZero  */
74*10465441SEvalZero void rt_system_tick_init(void);
75*10465441SEvalZero rt_tick_t rt_tick_get(void);
76*10465441SEvalZero void rt_tick_set(rt_tick_t tick);
77*10465441SEvalZero void rt_tick_increase(void);
78*10465441SEvalZero int  rt_tick_from_millisecond(rt_int32_t ms);
79*10465441SEvalZero 
80*10465441SEvalZero void rt_system_timer_init(void);
81*10465441SEvalZero void rt_system_timer_thread_init(void);
82*10465441SEvalZero 
83*10465441SEvalZero void rt_timer_init(rt_timer_t  timer,
84*10465441SEvalZero                    const char *name,
85*10465441SEvalZero                    void (*timeout)(void *parameter),
86*10465441SEvalZero                    void       *parameter,
87*10465441SEvalZero                    rt_tick_t   time,
88*10465441SEvalZero                    rt_uint8_t  flag);
89*10465441SEvalZero rt_err_t rt_timer_detach(rt_timer_t timer);
90*10465441SEvalZero rt_timer_t rt_timer_create(const char *name,
91*10465441SEvalZero                            void (*timeout)(void *parameter),
92*10465441SEvalZero                            void       *parameter,
93*10465441SEvalZero                            rt_tick_t   time,
94*10465441SEvalZero                            rt_uint8_t  flag);
95*10465441SEvalZero rt_err_t rt_timer_delete(rt_timer_t timer);
96*10465441SEvalZero rt_err_t rt_timer_start(rt_timer_t timer);
97*10465441SEvalZero rt_err_t rt_timer_stop(rt_timer_t timer);
98*10465441SEvalZero rt_err_t rt_timer_control(rt_timer_t timer, int cmd, void *arg);
99*10465441SEvalZero 
100*10465441SEvalZero rt_tick_t rt_timer_next_timeout_tick(void);
101*10465441SEvalZero void rt_timer_check(void);
102*10465441SEvalZero 
103*10465441SEvalZero #ifdef RT_USING_HOOK
104*10465441SEvalZero void rt_timer_enter_sethook(void (*hook)(struct rt_timer *timer));
105*10465441SEvalZero void rt_timer_exit_sethook(void (*hook)(struct rt_timer *timer));
106*10465441SEvalZero #endif
107*10465441SEvalZero 
108*10465441SEvalZero /**@}*/
109*10465441SEvalZero 
110*10465441SEvalZero /**
111*10465441SEvalZero  * @addtogroup Thread
112*10465441SEvalZero  */
113*10465441SEvalZero 
114*10465441SEvalZero /**@{*/
115*10465441SEvalZero 
116*10465441SEvalZero /*
117*10465441SEvalZero  * thread interface
118*10465441SEvalZero  */
119*10465441SEvalZero rt_err_t rt_thread_init(struct rt_thread *thread,
120*10465441SEvalZero                         const char       *name,
121*10465441SEvalZero                         void (*entry)(void *parameter),
122*10465441SEvalZero                         void             *parameter,
123*10465441SEvalZero                         void             *stack_start,
124*10465441SEvalZero                         rt_uint32_t       stack_size,
125*10465441SEvalZero                         rt_uint8_t        priority,
126*10465441SEvalZero                         rt_uint32_t       tick);
127*10465441SEvalZero rt_err_t rt_thread_detach(rt_thread_t thread);
128*10465441SEvalZero rt_thread_t rt_thread_create(const char *name,
129*10465441SEvalZero                              void (*entry)(void *parameter),
130*10465441SEvalZero                              void       *parameter,
131*10465441SEvalZero                              rt_uint32_t stack_size,
132*10465441SEvalZero                              rt_uint8_t  priority,
133*10465441SEvalZero                              rt_uint32_t tick);
134*10465441SEvalZero rt_thread_t rt_thread_self(void);
135*10465441SEvalZero rt_thread_t rt_thread_find(char *name);
136*10465441SEvalZero rt_err_t rt_thread_startup(rt_thread_t thread);
137*10465441SEvalZero rt_err_t rt_thread_delete(rt_thread_t thread);
138*10465441SEvalZero 
139*10465441SEvalZero rt_err_t rt_thread_yield(void);
140*10465441SEvalZero rt_err_t rt_thread_delay(rt_tick_t tick);
141*10465441SEvalZero rt_err_t rt_thread_mdelay(rt_int32_t ms);
142*10465441SEvalZero rt_err_t rt_thread_control(rt_thread_t thread, int cmd, void *arg);
143*10465441SEvalZero rt_err_t rt_thread_suspend(rt_thread_t thread);
144*10465441SEvalZero rt_err_t rt_thread_resume(rt_thread_t thread);
145*10465441SEvalZero void rt_thread_timeout(void *parameter);
146*10465441SEvalZero 
147*10465441SEvalZero #ifdef RT_USING_SIGNALS
148*10465441SEvalZero void rt_thread_alloc_sig(rt_thread_t tid);
149*10465441SEvalZero void rt_thread_free_sig(rt_thread_t tid);
150*10465441SEvalZero int  rt_thread_kill(rt_thread_t tid, int sig);
151*10465441SEvalZero #endif
152*10465441SEvalZero 
153*10465441SEvalZero #ifdef RT_USING_HOOK
154*10465441SEvalZero void rt_thread_suspend_sethook(void (*hook)(rt_thread_t thread));
155*10465441SEvalZero void rt_thread_resume_sethook (void (*hook)(rt_thread_t thread));
156*10465441SEvalZero void rt_thread_inited_sethook (void (*hook)(rt_thread_t thread));
157*10465441SEvalZero #endif
158*10465441SEvalZero 
159*10465441SEvalZero /*
160*10465441SEvalZero  * idle thread interface
161*10465441SEvalZero  */
162*10465441SEvalZero void rt_thread_idle_init(void);
163*10465441SEvalZero #if defined(RT_USING_HOOK) || defined(RT_USING_IDLE_HOOK)
164*10465441SEvalZero rt_err_t rt_thread_idle_sethook(void (*hook)(void));
165*10465441SEvalZero rt_err_t rt_thread_idle_delhook(void (*hook)(void));
166*10465441SEvalZero #endif
167*10465441SEvalZero void rt_thread_idle_excute(void);
168*10465441SEvalZero rt_thread_t rt_thread_idle_gethandler(void);
169*10465441SEvalZero 
170*10465441SEvalZero /*
171*10465441SEvalZero  * schedule service
172*10465441SEvalZero  */
173*10465441SEvalZero void rt_system_scheduler_init(void);
174*10465441SEvalZero void rt_system_scheduler_start(void);
175*10465441SEvalZero 
176*10465441SEvalZero void rt_schedule(void);
177*10465441SEvalZero void rt_schedule_insert_thread(struct rt_thread *thread);
178*10465441SEvalZero void rt_schedule_remove_thread(struct rt_thread *thread);
179*10465441SEvalZero 
180*10465441SEvalZero void rt_enter_critical(void);
181*10465441SEvalZero void rt_exit_critical(void);
182*10465441SEvalZero rt_uint16_t rt_critical_level(void);
183*10465441SEvalZero 
184*10465441SEvalZero #ifdef RT_USING_HOOK
185*10465441SEvalZero void rt_scheduler_sethook(void (*hook)(rt_thread_t from, rt_thread_t to));
186*10465441SEvalZero #endif
187*10465441SEvalZero 
188*10465441SEvalZero #ifdef RT_USING_SMP
189*10465441SEvalZero void rt_scheduler_ipi_handler(int vector, void *param);
190*10465441SEvalZero #endif
191*10465441SEvalZero 
192*10465441SEvalZero /**@}*/
193*10465441SEvalZero 
194*10465441SEvalZero /**
195*10465441SEvalZero  * @addtogroup Signals
196*10465441SEvalZero  * @{
197*10465441SEvalZero  */
198*10465441SEvalZero #ifdef RT_USING_SIGNALS
199*10465441SEvalZero void rt_signal_mask(int signo);
200*10465441SEvalZero void rt_signal_unmask(int signo);
201*10465441SEvalZero rt_sighandler_t rt_signal_install(int signo, rt_sighandler_t handler);
202*10465441SEvalZero int rt_signal_wait(const rt_sigset_t *set, rt_siginfo_t *si, rt_int32_t timeout);
203*10465441SEvalZero 
204*10465441SEvalZero int rt_system_signal_init(void);
205*10465441SEvalZero #endif
206*10465441SEvalZero /*@}*/
207*10465441SEvalZero 
208*10465441SEvalZero /**
209*10465441SEvalZero  * @addtogroup MM
210*10465441SEvalZero  */
211*10465441SEvalZero 
212*10465441SEvalZero /**@{*/
213*10465441SEvalZero 
214*10465441SEvalZero /*
215*10465441SEvalZero  * memory management interface
216*10465441SEvalZero  */
217*10465441SEvalZero #ifdef RT_USING_MEMPOOL
218*10465441SEvalZero /*
219*10465441SEvalZero  * memory pool interface
220*10465441SEvalZero  */
221*10465441SEvalZero rt_err_t rt_mp_init(struct rt_mempool *mp,
222*10465441SEvalZero                     const char        *name,
223*10465441SEvalZero                     void              *start,
224*10465441SEvalZero                     rt_size_t          size,
225*10465441SEvalZero                     rt_size_t          block_size);
226*10465441SEvalZero rt_err_t rt_mp_detach(struct rt_mempool *mp);
227*10465441SEvalZero rt_mp_t rt_mp_create(const char *name,
228*10465441SEvalZero                      rt_size_t   block_count,
229*10465441SEvalZero                      rt_size_t   block_size);
230*10465441SEvalZero rt_err_t rt_mp_delete(rt_mp_t mp);
231*10465441SEvalZero 
232*10465441SEvalZero void *rt_mp_alloc(rt_mp_t mp, rt_int32_t time);
233*10465441SEvalZero void rt_mp_free(void *block);
234*10465441SEvalZero 
235*10465441SEvalZero #ifdef RT_USING_HOOK
236*10465441SEvalZero void rt_mp_alloc_sethook(void (*hook)(struct rt_mempool *mp, void *block));
237*10465441SEvalZero void rt_mp_free_sethook(void (*hook)(struct rt_mempool *mp, void *block));
238*10465441SEvalZero #endif
239*10465441SEvalZero 
240*10465441SEvalZero #endif
241*10465441SEvalZero 
242*10465441SEvalZero #ifdef RT_USING_HEAP
243*10465441SEvalZero /*
244*10465441SEvalZero  * heap memory interface
245*10465441SEvalZero  */
246*10465441SEvalZero void rt_system_heap_init(void *begin_addr, void *end_addr);
247*10465441SEvalZero 
248*10465441SEvalZero void *rt_malloc(rt_size_t nbytes);
249*10465441SEvalZero void rt_free(void *ptr);
250*10465441SEvalZero void *rt_realloc(void *ptr, rt_size_t nbytes);
251*10465441SEvalZero void *rt_calloc(rt_size_t count, rt_size_t size);
252*10465441SEvalZero void *rt_malloc_align(rt_size_t size, rt_size_t align);
253*10465441SEvalZero void rt_free_align(void *ptr);
254*10465441SEvalZero 
255*10465441SEvalZero void rt_memory_info(rt_uint32_t *total,
256*10465441SEvalZero                     rt_uint32_t *used,
257*10465441SEvalZero                     rt_uint32_t *max_used);
258*10465441SEvalZero 
259*10465441SEvalZero #ifdef RT_USING_SLAB
260*10465441SEvalZero void *rt_page_alloc(rt_size_t npages);
261*10465441SEvalZero void rt_page_free(void *addr, rt_size_t npages);
262*10465441SEvalZero #endif
263*10465441SEvalZero 
264*10465441SEvalZero #ifdef RT_USING_HOOK
265*10465441SEvalZero void rt_malloc_sethook(void (*hook)(void *ptr, rt_size_t size));
266*10465441SEvalZero void rt_free_sethook(void (*hook)(void *ptr));
267*10465441SEvalZero #endif
268*10465441SEvalZero 
269*10465441SEvalZero #endif
270*10465441SEvalZero 
271*10465441SEvalZero #ifdef RT_USING_MEMHEAP
272*10465441SEvalZero /**
273*10465441SEvalZero  * memory heap object interface
274*10465441SEvalZero  */
275*10465441SEvalZero rt_err_t rt_memheap_init(struct rt_memheap *memheap,
276*10465441SEvalZero                          const char        *name,
277*10465441SEvalZero                          void              *start_addr,
278*10465441SEvalZero                          rt_size_t         size);
279*10465441SEvalZero rt_err_t rt_memheap_detach(struct rt_memheap *heap);
280*10465441SEvalZero void *rt_memheap_alloc(struct rt_memheap *heap, rt_size_t size);
281*10465441SEvalZero void *rt_memheap_realloc(struct rt_memheap *heap, void *ptr, rt_size_t newsize);
282*10465441SEvalZero void rt_memheap_free(void *ptr);
283*10465441SEvalZero #endif
284*10465441SEvalZero 
285*10465441SEvalZero /**@}*/
286*10465441SEvalZero 
287*10465441SEvalZero /**
288*10465441SEvalZero  * @addtogroup IPC
289*10465441SEvalZero  */
290*10465441SEvalZero 
291*10465441SEvalZero /**@{*/
292*10465441SEvalZero 
293*10465441SEvalZero #ifdef RT_USING_SEMAPHORE
294*10465441SEvalZero /*
295*10465441SEvalZero  * semaphore interface
296*10465441SEvalZero  */
297*10465441SEvalZero rt_err_t rt_sem_init(rt_sem_t    sem,
298*10465441SEvalZero                      const char *name,
299*10465441SEvalZero                      rt_uint32_t value,
300*10465441SEvalZero                      rt_uint8_t  flag);
301*10465441SEvalZero rt_err_t rt_sem_detach(rt_sem_t sem);
302*10465441SEvalZero rt_sem_t rt_sem_create(const char *name, rt_uint32_t value, rt_uint8_t flag);
303*10465441SEvalZero rt_err_t rt_sem_delete(rt_sem_t sem);
304*10465441SEvalZero 
305*10465441SEvalZero rt_err_t rt_sem_take(rt_sem_t sem, rt_int32_t time);
306*10465441SEvalZero rt_err_t rt_sem_trytake(rt_sem_t sem);
307*10465441SEvalZero rt_err_t rt_sem_release(rt_sem_t sem);
308*10465441SEvalZero rt_err_t rt_sem_control(rt_sem_t sem, int cmd, void *arg);
309*10465441SEvalZero #endif
310*10465441SEvalZero 
311*10465441SEvalZero #ifdef RT_USING_MUTEX
312*10465441SEvalZero /*
313*10465441SEvalZero  * mutex interface
314*10465441SEvalZero  */
315*10465441SEvalZero rt_err_t rt_mutex_init(rt_mutex_t mutex, const char *name, rt_uint8_t flag);
316*10465441SEvalZero rt_err_t rt_mutex_detach(rt_mutex_t mutex);
317*10465441SEvalZero rt_mutex_t rt_mutex_create(const char *name, rt_uint8_t flag);
318*10465441SEvalZero rt_err_t rt_mutex_delete(rt_mutex_t mutex);
319*10465441SEvalZero 
320*10465441SEvalZero rt_err_t rt_mutex_take(rt_mutex_t mutex, rt_int32_t time);
321*10465441SEvalZero rt_err_t rt_mutex_release(rt_mutex_t mutex);
322*10465441SEvalZero rt_err_t rt_mutex_control(rt_mutex_t mutex, int cmd, void *arg);
323*10465441SEvalZero #endif
324*10465441SEvalZero 
325*10465441SEvalZero #ifdef RT_USING_EVENT
326*10465441SEvalZero /*
327*10465441SEvalZero  * event interface
328*10465441SEvalZero  */
329*10465441SEvalZero rt_err_t rt_event_init(rt_event_t event, const char *name, rt_uint8_t flag);
330*10465441SEvalZero rt_err_t rt_event_detach(rt_event_t event);
331*10465441SEvalZero rt_event_t rt_event_create(const char *name, rt_uint8_t flag);
332*10465441SEvalZero rt_err_t rt_event_delete(rt_event_t event);
333*10465441SEvalZero 
334*10465441SEvalZero rt_err_t rt_event_send(rt_event_t event, rt_uint32_t set);
335*10465441SEvalZero rt_err_t rt_event_recv(rt_event_t   event,
336*10465441SEvalZero                        rt_uint32_t  set,
337*10465441SEvalZero                        rt_uint8_t   opt,
338*10465441SEvalZero                        rt_int32_t   timeout,
339*10465441SEvalZero                        rt_uint32_t *recved);
340*10465441SEvalZero rt_err_t rt_event_control(rt_event_t event, int cmd, void *arg);
341*10465441SEvalZero #endif
342*10465441SEvalZero 
343*10465441SEvalZero #ifdef RT_USING_MAILBOX
344*10465441SEvalZero /*
345*10465441SEvalZero  * mailbox interface
346*10465441SEvalZero  */
347*10465441SEvalZero rt_err_t rt_mb_init(rt_mailbox_t mb,
348*10465441SEvalZero                     const char  *name,
349*10465441SEvalZero                     void        *msgpool,
350*10465441SEvalZero                     rt_size_t    size,
351*10465441SEvalZero                     rt_uint8_t   flag);
352*10465441SEvalZero rt_err_t rt_mb_detach(rt_mailbox_t mb);
353*10465441SEvalZero rt_mailbox_t rt_mb_create(const char *name, rt_size_t size, rt_uint8_t flag);
354*10465441SEvalZero rt_err_t rt_mb_delete(rt_mailbox_t mb);
355*10465441SEvalZero 
356*10465441SEvalZero rt_err_t rt_mb_send(rt_mailbox_t mb, rt_ubase_t value);
357*10465441SEvalZero rt_err_t rt_mb_send_wait(rt_mailbox_t mb,
358*10465441SEvalZero                          rt_ubase_t  value,
359*10465441SEvalZero                          rt_int32_t   timeout);
360*10465441SEvalZero rt_err_t rt_mb_recv(rt_mailbox_t mb, rt_ubase_t *value, rt_int32_t timeout);
361*10465441SEvalZero rt_err_t rt_mb_control(rt_mailbox_t mb, int cmd, void *arg);
362*10465441SEvalZero #endif
363*10465441SEvalZero 
364*10465441SEvalZero #ifdef RT_USING_MESSAGEQUEUE
365*10465441SEvalZero /*
366*10465441SEvalZero  * message queue interface
367*10465441SEvalZero  */
368*10465441SEvalZero rt_err_t rt_mq_init(rt_mq_t     mq,
369*10465441SEvalZero                     const char *name,
370*10465441SEvalZero                     void       *msgpool,
371*10465441SEvalZero                     rt_size_t   msg_size,
372*10465441SEvalZero                     rt_size_t   pool_size,
373*10465441SEvalZero                     rt_uint8_t  flag);
374*10465441SEvalZero rt_err_t rt_mq_detach(rt_mq_t mq);
375*10465441SEvalZero rt_mq_t rt_mq_create(const char *name,
376*10465441SEvalZero                      rt_size_t   msg_size,
377*10465441SEvalZero                      rt_size_t   max_msgs,
378*10465441SEvalZero                      rt_uint8_t  flag);
379*10465441SEvalZero rt_err_t rt_mq_delete(rt_mq_t mq);
380*10465441SEvalZero 
381*10465441SEvalZero rt_err_t rt_mq_send(rt_mq_t mq, void *buffer, rt_size_t size);
382*10465441SEvalZero rt_err_t rt_mq_urgent(rt_mq_t mq, void *buffer, rt_size_t size);
383*10465441SEvalZero rt_err_t rt_mq_recv(rt_mq_t    mq,
384*10465441SEvalZero                     void      *buffer,
385*10465441SEvalZero                     rt_size_t  size,
386*10465441SEvalZero                     rt_int32_t timeout);
387*10465441SEvalZero rt_err_t rt_mq_control(rt_mq_t mq, int cmd, void *arg);
388*10465441SEvalZero #endif
389*10465441SEvalZero 
390*10465441SEvalZero /**@}*/
391*10465441SEvalZero 
392*10465441SEvalZero #ifdef RT_USING_DEVICE
393*10465441SEvalZero /**
394*10465441SEvalZero  * @addtogroup Device
395*10465441SEvalZero  */
396*10465441SEvalZero 
397*10465441SEvalZero /**@{*/
398*10465441SEvalZero 
399*10465441SEvalZero /*
400*10465441SEvalZero  * device (I/O) system interface
401*10465441SEvalZero  */
402*10465441SEvalZero rt_device_t rt_device_find(const char *name);
403*10465441SEvalZero 
404*10465441SEvalZero rt_err_t rt_device_register(rt_device_t dev,
405*10465441SEvalZero                             const char *name,
406*10465441SEvalZero                             rt_uint16_t flags);
407*10465441SEvalZero rt_err_t rt_device_unregister(rt_device_t dev);
408*10465441SEvalZero 
409*10465441SEvalZero rt_device_t rt_device_create(int type, int attach_size);
410*10465441SEvalZero void rt_device_destroy(rt_device_t device);
411*10465441SEvalZero 
412*10465441SEvalZero rt_err_t rt_device_init_all(void);
413*10465441SEvalZero 
414*10465441SEvalZero rt_err_t
415*10465441SEvalZero rt_device_set_rx_indicate(rt_device_t dev,
416*10465441SEvalZero                           rt_err_t (*rx_ind)(rt_device_t dev, rt_size_t size));
417*10465441SEvalZero rt_err_t
418*10465441SEvalZero rt_device_set_tx_complete(rt_device_t dev,
419*10465441SEvalZero                           rt_err_t (*tx_done)(rt_device_t dev, void *buffer));
420*10465441SEvalZero 
421*10465441SEvalZero rt_err_t  rt_device_init (rt_device_t dev);
422*10465441SEvalZero rt_err_t  rt_device_open (rt_device_t dev, rt_uint16_t oflag);
423*10465441SEvalZero rt_err_t  rt_device_close(rt_device_t dev);
424*10465441SEvalZero rt_size_t rt_device_read (rt_device_t dev,
425*10465441SEvalZero                           rt_off_t    pos,
426*10465441SEvalZero                           void       *buffer,
427*10465441SEvalZero                           rt_size_t   size);
428*10465441SEvalZero rt_size_t rt_device_write(rt_device_t dev,
429*10465441SEvalZero                           rt_off_t    pos,
430*10465441SEvalZero                           const void *buffer,
431*10465441SEvalZero                           rt_size_t   size);
432*10465441SEvalZero rt_err_t  rt_device_control(rt_device_t dev, int cmd, void *arg);
433*10465441SEvalZero 
434*10465441SEvalZero /**@}*/
435*10465441SEvalZero #endif
436*10465441SEvalZero 
437*10465441SEvalZero /*
438*10465441SEvalZero  * interrupt service
439*10465441SEvalZero  */
440*10465441SEvalZero 
441*10465441SEvalZero /*
442*10465441SEvalZero  * rt_interrupt_enter and rt_interrupt_leave only can be called by BSP
443*10465441SEvalZero  */
444*10465441SEvalZero void rt_interrupt_enter(void);
445*10465441SEvalZero void rt_interrupt_leave(void);
446*10465441SEvalZero 
447*10465441SEvalZero #ifdef RT_USING_SMP
448*10465441SEvalZero 
449*10465441SEvalZero /*
450*10465441SEvalZero  * smp cpus lock service
451*10465441SEvalZero  */
452*10465441SEvalZero 
453*10465441SEvalZero rt_base_t rt_cpus_lock(void);
454*10465441SEvalZero void rt_cpus_unlock(rt_base_t level);
455*10465441SEvalZero 
456*10465441SEvalZero struct rt_cpu *rt_cpu_self(void);
457*10465441SEvalZero struct rt_cpu *rt_cpu_index(int index);
458*10465441SEvalZero 
459*10465441SEvalZero #endif
460*10465441SEvalZero 
461*10465441SEvalZero /*
462*10465441SEvalZero  * the number of nested interrupts.
463*10465441SEvalZero  */
464*10465441SEvalZero rt_uint8_t rt_interrupt_get_nest(void);
465*10465441SEvalZero 
466*10465441SEvalZero #ifdef RT_USING_HOOK
467*10465441SEvalZero void rt_interrupt_enter_sethook(void (*hook)(void));
468*10465441SEvalZero void rt_interrupt_leave_sethook(void (*hook)(void));
469*10465441SEvalZero #endif
470*10465441SEvalZero 
471*10465441SEvalZero #ifdef RT_USING_COMPONENTS_INIT
472*10465441SEvalZero void rt_components_init(void);
473*10465441SEvalZero void rt_components_board_init(void);
474*10465441SEvalZero #endif
475*10465441SEvalZero 
476*10465441SEvalZero /**
477*10465441SEvalZero  * @addtogroup KernelService
478*10465441SEvalZero  */
479*10465441SEvalZero 
480*10465441SEvalZero /**@{*/
481*10465441SEvalZero 
482*10465441SEvalZero /*
483*10465441SEvalZero  * general kernel service
484*10465441SEvalZero  */
485*10465441SEvalZero #ifndef RT_USING_CONSOLE
486*10465441SEvalZero #define rt_kprintf(...)
487*10465441SEvalZero #define rt_kputs(str)
488*10465441SEvalZero #else
489*10465441SEvalZero void rt_kprintf(const char *fmt, ...);
490*10465441SEvalZero void rt_kputs(const char *str);
491*10465441SEvalZero #endif
492*10465441SEvalZero rt_int32_t rt_vsprintf(char *dest, const char *format, va_list arg_ptr);
493*10465441SEvalZero rt_int32_t rt_vsnprintf(char *buf, rt_size_t size, const char *fmt, va_list args);
494*10465441SEvalZero rt_int32_t rt_sprintf(char *buf, const char *format, ...);
495*10465441SEvalZero rt_int32_t rt_snprintf(char *buf, rt_size_t size, const char *format, ...);
496*10465441SEvalZero 
497*10465441SEvalZero #if defined(RT_USING_DEVICE) && defined(RT_USING_CONSOLE)
498*10465441SEvalZero rt_device_t rt_console_set_device(const char *name);
499*10465441SEvalZero rt_device_t rt_console_get_device(void);
500*10465441SEvalZero #endif
501*10465441SEvalZero 
502*10465441SEvalZero rt_err_t rt_get_errno(void);
503*10465441SEvalZero void rt_set_errno(rt_err_t no);
504*10465441SEvalZero int *_rt_errno(void);
505*10465441SEvalZero #if !defined(RT_USING_NEWLIB) && !defined(_WIN32)
506*10465441SEvalZero #ifndef errno
507*10465441SEvalZero #define errno    *_rt_errno()
508*10465441SEvalZero #endif
509*10465441SEvalZero #endif
510*10465441SEvalZero 
511*10465441SEvalZero int __rt_ffs(int value);
512*10465441SEvalZero 
513*10465441SEvalZero void *rt_memset(void *src, int c, rt_ubase_t n);
514*10465441SEvalZero void *rt_memcpy(void *dest, const void *src, rt_ubase_t n);
515*10465441SEvalZero 
516*10465441SEvalZero rt_int32_t rt_strncmp(const char *cs, const char *ct, rt_ubase_t count);
517*10465441SEvalZero rt_int32_t rt_strcmp(const char *cs, const char *ct);
518*10465441SEvalZero rt_size_t rt_strlen(const char *src);
519*10465441SEvalZero char *rt_strdup(const char *s);
520*10465441SEvalZero #if defined(__CC_ARM) || defined(__CLANG_ARM)
521*10465441SEvalZero /* leak strdup interface */
522*10465441SEvalZero char* strdup(const char* str);
523*10465441SEvalZero #endif
524*10465441SEvalZero 
525*10465441SEvalZero char *rt_strstr(const char *str1, const char *str2);
526*10465441SEvalZero rt_int32_t rt_sscanf(const char *buf, const char *fmt, ...);
527*10465441SEvalZero char *rt_strncpy(char *dest, const char *src, rt_ubase_t n);
528*10465441SEvalZero void *rt_memmove(void *dest, const void *src, rt_ubase_t n);
529*10465441SEvalZero rt_int32_t rt_memcmp(const void *cs, const void *ct, rt_ubase_t count);
530*10465441SEvalZero rt_uint32_t rt_strcasecmp(const char *a, const char *b);
531*10465441SEvalZero 
532*10465441SEvalZero void rt_show_version(void);
533*10465441SEvalZero 
534*10465441SEvalZero #ifdef RT_DEBUG
535*10465441SEvalZero extern void (*rt_assert_hook)(const char *ex, const char *func, rt_size_t line);
536*10465441SEvalZero void rt_assert_set_hook(void (*hook)(const char *ex, const char *func, rt_size_t line));
537*10465441SEvalZero 
538*10465441SEvalZero void rt_assert_handler(const char *ex, const char *func, rt_size_t line);
539*10465441SEvalZero #endif /* RT_DEBUG */
540*10465441SEvalZero 
541*10465441SEvalZero #ifdef RT_USING_FINSH
542*10465441SEvalZero #include <finsh_api.h>
543*10465441SEvalZero #endif
544*10465441SEvalZero 
545*10465441SEvalZero /**@}*/
546*10465441SEvalZero 
547*10465441SEvalZero #ifdef __cplusplus
548*10465441SEvalZero }
549*10465441SEvalZero #endif
550*10465441SEvalZero 
551*10465441SEvalZero #endif
552