]> rtime.felk.cvut.cz Git - orte.git/blobdiff - orte/include/typedefs.h
updated email address - petr@smoliku.cz
[orte.git] / orte / include / typedefs.h
index b010c9c35eadf0497bd4828dabcc1a13ff7fbc58..caaa0e05ec865a2a31fd0ecb19ddb4352ebc77a4 100644 (file)
@@ -1,9 +1,18 @@
 /*
  *  $Id: typedefs.h,v 0.0.0.1           2003/08/21 
  *
- *  AUTHOR: Petr Smolik                 petr.smolik@wo.cz
- *
- *  ORTE - OCERA Real-Time Ethernet     http://www.ocera.org/
+ *  -------------------------------------------------------------------  
+ *                                ORTE                                 
+ *                      Open Real-Time Ethernet                       
+ *                                                                    
+ *                      Copyright (C) 2001-2006                       
+ *  Department of Control Engineering FEE CTU Prague, Czech Republic  
+ *                      http://dce.felk.cvut.cz                       
+ *                      http://www.ocera.org                          
+ *                                                                    
+ *  Author:             Petr Smolik    petr@smoliku.cz             
+ *  Advisor:            Pavel Pisa                                   
+ *  Project Responsible: Zdenek Hanzalek                              
  *  --------------------------------------------------------------------
  *
  *  This program is free software; you can redistribute it and/or modify
 extern "C" {
 #endif
 
+typedef struct CSTWriter CSTWriter;               //forward declarations
+typedef struct CSTRemoteReader CSTRemoteReader;               
+typedef struct CSTReader CSTReader;               
+typedef struct ObjectEntryOID ObjectEntryOID;
+typedef struct ObjectEntryHID ObjectEntryHID;
+typedef struct ObjectEntryAID ObjectEntryAID;
+typedef struct ObjectEntry ObjectEntry; 
+
 /**
  * struct sock_t - 
  */
 typedef struct sock_t {
   int         fd;
-  u_int16_t   port;
+  uint16_t    port;
 } sock_t;
 
 /**
  * struct  - MessageBuffer
  */
 typedef struct MessageBuffer {
-  ORTECDRStream          cdrStream;
-  ORTECDRStream          *cdrStreamDirect;
+  CDR_Codec             cdrCodec;
+  CDR_Codec              *cdrCodecDirect;
   Boolean                needSend;
   Boolean                containsInfoReply;
 } MessageBuffer;
@@ -49,6 +66,8 @@ typedef struct TaskProp {
   sock_t                 sock;
   pthread_t              thread;
   Boolean                terminate;
+  MessageBuffer                 mb;
+  ORTEDomain            *d;
 } TaskProp;
 
 
@@ -69,24 +88,25 @@ typedef struct TypeNode {
 } TypeNode;
 
 /**
- * struct SubscriptionPatternNode - 
+ * struct PatternsNode - 
  */
-typedef struct SubscriptionPatternNode {
+typedef struct PatternNode {
   ul_list_node_t         node;
   PathName               topic;
   TypeName               type;
   ORTESubscriptionPatternCallBack subscriptionCallBack;
   void                   *param;
-} SubscriptionPatternNode;
+} PatternNode;
 
 /**
  * struct PatternEntry - 
  */
 typedef struct PatternEntry {
-  ul_list_head_t         subscription;
+  ul_list_head_t         patterns;
   ORTEPatternCheck       check;
   ORTEPatternMatch       match;
   void                   *param;
+  pthread_rwlock_t       lock;
 } PatternEntry;
   
 /**
@@ -109,11 +129,6 @@ typedef struct AppParams {
   SequenceNumber         vargAppsSequenceNumber;    //useful only for manager
 } AppParams;
 
-typedef struct ObjectEntryOID ObjectEntryOID;
-typedef struct ObjectEntryHID ObjectEntryHID;
-typedef struct ObjectEntryAID ObjectEntryAID;
-typedef struct ObjectEntry ObjectEntry; 
-
 typedef void EVH1(ORTEDomain *,ObjectEntryAID *,ul_htim_time_t *);
 /**
  * struct HTimFncRootNode - 
@@ -144,7 +159,7 @@ typedef int EVH2(ORTEDomain *,void *);
 typedef struct HTimFncUserNode {
   ul_htim_node_t        htim;
   const char            *name;
-  pthread_rwlock_t      *lock; //when func share params, lock is called before call the func
+  pthread_rwlock_t      *lock; //when func share params, lock is called before call the func
   EVH2                  *func;
   void                  *arg1;
 } HTimFncUserNode;
@@ -161,23 +176,28 @@ struct ObjectEntryOID{
   ObjectEntryHID         *objectEntryHID;
   void                   *attributes;  //atributes of object
   Boolean                appMOM;
-  Boolean                private;      //object created by me self app
-  HTimFncUserNode             expirationPurgeTimer;
+  Boolean                privateCreated;  //object created by me self app
+  HTimFncUserNode       expirationPurgeTimer;
   //only for private CSTPublication,CSTSubscription
-  void                   *instance;    //data stream
+  void                   *instance;    //data Codec
   ORTERecvCallBack       recvCallBack;
   ORTESendCallBack       sendCallBack;
   void                   *callBackParam;
   NtpTime                sendCallBackDelay;
-  HTimFncUserNode             sendCallBackDelayTimer;
+  HTimFncUserNode        sendCallBackDelayTimer;
   //only for list of publishers or subscribers
   gavl_node_t            psNode;
+  //multicast
+  ul_list_head_t         multicastRemoteReaders;
+  int                   multicastPort;
 };
 struct ObjectEntryAID {
   gavl_node_t            aidNode;
   AppId                  aid;
   HTimNode               htimUnicast;  //parameters for Unicast
   gavl_cust_root_field_t oidRoot;
+  //just one application 1c1 can be connected to AID
+  ObjectEntryOID         *aobject;     //application
 };
 struct ObjectEntryHID{
   gavl_node_t            hidNode;
@@ -185,11 +205,13 @@ struct ObjectEntryHID{
   gavl_cust_root_field_t aidRoot;
 };
 struct ObjectEntry{
-  gavl_cust_root_field_t objRoot;     //root of tree objects
+  gavl_cust_root_field_t objRoot;      //root of tree objects
   pthread_rwlock_t       objRootLock;
   ul_htim_queue_t        htimRoot;     //root of tree htimers
   pthread_rwlock_t       htimRootLock;
-  pthread_mutex_t        htimSendMutex; //for wake up
+  pthread_cond_t        htimSendCond; //for wake up
+  pthread_mutex_t       htimSendMutex;
+  int                   htimSendCondValue;
   Boolean                htimNeedWakeUp;
 };
 
@@ -200,7 +222,19 @@ typedef struct ParameterSequence {
   ul_list_node_t         node;
   ParameterId            parameterID;
   ParameterLength        parameterLength;
-  u_char                 parameterLocal[MAX_PARAMETER_LOCAL_LENGTH];
+  union {
+    u_char               asStr[MAX_PARAMETER_LOCAL_LENGTH];
+    NtpTime             asNtpTime;
+    CORBA_unsigned_long  asLong;
+    VendorId            asVendorId;
+    ProtocolVersion     asProtocolVersion;
+    SequenceNumber      asSequenceNumber;
+    CORBA_octet                 asOctet;
+    IPAddress           asIPAddress;
+    Port                asPort;
+    uint32_t            asUInt32;
+    TypeChecksum        asTypeChecksum;
+  } parameterLocal;
   u_char                 *parameter;
 } ParameterSequence; 
 
@@ -216,11 +250,12 @@ typedef struct CSChange {
   SequenceNumber         gapSN;  //>0 means sn is in GAP
                                  // 1 - sn is gap, 2 - sn,sn+1 are gaps, ...
   ul_list_head_t         attributes;
-  ORTECDRStream          cdrStream; //for issue
+  CDR_Codec              cdrCodec; //for issue
   //how many times was a cstRemoteWriter acknowledged
+  ul_list_head_t         writerParticipants;
   int                    remoteReaderCount;
-  int                    remoteReaderProcBest;
-  int                    remoteReaderProcStrict;
+  int                    remoteReaderBest;
+  int                    remoteReaderStrict;
   //receiving informations
   NtpTime                remoteTimePublished;
   NtpTime                localTimeReceived;
@@ -230,6 +265,8 @@ typedef struct CSChange {
  * struct CSTWriterParams - 
  */
 typedef struct CSTWriterParams {
+  unsigned int          registrationRetries;
+  NtpTime               registrationPeriod;
   NtpTime                waitWhileDataUnderwayTime;
   NtpTime                repeatAnnounceTime;
   NtpTime                delayResponceTime;
@@ -243,27 +280,30 @@ typedef struct CSTWriterParams {
  */
 typedef struct CSChangeForReader {
   gavl_node_t            node;
+  ul_list_node_t         participantNode;
+  CSTRemoteReader        *cstRemoteReader;
   CSChange               *csChange;
   StateMachineChFReader  commStateChFReader;
   HTimFncUserNode        waitWhileDataUnderwayTimer;
 } CSChangeForReader;
 
-typedef struct CSTWriter CSTWriter;               //forward declaration
 /**
  * struct CSTRemoteReader - 
  */
-typedef struct CSTRemoteReader {
+struct CSTRemoteReader {
   gavl_node_t            node;
   CSTWriter              *cstWriter;
-  ObjectEntryOID         *objectEntryOID;
+  ObjectEntryOID         *sobject; /* to send object */
+  ObjectEntryOID         *pobject; /* physical object (for multicast is differnet than sobject) */
   GUID_RTPS              guid;
   
   gavl_cust_root_field_t csChangeForReader;
-  int                    csChangesCounter;
+  unsigned int           csChangesCounter;
 
   //comm states
   StateMachineHB         commStateHB;
   StateMachineSend       commStateSend;
+  unsigned int          commStateToSentCounter;
 
   //timing properties
   HTimFncUserNode        delayResponceTimer;
@@ -272,7 +312,10 @@ typedef struct CSTRemoteReader {
   unsigned int           HBRetriesCounter;
   
   NtpTime                lastSentIssueTime;
-} CSTRemoteReader;
+  
+  //multicast
+  ul_list_node_t         multicastNode; //connected into objectEntryOID
+};
 
 typedef struct CSTPublications CSTPublications;
 /**
@@ -290,12 +333,15 @@ struct CSTWriter {
   CSTWriterParams        params;
 
   ul_list_head_t         csChanges;
-  int                    csChangesCounter;
+  unsigned int           csChangesCounter;
   gavl_cust_root_field_t cstRemoteReader;
-  int                    cstRemoteReaderCounter;
+  unsigned int           cstRemoteReaderCounter;
   pthread_rwlock_t       lock;
 
   HTimFncUserNode        refreshPeriodTimer;
+
+  unsigned int          registrationCounter;
+  HTimFncUserNode        registrationTimer;
   
   //ser./deser. function
   ORTETypeRegister       *typeRegister;
@@ -303,7 +349,9 @@ struct CSTWriter {
   //only for CSTPublications
   unsigned int           strictReliableCounter;
   unsigned int           bestEffortsCounter;
-  pthread_mutex_t        mutexCSChangeDestroyed;
+  pthread_cond_t        condCSChangeDestroyed; //for wake up
+  pthread_mutex_t       mutexCSChangeDestroyed;
+  int                   condValueCSChangeDestroyed;
 };
 
 /**
@@ -326,18 +374,17 @@ typedef struct CSChangeFromWriter {
   StateMachineChFWriter  commStateChFWriter;
 } CSChangeFromWriter;
 
-typedef struct CSTReader CSTReader;               //forward declaration
 /**
  * struct CSTRemoteWriter - 
  */
 typedef struct CSTRemoteWriter {
   gavl_node_t            node;
   CSTReader              *cstReader;
-  ObjectEntryOID         *objectEntryOID;
+  ObjectEntryOID         *spobject;   /* sender, physical object */
   GUID_RTPS              guid;
   
   gavl_cust_root_field_t csChangeFromWriter;
-  int                    csChangesCounter;
+  unsigned int           csChangesCounter;
   
   SequenceNumber         sn;
   SequenceNumber         firstSN;
@@ -350,7 +397,7 @@ typedef struct CSTRemoteWriter {
   HTimFncUserNode        delayResponceTimer;
   HTimFncUserNode        repeatActiveQueryTimer;
 
-  int                    ACKRetriesCounter;
+  unsigned int           ACKRetriesCounter;
 } CSTRemoteWriter;
 
 typedef struct CSTSubscriptions CSTSubscriptions;
@@ -367,7 +414,7 @@ struct CSTReader {
 
   ul_list_head_t         csChanges;
   gavl_cust_root_field_t cstRemoteWriter;
-  int                    cstRemoteWriterCounter;
+  unsigned int           cstRemoteWriterCounter;
   pthread_rwlock_t       lock;
   
   //ser./deser. function
@@ -380,6 +427,8 @@ struct CSTReader {
 
   unsigned int           strictReliableCounter;
   unsigned int           bestEffortsCounter;
+  
+  Boolean                createdByPattern;
 };
 
 /**
@@ -388,7 +437,7 @@ struct CSTReader {
 struct CSTPublications {
   gavl_cust_root_field_t cstWriter;
   pthread_rwlock_t       lock;        
-  u_int32_t              counter;  
+  uint32_t               counter;  
 };
   
 /**
@@ -397,7 +446,7 @@ struct CSTPublications {
 struct CSTSubscriptions {
   gavl_cust_root_field_t cstReader;
   pthread_rwlock_t       lock;        
-  u_int32_t              counter;  
+  uint32_t               counter;  
 };
 
 /**
@@ -414,19 +463,18 @@ typedef struct PSEntry {
  * struct ORTEDomain - 
  */
 struct ORTEDomain {
-  u_int32_t              domain;      //domain value
+  uint32_t               domain;      //domain value
   GUID_RTPS              guid;        //guid of self application
   AppParams              *appParams;  //self parameters (share from objectEntry)
   ObjectEntryOID         *objectEntryOID;//entry point for self OID
   
   ////////////////////////////////////////////////////
   //variables for tasks
-  TaskProp               taskRecvMetatraffic;
-  MessageBuffer          mbRecvMetatraffic;
+  TaskProp               taskRecvUnicastMetatraffic;
+  TaskProp               taskRecvMulticastMetatraffic;
+  TaskProp               taskRecvUnicastUserdata;
+  TaskProp               taskRecvMulticastUserdata;
   TaskProp               taskSend;
-  MessageBuffer          mbSend;
-  TaskProp               taskRecvUserdata;
-  MessageBuffer          mbRecvUserdata;
 
   ////////////////////////////////////////////////////
   //databases
@@ -443,12 +491,7 @@ struct ORTEDomain {
   ORTEAppInfo            appInfo;
   ORTEPubInfo            pubInfo;
   ORTESubInfo            subInfo;
-  
-  ////////////////////////////////////////////////////
-  //default properties for a Publication and Subscription
-  ORTEPublProp           publPropDefault;
-  ORTESubsProp           subsPropDefault;
-  
+    
   ////////////////////////////////////////////////////
   //communication objects 
   CSTWriter              writerApplicationSelf;  //Manager,App