]> rtime.felk.cvut.cz Git - orte.git/blob - orte/include/typedefs.h
Get rid of strict-aliasing warnings
[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   union {
226     u_char               asStr[MAX_PARAMETER_LOCAL_LENGTH];
227     NtpTime              asNtpTime;
228     CORBA_unsigned_long  asLong;
229     VendorId             asVendorId;
230     ProtocolVersion      asProtocolVersion;
231     SequenceNumber       asSequenceNumber;
232     CORBA_octet          asOctet;
233     IPAddress            asIPAddress;
234     Port                 asPort;
235     uint32_t             asUInt32;
236     TypeChecksum         asTypeChecksum;
237   } parameterLocal;
238   u_char                 *parameter;
239 } ParameterSequence; 
240
241 /**
242  * struct CSChange - 
243  */
244 typedef struct CSChange {
245   ul_list_node_t         nodeList;
246   gavl_node_t            nodeGAVL;
247   SequenceNumber         sn;
248   GUID_RTPS              guid;
249   Boolean                alive;
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;
262 } CSChange; 
263
264 /**
265  * struct CSTWriterParams - 
266  */
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;
276 } CSTWriterParams;
277
278 /**
279  * struct CSChangeForReader - 
280  */
281 typedef struct CSChangeForReader {
282   gavl_node_t            node;
283   ul_list_node_t         participantNode;
284   CSTRemoteReader        *cstRemoteReader;
285   CSChange               *csChange;
286   StateMachineChFReader  commStateChFReader;
287   HTimFncUserNode        waitWhileDataUnderwayTimer;
288 } CSChangeForReader;
289
290 /**
291  * struct CSTRemoteReader - 
292  */
293 struct CSTRemoteReader {
294   gavl_node_t            node;
295   CSTWriter              *cstWriter;
296   ObjectEntryOID         *sobject; /* to send object */
297   ObjectEntryOID         *pobject; /* physical object (for multicast is differnet than sobject) */
298   GUID_RTPS              guid;
299   
300   gavl_cust_root_field_t csChangeForReader;
301   unsigned int           csChangesCounter;
302
303   //comm states
304   StateMachineHB         commStateHB;
305   StateMachineSend       commStateSend;
306   unsigned int           commStateToSentCounter;
307
308   //timing properties
309   HTimFncUserNode        delayResponceTimer;
310   HTimFncUserNode        repeatAnnounceTimer;
311
312   unsigned int           HBRetriesCounter;
313   
314   NtpTime                lastSentIssueTime;
315   
316   //multicast
317   ul_list_node_t         multicastNode; //connected into objectEntryOID
318 };
319
320 typedef struct CSTPublications CSTPublications;
321 /**
322  * struct CSTWriter - 
323  */
324 struct CSTWriter {
325   ORTEDomain             *domain;
326   gavl_node_t            node;
327   GUID_RTPS              guid;
328   ObjectEntryOID         *objectEntryOID;
329
330   SequenceNumber         firstSN;
331   SequenceNumber         lastSN;
332
333   CSTWriterParams        params;
334
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;
340
341   HTimFncUserNode        refreshPeriodTimer;
342
343   unsigned int           registrationCounter;
344   HTimFncUserNode        registrationTimer;
345   
346   //ser./deser. function
347   ORTETypeRegister       *typeRegister;
348   
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;
355 };
356
357 /**
358  * struct CSTReaderParams - 
359  */
360 typedef struct CSTReaderParams {
361   NtpTime                delayResponceTimeMin;
362   NtpTime                delayResponceTimeMax;
363   NtpTime                repeatActiveQueryTime;
364   Boolean                fullAcknowledge;
365   unsigned int           ACKMaxRetries;
366 } CSTReaderParams;
367
368 /**
369  * struct CSChangeFromWriter - 
370  */
371 typedef struct CSChangeFromWriter {
372   gavl_node_t            node;
373   CSChange               *csChange;
374   StateMachineChFWriter  commStateChFWriter;
375 } CSChangeFromWriter;
376
377 /**
378  * struct CSTRemoteWriter - 
379  */
380 typedef struct CSTRemoteWriter {
381   gavl_node_t            node;
382   CSTReader              *cstReader;
383   ObjectEntryOID         *spobject;   /* sender, physical object */
384   GUID_RTPS              guid;
385   
386   gavl_cust_root_field_t csChangeFromWriter;
387   unsigned int           csChangesCounter;
388   
389   SequenceNumber         sn;
390   SequenceNumber         firstSN;
391   SequenceNumber         lastSN;
392
393   //comm states
394   StateMachineACK        commStateACK;
395
396   //timing properties
397   HTimFncUserNode        delayResponceTimer;
398   HTimFncUserNode        repeatActiveQueryTimer;
399
400   unsigned int           ACKRetriesCounter;
401 } CSTRemoteWriter;
402
403 typedef struct CSTSubscriptions CSTSubscriptions;
404 /**
405  * struct CSTReader - 
406  */
407 struct CSTReader {
408   ORTEDomain             *domain;
409   gavl_node_t            node;
410   GUID_RTPS              guid;
411   ObjectEntryOID         *objectEntryOID;
412
413   CSTReaderParams        params;
414
415   ul_list_head_t         csChanges;
416   gavl_cust_root_field_t cstRemoteWriter;
417   unsigned int           cstRemoteWriterCounter;
418   pthread_rwlock_t       lock;
419   
420   //ser./deser. function
421   ORTETypeRegister       *typeRegister;
422   
423   //only for CSTSubcriptions
424   CSTRemoteWriter       *cstRemoteWriterSubscribed;
425   HTimFncUserNode        deadlineTimer;
426   HTimFncUserNode        persistenceTimer;
427
428   unsigned int           strictReliableCounter;
429   unsigned int           bestEffortsCounter;
430   
431   Boolean                createdByPattern;
432 };
433
434 /**
435  * struct CSTPublications - 
436  */
437 struct CSTPublications {
438   gavl_cust_root_field_t cstWriter;
439   pthread_rwlock_t       lock;        
440   uint32_t               counter;  
441 };
442   
443 /**
444  * struct CSTSubscriptions - 
445  */
446 struct CSTSubscriptions {
447   gavl_cust_root_field_t cstReader;
448   pthread_rwlock_t       lock;        
449   uint32_t               counter;  
450 };
451
452 /**
453  * struct PSEntry - 
454  */
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;        
460 } PSEntry ;
461   
462 /**
463  * struct ORTEDomain - 
464  */
465 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
470   
471   ////////////////////////////////////////////////////
472   //variables for tasks
473   TaskProp               taskRecvUnicastMetatraffic;
474   TaskProp               taskRecvMulticastMetatraffic;
475   TaskProp               taskRecvUnicastUserdata;
476   TaskProp               taskRecvMulticastUserdata;
477   TaskProp               taskSend;
478
479   ////////////////////////////////////////////////////
480   //databases
481   TypeEntry              typeEntry;    //db of types
482   ObjectEntry            objectEntry;  //Objects Tree
483   PSEntry                psEntry;      //lists of publ/subs
484   PatternEntry           patternEntry;
485
486   ORTEDomainProp         domainProp;
487   ORTEDomainAppEvents    domainEvents;
488   
489   ////////////////////////////////////////////////////
490   //information used by event system
491   ORTEAppInfo            appInfo;
492   ORTEPubInfo            pubInfo;
493   ORTESubInfo            subInfo;
494     
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
506
507   CSTPublications        publications;           //App
508   CSTSubscriptions       subscriptions;          //App
509 };
510
511 #ifdef __cplusplus
512 } /* extern "C"*/
513 #endif
514
515 #endif  /* _TYPEDEFS_H */
516