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