2 * $Id: typedefs.h,v 0.0.0.1 2003/08/21
4 * AUTHOR: Petr Smolik petr.smolik@wo.cz
6 * ORTE - OCERA Real-Time Ethernet http://www.ocera.org/
7 * --------------------------------------------------------------------
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
28 typedef struct CSTWriter CSTWriter; //forward declarations
29 typedef struct CSTRemoteReader CSTRemoteReader;
30 typedef struct CSTReader CSTReader;
31 typedef struct ObjectEntryOID ObjectEntryOID;
32 typedef struct ObjectEntryHID ObjectEntryHID;
33 typedef struct ObjectEntryAID ObjectEntryAID;
34 typedef struct ObjectEntry ObjectEntry;
39 typedef struct sock_t {
45 * struct - MessageBuffer
47 typedef struct MessageBuffer {
49 CDR_Codec *cdrCodecDirect;
51 Boolean containsInfoReply;
56 typedef struct TaskProp {
68 typedef struct TypeEntry {
69 gavl_cust_root_field_t types; //Types
70 pthread_rwlock_t lock;
76 typedef struct TypeNode {
78 ORTETypeRegister typeRegister;
82 * struct PatternsNode -
84 typedef struct PatternNode {
88 ORTESubscriptionPatternCallBack subscriptionCallBack;
93 * struct PatternEntry -
95 typedef struct PatternEntry {
96 ul_list_head_t patterns;
97 ORTEPatternCheck check;
98 ORTEPatternMatch match;
100 pthread_rwlock_t lock;
104 * struct AppParams - Manager & ManagedApplication
106 typedef struct AppParams {
109 IPAddress unicastIPAddressList[MAX_INTERFACES];
110 unsigned char unicastIPAddressCount;
111 IPAddress metatrafficMulticastIPAddressList[MAX_INTERFACES];
112 unsigned char metatrafficMulticastIPAddressCount;
113 IPAddress managerKeyList[MAX_INTERFACES];//useful only for manager
114 unsigned char managerKeyCount; //useful only for manager
115 Port metatrafficUnicastPort;
116 Port userdataUnicastPort;
118 ProtocolVersion protocolVersion;
119 NtpTime expirationTime;
120 SequenceNumber vargAppsSequenceNumber; //useful only for manager
123 typedef void EVH1(ORTEDomain *,ObjectEntryAID *,ul_htim_time_t *);
125 * struct HTimFncRootNode -
127 typedef struct HTimFncRootNode {
131 ObjectEntryAID *objectEntryAID;
137 typedef struct HTimNode {
138 ul_htim_queue_t common; //timing queue for a timer function
139 HTimFncRootNode commonNode; //root node
140 ul_htim_queue_t sendMetatraffic; //timing queue for sendMetatraffic
141 HTimFncRootNode sendMetatrafficNode; //root node
142 ul_htim_queue_t sendUserData; //timing queue for sendUserData
143 HTimFncRootNode sendUserDataNode; //root node
147 * struct HTimFncUserNode -
149 typedef int EVH2(ORTEDomain *,void *);
150 typedef struct HTimFncUserNode {
153 pthread_rwlock_t *lock; //when a func share params, lock is called before call the func
159 * struct ObjectEntry - Tree of objects
161 struct ObjectEntryOID{
164 GUID_RTPS guid; //for easy access to guid
166 ObjectEntryAID *objectEntryAID;
167 ObjectEntryHID *objectEntryHID;
168 void *attributes; //atributes of object
170 Boolean privateCreated; //object created by me self app
171 HTimFncUserNode expirationPurgeTimer;
172 //only for private CSTPublication,CSTSubscription
173 void *instance; //data Codec
174 ORTERecvCallBack recvCallBack;
175 ORTESendCallBack sendCallBack;
177 NtpTime sendCallBackDelay;
178 HTimFncUserNode sendCallBackDelayTimer;
179 //only for list of publishers or subscribers
182 ul_list_head_t multicastRemoteReaders;
185 struct ObjectEntryAID {
188 HTimNode htimUnicast; //parameters for Unicast
189 gavl_cust_root_field_t oidRoot;
190 //just one application 1c1 can be connected to AID
191 ObjectEntryOID *aobject; //application
193 struct ObjectEntryHID{
196 gavl_cust_root_field_t aidRoot;
199 gavl_cust_root_field_t objRoot; //root of tree objects
200 pthread_rwlock_t objRootLock;
201 ul_htim_queue_t htimRoot; //root of tree htimers
202 pthread_rwlock_t htimRootLock;
203 pthread_cond_t htimSendCond; //for wake up
204 pthread_mutex_t htimSendMutex;
205 int htimSendCondValue;
206 Boolean htimNeedWakeUp;
210 * struct ParameterSequence -
212 typedef struct ParameterSequence {
214 ParameterId parameterID;
215 ParameterLength parameterLength;
216 u_char parameterLocal[MAX_PARAMETER_LOCAL_LENGTH];
223 typedef struct CSChange {
224 ul_list_node_t nodeList;
225 gavl_node_t nodeGAVL;
229 SequenceNumber gapSN; //>0 means sn is in GAP
230 // 1 - sn is gap, 2 - sn,sn+1 are gaps, ...
231 ul_list_head_t attributes;
232 CDR_Codec cdrCodec; //for issue
233 //how many times was a cstRemoteWriter acknowledged
234 ul_list_head_t writerParticipants;
235 int remoteReaderCount;
236 int remoteReaderBest;
237 int remoteReaderStrict;
238 //receiving informations
239 NtpTime remoteTimePublished;
240 NtpTime localTimeReceived;
244 * struct CSTWriterParams -
246 typedef struct CSTWriterParams {
247 unsigned int registrationRetries;
248 NtpTime registrationPeriod;
249 NtpTime waitWhileDataUnderwayTime;
250 NtpTime repeatAnnounceTime;
251 NtpTime delayResponceTime;
252 NtpTime refreshPeriod;
253 unsigned int HBMaxRetries;
254 Boolean fullAcknowledge;
258 * struct CSChangeForReader -
260 typedef struct CSChangeForReader {
262 ul_list_node_t participantNode;
263 CSTRemoteReader *cstRemoteReader;
265 StateMachineChFReader commStateChFReader;
266 HTimFncUserNode waitWhileDataUnderwayTimer;
270 * struct CSTRemoteReader -
272 struct CSTRemoteReader {
274 CSTWriter *cstWriter;
275 ObjectEntryOID *sobject; /* to send object */
276 ObjectEntryOID *pobject; /* physical object (for multicast is differnet than sobject) */
279 gavl_cust_root_field_t csChangeForReader;
280 unsigned int csChangesCounter;
283 StateMachineHB commStateHB;
284 StateMachineSend commStateSend;
285 unsigned int commStateToSentCounter;
288 HTimFncUserNode delayResponceTimer;
289 HTimFncUserNode repeatAnnounceTimer;
291 unsigned int HBRetriesCounter;
293 NtpTime lastSentIssueTime;
296 ul_list_node_t multicastNode; //connected into objectEntryOID
299 typedef struct CSTPublications CSTPublications;
307 ObjectEntryOID *objectEntryOID;
309 SequenceNumber firstSN;
310 SequenceNumber lastSN;
312 CSTWriterParams params;
314 ul_list_head_t csChanges;
315 unsigned int csChangesCounter;
316 gavl_cust_root_field_t cstRemoteReader;
317 unsigned int cstRemoteReaderCounter;
318 pthread_rwlock_t lock;
320 HTimFncUserNode refreshPeriodTimer;
322 unsigned int registrationCounter;
323 HTimFncUserNode registrationTimer;
325 //ser./deser. function
326 ORTETypeRegister *typeRegister;
328 //only for CSTPublications
329 unsigned int strictReliableCounter;
330 unsigned int bestEffortsCounter;
331 pthread_cond_t condCSChangeDestroyed; //for wake up
332 pthread_mutex_t mutexCSChangeDestroyed;
333 int condValueCSChangeDestroyed;
337 * struct CSTReaderParams -
339 typedef struct CSTReaderParams {
340 NtpTime delayResponceTimeMin;
341 NtpTime delayResponceTimeMax;
342 NtpTime repeatActiveQueryTime;
343 Boolean fullAcknowledge;
344 unsigned int ACKMaxRetries;
348 * struct CSChangeFromWriter -
350 typedef struct CSChangeFromWriter {
353 StateMachineChFWriter commStateChFWriter;
354 } CSChangeFromWriter;
357 * struct CSTRemoteWriter -
359 typedef struct CSTRemoteWriter {
361 CSTReader *cstReader;
362 ObjectEntryOID *spobject; /* sender, physical object */
365 gavl_cust_root_field_t csChangeFromWriter;
366 unsigned int csChangesCounter;
369 SequenceNumber firstSN;
370 SequenceNumber lastSN;
373 StateMachineACK commStateACK;
376 HTimFncUserNode delayResponceTimer;
377 HTimFncUserNode repeatActiveQueryTimer;
379 unsigned int ACKRetriesCounter;
382 typedef struct CSTSubscriptions CSTSubscriptions;
390 ObjectEntryOID *objectEntryOID;
392 CSTReaderParams params;
394 ul_list_head_t csChanges;
395 gavl_cust_root_field_t cstRemoteWriter;
396 unsigned int cstRemoteWriterCounter;
397 pthread_rwlock_t lock;
399 //ser./deser. function
400 ORTETypeRegister *typeRegister;
402 //only for CSTSubcriptions
403 CSTRemoteWriter *cstRemoteWriterSubscribed;
404 HTimFncUserNode deadlineTimer;
405 HTimFncUserNode persistenceTimer;
407 unsigned int strictReliableCounter;
408 unsigned int bestEffortsCounter;
410 Boolean createdByPattern;
414 * struct CSTPublications -
416 struct CSTPublications {
417 gavl_cust_root_field_t cstWriter;
418 pthread_rwlock_t lock;
423 * struct CSTSubscriptions -
425 struct CSTSubscriptions {
426 gavl_cust_root_field_t cstReader;
427 pthread_rwlock_t lock;
434 typedef struct PSEntry {
435 gavl_cust_root_field_t publications;
436 pthread_rwlock_t publicationsLock;
437 gavl_cust_root_field_t subscriptions;
438 pthread_rwlock_t subscriptionsLock;
442 * struct ORTEDomain -
445 uint32_t domain; //domain value
446 GUID_RTPS guid; //guid of self application
447 AppParams *appParams; //self parameters (share from objectEntry)
448 ObjectEntryOID *objectEntryOID;//entry point for self OID
450 ////////////////////////////////////////////////////
451 //variables for tasks
452 TaskProp taskRecvUnicastMetatraffic;
453 TaskProp taskRecvMulticastMetatraffic;
454 TaskProp taskRecvUnicastUserdata;
455 TaskProp taskRecvMulticastUserdata;
458 ////////////////////////////////////////////////////
460 TypeEntry typeEntry; //db of types
461 ObjectEntry objectEntry; //Objects Tree
462 PSEntry psEntry; //lists of publ/subs
463 PatternEntry patternEntry;
465 ORTEDomainProp domainProp;
466 ORTEDomainAppEvents domainEvents;
468 ////////////////////////////////////////////////////
469 //information used by event system
474 ////////////////////////////////////////////////////
475 //communication objects
476 CSTWriter writerApplicationSelf; //Manager,App
477 CSTReader readerManagers; //Manager,App
478 CSTReader readerApplications; //Manager,App
479 CSTWriter writerManagers; //Manager
480 CSTWriter writerApplications; //Manager
481 CSTWriter writerPublications; //App
482 CSTReader readerPublications; //App
483 CSTWriter writerSubscriptions; //App
484 CSTReader readerSubscriptions; //App
486 CSTPublications publications; //App
487 CSTSubscriptions subscriptions; //App
494 #endif /* _TYPEDEFS_H */