X-Git-Url: https://codewiz.org/gitweb?a=blobdiff_plain;f=kern%2Fmsg.h;h=dbd73e839664c52a68af840c150126be2435623d;hb=b6b9bf085c6a02bca4441599d176344e0153a612;hp=0fcfffad45df50bb8039163b2c0e340e6e621da3;hpb=52cd7843bd8f38047401c768abee7309157344a2;p=bertos.git diff --git a/kern/msg.h b/kern/msg.h index 0fcfffad..dbd73e83 100755 --- a/kern/msg.h +++ b/kern/msg.h @@ -16,16 +16,26 @@ * \author Bernardo Innocenti */ -/* - * $Log$ - * Revision 1.1 2004/06/06 15:11:08 bernie - * Import into DevLib. - * - */ +/*#* + *#* $Log$ + *#* Revision 1.4 2004/10/19 08:22:09 bernie + *#* msg_peek(): New function. + *#* + *#* Revision 1.3 2004/08/25 14:12:09 rasky + *#* Aggiornato il comment block dei log RCS + *#* + *#* Revision 1.2 2004/08/14 19:37:57 rasky + *#* Merge da SC: macros.h, pool.h, BIT_CHANGE, nome dei processi, etc. + *#* + *#* Revision 1.1 2004/06/06 15:11:08 bernie + *#* Import into DevLib. + *#* + *#*/ #ifndef KERN_MSG_H #define KERN_MSG_H #include "event.h" +#include typedef struct MsgPort @@ -43,17 +53,39 @@ typedef struct Msg } Msg; -/*! Initialize a messge port */ -#define INITPORT(p) INITLIST(&(p)->queue) +/*! Initialize a message port */ +INLINE void msg_initPort(MsgPort* port, Event event) +{ + INITLIST(&port->queue); + port->evn = event; +} -/*! Queue a message to a message port */ -#define PUTMSG(p,m) (ADDTAIL(&(p)->queue,(Node *)(m)), DOEVENT(&(p)->evn)) -#define PUTMSG_INTR(p,m) (ADDTAIL(&(p)->queue,(Node *)(m)), DOEVENT_INTR(&(p)->evn)) +/*! Queue \a msg into \a port, triggering the associated event */ +INLINE void msg_put(MsgPort* port, Msg* msg) +{ + ADDTAIL(&port->queue, &msg->link); + event_do(&port->evn); +} -/*! Get first message from port's queue (returns NULL when the port is empty) */ -#define GETMSG(p) ((Msg *)REMHEAD(&(p)->queue)) +/* Get the first message from the queue of \a port, or NULL if the port is empty */ +INLINE Msg* msg_get(MsgPort* port) +{ + return (Msg*)REMHEAD(&port->queue); +} -/*! Reply a message to its sender */ -#define REPLYMSG(m) (PUTMSG((m)->replyPort,(m))) +/* Peek the first message in the queue of \a port, or NULL if the port is empty */ +INLINE Msg *msg_peek(MsgPort *port) +{ + if (ISLISTEMPTY(&port->queue)) + return NULL; + + return (Msg *)port->queue.head; +} + +/*! Send back (reply) \a msg to its sender */ +INLINE void msg_reply(Msg* msg) +{ + msg_put(msg->replyPort, msg); +} #endif /* KERN_MSG_H */