summaryrefslogtreecommitdiffstats
path: root/cpukit/itron/src/ref_mbx.c
diff options
context:
space:
mode:
Diffstat (limited to 'cpukit/itron/src/ref_mbx.c')
-rw-r--r--cpukit/itron/src/ref_mbx.c59
1 files changed, 59 insertions, 0 deletions
diff --git a/cpukit/itron/src/ref_mbx.c b/cpukit/itron/src/ref_mbx.c
new file mode 100644
index 0000000000..ac148c89bf
--- /dev/null
+++ b/cpukit/itron/src/ref_mbx.c
@@ -0,0 +1,59 @@
+/*
+ * 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>
+
+/*
+ * ref_mbx - Reference Mailbox Status
+ */
+
+ER ref_mbx(
+ T_RMBX *pk_rmbx,
+ ID mbxid
+)
+{
+ register ITRON_Mailbox_Control *the_mailbox;
+ Objects_Locations location;
+ Chain_Control *pending;
+
+ if ( !pk_rmbx )
+ 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:
+
+ pending = &the_mailbox->message_queue.Pending_messages;
+ if ( _Chain_Is_empty( pending ) )
+ pk_rmbx->pk_msg = NULL;
+ else
+ pk_rmbx->pk_msg = (T_MSG *) pending->first;
+
+ /*
+ * Fill in whether or not there is a waiting task
+ */
+
+ if ( !_Thread_queue_First( &the_mailbox->message_queue.Wait_queue ) )
+ pk_rmbx->wtsk = FALSE;
+ else
+ pk_rmbx->wtsk = TRUE;
+
+ break;
+ }
+ _ITRON_return_errorno( E_OK );
+}
+