1 /*
2  * Copyright (c) 2006-2020, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2019-10-12     Jesven       first version
9  */
10 
11 #ifndef LWP_IPC_H__
12 #define LWP_IPC_H__
13 
14 #ifdef __cplusplus
15 extern "C" {
16 #endif
17 
18 enum
19 {
20     RT_CHANNEL_RAW,
21     RT_CHANNEL_BUFFER,
22     RT_CHANNEL_FD
23 };
24 
25 struct rt_channel_msg
26 {
27     void *sender;
28     int type;
29     union
30     {
31         struct chbuf
32         {
33             void *buf;
34             size_t length;
35         } b;
36         struct chfd
37         {
38             void *file;
39             int fd;
40         } fd;
41         void* d;
42     } u;
43 };
44 typedef struct rt_channel_msg *rt_channel_msg_t;
45 
46 int rt_channel_open(const char *name, int flags);
47 rt_err_t rt_channel_close(int fd);
48 rt_err_t rt_channel_send(int fd, rt_channel_msg_t data);
49 rt_err_t rt_channel_send_recv(int fd, rt_channel_msg_t data, rt_channel_msg_t data_ret);
50 rt_err_t rt_channel_send_recv_timeout(int fd, rt_channel_msg_t data, rt_channel_msg_t data_ret, rt_int32_t time);
51 rt_err_t rt_channel_reply(int fd, rt_channel_msg_t data);
52 rt_err_t rt_channel_recv(int fd, rt_channel_msg_t data);
53 rt_err_t rt_channel_recv_timeout(int fd, rt_channel_msg_t data, rt_int32_t time);
54 rt_err_t rt_channel_peek(int fd, rt_channel_msg_t data);
55 
56 rt_channel_t rt_raw_channel_open(const char *name, int flags);
57 rt_err_t rt_raw_channel_close(rt_channel_t ch);
58 rt_err_t rt_raw_channel_send(rt_channel_t ch, rt_channel_msg_t data);
59 rt_err_t rt_raw_channel_send_recv(rt_channel_t ch, rt_channel_msg_t data, rt_channel_msg_t data_ret);
60 rt_err_t rt_raw_channel_send_recv_timeout(rt_channel_t ch, rt_channel_msg_t data, rt_channel_msg_t data_ret, rt_int32_t time);
61 rt_err_t rt_raw_channel_reply(rt_channel_t ch, rt_channel_msg_t data);
62 rt_err_t rt_raw_channel_recv(rt_channel_t ch, rt_channel_msg_t data);
63 rt_err_t rt_raw_channel_recv_timeout(rt_channel_t ch, rt_channel_msg_t data, rt_int32_t time);
64 rt_err_t rt_raw_channel_peek(rt_channel_t ch, rt_channel_msg_t data);
65 
66 rt_err_t rt_channel_component_init(void);
67 
68 #ifdef __cplusplus
69 }
70 #endif
71 
72 #endif
73