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;
225 u_char parameterLocal[MAX_PARAMETER_LOCAL_LENGTH];
232 typedef struct CSChange {
233 ul_list_node_t nodeList;
234 gavl_node_t nodeGAVL;
238 SequenceNumber gapSN; //>0 means sn is in GAP
239 // 1 - sn is gap, 2 - sn,sn+1 are gaps, ...
240 ul_list_head_t attributes;
241 CDR_Codec cdrCodec; //for issue
242 //how many times was a cstRemoteWriter acknowledged
243 ul_list_head_t writerParticipants;
244 int remoteReaderCount;
245 int remoteReaderBest;
246 int remoteReaderStrict;
247 //receiving informations
248 NtpTime remoteTimePublished;
249 NtpTime localTimeReceived;
253 * struct CSTWriterParams -
255 typedef struct CSTWriterParams {
256 unsigned int registrationRetries;
257 NtpTime registrationPeriod;
258 NtpTime waitWhileDataUnderwayTime;
259 NtpTime repeatAnnounceTime;
260 NtpTime delayResponceTime;
261 NtpTime refreshPeriod;
262 unsigned int HBMaxRetries;
263 Boolean fullAcknowledge;
267 * struct CSChangeForReader -
269 typedef struct CSChangeForReader {
271 ul_list_node_t participantNode;
272 CSTRemoteReader *cstRemoteReader;
274 StateMachineChFReader commStateChFReader;
275 HTimFncUserNode waitWhileDataUnderwayTimer;
279 * struct CSTRemoteReader -
281 struct CSTRemoteReader {
283 CSTWriter *cstWriter;
284 ObjectEntryOID *sobject; /* to send object */
285 ObjectEntryOID *pobject; /* physical object (for multicast is differnet than sobject) */
288 gavl_cust_root_field_t csChangeForReader;
289 unsigned int csChangesCounter;
292 StateMachineHB commStateHB;
293 StateMachineSend commStateSend;
294 unsigned int commStateToSentCounter;
297 HTimFncUserNode delayResponceTimer;
298 HTimFncUserNode repeatAnnounceTimer;
300 unsigned int HBRetriesCounter;
302 NtpTime lastSentIssueTime;
305 ul_list_node_t multicastNode; //connected into objectEntryOID
308 typedef struct CSTPublications CSTPublications;
316 ObjectEntryOID *objectEntryOID;
318 SequenceNumber firstSN;
319 SequenceNumber lastSN;
321 CSTWriterParams params;
323 ul_list_head_t csChanges;
324 unsigned int csChangesCounter;
325 gavl_cust_root_field_t cstRemoteReader;
326 unsigned int cstRemoteReaderCounter;
327 pthread_rwlock_t lock;
329 HTimFncUserNode refreshPeriodTimer;
331 unsigned int registrationCounter;
332 HTimFncUserNode registrationTimer;
334 //ser./deser. function
335 ORTETypeRegister *typeRegister;
337 //only for CSTPublications
338 unsigned int strictReliableCounter;
339 unsigned int bestEffortsCounter;
340 pthread_cond_t condCSChangeDestroyed; //for wake up
341 pthread_mutex_t mutexCSChangeDestroyed;
342 int condValueCSChangeDestroyed;
346 * struct CSTReaderParams -
348 typedef struct CSTReaderParams {
349 NtpTime delayResponceTimeMin;
350 NtpTime delayResponceTimeMax;
351 NtpTime repeatActiveQueryTime;
352 Boolean fullAcknowledge;
353 unsigned int ACKMaxRetries;
357 * struct CSChangeFromWriter -
359 typedef struct CSChangeFromWriter {
362 StateMachineChFWriter commStateChFWriter;
363 } CSChangeFromWriter;
366 * struct CSTRemoteWriter -
368 typedef struct CSTRemoteWriter {
370 CSTReader *cstReader;
371 ObjectEntryOID *spobject; /* sender, physical object */
374 gavl_cust_root_field_t csChangeFromWriter;
375 unsigned int csChangesCounter;
378 SequenceNumber firstSN;
379 SequenceNumber lastSN;
382 StateMachineACK commStateACK;
385 HTimFncUserNode delayResponceTimer;
386 HTimFncUserNode repeatActiveQueryTimer;
388 unsigned int ACKRetriesCounter;
391 typedef struct CSTSubscriptions CSTSubscriptions;
399 ObjectEntryOID *objectEntryOID;
401 CSTReaderParams params;
403 ul_list_head_t csChanges;
404 gavl_cust_root_field_t cstRemoteWriter;
405 unsigned int cstRemoteWriterCounter;
406 pthread_rwlock_t lock;
408 //ser./deser. function
409 ORTETypeRegister *typeRegister;
411 //only for CSTSubcriptions
412 CSTRemoteWriter *cstRemoteWriterSubscribed;
413 HTimFncUserNode deadlineTimer;
414 HTimFncUserNode persistenceTimer;
416 unsigned int strictReliableCounter;
417 unsigned int bestEffortsCounter;
419 Boolean createdByPattern;
423 * struct CSTPublications -
425 struct CSTPublications {
426 gavl_cust_root_field_t cstWriter;
427 pthread_rwlock_t lock;
432 * struct CSTSubscriptions -
434 struct CSTSubscriptions {
435 gavl_cust_root_field_t cstReader;
436 pthread_rwlock_t lock;
443 typedef struct PSEntry {
444 gavl_cust_root_field_t publications;
445 pthread_rwlock_t publicationsLock;
446 gavl_cust_root_field_t subscriptions;
447 pthread_rwlock_t subscriptionsLock;
451 * struct ORTEDomain -
454 uint32_t domain; //domain value
455 GUID_RTPS guid; //guid of self application
456 AppParams *appParams; //self parameters (share from objectEntry)
457 ObjectEntryOID *objectEntryOID;//entry point for self OID
459 ////////////////////////////////////////////////////
460 //variables for tasks
461 TaskProp taskRecvUnicastMetatraffic;
462 TaskProp taskRecvMulticastMetatraffic;
463 TaskProp taskRecvUnicastUserdata;
464 TaskProp taskRecvMulticastUserdata;
467 ////////////////////////////////////////////////////
469 TypeEntry typeEntry; //db of types
470 ObjectEntry objectEntry; //Objects Tree
471 PSEntry psEntry; //lists of publ/subs
472 PatternEntry patternEntry;
474 ORTEDomainProp domainProp;
475 ORTEDomainAppEvents domainEvents;
477 ////////////////////////////////////////////////////
478 //information used by event system
483 ////////////////////////////////////////////////////
484 //communication objects
485 CSTWriter writerApplicationSelf; //Manager,App
486 CSTReader readerManagers; //Manager,App
487 CSTReader readerApplications; //Manager,App
488 CSTWriter writerManagers; //Manager
489 CSTWriter writerApplications; //Manager
490 CSTWriter writerPublications; //App
491 CSTReader readerPublications; //App
492 CSTWriter writerSubscriptions; //App
493 CSTReader readerSubscriptions; //App
495 CSTPublications publications; //App
496 CSTSubscriptions subscriptions; //App
503 #endif /* _TYPEDEFS_H */