]> rtime.felk.cvut.cz Git - orte.git/blob - orte/include/typedefs.h
New ORTE version 0.3.0 committed
[orte.git] / orte / include / typedefs.h
1 /*
2  *  $Id: typedefs.h,v 0.0.0.1           2003/08/21 
3  *
4  *  AUTHOR: Petr Smolik                 petr.smolik@wo.cz
5  *
6  *  ORTE - OCERA Real-Time Ethernet     http://www.ocera.org/
7  *  --------------------------------------------------------------------
8  *
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.
13  *  
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.
18  *  
19  */
20
21 #ifndef _TYPEDEFS_H
22 #define _TYPEDEFS_H
23
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27
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; 
35
36 /**
37  * struct sock_t - 
38  */
39 typedef struct sock_t {
40   int         fd;
41   uint16_t    port;
42 } sock_t;
43
44 /**
45  * struct  - MessageBuffer
46  */
47 typedef struct MessageBuffer {
48   CDR_Codec              cdrCodec;
49   CDR_Codec              *cdrCodecDirect;
50   Boolean                needSend;
51   Boolean                containsInfoReply;
52 } MessageBuffer;
53 /**
54  * struct TaskProp - 
55  */
56 typedef struct TaskProp {
57   sock_t                 sock;
58   pthread_t              thread;
59   Boolean                terminate;
60   MessageBuffer          mb;
61   ORTEDomain             *d;
62 } TaskProp;
63
64
65 /**
66  * struct typeEntry - 
67  */
68 typedef struct TypeEntry {
69   gavl_cust_root_field_t types;        //Types
70   pthread_rwlock_t       lock;
71 } TypeEntry;
72
73 /**
74  * struct typeNode - 
75  */
76 typedef struct TypeNode {
77   gavl_node_t            node;
78   ORTETypeRegister       typeRegister;
79 } TypeNode;
80
81 /**
82  * struct PatternsNode - 
83  */
84 typedef struct PatternNode {
85   ul_list_node_t         node;
86   PathName               topic;
87   TypeName               type;
88   ORTESubscriptionPatternCallBack subscriptionCallBack;
89   void                   *param;
90 } PatternNode;
91
92 /**
93  * struct PatternEntry - 
94  */
95 typedef struct PatternEntry {
96   ul_list_head_t         patterns;
97   ORTEPatternCheck       check;
98   ORTEPatternMatch       match;
99   void                   *param;
100   pthread_rwlock_t       lock;
101 } PatternEntry;
102   
103 /**
104  * struct AppParams - Manager & ManagedApplication
105  */
106 typedef struct AppParams {
107   HostId                 hostId;
108   AppId                  appId;
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;
117   VendorId               vendorId;
118   ProtocolVersion        protocolVersion;
119   NtpTime                expirationTime;
120   SequenceNumber         vargAppsSequenceNumber;    //useful only for manager
121 } AppParams;
122
123 typedef void EVH1(ORTEDomain *,ObjectEntryAID *,ul_htim_time_t *);
124 /**
125  * struct HTimFncRootNode - 
126  */
127 typedef struct HTimFncRootNode {
128   ul_htim_node_t        htim;
129   const char            *name;
130   EVH1                  *func;
131   ObjectEntryAID        *objectEntryAID;
132 } HTimFncRootNode;
133
134 /**
135  * struct HTimNode - 
136  */
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
144 } HTimNode;
145
146 /**
147  * struct HTimFncUserNode - 
148  */
149 typedef int EVH2(ORTEDomain *,void *);
150 typedef struct HTimFncUserNode {
151   ul_htim_node_t        htim;
152   const char            *name;
153   pthread_rwlock_t      *lock; //when a func share params, lock is called before call the func
154   EVH2                  *func;
155   void                  *arg1;
156 } HTimFncUserNode;
157
158 /**
159  * struct ObjectEntry - Tree of objects
160  */
161 struct ObjectEntryOID{
162   gavl_node_t            oidNode;
163   ObjectId               oid;
164   GUID_RTPS              guid;         //for easy access to guid
165   //Object
166   ObjectEntryAID         *objectEntryAID;
167   ObjectEntryHID         *objectEntryHID;
168   void                   *attributes;  //atributes of object
169   Boolean                appMOM;
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;
176   void                   *callBackParam;
177   NtpTime                sendCallBackDelay;
178   HTimFncUserNode        sendCallBackDelayTimer;
179   //only for list of publishers or subscribers
180   gavl_node_t            psNode;
181   //multicast
182   ul_list_head_t         multicastRemoteReaders;
183   int                    multicastPort;
184 };
185 struct ObjectEntryAID {
186   gavl_node_t            aidNode;
187   AppId                  aid;
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
192 };
193 struct ObjectEntryHID{
194   gavl_node_t            hidNode;
195   HostId                 hid;
196   gavl_cust_root_field_t aidRoot;
197 };
198 struct ObjectEntry{
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;
207 };
208
209 /**
210  * struct ParameterSequence - 
211  */
212 typedef struct ParameterSequence {
213   ul_list_node_t         node;
214   ParameterId            parameterID;
215   ParameterLength        parameterLength;
216   u_char                 parameterLocal[MAX_PARAMETER_LOCAL_LENGTH];
217   u_char                 *parameter;
218 } ParameterSequence; 
219
220 /**
221  * struct CSChange - 
222  */
223 typedef struct CSChange {
224   ul_list_node_t         nodeList;
225   gavl_node_t            nodeGAVL;
226   SequenceNumber         sn;
227   GUID_RTPS              guid;
228   Boolean                alive;
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;
241 } CSChange; 
242
243 /**
244  * struct CSTWriterParams - 
245  */
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;
255 } CSTWriterParams;
256
257 /**
258  * struct CSChangeForReader - 
259  */
260 typedef struct CSChangeForReader {
261   gavl_node_t            node;
262   ul_list_node_t         participantNode;
263   CSTRemoteReader        *cstRemoteReader;
264   CSChange               *csChange;
265   StateMachineChFReader  commStateChFReader;
266   HTimFncUserNode        waitWhileDataUnderwayTimer;
267 } CSChangeForReader;
268
269 /**
270  * struct CSTRemoteReader - 
271  */
272 struct CSTRemoteReader {
273   gavl_node_t            node;
274   CSTWriter              *cstWriter;
275   ObjectEntryOID         *sobject; /* to send object */
276   ObjectEntryOID         *pobject; /* physical object (for multicast is differnet than sobject) */
277   GUID_RTPS              guid;
278   
279   gavl_cust_root_field_t csChangeForReader;
280   unsigned int           csChangesCounter;
281
282   //comm states
283   StateMachineHB         commStateHB;
284   StateMachineSend       commStateSend;
285   unsigned int           commStateToSentCounter;
286
287   //timing properties
288   HTimFncUserNode        delayResponceTimer;
289   HTimFncUserNode        repeatAnnounceTimer;
290
291   unsigned int           HBRetriesCounter;
292   
293   NtpTime                lastSentIssueTime;
294   
295   //multicast
296   ul_list_node_t         multicastNode; //connected into objectEntryOID
297 };
298
299 typedef struct CSTPublications CSTPublications;
300 /**
301  * struct CSTWriter - 
302  */
303 struct CSTWriter {
304   ORTEDomain             *domain;
305   gavl_node_t            node;
306   GUID_RTPS              guid;
307   ObjectEntryOID         *objectEntryOID;
308
309   SequenceNumber         firstSN;
310   SequenceNumber         lastSN;
311
312   CSTWriterParams        params;
313
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;
319
320   HTimFncUserNode        refreshPeriodTimer;
321
322   unsigned int           registrationCounter;
323   HTimFncUserNode        registrationTimer;
324   
325   //ser./deser. function
326   ORTETypeRegister       *typeRegister;
327   
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;
334 };
335
336 /**
337  * struct CSTReaderParams - 
338  */
339 typedef struct CSTReaderParams {
340   NtpTime                delayResponceTimeMin;
341   NtpTime                delayResponceTimeMax;
342   NtpTime                repeatActiveQueryTime;
343   Boolean                fullAcknowledge;
344   unsigned int           ACKMaxRetries;
345 } CSTReaderParams;
346
347 /**
348  * struct CSChangeFromWriter - 
349  */
350 typedef struct CSChangeFromWriter {
351   gavl_node_t            node;
352   CSChange               *csChange;
353   StateMachineChFWriter  commStateChFWriter;
354 } CSChangeFromWriter;
355
356 /**
357  * struct CSTRemoteWriter - 
358  */
359 typedef struct CSTRemoteWriter {
360   gavl_node_t            node;
361   CSTReader              *cstReader;
362   ObjectEntryOID         *spobject;   /* sender, physical object */
363   GUID_RTPS              guid;
364   
365   gavl_cust_root_field_t csChangeFromWriter;
366   unsigned int           csChangesCounter;
367   
368   SequenceNumber         sn;
369   SequenceNumber         firstSN;
370   SequenceNumber         lastSN;
371
372   //comm states
373   StateMachineACK        commStateACK;
374
375   //timing properties
376   HTimFncUserNode        delayResponceTimer;
377   HTimFncUserNode        repeatActiveQueryTimer;
378
379   unsigned int           ACKRetriesCounter;
380 } CSTRemoteWriter;
381
382 typedef struct CSTSubscriptions CSTSubscriptions;
383 /**
384  * struct CSTReader - 
385  */
386 struct CSTReader {
387   ORTEDomain             *domain;
388   gavl_node_t            node;
389   GUID_RTPS              guid;
390   ObjectEntryOID         *objectEntryOID;
391
392   CSTReaderParams        params;
393
394   ul_list_head_t         csChanges;
395   gavl_cust_root_field_t cstRemoteWriter;
396   unsigned int           cstRemoteWriterCounter;
397   pthread_rwlock_t       lock;
398   
399   //ser./deser. function
400   ORTETypeRegister       *typeRegister;
401   
402   //only for CSTSubcriptions
403   CSTRemoteWriter       *cstRemoteWriterSubscribed;
404   HTimFncUserNode        deadlineTimer;
405   HTimFncUserNode        persistenceTimer;
406
407   unsigned int           strictReliableCounter;
408   unsigned int           bestEffortsCounter;
409   
410   Boolean                createdByPattern;
411 };
412
413 /**
414  * struct CSTPublications - 
415  */
416 struct CSTPublications {
417   gavl_cust_root_field_t cstWriter;
418   pthread_rwlock_t       lock;        
419   uint32_t               counter;  
420 };
421   
422 /**
423  * struct CSTSubscriptions - 
424  */
425 struct CSTSubscriptions {
426   gavl_cust_root_field_t cstReader;
427   pthread_rwlock_t       lock;        
428   uint32_t               counter;  
429 };
430
431 /**
432  * struct PSEntry - 
433  */
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;        
439 } PSEntry ;
440   
441 /**
442  * struct ORTEDomain - 
443  */
444 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
449   
450   ////////////////////////////////////////////////////
451   //variables for tasks
452   TaskProp               taskRecvUnicastMetatraffic;
453   TaskProp               taskRecvMulticastMetatraffic;
454   TaskProp               taskRecvUnicastUserdata;
455   TaskProp               taskRecvMulticastUserdata;
456   TaskProp               taskSend;
457
458   ////////////////////////////////////////////////////
459   //databases
460   TypeEntry              typeEntry;    //db of types
461   ObjectEntry            objectEntry;  //Objects Tree
462   PSEntry                psEntry;      //lists of publ/subs
463   PatternEntry           patternEntry;
464
465   ORTEDomainProp         domainProp;
466   ORTEDomainAppEvents    domainEvents;
467   
468   ////////////////////////////////////////////////////
469   //information used by event system
470   ORTEAppInfo            appInfo;
471   ORTEPubInfo            pubInfo;
472   ORTESubInfo            subInfo;
473     
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
485
486   CSTPublications        publications;           //App
487   CSTSubscriptions       subscriptions;          //App
488 };
489
490 #ifdef __cplusplus
491 } /* extern "C"*/
492 #endif
493
494 #endif  /* _TYPEDEFS_H */
495