xref: /nrf52832-nimble/rt-thread/components/libc/pthreads/mqueue.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  */
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