/*
* $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
#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 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;
sock_t sock;
pthread_t thread;
Boolean terminate;
+ MessageBuffer mb;
+ ORTEDomain *d;
} TaskProp;
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 a func share params, lock is called before call the func
EVH2 *func;
void *arg1;
} HTimFncUserNode;
void *attributes; //atributes of object
Boolean appMOM;
Boolean privateCreated; //object created by me self app
- HTimFncUserNode expirationPurgeTimer;
+ 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;
pthread_rwlock_t objRootLock;
ul_htim_queue_t htimRoot; //root of tree htimers
pthread_rwlock_t htimRootLock;
- sem_t htimSendSem; //for wake up
+ pthread_cond_t htimSendCond; //for wake up
+ pthread_mutex_t htimSendMutex;
+ int htimSendCondValue;
Boolean htimNeedWakeUp;
};
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;
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 remoteReaderBest;
int remoteReaderStrict;
* struct CSTWriterParams -
*/
typedef struct CSTWriterParams {
+ unsigned int registrationRetries;
+ NtpTime registrationPeriod;
NtpTime waitWhileDataUnderwayTime;
NtpTime repeatAnnounceTime;
NtpTime delayResponceTime;
*/
typedef struct CSChangeForReader {
gavl_node_t node;
+ ul_list_node_t participantNode;
+ CSTRemoteReader *cstRemoteReader;
CSChange *csChange;
StateMachineChFReader commStateChFReader;
HTimFncUserNode waitWhileDataUnderwayTimer;
/**
* 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;
//comm states
StateMachineHB commStateHB;
StateMachineSend commStateSend;
+ unsigned int commStateToSentCounter;
//timing properties
HTimFncUserNode delayResponceTimer;
unsigned int HBRetriesCounter;
NtpTime lastSentIssueTime;
-} CSTRemoteReader;
+
+ //multicast
+ ul_list_node_t multicastNode; //connected into objectEntryOID
+};
typedef struct CSTPublications CSTPublications;
/**
pthread_rwlock_t lock;
HTimFncUserNode refreshPeriodTimer;
+
+ unsigned int registrationCounter;
+ HTimFncUserNode registrationTimer;
//ser./deser. function
ORTETypeRegister *typeRegister;
//only for CSTPublications
unsigned int strictReliableCounter;
unsigned int bestEffortsCounter;
- sem_t semCSChangeDestroyed;
+ pthread_cond_t condCSChangeDestroyed; //for wake up
+ pthread_mutex_t mutexCSChangeDestroyed;
+ int condValueCSChangeDestroyed;
};
/**
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;
struct CSTPublications {
gavl_cust_root_field_t cstWriter;
pthread_rwlock_t lock;
- u_int32_t counter;
+ uint32_t counter;
};
/**
struct CSTSubscriptions {
gavl_cust_root_field_t cstReader;
pthread_rwlock_t lock;
- u_int32_t counter;
+ uint32_t counter;
};
/**
* 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