2 * $Id: typedefs.h,v 0.0.0.1 2003/08/21
4 * -------------------------------------------------------------------
6 * Open Real-Time Ethernet
8 * Copyright (C) 2001-2006
9 * Department of Control Engineering FEE CTU Prague, Czech Republic
10 * http://dce.felk.cvut.cz
11 * http://www.ocera.org
13 * Author: Petr Smolik petr.smolik@wo.cz
15 * Project Responsible: Zdenek Hanzalek
16 * --------------------------------------------------------------------
18 * This program is free software; you can redistribute it and/or modify
19 * it under the terms of the GNU General Public License as published by
20 * the Free Software Foundation; either version 2 of the License, or
21 * (at your option) any later version.
23 * This program is distributed in the hope that it will be useful,
24 * but WITHOUT ANY WARRANTY; without even the implied warranty of
25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 * GNU General Public License for more details.
37 typedef struct CSTWriter CSTWriter; //forward declarations
38 typedef struct CSTRemoteReader CSTRemoteReader;
39 typedef struct CSTReader CSTReader;
40 typedef struct ObjectEntryOID ObjectEntryOID;
41 typedef struct ObjectEntryHID ObjectEntryHID;
42 typedef struct ObjectEntryAID ObjectEntryAID;
43 typedef struct ObjectEntry ObjectEntry;
48 typedef struct sock_t {
54 * struct - MessageBuffer
56 typedef struct MessageBuffer {
58 CDR_Codec *cdrCodecDirect;
60 Boolean containsInfoReply;
65 typedef struct TaskProp {
77 typedef struct TypeEntry {
78 gavl_cust_root_field_t types; //Types
79 pthread_rwlock_t lock;
85 typedef struct TypeNode {
87 ORTETypeRegister typeRegister;
91 * struct PatternsNode -
93 typedef struct PatternNode {
97 ORTESubscriptionPatternCallBack subscriptionCallBack;
102 * struct PatternEntry -
104 typedef struct PatternEntry {
105 ul_list_head_t patterns;
106 ORTEPatternCheck check;
107 ORTEPatternMatch match;
109 pthread_rwlock_t lock;
113 * struct AppParams - Manager & ManagedApplication
115 typedef struct AppParams {
118 IPAddress unicastIPAddressList[MAX_INTERFACES];
119 unsigned char unicastIPAddressCount;
120 IPAddress metatrafficMulticastIPAddressList[MAX_INTERFACES];
121 unsigned char metatrafficMulticastIPAddressCount;
122 IPAddress managerKeyList[MAX_INTERFACES];//useful only for manager
123 unsigned char managerKeyCount; //useful only for manager
124 Port metatrafficUnicastPort;
125 Port userdataUnicastPort;
127 ProtocolVersion protocolVersion;
128 NtpTime expirationTime;
129 SequenceNumber vargAppsSequenceNumber; //useful only for manager
132 typedef void EVH1(ORTEDomain *,ObjectEntryAID *,ul_htim_time_t *);
134 * struct HTimFncRootNode -
136 typedef struct HTimFncRootNode {
140 ObjectEntryAID *objectEntryAID;
146 typedef struct HTimNode {
147 ul_htim_queue_t common; //timing queue for a timer function
148 HTimFncRootNode commonNode; //root node
149 ul_htim_queue_t sendMetatraffic; //timing queue for sendMetatraffic
150 HTimFncRootNode sendMetatrafficNode; //root node
151 ul_htim_queue_t sendUserData; //timing queue for sendUserData
152 HTimFncRootNode sendUserDataNode; //root node
156 * struct HTimFncUserNode -
158 typedef int EVH2(ORTEDomain *,void *);
159 typedef struct HTimFncUserNode {
162 pthread_rwlock_t *lock; //when a func share params, lock is called before call the func
168 * struct ObjectEntry - Tree of objects
170 struct ObjectEntryOID{
173 GUID_RTPS guid; //for easy access to guid
175 ObjectEntryAID *objectEntryAID;
176 ObjectEntryHID *objectEntryHID;
177 void *attributes; //atributes of object
179 Boolean privateCreated; //object created by me self app
180 HTimFncUserNode expirationPurgeTimer;
181 //only for private CSTPublication,CSTSubscription
182 void *instance; //data Codec
183 ORTERecvCallBack recvCallBack;
184 ORTESendCallBack sendCallBack;
186 NtpTime sendCallBackDelay;
187 HTimFncUserNode sendCallBackDelayTimer;
188 //only for list of publishers or subscribers
191 ul_list_head_t multicastRemoteReaders;
194 struct ObjectEntryAID {
197 HTimNode htimUnicast; //parameters for Unicast
198 gavl_cust_root_field_t oidRoot;
199 //just one application 1c1 can be connected to AID
200 ObjectEntryOID *aobject; //application
202 struct ObjectEntryHID{
205 gavl_cust_root_field_t aidRoot;
208 gavl_cust_root_field_t objRoot; //root of tree objects
209 pthread_rwlock_t objRootLock;
210 ul_htim_queue_t htimRoot; //root of tree htimers
211 pthread_rwlock_t htimRootLock;
212 pthread_cond_t htimSendCond; //for wake up
213 pthread_mutex_t htimSendMutex;
214 int htimSendCondValue;
215 Boolean htimNeedWakeUp;
219 * struct ParameterSequence -
221 typedef struct ParameterSequence {
223 ParameterId parameterID;
224 ParameterLength parameterLength;
226 u_char asStr[MAX_PARAMETER_LOCAL_LENGTH];
228 CORBA_unsigned_long asLong;
230 ProtocolVersion asProtocolVersion;
231 SequenceNumber asSequenceNumber;
233 IPAddress asIPAddress;
236 TypeChecksum asTypeChecksum;
244 typedef struct CSChange {
245 ul_list_node_t nodeList;
246 gavl_node_t nodeGAVL;
250 SequenceNumber gapSN; //>0 means sn is in GAP
251 // 1 - sn is gap, 2 - sn,sn+1 are gaps, ...
252 ul_list_head_t attributes;
253 CDR_Codec cdrCodec; //for issue
254 //how many times was a cstRemoteWriter acknowledged
255 ul_list_head_t writerParticipants;
256 int remoteReaderCount;
257 int remoteReaderBest;
258 int remoteReaderStrict;
259 //receiving informations
260 NtpTime remoteTimePublished;
261 NtpTime localTimeReceived;
265 * struct CSTWriterParams -
267 typedef struct CSTWriterParams {
268 unsigned int registrationRetries;
269 NtpTime registrationPeriod;
270 NtpTime waitWhileDataUnderwayTime;
271 NtpTime repeatAnnounceTime;
272 NtpTime delayResponceTime;
273 NtpTime refreshPeriod;
274 unsigned int HBMaxRetries;
275 Boolean fullAcknowledge;
279 * struct CSChangeForReader -
281 typedef struct CSChangeForReader {
283 ul_list_node_t participantNode;
284 CSTRemoteReader *cstRemoteReader;
286 StateMachineChFReader commStateChFReader;
287 HTimFncUserNode waitWhileDataUnderwayTimer;
291 * struct CSTRemoteReader -
293 struct CSTRemoteReader {
295 CSTWriter *cstWriter;
296 ObjectEntryOID *sobject; /* to send object */
297 ObjectEntryOID *pobject; /* physical object (for multicast is differnet than sobject) */
300 gavl_cust_root_field_t csChangeForReader;
301 unsigned int csChangesCounter;
304 StateMachineHB commStateHB;
305 StateMachineSend commStateSend;
306 unsigned int commStateToSentCounter;
309 HTimFncUserNode delayResponceTimer;
310 HTimFncUserNode repeatAnnounceTimer;
312 unsigned int HBRetriesCounter;
314 NtpTime lastSentIssueTime;
317 ul_list_node_t multicastNode; //connected into objectEntryOID
320 typedef struct CSTPublications CSTPublications;
328 ObjectEntryOID *objectEntryOID;
330 SequenceNumber firstSN;
331 SequenceNumber lastSN;
333 CSTWriterParams params;
335 ul_list_head_t csChanges;
336 unsigned int csChangesCounter;
337 gavl_cust_root_field_t cstRemoteReader;
338 unsigned int cstRemoteReaderCounter;
339 pthread_rwlock_t lock;
341 HTimFncUserNode refreshPeriodTimer;
343 unsigned int registrationCounter;
344 HTimFncUserNode registrationTimer;
346 //ser./deser. function
347 ORTETypeRegister *typeRegister;
349 //only for CSTPublications
350 unsigned int strictReliableCounter;
351 unsigned int bestEffortsCounter;
352 pthread_cond_t condCSChangeDestroyed; //for wake up
353 pthread_mutex_t mutexCSChangeDestroyed;
354 int condValueCSChangeDestroyed;
358 * struct CSTReaderParams -
360 typedef struct CSTReaderParams {
361 NtpTime delayResponceTimeMin;
362 NtpTime delayResponceTimeMax;
363 NtpTime repeatActiveQueryTime;
364 Boolean fullAcknowledge;
365 unsigned int ACKMaxRetries;
369 * struct CSChangeFromWriter -
371 typedef struct CSChangeFromWriter {
374 StateMachineChFWriter commStateChFWriter;
375 } CSChangeFromWriter;
378 * struct CSTRemoteWriter -
380 typedef struct CSTRemoteWriter {
382 CSTReader *cstReader;
383 ObjectEntryOID *spobject; /* sender, physical object */
386 gavl_cust_root_field_t csChangeFromWriter;
387 unsigned int csChangesCounter;
390 SequenceNumber firstSN;
391 SequenceNumber lastSN;
394 StateMachineACK commStateACK;
397 HTimFncUserNode delayResponceTimer;
398 HTimFncUserNode repeatActiveQueryTimer;
400 unsigned int ACKRetriesCounter;
403 typedef struct CSTSubscriptions CSTSubscriptions;
411 ObjectEntryOID *objectEntryOID;
413 CSTReaderParams params;
415 ul_list_head_t csChanges;
416 gavl_cust_root_field_t cstRemoteWriter;
417 unsigned int cstRemoteWriterCounter;
418 pthread_rwlock_t lock;
420 //ser./deser. function
421 ORTETypeRegister *typeRegister;
423 //only for CSTSubcriptions
424 CSTRemoteWriter *cstRemoteWriterSubscribed;
425 HTimFncUserNode deadlineTimer;
426 HTimFncUserNode persistenceTimer;
428 unsigned int strictReliableCounter;
429 unsigned int bestEffortsCounter;
431 Boolean createdByPattern;
435 * struct CSTPublications -
437 struct CSTPublications {
438 gavl_cust_root_field_t cstWriter;
439 pthread_rwlock_t lock;
444 * struct CSTSubscriptions -
446 struct CSTSubscriptions {
447 gavl_cust_root_field_t cstReader;
448 pthread_rwlock_t lock;
455 typedef struct PSEntry {
456 gavl_cust_root_field_t publications;
457 pthread_rwlock_t publicationsLock;
458 gavl_cust_root_field_t subscriptions;
459 pthread_rwlock_t subscriptionsLock;
463 * struct ORTEDomain -
466 uint32_t domain; //domain value
467 GUID_RTPS guid; //guid of self application
468 AppParams *appParams; //self parameters (share from objectEntry)
469 ObjectEntryOID *objectEntryOID;//entry point for self OID
471 ////////////////////////////////////////////////////
472 //variables for tasks
473 TaskProp taskRecvUnicastMetatraffic;
474 TaskProp taskRecvMulticastMetatraffic;
475 TaskProp taskRecvUnicastUserdata;
476 TaskProp taskRecvMulticastUserdata;
479 ////////////////////////////////////////////////////
481 TypeEntry typeEntry; //db of types
482 ObjectEntry objectEntry; //Objects Tree
483 PSEntry psEntry; //lists of publ/subs
484 PatternEntry patternEntry;
486 ORTEDomainProp domainProp;
487 ORTEDomainAppEvents domainEvents;
489 ////////////////////////////////////////////////////
490 //information used by event system
495 ////////////////////////////////////////////////////
496 //communication objects
497 CSTWriter writerApplicationSelf; //Manager,App
498 CSTReader readerManagers; //Manager,App
499 CSTReader readerApplications; //Manager,App
500 CSTWriter writerManagers; //Manager
501 CSTWriter writerApplications; //Manager
502 CSTWriter writerPublications; //App
503 CSTReader readerPublications; //App
504 CSTWriter writerSubscriptions; //App
505 CSTReader readerSubscriptions; //App
507 CSTPublications publications; //App
508 CSTSubscriptions subscriptions; //App
515 #endif /* _TYPEDEFS_H */