projects
/
bertos.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Add support for more i2c devices.
[bertos.git]
/
bertos
/
kern
/
msg.h
diff --git
a/bertos/kern/msg.h
b/bertos/kern/msg.h
index 25b7a4ef06b8079e494ac806c5834b31574bb445..2d4672204827495cfef7953960de12067285be06 100644
(file)
--- a/
bertos/kern/msg.h
+++ b/
bertos/kern/msg.h
@@
-27,7
+27,7
@@
* the GNU General Public License.
*
* Copyright 2004 Develer S.r.l. (http://www.develer.com/)
* the GNU General Public License.
*
* Copyright 2004 Develer S.r.l. (http://www.develer.com/)
- * Copyright 1999,2001 Bern
ardo Innocenti <bernie@develer.com
>
+ * Copyright 1999,2001 Bern
ie Innocenti <bernie@codewiz.org
>
*
* -->
*
*
* -->
*
@@
-35,9
+35,8
@@
* This module implements a common system for executing
* a user defined action calling a hook function.
*
* This module implements a common system for executing
* a user defined action calling a hook function.
*
- * \version $Id$
*
*
- * \author Bern
ardo Innocenti <bernie@develer.com
>
+ * \author Bern
ie Innocenti <bernie@codewiz.org
>
*
* \brief Simple inter-process messaging system
*
*
* \brief Simple inter-process messaging system
*
@@
-67,6
+66,11
@@
* receiver wakes up, it usually invokes msg_get() to pick
* the next message from the port.
*
* receiver wakes up, it usually invokes msg_get() to pick
* the next message from the port.
*
+ * \note
+ * When you put a message into a port, such message becomes
+ * unavailable until you retrieve it using msg_get(), eg.
+ * you must not delete it or put it into another port.
+ *
* Message ports can hold any number of pending messages,
* and receivers usually process them in FIFO order.
* Other scheduling policies are possible, but not implemented
* Message ports can hold any number of pending messages,
* and receivers usually process them in FIFO order.
* Other scheduling policies are possible, but not implemented
@@
-106,6
+110,8
@@
* } TestMsg;
*
*
* } TestMsg;
*
*
+ * PROC_DEFINE_STACK(sender_stack, KERN_MINSTACKSIZE);
+ *
* // A process that sends two messages and waits for replies.
* static void sender_proc(void)
* {
* // A process that sends two messages and waits for replies.
* static void sender_proc(void)
* {
@@
-114,30
+120,30
@@
* TestMsg msg2;
* Msg *reply;
*
* TestMsg msg2;
* Msg *reply;
*
- * msg_initPort(&reply_port,
- * event_createSignal(proc_current(), SIG
F
_SINGLE);
+ * msg_initPort(&
test_
reply_port,
+ * event_createSignal(proc_current(), SIG_SINGLE);
*
* // Fill-in first message and send it out.
* msg1.x = 3;
* msg1.y = 2;
* msg1.msg.replyPort = &test_reply_port;
*
* // Fill-in first message and send it out.
* msg1.x = 3;
* msg1.y = 2;
* msg1.msg.replyPort = &test_reply_port;
- * msg_put(&test_port, &msg1);
+ * msg_put(&test_port, &msg1
.msg
);
*
* // Fill-in second message and send it out too.
* msg2.x = 5;
* msg2.y = 4;
* msg2.msg.replyPort = &test_reply_port;
*
* // Fill-in second message and send it out too.
* msg2.x = 5;
* msg2.y = 4;
* msg2.msg.replyPort = &test_reply_port;
- * msg_put(&test_port, &msg
1
);
+ * msg_put(&test_port, &msg
2.msg
);
*
* // Wait for a reply...
* sig_wait(SIG_SINGLE);
*
*
* // Wait for a reply...
* sig_wait(SIG_SINGLE);
*
-
* reply = (TestMsg *)msg_get(&test_reply_port
);
+
reply = containerof(msg_get(&test_reply_port), TestMsg, msg
);
* ASSERT(reply != NULL);
* ASSERT(reply->result == 5);
*
* // Get reply to second message.
* ASSERT(reply != NULL);
* ASSERT(reply->result == 5);
*
* // Get reply to second message.
- * while (!(reply =
(TestMsg *)msg_get(&test_reply_port
))
+ * while (!(reply =
containerof(msg_get(&test_reply_port), TestMsg, msg)
))
* {
* // Not yet, be patient and wait some more.
* sig_wait(SIG_SINGLE);
* {
* // Not yet, be patient and wait some more.
* sig_wait(SIG_SINGLE);
@@
-151,28
+157,30
@@
* static void receiver_proc(void)
* {
* msg_initPort(&test_port,
* static void receiver_proc(void)
* {
* msg_initPort(&test_port,
- * event_createSignal(proc_current(), SIG
F
_EXAMPLE);
+ * event_createSignal(proc_current(), SIG_EXAMPLE);
*
*
- * proc_new(sender_proc, (iptr_t)&test_port,
- * sender_stack, sizeof(sender_stack);
+ * proc_new(sender_proc, NULL,sizeof(sender_stack), sender_stack);
*
* for (;;)
* {
*
* for (;;)
* {
- * sigmask_t sigs = sig_wait(SIG
F
_EXAMPLE | more_signals);
+ * sigmask_t sigs = sig_wait(SIG_EXAMPLE | more_signals);
*
*
- * if (sigs & SIG
F
_EXAMPLE)
+ * if (sigs & SIG_EXAMPLE)
* {
* TestMsg *emsg;
* {
* TestMsg *emsg;
- * while
(emsg = (TestMsg *)msg_get(&test_port
)
+ * while
((emsg = containerof(msg_get(&test_port), TestMsg, msg))
)
* {
* // Do something with the message
* emsg->result = emsg->x + emsg->y;
* {
* // Do something with the message
* emsg->result = emsg->x + emsg->y;
- * msg_reply(
(Msg *)
msg);
+ * msg_reply(
emsg->
msg);
* }
* }
* }
* }
* \endcode
* }
* }
* }
* }
* \endcode
+ *
+ * $WIZ$ module_name = "msg"
+ * $WIZ$ module_depends = "event", "signal", "kernel"
*/
*/
@@
-180,8
+188,8
@@
#define KERN_MSG_H
#include <mware/event.h>
#define KERN_MSG_H
#include <mware/event.h>
-#include <
mware
/list.h>
-
+#include <
struct
/list.h>
+#include <kern/proc.h>
typedef struct MsgPort
{
typedef struct MsgPort
{
@@
-282,4
+290,8
@@
INLINE void msg_reply(Msg *msg)
msg_put(msg->replyPort, msg);
}
msg_put(msg->replyPort, msg);
}
+int msg_testRun(void);
+int msg_testSetup(void);
+int msg_testTearDown(void);
+
#endif /* KERN_MSG_H */
#endif /* KERN_MSG_H */