]> rtime.felk.cvut.cz Git - orte.git/blob - orte/include/typedefs.h
version 0.2.2 (mac, solaris patch)
[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   uint16_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                privateCreated;  //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_cond_t         htimSendCond; //for wake up
196   pthread_mutex_t        htimSendMutex;
197   int                    htimSendCondValue;
198   Boolean                htimNeedWakeUp;
199 };
200
201 /**
202  * struct ParameterSequence - 
203  */
204 typedef struct ParameterSequence {
205   ul_list_node_t         node;
206   ParameterId            parameterID;
207   ParameterLength        parameterLength;
208   u_char                 parameterLocal[MAX_PARAMETER_LOCAL_LENGTH];
209   u_char                 *parameter;
210 } ParameterSequence; 
211
212 /**
213  * struct CSChange - 
214  */
215 typedef struct CSChange {
216   ul_list_node_t         nodeList;
217   gavl_node_t            nodeGAVL;
218   SequenceNumber         sn;
219   GUID_RTPS              guid;
220   Boolean                alive;
221   SequenceNumber         gapSN;  //>0 means sn is in GAP
222                                  // 1 - sn is gap, 2 - sn,sn+1 are gaps, ...
223   ul_list_head_t         attributes;
224   ORTECDRStream          cdrStream; //for issue
225   //how many times was a cstRemoteWriter acknowledged
226   int                    remoteReaderCount;
227   int                    remoteReaderBest;
228   int                    remoteReaderStrict;
229   //receiving informations
230   NtpTime                remoteTimePublished;
231   NtpTime                localTimeReceived;
232 } CSChange; 
233
234 /**
235  * struct CSTWriterParams - 
236  */
237 typedef struct CSTWriterParams {
238   NtpTime                waitWhileDataUnderwayTime;
239   NtpTime                repeatAnnounceTime;
240   NtpTime                delayResponceTime;
241   NtpTime                refreshPeriod;
242   unsigned int           HBMaxRetries;
243   Boolean                fullAcknowledge;
244 } CSTWriterParams;
245
246 /**
247  * struct CSChangeForReader - 
248  */
249 typedef struct CSChangeForReader {
250   gavl_node_t            node;
251   CSChange               *csChange;
252   StateMachineChFReader  commStateChFReader;
253   HTimFncUserNode        waitWhileDataUnderwayTimer;
254 } CSChangeForReader;
255
256 /**
257  * struct CSTRemoteReader - 
258  */
259 typedef struct CSTRemoteReader {
260   gavl_node_t            node;
261   CSTWriter              *cstWriter;
262   ObjectEntryOID         *objectEntryOID;
263   GUID_RTPS              guid;
264   
265   gavl_cust_root_field_t csChangeForReader;
266   unsigned int           csChangesCounter;
267
268   //comm states
269   StateMachineHB         commStateHB;
270   StateMachineSend       commStateSend;
271
272   //timing properties
273   HTimFncUserNode        delayResponceTimer;
274   HTimFncUserNode        repeatAnnounceTimer;
275
276   unsigned int           HBRetriesCounter;
277   
278   NtpTime                lastSentIssueTime;
279 } CSTRemoteReader;
280
281 typedef struct CSTPublications CSTPublications;
282 /**
283  * struct CSTWriter - 
284  */
285 struct CSTWriter {
286   ORTEDomain             *domain;
287   gavl_node_t            node;
288   GUID_RTPS              guid;
289   ObjectEntryOID         *objectEntryOID;
290
291   SequenceNumber         firstSN;
292   SequenceNumber         lastSN;
293
294   CSTWriterParams        params;
295
296   ul_list_head_t         csChanges;
297   unsigned int           csChangesCounter;
298   gavl_cust_root_field_t cstRemoteReader;
299   unsigned int           cstRemoteReaderCounter;
300   pthread_rwlock_t       lock;
301
302   HTimFncUserNode        refreshPeriodTimer;
303   
304   //ser./deser. function
305   ORTETypeRegister       *typeRegister;
306   
307   //only for CSTPublications
308   unsigned int           strictReliableCounter;
309   unsigned int           bestEffortsCounter;
310   pthread_cond_t         condCSChangeDestroyed; //for wake up
311   pthread_mutex_t        mutexCSChangeDestroyed;
312   int                    condValueCSChangeDestroyed;
313 };
314
315 /**
316  * struct CSTReaderParams - 
317  */
318 typedef struct CSTReaderParams {
319   NtpTime                delayResponceTimeMin;
320   NtpTime                delayResponceTimeMax;
321   NtpTime                repeatActiveQueryTime;
322   Boolean                fullAcknowledge;
323   unsigned int           ACKMaxRetries;
324 } CSTReaderParams;
325
326 /**
327  * struct CSChangeFromWriter - 
328  */
329 typedef struct CSChangeFromWriter {
330   gavl_node_t            node;
331   CSChange               *csChange;
332   StateMachineChFWriter  commStateChFWriter;
333 } CSChangeFromWriter;
334
335 /**
336  * struct CSTRemoteWriter - 
337  */
338 typedef struct CSTRemoteWriter {
339   gavl_node_t            node;
340   CSTReader              *cstReader;
341   ObjectEntryOID         *objectEntryOID;
342   GUID_RTPS              guid;
343   
344   gavl_cust_root_field_t csChangeFromWriter;
345   unsigned int           csChangesCounter;
346   
347   SequenceNumber         sn;
348   SequenceNumber         firstSN;
349   SequenceNumber         lastSN;
350
351   //comm states
352   StateMachineACK        commStateACK;
353
354   //timing properties
355   HTimFncUserNode        delayResponceTimer;
356   HTimFncUserNode        repeatActiveQueryTimer;
357
358   unsigned int           ACKRetriesCounter;
359 } CSTRemoteWriter;
360
361 typedef struct CSTSubscriptions CSTSubscriptions;
362 /**
363  * struct CSTReader - 
364  */
365 struct CSTReader {
366   ORTEDomain             *domain;
367   gavl_node_t            node;
368   GUID_RTPS              guid;
369   ObjectEntryOID         *objectEntryOID;
370
371   CSTReaderParams        params;
372
373   ul_list_head_t         csChanges;
374   gavl_cust_root_field_t cstRemoteWriter;
375   unsigned int           cstRemoteWriterCounter;
376   pthread_rwlock_t       lock;
377   
378   //ser./deser. function
379   ORTETypeRegister       *typeRegister;
380   
381   //only for CSTSubcriptions
382   CSTRemoteWriter       *cstRemoteWriterSubscribed;
383   HTimFncUserNode        deadlineTimer;
384   HTimFncUserNode        persistenceTimer;
385
386   unsigned int           strictReliableCounter;
387   unsigned int           bestEffortsCounter;
388   
389   Boolean                createdByPattern;
390 };
391
392 /**
393  * struct CSTPublications - 
394  */
395 struct CSTPublications {
396   gavl_cust_root_field_t cstWriter;
397   pthread_rwlock_t       lock;        
398   uint32_t               counter;  
399 };
400   
401 /**
402  * struct CSTSubscriptions - 
403  */
404 struct CSTSubscriptions {
405   gavl_cust_root_field_t cstReader;
406   pthread_rwlock_t       lock;        
407   uint32_t               counter;  
408 };
409
410 /**
411  * struct PSEntry - 
412  */
413 typedef struct PSEntry {
414   gavl_cust_root_field_t publications;
415   pthread_rwlock_t       publicationsLock;        
416   gavl_cust_root_field_t subscriptions;
417   pthread_rwlock_t       subscriptionsLock;        
418 } PSEntry ;
419   
420 /**
421  * struct ORTEDomain - 
422  */
423 struct ORTEDomain {
424   uint32_t               domain;      //domain value
425   GUID_RTPS              guid;        //guid of self application
426   AppParams              *appParams;  //self parameters (share from objectEntry)
427   ObjectEntryOID         *objectEntryOID;//entry point for self OID
428   
429   ////////////////////////////////////////////////////
430   //variables for tasks
431   TaskProp               taskRecvMetatraffic;
432   MessageBuffer          mbRecvMetatraffic;
433   TaskProp               taskSend;
434   MessageBuffer          mbSend;
435   TaskProp               taskRecvUserdata;
436   MessageBuffer          mbRecvUserdata;
437
438   ////////////////////////////////////////////////////
439   //databases
440   TypeEntry              typeEntry;    //db of types
441   ObjectEntry            objectEntry;  //Objects Tree
442   PSEntry                psEntry;      //lists of publ/subs
443   PatternEntry           patternEntry;
444
445   ORTEDomainProp         domainProp;
446   ORTEDomainAppEvents    domainEvents;
447   
448   ////////////////////////////////////////////////////
449   //information used by event system
450   ORTEAppInfo            appInfo;
451   ORTEPubInfo            pubInfo;
452   ORTESubInfo            subInfo;
453     
454   ////////////////////////////////////////////////////
455   //communication objects 
456   CSTWriter              writerApplicationSelf;  //Manager,App
457   CSTReader              readerManagers;         //Manager,App
458   CSTReader              readerApplications;     //Manager,App
459   CSTWriter              writerManagers;         //Manager
460   CSTWriter              writerApplications;     //Manager
461   CSTWriter              writerPublications;     //App
462   CSTReader              readerPublications;     //App
463   CSTWriter              writerSubscriptions;    //App
464   CSTReader              readerSubscriptions;    //App
465
466   CSTPublications        publications;           //App
467   CSTSubscriptions       subscriptions;          //App
468 };
469
470 #ifdef __cplusplus
471 } /* extern "C"*/
472 #endif
473
474 #endif  /* _TYPEDEFS_H */
475