]> rtime.felk.cvut.cz Git - orte.git/blob - orte/include/typedefs.h
Make AC notice more precise
[orte.git] / orte / include / typedefs.h
1 /*
2  *  $Id: typedefs.h,v 0.0.0.1           2003/08/21 
3  *
4  *  -------------------------------------------------------------------  
5  *                                ORTE                                 
6  *                      Open Real-Time Ethernet                       
7  *                                                                    
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                          
12  *                                                                    
13  *  Author:              Petr Smolik    petr.smolik@wo.cz             
14  *  Advisor:             Pavel Pisa                                   
15  *  Project Responsible: Zdenek Hanzalek                              
16  *  --------------------------------------------------------------------
17  *
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.
22  *  
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.
27  *  
28  */
29
30 #ifndef _TYPEDEFS_H
31 #define _TYPEDEFS_H
32
33 #ifdef __cplusplus
34 extern "C" {
35 #endif
36
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; 
44
45 /**
46  * struct sock_t - 
47  */
48 typedef struct sock_t {
49   int         fd;
50   uint16_t    port;
51 } sock_t;
52
53 /**
54  * struct  - MessageBuffer
55  */
56 typedef struct MessageBuffer {
57   CDR_Codec              cdrCodec;
58   CDR_Codec              *cdrCodecDirect;
59   Boolean                needSend;
60   Boolean                containsInfoReply;
61 } MessageBuffer;
62 /**
63  * struct TaskProp - 
64  */
65 typedef struct TaskProp {
66   sock_t                 sock;
67   pthread_t              thread;
68   Boolean                terminate;
69   MessageBuffer          mb;
70   ORTEDomain             *d;
71 } TaskProp;
72
73
74 /**
75  * struct typeEntry - 
76  */
77 typedef struct TypeEntry {
78   gavl_cust_root_field_t types;        //Types
79   pthread_rwlock_t       lock;
80 } TypeEntry;
81
82 /**
83  * struct typeNode - 
84  */
85 typedef struct TypeNode {
86   gavl_node_t            node;
87   ORTETypeRegister       typeRegister;
88 } TypeNode;
89
90 /**
91  * struct PatternsNode - 
92  */
93 typedef struct PatternNode {
94   ul_list_node_t         node;
95   PathName               topic;
96   TypeName               type;
97   ORTESubscriptionPatternCallBack subscriptionCallBack;
98   void                   *param;
99 } PatternNode;
100
101 /**
102  * struct PatternEntry - 
103  */
104 typedef struct PatternEntry {
105   ul_list_head_t         patterns;
106   ORTEPatternCheck       check;
107   ORTEPatternMatch       match;
108   void                   *param;
109   pthread_rwlock_t       lock;
110 } PatternEntry;
111   
112 /**
113  * struct AppParams - Manager & ManagedApplication
114  */
115 typedef struct AppParams {
116   HostId                 hostId;
117   AppId                  appId;
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;
126   VendorId               vendorId;
127   ProtocolVersion        protocolVersion;
128   NtpTime                expirationTime;
129   SequenceNumber         vargAppsSequenceNumber;    //useful only for manager
130 } AppParams;
131
132 typedef void EVH1(ORTEDomain *,ObjectEntryAID *,ul_htim_time_t *);
133 /**
134  * struct HTimFncRootNode - 
135  */
136 typedef struct HTimFncRootNode {
137   ul_htim_node_t        htim;
138   const char            *name;
139   EVH1                  *func;
140   ObjectEntryAID        *objectEntryAID;
141 } HTimFncRootNode;
142
143 /**
144  * struct HTimNode - 
145  */
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
153 } HTimNode;
154
155 /**
156  * struct HTimFncUserNode - 
157  */
158 typedef int EVH2(ORTEDomain *,void *);
159 typedef struct HTimFncUserNode {
160   ul_htim_node_t        htim;
161   const char            *name;
162   pthread_rwlock_t      *lock; //when a func share params, lock is called before call the func
163   EVH2                  *func;
164   void                  *arg1;
165 } HTimFncUserNode;
166
167 /**
168  * struct ObjectEntry - Tree of objects
169  */
170 struct ObjectEntryOID{
171   gavl_node_t            oidNode;
172   ObjectId               oid;
173   GUID_RTPS              guid;         //for easy access to guid
174   //Object
175   ObjectEntryAID         *objectEntryAID;
176   ObjectEntryHID         *objectEntryHID;
177   void                   *attributes;  //atributes of object
178   Boolean                appMOM;
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;
185   void                   *callBackParam;
186   NtpTime                sendCallBackDelay;
187   HTimFncUserNode        sendCallBackDelayTimer;
188   //only for list of publishers or subscribers
189   gavl_node_t            psNode;
190   //multicast
191   ul_list_head_t         multicastRemoteReaders;
192   int                    multicastPort;
193 };
194 struct ObjectEntryAID {
195   gavl_node_t            aidNode;
196   AppId                  aid;
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
201 };
202 struct ObjectEntryHID{
203   gavl_node_t            hidNode;
204   HostId                 hid;
205   gavl_cust_root_field_t aidRoot;
206 };
207 struct ObjectEntry{
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;
216 };
217
218 /**
219  * struct ParameterSequence - 
220  */
221 typedef struct ParameterSequence {
222   ul_list_node_t         node;
223   ParameterId            parameterID;
224   ParameterLength        parameterLength;
225   u_char                 parameterLocal[MAX_PARAMETER_LOCAL_LENGTH];
226   u_char                 *parameter;
227 } ParameterSequence; 
228
229 /**
230  * struct CSChange - 
231  */
232 typedef struct CSChange {
233   ul_list_node_t         nodeList;
234   gavl_node_t            nodeGAVL;
235   SequenceNumber         sn;
236   GUID_RTPS              guid;
237   Boolean                alive;
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;
250 } CSChange; 
251
252 /**
253  * struct CSTWriterParams - 
254  */
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;
264 } CSTWriterParams;
265
266 /**
267  * struct CSChangeForReader - 
268  */
269 typedef struct CSChangeForReader {
270   gavl_node_t            node;
271   ul_list_node_t         participantNode;
272   CSTRemoteReader        *cstRemoteReader;
273   CSChange               *csChange;
274   StateMachineChFReader  commStateChFReader;
275   HTimFncUserNode        waitWhileDataUnderwayTimer;
276 } CSChangeForReader;
277
278 /**
279  * struct CSTRemoteReader - 
280  */
281 struct CSTRemoteReader {
282   gavl_node_t            node;
283   CSTWriter              *cstWriter;
284   ObjectEntryOID         *sobject; /* to send object */
285   ObjectEntryOID         *pobject; /* physical object (for multicast is differnet than sobject) */
286   GUID_RTPS              guid;
287   
288   gavl_cust_root_field_t csChangeForReader;
289   unsigned int           csChangesCounter;
290
291   //comm states
292   StateMachineHB         commStateHB;
293   StateMachineSend       commStateSend;
294   unsigned int           commStateToSentCounter;
295
296   //timing properties
297   HTimFncUserNode        delayResponceTimer;
298   HTimFncUserNode        repeatAnnounceTimer;
299
300   unsigned int           HBRetriesCounter;
301   
302   NtpTime                lastSentIssueTime;
303   
304   //multicast
305   ul_list_node_t         multicastNode; //connected into objectEntryOID
306 };
307
308 typedef struct CSTPublications CSTPublications;
309 /**
310  * struct CSTWriter - 
311  */
312 struct CSTWriter {
313   ORTEDomain             *domain;
314   gavl_node_t            node;
315   GUID_RTPS              guid;
316   ObjectEntryOID         *objectEntryOID;
317
318   SequenceNumber         firstSN;
319   SequenceNumber         lastSN;
320
321   CSTWriterParams        params;
322
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;
328
329   HTimFncUserNode        refreshPeriodTimer;
330
331   unsigned int           registrationCounter;
332   HTimFncUserNode        registrationTimer;
333   
334   //ser./deser. function
335   ORTETypeRegister       *typeRegister;
336   
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;
343 };
344
345 /**
346  * struct CSTReaderParams - 
347  */
348 typedef struct CSTReaderParams {
349   NtpTime                delayResponceTimeMin;
350   NtpTime                delayResponceTimeMax;
351   NtpTime                repeatActiveQueryTime;
352   Boolean                fullAcknowledge;
353   unsigned int           ACKMaxRetries;
354 } CSTReaderParams;
355
356 /**
357  * struct CSChangeFromWriter - 
358  */
359 typedef struct CSChangeFromWriter {
360   gavl_node_t            node;
361   CSChange               *csChange;
362   StateMachineChFWriter  commStateChFWriter;
363 } CSChangeFromWriter;
364
365 /**
366  * struct CSTRemoteWriter - 
367  */
368 typedef struct CSTRemoteWriter {
369   gavl_node_t            node;
370   CSTReader              *cstReader;
371   ObjectEntryOID         *spobject;   /* sender, physical object */
372   GUID_RTPS              guid;
373   
374   gavl_cust_root_field_t csChangeFromWriter;
375   unsigned int           csChangesCounter;
376   
377   SequenceNumber         sn;
378   SequenceNumber         firstSN;
379   SequenceNumber         lastSN;
380
381   //comm states
382   StateMachineACK        commStateACK;
383
384   //timing properties
385   HTimFncUserNode        delayResponceTimer;
386   HTimFncUserNode        repeatActiveQueryTimer;
387
388   unsigned int           ACKRetriesCounter;
389 } CSTRemoteWriter;
390
391 typedef struct CSTSubscriptions CSTSubscriptions;
392 /**
393  * struct CSTReader - 
394  */
395 struct CSTReader {
396   ORTEDomain             *domain;
397   gavl_node_t            node;
398   GUID_RTPS              guid;
399   ObjectEntryOID         *objectEntryOID;
400
401   CSTReaderParams        params;
402
403   ul_list_head_t         csChanges;
404   gavl_cust_root_field_t cstRemoteWriter;
405   unsigned int           cstRemoteWriterCounter;
406   pthread_rwlock_t       lock;
407   
408   //ser./deser. function
409   ORTETypeRegister       *typeRegister;
410   
411   //only for CSTSubcriptions
412   CSTRemoteWriter       *cstRemoteWriterSubscribed;
413   HTimFncUserNode        deadlineTimer;
414   HTimFncUserNode        persistenceTimer;
415
416   unsigned int           strictReliableCounter;
417   unsigned int           bestEffortsCounter;
418   
419   Boolean                createdByPattern;
420 };
421
422 /**
423  * struct CSTPublications - 
424  */
425 struct CSTPublications {
426   gavl_cust_root_field_t cstWriter;
427   pthread_rwlock_t       lock;        
428   uint32_t               counter;  
429 };
430   
431 /**
432  * struct CSTSubscriptions - 
433  */
434 struct CSTSubscriptions {
435   gavl_cust_root_field_t cstReader;
436   pthread_rwlock_t       lock;        
437   uint32_t               counter;  
438 };
439
440 /**
441  * struct PSEntry - 
442  */
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;        
448 } PSEntry ;
449   
450 /**
451  * struct ORTEDomain - 
452  */
453 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
458   
459   ////////////////////////////////////////////////////
460   //variables for tasks
461   TaskProp               taskRecvUnicastMetatraffic;
462   TaskProp               taskRecvMulticastMetatraffic;
463   TaskProp               taskRecvUnicastUserdata;
464   TaskProp               taskRecvMulticastUserdata;
465   TaskProp               taskSend;
466
467   ////////////////////////////////////////////////////
468   //databases
469   TypeEntry              typeEntry;    //db of types
470   ObjectEntry            objectEntry;  //Objects Tree
471   PSEntry                psEntry;      //lists of publ/subs
472   PatternEntry           patternEntry;
473
474   ORTEDomainProp         domainProp;
475   ORTEDomainAppEvents    domainEvents;
476   
477   ////////////////////////////////////////////////////
478   //information used by event system
479   ORTEAppInfo            appInfo;
480   ORTEPubInfo            pubInfo;
481   ORTESubInfo            subInfo;
482     
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
494
495   CSTPublications        publications;           //App
496   CSTSubscriptions       subscriptions;          //App
497 };
498
499 #ifdef __cplusplus
500 } /* extern "C"*/
501 #endif
502
503 #endif  /* _TYPEDEFS_H */
504