]> rtime.felk.cvut.cz Git - orte.git/blob - orte/examples/hello/HelloWorldSubscriber.c
ORTEDomainAppDestroy bug, Win32 improvements
[orte.git] / orte / examples / hello / HelloWorldSubscriber.c
1 /*
2  *  $Id: HelloWorldSubscriber.c,v 0.0.0.1 2003/12/26
3  *
4  *  DEBUG:  section                     HelloWorldSubscriber
5  *  AUTHOR: Petr Smolik                 petr.smolik@wo.cz
6  *
7  *  ORTE - OCERA Real-Time Ethernet     http://www.ocera.org/
8  *  --------------------------------------------------------------------
9  *
10  *  This program is free software; you can redistribute it and/or modify
11  *  it under the terms of the GNU General Public License as published by
12  *  the Free Software Foundation; either version 2 of the License, or
13  *  (at your option) any later version.
14  *
15  *  This program is distributed in the hope that it will be useful,
16  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  *  GNU General Public License for more details.
19  *
20  */
21 #include "orte_api.h"
22 #ifdef CONFIG_ORTE_RTL
23   #include <linux/module.h>
24   #include <posix/pthread.h>
25   #define printf rtl_printf
26 #elif defined CONFIG_ORTE_RTAI
27   #include <linux/module.h>
28   #include <rtai/compat.h>  
29   #define printf rt_printk
30 #else
31   #include <stdio.h>
32 #endif
33
34
35 ORTEDomain        *d = NULL;
36 char              instance2Recv[64];
37
38 void
39 recvCallBack(const ORTERecvInfo *info,void *vinstance, void *recvCallBackParam) {
40   char *instance=(char*)vinstance;
41
42   switch (info->status) {
43     case NEW_DATA:
44       printf("%s\n",instance);
45       break;
46     case DEADLINE:
47       printf("deadline occured\n");
48       break;
49   }
50 }
51
52
53 void *
54 subscriberCreate(void *arg) {
55   ORTESubscription    *s;
56   NtpTime             deadline,minimumSeparation;
57
58   ORTETypeRegisterAdd(d,"HelloMsg",NULL,NULL,64);
59   NTPTIME_BUILD(deadline,10);
60   NTPTIME_BUILD(minimumSeparation,0);
61   s=ORTESubscriptionCreate(
62        d,
63        IMMEDIATE,
64        BEST_EFFORTS,
65        "Example HelloMsg",
66        "HelloMsg",
67        &instance2Recv,
68        &deadline,
69        &minimumSeparation,
70        recvCallBack,
71        NULL);
72   return arg;
73 }
74
75
76 #ifndef CONFIG_ORTE_RT
77
78 int
79 main(int argc, char *args[]) {
80   ORTEInit();
81   d=ORTEDomainAppCreate(ORTE_DEFAULT_DOMAIN,NULL,NULL,ORTE_FALSE);
82   if (!d) {
83     printf("ORTEDomainAppCreate failed!\n");
84     return 0;
85   }
86   subscriberCreate(NULL);
87   while (1)
88     ORTESleepMs(1000);
89   return 0;
90 }
91
92 #else
93
94 char manager[MAX_STRING_IPADDRESS_LENGTH]="127.0.0.1";
95 MODULE_PARM(manager,"s");
96 MODULE_PARM_DESC(manager,"IP address of local manager");
97 MODULE_LICENSE("GPL");
98 pthread_t thread;
99
100 void *
101 domainDestroy(void *arg) {
102   if (!d) return NULL;
103   ORTEDomainAppDestroy(d);
104   return arg;
105 }
106
107 int
108 init_module(void) {
109   ORTEDomainProp      dp;
110
111   ORTEInit();
112   ORTEDomainPropDefaultGet(&dp);
113   //ORTEVerbositySetOptions("ALL,10");  
114   dp.appLocalManager=StringToIPAddress(manager);
115   d=ORTEDomainAppCreate(ORTE_DEFAULT_DOMAIN,&dp,NULL,ORTE_FALSE);
116   if (d) 
117     pthread_create(&thread,NULL,&subscriberCreate,NULL);
118   else
119     printf("ORTEDomainAppCreate failed!\n");
120   return 0;
121 }
122
123
124 void
125 cleanup_module(void) {
126   if (!d) return;
127   pthread_join(thread,NULL);
128   pthread_create(&thread,NULL,&domainDestroy,NULL);
129   pthread_join(thread,NULL);
130 }
131
132 #endif
133
134
135
136
137
138