]> rtime.felk.cvut.cz Git - frescor/fosa.git/blobdiff - include/fosa_opaque_types.h
Finished API phase II transition and fixed make system for AQuoSA.
[frescor/fosa.git] / include / fosa_opaque_types.h
index 21af0c0298f83661aeae298cf723437d3ea6e658..f5420dbd57cac1ef83a163bc08faf62b59092b4c 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
 //==============================================
@@ -70,6 +73,9 @@
 
 #include <stdbool.h>
 
+#include "fosa_cpp_macros.h"
+#include "fosa_opaque_types_time.h"
+
 ///////////////////////  MARTE_OS /////////////////////////////
 
 #ifdef MARTE_OS
 #include <sched.h>
 #include <errno.h>
 
-/* Time */
-/********/
-// typedef struct timespec fosa_rel_time_t;
-// typedef struct timespec fosa_abs_time_t;
+FOSA_CPP_BEGIN_DECLS
+
 
 /* Thread and signals */
 /**********************/
@@ -113,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;      \
@@ -134,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 **/
@@ -156,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  /////////////////////////////
@@ -174,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 */
 /***********************/
@@ -205,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 */
 /***************/
@@ -231,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 */
@@ -247,17 +256,21 @@ typedef pthread_mutex_t FOSA_MUTEX_T_OPAQUE;
 
 #ifdef AQuoSA
 
-#define __USE_UNIX98
+#include <unistd.h>
+#include <linux/unistd.h>
 
+#define _XOPEN_SOURCE 500
+#define __USE_UNIX98
 #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;
+/* Local Jump */
+/**************/
+typedef sigjmp_buf FOSA_LONG_JUMP_CONTEXT_T_OPAQUE;
 
 
 /* Threads and signals */
@@ -281,6 +294,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
@@ -300,7 +317,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
 
@@ -328,7 +344,7 @@ typedef pthread_mutex_t FOSA_MUTEX_T_OPAQUE;
 
 
 
-/////////////////////////////////// PARTIKLE ///////////////////////////////////////////
+///////////////////////////////// PARTIKLE /////////////////////////////////////
 #if defined(PARTIKLE)
 
 #include <pthread.h>
@@ -336,6 +352,8 @@ typedef pthread_mutex_t FOSA_MUTEX_T_OPAQUE;
 #include <time.h>
 #include <sched.h>
 #include <stdlib.h>
+#include <setjmp.h>
+#include <limits.h>
 
 typedef struct {
     posix_appsched_actions_t actions;
@@ -344,28 +362,39 @@ typedef struct {
     bool rejected;
     bool suspended;
     bool activated;
-} fosa_ads_actions_internal_t;
+} FOSA_ADS_ACTIONS_T_OPAQUE;
+
 
 typedef pthread_t                   FOSA_THREAD_ID_T_OPAQUE;
 typedef pthread_attr_t              FOSA_THREAD_ATTR_T_OPAQUE;
 typedef int                         FOSA_SIGNAL_T_OPAQUE;
-typedef fosa_ads_actions_internal_t FOSA_ADS_ACTIONS_T_OPAQUE;
 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 void *                      FOSA_LONG_JUMP_CONTEXT_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 = SIGRTMAX,
+  FOSA_NULL_SIGNAL = -1,
 };
 
+
 enum _fosa_errors_e {
   FOSA_EINVAL = EINVAL,
   FOSA_EAGAIN = EAGAIN,
@@ -376,8 +405,9 @@ enum _fosa_errors_e {
   FOSA_ENOMEM = ENOMEM,
 };
 
+
 #endif
-/////////////////////////////////// PARTIKLE  END //////////////////////////////////////
+/////////////////////////////// PARTIKLE  END //////////////////////////////////
 
 
 
@@ -491,7 +521,7 @@ typedef int FOSA_COND_T_OPAQUE;
 #endif /* DUMMY */
 //////////////////////////End of DUMMY_OS ////////////////////////////////////
 
-
+FOSA_CPP_END_DECLS
 
 
 #endif // _FOSA_OPAQUE_TYPES_H_