summaryrefslogtreecommitdiffstats
path: root/c/src/exec/itron/src/snd_mbx.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/exec/itron/src/snd_mbx.c')
-rw-r--r--c/src/exec/itron/src/snd_mbx.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/c/src/exec/itron/src/snd_mbx.c b/c/src/exec/itron/src/snd_mbx.c
new file mode 100644
index 0000000000..8d70c12315
--- /dev/null
+++ b/c/src/exec/itron/src/snd_mbx.c
@@ -0,0 +1,60 @@
+/*
+ * ITRON 3.0 Mailbox Manager
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.OARcorp.com/rtems/license.html.
+ *
+ * $Id$
+ */
+
+#include <itron.h>
+
+#include <rtems/itron/mbox.h>
+#include <rtems/itron/task.h>
+
+/*
+ * snd_msg - Send Message to Mailbox
+ */
+
+ER snd_msg(
+ ID mbxid,
+ T_MSG *pk_msg
+)
+{
+ register ITRON_Mailbox_Control *the_mailbox;
+ Objects_Locations location;
+ CORE_message_queue_Status status = E_OK;
+ unsigned32 message_priority;
+ void *message_contents;
+
+ if ( !pk_msg )
+ return E_PAR;
+
+ the_mailbox = _ITRON_Mailbox_Get( mbxid, &location );
+ switch ( location ) {
+ case OBJECTS_REMOTE:
+ case OBJECTS_ERROR:
+ return _ITRON_Mailbox_Clarify_get_id_error( mbxid );
+
+ case OBJECTS_LOCAL:
+ if ( the_mailbox->do_message_priority )
+ message_priority = pk_msg->msgpri;
+ else
+ message_priority = CORE_MESSAGE_QUEUE_SEND_REQUEST;
+
+ message_contents = pk_msg;
+ status = _CORE_message_queue_Submit(
+ &the_mailbox->message_queue,
+ &message_contents,
+ sizeof(T_MSG *),
+ the_mailbox->Object.id,
+ NULL, /* multiprocessing not supported */
+ message_priority
+ );
+ break;
+ }
+
+ _ITRON_return_errorno(
+ _ITRON_Mailbox_Translate_core_message_queue_return_code(status) );
+}