]> rtime.felk.cvut.cz Git - frescor/fosa.git/blobdiff - include/fosa_opaque_types.h
AQuoSA: Avoid redefinition of preprocessor symbols if they were defined earlier
[frescor/fosa.git] / include / fosa_opaque_types.h
index d6146c7de2ac67735cf9498a929180161a2a7af1..6a8be30d55072a3bf8c1dab30866e8537d737148 100644 (file)
@@ -1,11 +1,11 @@
-//----------------------------------------------------------------------
-//  Copyright (C) 2006 - 2007 by the FRESCOR consortium:
+// -----------------------------------------------------------------------
+//  Copyright (C) 2006 - 2008 FRESCOR consortium partners:
 //
 //    Universidad de Cantabria,              SPAIN
 //    University of York,                    UK
 //    Scuola Superiore Sant'Anna,            ITALY
 //    Kaiserslautern University,             GERMANY
-//    Univ. Politecnica  Valencia,           SPAIN
+//    Univ. Politécnica  Valencia,           SPAIN
 //    Czech Technical University in Prague,  CZECH REPUBLIC
 //    ENEA                                   SWEDEN
 //    Thales Communication S.A.              FRANCE
@@ -13,9 +13,9 @@
 //    Rapita Systems Ltd                     UK
 //    Evidence                               ITALY
 //
-//    See http://www.frescor.org
+//    See http://www.frescor.org for a link to partners' websites
 //
-//        The FRESCOR project (FP6/2005/IST/5-034026) is funded
+//           FRESCOR project (FP6/2005/IST/5-034026) is funded
 //        in part by the European Union Sixth Framework Programme
 //        The European Union is not liable of any use that may be
 //        made of this code.
 //                       Universidad de Cantabria, SPAIN
 //                       University of York, UK
 //
-// This file is part of FOSA (Frsh Operating System Abstraction)
+//   FSF API web pages: http://marte.unican.es/fsf/docs
+//                      http://shark.sssup.it/contrib/first/docs/
+//
+//   This file is part of FOSA (Frsh Operating System Adaption)
 //
-// FOSA is free software; you can redistribute it and/or modify it
-// under terms of the GNU General Public License as published by the
-// Free Software Foundation; either version 2, or (at your option) any
-// later version.  FOSA is distributed in the hope that it will be
-// useful, but WITHOUT ANY WARRANTY; without even the implied warranty
-// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// General Public License for more details. You should have received a
-// copy of the GNU General Public License along with FOSA; see file
-// COPYING. If not, write to the Free Software Foundation, 675 Mass Ave,
-// Cambridge, MA 02139, USA.
+//  FOSA is free software; you can redistribute it and/or modify it
+//  under terms of the GNU General Public License as published by the
+//  Free Software Foundation; either version 2, or (at your option) any
+//  later version.  FOSA is distributed in the hope that it will be
+//  useful, but WITHOUT ANY WARRANTY; without even the implied warranty
+//  of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+//  General Public License for more details. You should have received a
+//  copy of the GNU General Public License along with FOSA; see file
+//  COPYING. If not, write to the Free Software Foundation, 675 Mass Ave,
+//  Cambridge, MA 02139, USA.
 //
-// As a special exception, including FOSA header files in a file,
-// instantiating FOSA generics or templates, or linking other files
-// with FOSA objects to produce an executable application, does not
-// by itself cause the resulting executable application to be covered
-// by the GNU General Public License. This exception does not
-// however invalidate any other reasons why the executable file might be
-// covered by the GNU Public License.
+//  As a special exception, including FOSA header files in a file,
+//  instantiating FOSA generics or templates, or linking other files
+//  with FOSA objects to produce an executable application, does not
+//  by itself cause the resulting executable application to be covered
+//  by the GNU General Public License. This exception does not
+//  however invalidate any other reasons why the executable file might be
+//  covered by the GNU Public License.
 // -----------------------------------------------------------------------
 //fosa_opaque_types.h
 //==============================================
@@ -71,6 +74,7 @@
 #include <stdbool.h>
 
 #include "fosa_cpp_macros.h"
+#include "fosa_opaque_types_time.h"
 
 ///////////////////////  MARTE_OS /////////////////////////////
 
 
 FOSA_CPP_BEGIN_DECLS
 
-/* Time */
-/********/
-// typedef struct timespec fosa_rel_time_t;
-// typedef struct timespec fosa_abs_time_t;
 
 /* Thread and signals */
 /**********************/
@@ -117,20 +117,20 @@ typedef pthread_cond_t FOSA_COND_T_OPAQUE;
 
 /* Application defined Scheduling */
 /**********************************/
-typedef struct {
-    posix_appsched_actions_t actions;
-    struct timespec *timeout_ptr;
-    struct timespec timeout;
-    bool rejected;
-    bool suspended;
-    bool activated;
-} fosa_ads_actions_internal_t;
+#define FOSA_ADS_ACTIONS_T_OPAQUE  struct \
+{ \
+    posix_appsched_actions_t actions; \
+    struct timespec *timeout_ptr; \
+    struct timespec timeout; \
+    bool rejected; \
+    bool suspended; \
+    bool activated; \
+} 
 
-#define FOSA_ADS_ACTIONS_T_OPAQUE fosa_ads_actions_internal_t
 
 /* Local jump */
 /**************/
-#include "marte_non_local_jmp.h"
+#include "misc/marte_non_local_jmp.h"
 
 #define FOSA_LONG_JUMP_CONTEXT_T_OPAQUE  struct { \
   marte_nonlocaljmp_context_t marte_context;      \
@@ -138,6 +138,13 @@ typedef struct {
 }
 
 
+/* Group clocks */
+/****************/
+typedef marte_thread_set_t FOSA_THREAD_SET_ID_T_OPAQUE;
+
+#define FOSA_NULL_THREAD_SET_ID_OPAQUE 0 /* In MaRTE-OS thread_set_t are
+                                     * pointers */
+
 /* FOSA errors */
 /***************/
 /** Not enough memory available **/
@@ -160,6 +167,10 @@ typedef struct {
 
 #define FOSA_ETIMEDOUT ETIMEDOUT
 
+/* Not found in search (non existing thread, thread_set...) */
+#define FOSA_ESRCH   ESRCH
+#define FOSA_ENOTSUP ENOTSUP
+
 #endif
 
 ///////////////////////  End of MARTE_OS  /////////////////////////////
@@ -178,11 +189,6 @@ typedef struct {
 #include <errno.h>
 #include <rtl_timer.h>
 
-/* Time */
-/********/
-// typedef struct timespec fosa_rel_time_t;
-// typedef struct timespec fosa_abs_time_t;
-
 
 /* Threads and signals */
 /***********************/
@@ -209,6 +215,9 @@ typedef int FOSA_SIGNAL_T_OPAQUE;
 typedef pthread_mutex_t FOSA_MUTEX_T_OPAQUE;
 #define    FOSA_COND_T_OPAQUE        pthread_cond_t
 
+/* Thread groups */
+/*****************/
+typedef int FOSA_THREAD_SET_ID_T_OPAQUE
 
 /* FOSA Errors */
 /***************/
@@ -235,10 +244,6 @@ typedef pthread_mutex_t FOSA_MUTEX_T_OPAQUE;
 
 #ifdef OSE
 
-/* Time */
-/********/
-// typedef struct timespec fosa_rel_time_t;
-// typedef struct timespec fosa_abs_time_t;
 
 
 /* Put OSE dependent includes and defines here */
@@ -251,17 +256,27 @@ typedef pthread_mutex_t FOSA_MUTEX_T_OPAQUE;
 
 #ifdef AQuoSA
 
-#define __USE_UNIX98
+#include <unistd.h>
+#include <linux/unistd.h>
 
+#ifndef _XOPEN_SOURCE
+#define _XOPEN_SOURCE 500
+#endif
+#ifndef __USE_UNIX98
+#define __USE_UNIX98
+#endif
 #include <pthread.h>
+
 #include <signal.h>
+#include <setjmp.h>
 #include <errno.h>
 #include <time.h>
 
-/* Time */
-/********/
-// typedef struct timespec fosa_rel_time_t;
-// typedef struct timespec fosa_abs_time_t;
+FOSA_CPP_BEGIN_DECLS
+
+/* Local Jump */
+/**************/
+typedef sigjmp_buf FOSA_LONG_JUMP_CONTEXT_T_OPAQUE;
 
 
 /* Threads and signals */
@@ -285,6 +300,10 @@ typedef int FOSA_SIGNAL_T_OPAQUE;
 #define FOSA_NULL_SIGNAL 0
 
 
+/* Thread groups */
+/*****************/
+typedef int FOSA_THREAD_SET_ID_T_OPAQUE;
+
 /* Clocks and signals */
 /**********************/
 #define    FOSA_CLOCK_ID_T_OPAQUE    clockid_t
@@ -304,7 +323,6 @@ typedef pthread_mutex_t FOSA_MUTEX_T_OPAQUE;
 /* hack to get AQuoSA sources compile without having none
  * of the application level scheduler header files and symbols */
 #define posix_appsched_actions_t int
-#define FOSA_LONG_JUMP_CONTEXT_T_OPAQUE int
 
 #define FOSA_ADS_ACTIONS_T_OPAQUE posix_appsched_actions_t
 
@@ -332,7 +350,7 @@ typedef pthread_mutex_t FOSA_MUTEX_T_OPAQUE;
 
 
 
-/////////////////////////////////// PARTIKLE ///////////////////////////////////////////
+///////////////////////////////// PARTIKLE /////////////////////////////////////
 #if defined(PARTIKLE)
 
 #include <pthread.h>
@@ -341,6 +359,7 @@ typedef pthread_mutex_t FOSA_MUTEX_T_OPAQUE;
 #include <sched.h>
 #include <stdlib.h>
 #include <setjmp.h>
+#include <limits.h>
 
 typedef struct {
     posix_appsched_actions_t actions;
@@ -351,11 +370,6 @@ typedef struct {
     bool activated;
 } FOSA_ADS_ACTIONS_T_OPAQUE;
 
-typedef struct {
-  jmp_buf jmp_context;
-  bool jmp_hasexecuted;
-  sigset_t jmp_sigmask;
-} FOSA_LONG_JUMP_CONTEXT_T_OPAQUE;
 
 typedef pthread_t                   FOSA_THREAD_ID_T_OPAQUE;
 typedef pthread_attr_t              FOSA_THREAD_ATTR_T_OPAQUE;
@@ -364,18 +378,29 @@ typedef clockid_t                   FOSA_CLOCK_ID_T_OPAQUE;
 typedef timer_t                     FOSA_TIMER_ID_T_OPAQUE;
 typedef pthread_cond_t              FOSA_COND_T_OPAQUE;
 typedef pthread_mutex_t             FOSA_MUTEX_T_OPAQUE;
+typedef unsigned long              FOSA_LONG_JUMP_CONTEXT_T_OPAQUE [32];
+typedef group_clock_t              FOSA_THREAD_SET_ID_T_OPAQUE;
 
-
+#define FOSA_NULL_THREAD_SET_ID_OPAQUE 0x0;
 
 enum _fosa_clocks_e {
   FOSA_SYSTEM_CLOCK_OPAQUE = CLOCK_MONOTONIC
 };
 
+#define LONGJMP_NSIG 3
+
+#if LONGJMP_NSIG > (RTSIG_MAX - 1)
+#   error LONGJMP_NSIG too big (LONGJMP_NSIG > RTSIG_MAX - 1)
+#endif
+
 enum _fosa_signal_limits_e {
+  LONGJMP_FIRSTSIG = SIGRTMAX - LONGJMP_NSIG + 1,
+  FOSA_SIGNAL_MAX = LONGJMP_FIRSTSIG - 1,
   FOSA_SIGNAL_MIN = SIGRTMIN,
-  FOSA_SIGNAL_MAX = SIGRTMIN + 0,
+  FOSA_NULL_SIGNAL = -1,
 };
 
+
 enum _fosa_errors_e {
   FOSA_EINVAL = EINVAL,
   FOSA_EAGAIN = EAGAIN,
@@ -386,8 +411,9 @@ enum _fosa_errors_e {
   FOSA_ENOMEM = ENOMEM,
 };
 
+
 #endif
-/////////////////////////////////// PARTIKLE  END //////////////////////////////////////
+/////////////////////////////// PARTIKLE  END //////////////////////////////////