]> rtime.felk.cvut.cz Git - orte.git/blob - orte/include/typedefs.h
Update of ORTE. Configured to compile for Linux out of box.
[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 CSTReader CSTReader;               
30 typedef struct ObjectEntryOID ObjectEntryOID;
31 typedef struct ObjectEntryHID ObjectEntryHID;
32 typedef struct ObjectEntryAID ObjectEntryAID;
33 typedef struct ObjectEntry ObjectEntry; 
34
35 /**
36  * struct sock_t - 
37  */
38 typedef struct sock_t {
39   int         fd;
40   u_int16_t   port;
41 } sock_t;
42
43 /**
44  * struct  - MessageBuffer
45  */
46 typedef struct MessageBuffer {
47   ORTECDRStream          cdrStream;
48   ORTECDRStream          *cdrStreamDirect;
49   Boolean                needSend;
50   Boolean                containsInfoReply;
51 } MessageBuffer;
52 /**
53  * struct TaskProp - 
54  */
55 typedef struct TaskProp {
56   sock_t                 sock;
57   pthread_t              thread;
58   Boolean                terminate;
59 } TaskProp;
60
61
62 /**
63  * struct typeEntry - 
64  */
65 typedef struct TypeEntry {
66   gavl_cust_root_field_t types;        //Types
67   pthread_rwlock_t       lock;
68 } TypeEntry;
69
70 /**
71  * struct typeNode - 
72  */
73 typedef struct TypeNode {
74   gavl_node_t            node;
75   ORTETypeRegister       typeRegister;
76 } TypeNode;
77
78 /**
79  * struct PatternsNode - 
80  */
81 typedef struct PatternNode {
82   ul_list_node_t         node;
83   PathName               topic;
84   TypeName               type;
85   ORTESubscriptionPatternCallBack subscriptionCallBack;
86   void                   *param;
87 } PatternNode;
88
89 /**
90  * struct PatternEntry - 
91  */
92 typedef struct PatternEntry {
93   ul_list_head_t         patterns;
94   ORTEPatternCheck       check;
95   ORTEPatternMatch       match;
96   void                   *param;
97   pthread_rwlock_t       lock;
98 } PatternEntry;
99   
100 /**
101  * struct AppParams - Manager & ManagedApplication
102  */
103 typedef struct AppParams {
104   HostId                 hostId;
105   AppId                  appId;
106   IPAddress              unicastIPAddressList[MAX_INTERFACES];
107   unsigned char          unicastIPAddressCount;
108   IPAddress              metatrafficMulticastIPAddressList[MAX_INTERFACES];
109   unsigned char          metatrafficMulticastIPAddressCount;
110   IPAddress              managerKeyList[MAX_INTERFACES];//useful only for manager
111   unsigned char          managerKeyCount;           //useful only for manager
112   Port                   metatrafficUnicastPort;
113   Port                   userdataUnicastPort;
114   VendorId               vendorId;
115   ProtocolVersion        protocolVersion;
116   NtpTime                expirationTime;
117   SequenceNumber         vargAppsSequenceNumber;    //useful only for manager
118 } AppParams;
119
120 typedef void EVH1(ORTEDomain *,ObjectEntryAID *,ul_htim_time_t *);
121 /**
122  * struct HTimFncRootNode - 
123  */
124 typedef struct HTimFncRootNode {
125   ul_htim_node_t        htim;
126   const char            *name;
127   EVH1                  *func;
128   ObjectEntryAID        *objectEntryAID;
129 } HTimFncRootNode;
130
131 /**
132  * struct HTimNode - 
133  */
134 typedef struct HTimNode {
135   ul_htim_queue_t        common;              //timing queue for a timer function  
136   HTimFncRootNode        commonNode;          //root node
137   ul_htim_queue_t        sendMetatraffic;     //timing queue for sendMetatraffic
138   HTimFncRootNode        sendMetatrafficNode; //root node
139   ul_htim_queue_t        sendUserData;        //timing queue for sendUserData
140   HTimFncRootNode        sendUserDataNode;    //root node
141 } HTimNode;
142
143 /**
144  * struct HTimFncUserNode - 
145  */
146 typedef int EVH2(ORTEDomain *,void *);
147 typedef struct HTimFncUserNode {
148   ul_htim_node_t        htim;
149   const char            *name;
150   pthread_rwlock_t      *lock; //when func share params, lock is called before call the func
151   EVH2                  *func;
152   void                  *arg1;
153 } HTimFncUserNode;
154
155 /**
156  * struct ObjectEntry - Tree of objects
157  */
158 struct ObjectEntryOID{
159   gavl_node_t            oidNode;
160   ObjectId               oid;
161   GUID_RTPS              guid;         //for easy access to guid
162   //Object
163   ObjectEntryAID         *objectEntryAID;
164   ObjectEntryHID         *objectEntryHID;
165   void                   *attributes;  //atributes of object
166   Boolean                appMOM;
167   Boolean                private;      //object created by me self app
168   HTimFncUserNode              expirationPurgeTimer;
169   //only for private CSTPublication,CSTSubscription
170   void                   *instance;    //data stream
171   ORTERecvCallBack       recvCallBack;
172   ORTESendCallBack       sendCallBack;
173   void                   *callBackParam;
174   NtpTime                sendCallBackDelay;
175   HTimFncUserNode              sendCallBackDelayTimer;
176   //only for list of publishers or subscribers
177   gavl_node_t            psNode;
178 };
179 struct ObjectEntryAID {
180   gavl_node_t            aidNode;
181   AppId                  aid;
182   HTimNode               htimUnicast;  //parameters for Unicast
183   gavl_cust_root_field_t oidRoot;
184 };
185 struct ObjectEntryHID{
186   gavl_node_t            hidNode;
187   HostId                 hid;
188   gavl_cust_root_field_t aidRoot;
189 };
190 struct ObjectEntry{
191   gavl_cust_root_field_t objRoot;     //root of tree objects
192   pthread_rwlock_t       objRootLock;
193   ul_htim_queue_t        htimRoot;     //root of tree htimers
194   pthread_rwlock_t       htimRootLock;
195   pthread_mutex_t        htimSendMutex; //for wake up
196   Boolean                htimNeedWakeUp;
197 };
198
199 /**
200  * struct ParameterSequence - 
201  */
202 typedef struct ParameterSequence {
203   ul_list_node_t         node;
204   ParameterId            parameterID;
205   ParameterLength        parameterLength;
206   u_char                 parameterLocal[MAX_PARAMETER_LOCAL_LENGTH];
207   u_char                 *parameter;
208 } ParameterSequence; 
209
210 /**
211  * struct CSChange - 
212  */
213 typedef struct CSChange {
214   ul_list_node_t         nodeList;
215   gavl_node_t            nodeGAVL;
216   SequenceNumber         sn;
217   GUID_RTPS              guid;
218   Boolean                alive;
219   SequenceNumber         gapSN;  //>0 means sn is in GAP
220                                  // 1 - sn is gap, 2 - sn,sn+1 are gaps, ...
221   ul_list_head_t         attributes;
222   ORTECDRStream          cdrStream; //for issue
223   //how many times was a cstRemoteWriter acknowledged
224   int                    remoteReaderCount;
225   int                    remoteReaderProcBest;
226   int                    remoteReaderProcStrict;
227   //receiving informations
228   NtpTime                remoteTimePublished;
229   NtpTime                localTimeReceived;
230 } CSChange; 
231
232 /**
233  * struct CSTWriterParams - 
234  */
235 typedef struct CSTWriterParams {
236   NtpTime                waitWhileDataUnderwayTime;
237   NtpTime                repeatAnnounceTime;
238   NtpTime                delayResponceTime;
239   NtpTime                refreshPeriod;
240   unsigned int           HBMaxRetries;
241   Boolean                fullAcknowledge;
242 } CSTWriterParams;
243
244 /**
245  * struct CSChangeForReader - 
246  */
247 typedef struct CSChangeForReader {
248   gavl_node_t            node;
249   CSChange               *csChange;
250   StateMachineChFReader  commStateChFReader;
251   HTimFncUserNode        waitWhileDataUnderwayTimer;
252 } CSChangeForReader;
253
254 /**
255  * struct CSTRemoteReader - 
256  */
257 typedef struct CSTRemoteReader {
258   gavl_node_t            node;
259   CSTWriter              *cstWriter;
260   ObjectEntryOID         *objectEntryOID;
261   GUID_RTPS              guid;
262   
263   gavl_cust_root_field_t csChangeForReader;
264   int                    csChangesCounter;
265
266   //comm states
267   StateMachineHB         commStateHB;
268   StateMachineSend       commStateSend;
269
270   //timing properties
271   HTimFncUserNode        delayResponceTimer;
272   HTimFncUserNode        repeatAnnounceTimer;
273
274   unsigned int           HBRetriesCounter;
275   
276   NtpTime                lastSentIssueTime;
277 } CSTRemoteReader;
278
279 typedef struct CSTPublications CSTPublications;
280 /**
281  * struct CSTWriter - 
282  */
283 struct CSTWriter {
284   ORTEDomain             *domain;
285   gavl_node_t            node;
286   GUID_RTPS              guid;
287   ObjectEntryOID         *objectEntryOID;
288
289   SequenceNumber         firstSN;
290   SequenceNumber         lastSN;
291
292   CSTWriterParams        params;
293
294   ul_list_head_t         csChanges;
295   int                    csChangesCounter;
296   gavl_cust_root_field_t cstRemoteReader;
297   int                    cstRemoteReaderCounter;
298   pthread_rwlock_t       lock;
299
300   HTimFncUserNode        refreshPeriodTimer;
301   
302   //ser./deser. function
303   ORTETypeRegister       *typeRegister;
304   
305   //only for CSTPublications
306   unsigned int           strictReliableCounter;
307   unsigned int           bestEffortsCounter;
308   pthread_mutex_t        mutexCSChangeDestroyed;
309 };
310
311 /**
312  * struct CSTReaderParams - 
313  */
314 typedef struct CSTReaderParams {
315   NtpTime                delayResponceTimeMin;
316   NtpTime                delayResponceTimeMax;
317   NtpTime                repeatActiveQueryTime;
318   Boolean                fullAcknowledge;
319   unsigned int           ACKMaxRetries;
320 } CSTReaderParams;
321
322 /**
323  * struct CSChangeFromWriter - 
324  */
325 typedef struct CSChangeFromWriter {
326   gavl_node_t            node;
327   CSChange               *csChange;
328   StateMachineChFWriter  commStateChFWriter;
329 } CSChangeFromWriter;
330
331 /**
332  * struct CSTRemoteWriter - 
333  */
334 typedef struct CSTRemoteWriter {
335   gavl_node_t            node;
336   CSTReader              *cstReader;
337   ObjectEntryOID         *objectEntryOID;
338   GUID_RTPS              guid;
339   
340   gavl_cust_root_field_t csChangeFromWriter;
341   int                    csChangesCounter;
342   
343   SequenceNumber         sn;
344   SequenceNumber         firstSN;
345   SequenceNumber         lastSN;
346
347   //comm states
348   StateMachineACK        commStateACK;
349
350   //timing properties
351   HTimFncUserNode        delayResponceTimer;
352   HTimFncUserNode        repeatActiveQueryTimer;
353
354   int                    ACKRetriesCounter;
355 } CSTRemoteWriter;
356
357 typedef struct CSTSubscriptions CSTSubscriptions;
358 /**
359  * struct CSTReader - 
360  */
361 struct CSTReader {
362   ORTEDomain             *domain;
363   gavl_node_t            node;
364   GUID_RTPS              guid;
365   ObjectEntryOID         *objectEntryOID;
366
367   CSTReaderParams        params;
368
369   ul_list_head_t         csChanges;
370   gavl_cust_root_field_t cstRemoteWriter;
371   int                    cstRemoteWriterCounter;
372   pthread_rwlock_t       lock;
373   
374   //ser./deser. function
375   ORTETypeRegister       *typeRegister;
376   
377   //only for CSTSubcriptions
378   CSTRemoteWriter       *cstRemoteWriterSubscribed;
379   HTimFncUserNode        deadlineTimer;
380   HTimFncUserNode        persistenceTimer;
381
382   unsigned int           strictReliableCounter;
383   unsigned int           bestEffortsCounter;
384   
385   Boolean                createdByPattern;
386 };
387
388 /**
389  * struct CSTPublications - 
390  */
391 struct CSTPublications {
392   gavl_cust_root_field_t cstWriter;
393   pthread_rwlock_t       lock;        
394   u_int32_t              counter;  
395 };
396   
397 /**
398  * struct CSTSubscriptions - 
399  */
400 struct CSTSubscriptions {
401   gavl_cust_root_field_t cstReader;
402   pthread_rwlock_t       lock;        
403   u_int32_t              counter;  
404 };
405
406 /**
407  * struct PSEntry - 
408  */
409 typedef struct PSEntry {
410   gavl_cust_root_field_t publications;
411   pthread_rwlock_t       publicationsLock;        
412   gavl_cust_root_field_t subscriptions;
413   pthread_rwlock_t       subscriptionsLock;        
414 } PSEntry ;
415   
416 /**
417  * struct ORTEDomain - 
418  */
419 struct ORTEDomain {
420   u_int32_t              domain;      //domain value
421   GUID_RTPS              guid;        //guid of self application
422   AppParams              *appParams;  //self parameters (share from objectEntry)
423   ObjectEntryOID         *objectEntryOID;//entry point for self OID
424   
425   ////////////////////////////////////////////////////
426   //variables for tasks
427   TaskProp               taskRecvMetatraffic;
428   MessageBuffer          mbRecvMetatraffic;
429   TaskProp               taskSend;
430   MessageBuffer          mbSend;
431   TaskProp               taskRecvUserdata;
432   MessageBuffer          mbRecvUserdata;
433
434   ////////////////////////////////////////////////////
435   //databases
436   TypeEntry              typeEntry;    //db of types
437   ObjectEntry            objectEntry;  //Objects Tree
438   PSEntry                psEntry;      //lists of publ/subs
439   PatternEntry           patternEntry;
440
441   ORTEDomainProp         domainProp;
442   ORTEDomainAppEvents    domainEvents;
443   
444   ////////////////////////////////////////////////////
445   //information used by event system
446   ORTEAppInfo            appInfo;
447   ORTEPubInfo            pubInfo;
448   ORTESubInfo            subInfo;
449   
450   ////////////////////////////////////////////////////
451   //default properties for a Publication and Subscription
452   ORTEPublProp           publPropDefault;
453   ORTESubsProp           subsPropDefault;
454   
455   ////////////////////////////////////////////////////
456   //communication objects 
457   CSTWriter              writerApplicationSelf;  //Manager,App
458   CSTReader              readerManagers;         //Manager,App
459   CSTReader              readerApplications;     //Manager,App
460   CSTWriter              writerManagers;         //Manager
461   CSTWriter              writerApplications;     //Manager
462   CSTWriter              writerPublications;     //App
463   CSTReader              readerPublications;     //App
464   CSTWriter              writerSubscriptions;    //App
465   CSTReader              readerSubscriptions;    //App
466
467   CSTPublications        publications;           //App
468   CSTSubscriptions       subscriptions;          //App
469 };
470
471 #ifdef __cplusplus
472 } /* extern "C"*/
473 #endif
474
475 #endif  /* _TYPEDEFS_H */
476