4 * Copyright 2004 Develer S.r.l. (http://www.develer.com/)
5 * Copyright 1999,2001 Bernardo Innocenti <bernie@develer.com>
6 * This file is part of DevLib - See devlib/README for information.
9 * \brief Simple inter-process messaging system
11 * This module implements a common system for executing
12 * a user defined action calling a hook function.
16 * \author Bernardo Innocenti <bernie@develer.com>
21 * Revision 1.2 2004/08/14 19:37:57 rasky
22 * Merge da SC: macros.h, pool.h, BIT_CHANGE, nome dei processi, etc.
24 * Revision 1.1 2004/06/06 15:11:08 bernie
32 #include <mware/list.h>
35 typedef struct MsgPort
37 List queue; /*!< Messages queued at this port */
38 Event evn; /*!< Event to trigger when a message arrives */
44 Node link; /*!< Link into message port queue */
45 MsgPort *replyPort; /*!< Port to which the msg is to be replied */
46 /* User data may follow */
50 /*! Initialize a message port */
51 INLINE void msg_initPort(MsgPort* port, Event event)
53 INITLIST(&port->queue);
57 /*! Queue \a msg into \a port, triggering the associated event */
58 INLINE void msg_put(MsgPort* port, Msg* msg)
60 ADDTAIL(&port->queue, &msg->link);
64 /* Get the first message from the queue of \a port, or NULL if the port is empty */
65 INLINE Msg* msg_get(MsgPort* port)
67 return (Msg*)REMHEAD(&port->queue);
70 /*! Send back (reply) \a msg to its sender */
71 INLINE void msg_reply(Msg* msg)
73 msg_put(msg->replyPort, msg);
76 #endif /* KERN_MSG_H */