]> rtime.felk.cvut.cz Git - orte.git/blob - orte/examples/hello/h_subscriber.c
Reformat the sources with orte/uncrustify script
[orte.git] / orte / examples / hello / h_subscriber.c
1 /*
2  *  $Id: h_subscriber.c,v 0.0.1.0       2005/01/03
3  *
4  *  DEBUG:  section                     h_subscriber
5  *
6  *  -------------------------------------------------------------------
7  *                                ORTE
8  *                      Open Real-Time Ethernet
9  *
10  *                      Copyright (C) 2001-2006
11  *  Department of Control Engineering FEE CTU Prague, Czech Republic
12  *                      http://dce.felk.cvut.cz
13  *                      http://www.ocera.org
14  *
15  *  Author:              Petr Smolik    petr@smoliku.cz
16  *  Advisor:             Pavel Pisa
17  *  Project Responsible: Zdenek Hanzalek
18  *  --------------------------------------------------------------------
19  *
20  *  This program is free software; you can redistribute it and/or modify
21  *  it under the terms of the GNU General Public License as published by
22  *  the Free Software Foundation; either version 2 of the License, or
23  *  (at your option) any later version.
24  *
25  *  This program is distributed in the hope that it will be useful,
26  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
27  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
28  *  GNU General Public License for more details.
29  *
30  */
31 #include "orte.h"
32 #ifdef CONFIG_ORTE_RTL
33   #include <linux/module.h>
34   #include <posix/pthread.h>
35   #define printf rtl_printf
36 #elif defined CONFIG_ORTE_RTAI
37   #include <linux/module.h>
38   #include <rtai/compat.h>
39   #define printf rt_printk
40 #else
41   #include <stdio.h>
42 #endif
43
44 #ifdef MAIN_RENAMED
45 #define main orte_h_subscriber_main
46 #define exit return
47 #endif
48
49 static ORTEDomain        *d = NULL;
50 static char              instance2Recv[64];
51
52 static void
53 recvCallBack(const ORTERecvInfo *info, void *vinstance, void *recvCallBackParam)
54 {
55   char *instance = (char *)vinstance;
56
57   switch (info->status) {
58     case NEW_DATA:
59       printf("%s\n", instance);
60       break;
61     case DEADLINE:
62       printf("deadline occurred\n");
63       break;
64   }
65 }
66
67
68 static void *
69 subscriberCreate(void *arg)
70 {
71   ORTESubscription    *s;
72   NtpTime             deadline, minimumSeparation;
73
74   ORTETypeRegisterAdd(d, "HelloMsg", NULL, NULL, NULL, sizeof(instance2Recv));
75   NTPTIME_BUILD(deadline, 10);
76   NTPTIME_BUILD(minimumSeparation, 0);
77   s = ORTESubscriptionCreate(
78     d,
79     IMMEDIATE,
80     BEST_EFFORTS,
81     "Example HelloMsg",
82     "HelloMsg",
83     &instance2Recv,
84     &deadline,
85     &minimumSeparation,
86     recvCallBack,
87     NULL,
88     IPADDRESS_INVALID);
89   if (s == NULL) {
90     printf("ORTESubscriptionCreate failed\n");
91   }
92   return arg;
93 }
94
95
96 #ifndef CONFIG_ORTE_RT
97
98 int
99 main(int argc, char *args[])
100 {
101   ORTEInit();
102   ORTEVerbositySetOptions("ALL.10");
103   d = ORTEDomainAppCreate(ORTE_DEFAULT_DOMAIN, NULL, NULL, ORTE_FALSE);
104   if (!d) {
105     printf("ORTEDomainAppCreate failed!\n");
106     return 0;
107   }
108   subscriberCreate(NULL);
109   while (1)
110     ORTESleepMs(1000);
111   return 0;
112 }
113
114 #else
115 char *verbosity = "";
116 MODULE_PARM(verbosity, "1s");
117 MODULE_PARM_DESC(verbosity, "set verbosity level SECTION, up to LEVEL:...");
118 char *manager = "127.0.0.1";
119 MODULE_PARM(manager, "s");
120 MODULE_PARM_DESC(manager, "IP address of local manager");
121 MODULE_LICENSE("GPL");
122 pthread_t thread;
123
124 void *
125 domainInit(void *arg)
126 {
127   ORTEDomainProp dp;
128
129   ORTEDomainPropDefaultGet(&dp);
130   ORTEVerbositySetOptions(verbosity);
131   dp.appLocalManager = StringToIPAddress(manager);
132   d = ORTEDomainAppCreate(ORTE_DEFAULT_DOMAIN, &dp, NULL, ORTE_TRUE);
133   return arg;
134 }
135
136 void *
137 domainDestroy(void *arg)
138 {
139   if (!d)
140     return NULL;
141   ORTEDomainAppDestroy(d);
142   return arg;
143 }
144
145 int
146 init_module(void)
147 {
148   ORTEInit();
149   pthread_create(&thread, NULL, &domainInit, NULL);  //allocate resources in RT
150   pthread_join(thread, NULL);
151   if (d) {
152     ORTEDomainStart(d, ORTE_TRUE, ORTE_FALSE, ORTE_TRUE, ORTE_FALSE, ORTE_TRUE); //application start
153     if (pthread_create(&thread, NULL, &subscriberCreate, NULL) != 0)
154       printf("pthread_create failed!\n");
155   } else
156     printf("ORTEDomainAppCreate failed!\n");
157   return 0;
158 }
159
160
161 void
162 cleanup_module(void)
163 {
164   if (!d)
165     return;
166   pthread_join(thread, NULL);
167   pthread_create(&thread, NULL, &domainDestroy, NULL);
168   pthread_join(thread, NULL);
169 }
170
171 #endif /* ifndef CONFIG_ORTE_RT */