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 */ 9*10465441SEvalZero 10*10465441SEvalZero #ifndef __MQUEUE_H__ 11*10465441SEvalZero #define __MQUEUE_H__ 12*10465441SEvalZero 13*10465441SEvalZero #include <rtthread.h> 14*10465441SEvalZero #include <pthread.h> 15*10465441SEvalZero 16*10465441SEvalZero struct mqdes 17*10465441SEvalZero { 18*10465441SEvalZero /* reference count and unlinked */ 19*10465441SEvalZero rt_uint16_t refcount; 20*10465441SEvalZero rt_uint16_t unlinked; 21*10465441SEvalZero 22*10465441SEvalZero /* RT-Thread message queue */ 23*10465441SEvalZero rt_mq_t mq; 24*10465441SEvalZero /* next posix mqueue */ 25*10465441SEvalZero struct mqdes* next; 26*10465441SEvalZero }; 27*10465441SEvalZero typedef struct mqdes* mqd_t; 28*10465441SEvalZero 29*10465441SEvalZero struct mq_attr 30*10465441SEvalZero { 31*10465441SEvalZero long mq_flags; /* Message queue flags. */ 32*10465441SEvalZero long mq_maxmsg; /* Maximum number of messages. */ 33*10465441SEvalZero long mq_msgsize; /* Maximum message size. */ 34*10465441SEvalZero long mq_curmsgs; /* Number of messages currently queued. */ 35*10465441SEvalZero }; 36*10465441SEvalZero 37*10465441SEvalZero int mq_close(mqd_t mqdes); 38*10465441SEvalZero int mq_getattr(mqd_t mqdes, struct mq_attr *mqstat); 39*10465441SEvalZero int mq_notify(mqd_t mqdes, const struct sigevent *notification); 40*10465441SEvalZero mqd_t mq_open(const char *name, int oflag, ...); 41*10465441SEvalZero ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio); 42*10465441SEvalZero int mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio); 43*10465441SEvalZero int mq_setattr(mqd_t mqdes, 44*10465441SEvalZero const struct mq_attr *mqstat, 45*10465441SEvalZero struct mq_attr *omqstat); 46*10465441SEvalZero ssize_t mq_timedreceive(mqd_t mqdes, 47*10465441SEvalZero char *msg_ptr, 48*10465441SEvalZero size_t msg_len, 49*10465441SEvalZero unsigned *msg_prio, 50*10465441SEvalZero const struct timespec *abs_timeout); 51*10465441SEvalZero int mq_timedsend(mqd_t mqdes, 52*10465441SEvalZero const char *msg_ptr, 53*10465441SEvalZero size_t msg_len, 54*10465441SEvalZero unsigned msg_prio, 55*10465441SEvalZero const struct timespec *abs_timeout); 56*10465441SEvalZero 57*10465441SEvalZero int mq_unlink(const char *name); 58*10465441SEvalZero 59*10465441SEvalZero #endif 60