source: rtems/cpukit/rtems/src/eventreceive.c @ 57c676c6

5
Last change on this file since 57c676c6 was dce48791, checked in by Sebastian Huber <sebastian.huber@…>, on 05/23/16 at 11:37:59

score: Add Status_Control for all APIs

Unify the status codes of the Classic and POSIX API to use the new enum
Status_Control. This eliminates the Thread_Control::Wait::timeout_code
field and the timeout parameter of _Thread_queue_Enqueue_critical() and
_MPCI_Send_request_packet(). It gets rid of the status code translation
tables and instead uses simple bit operations to get the status for a
particular API. This enables translation of status code constants at
compile time. Add _Thread_Wait_get_status() to avoid direct access of
thread internal data structures.

  • Property mode set to 100644
File size: 1.5 KB
Line 
1/**
2 * @file
3 *
4 * @brief  Constant used to receive the set of currently pending events in
5 * @ingroup ClassicEventSet Event Set
6 */
7
8/*
9 *  COPYRIGHT (c) 1989-1999.
10 *  On-Line Applications Research Corporation (OAR).
11 *
12 *  The license and distribution terms for this file may be
13 *  found in the file LICENSE in this distribution or at
14 *  http://www.rtems.org/license/LICENSE.
15 */
16
17#if HAVE_CONFIG_H
18  #include "config.h"
19#endif
20
21#include <rtems/rtems/eventimpl.h>
22#include <rtems/rtems/tasks.h>
23#include <rtems/score/statesimpl.h>
24#include <rtems/score/threadimpl.h>
25
26rtems_status_code rtems_event_receive(
27  rtems_event_set  event_in,
28  rtems_option     option_set,
29  rtems_interval   ticks,
30  rtems_event_set *event_out
31)
32{
33  rtems_status_code sc;
34
35  if ( event_out != NULL ) {
36    ISR_lock_Context   lock_context;
37    Thread_Control    *executing;
38    RTEMS_API_Control *api;
39    Event_Control     *event;
40
41    executing = _Thread_Lock_acquire_default_for_executing( &lock_context );
42    api = executing->API_Extensions[ THREAD_API_RTEMS ];
43    event = &api->Event;
44
45    if ( !_Event_sets_Is_empty( event_in ) ) {
46      sc = _Event_Seize(
47        event_in,
48        option_set,
49        ticks,
50        event_out,
51        executing,
52        event,
53        THREAD_WAIT_CLASS_EVENT,
54        STATES_WAITING_FOR_EVENT,
55        &lock_context
56      );
57    } else {
58      *event_out = event->pending_events;
59      _Thread_Lock_release_default( executing, &lock_context );
60      sc = RTEMS_SUCCESSFUL;
61    }
62  } else {
63    sc = RTEMS_INVALID_ADDRESS;
64  }
65
66  return sc;
67}
Note: See TracBrowser for help on using the repository browser.