2 * robomon_orte.cpp 07/10/31
4 * Collection of functions to manage ORTE stuffs.
6 * Copyright: (c) 2007 DCE Eurobot Dragon Team
7 * CTU FEE - Department of Control Engineering
8 * Authors: Martin Zidek, Michal Sojka, Tran Duy Khanh
13 #ifdef CONFIG_ORTE_RTL
14 #include <linux/module.h>
15 #include <posix/pthread.h>
16 #define printf rtl_printf
17 #elif defined CONFIG_ORTE_RTAI
18 #include <linux/module.h>
19 #include <rtai/compat.h>
20 #define printf rt_printk
25 #include <RobotType.h>
26 #include <RobotTypeArr.h>
27 #include <QCoreApplication>
29 #include "robomon_orte.h"
31 int robomon_orte_init(void *arg, struct orte_data *data)
34 ORTEVerbositySetOptions("ALL.0");
35 data->orteDomain = ORTEDomainAppCreate(ORTE_DEFAULT_DOMAIN,
36 NULL, NULL, ORTE_FALSE);
38 if (!data->orteDomain) {
39 printf("ORTEDomainAppCreate failed!\n");
46 /* ----------------------------------------------------------------------
48 * ---------------------------------------------------------------------- */
49 void sendMotorCallBack(const ORTESendInfo *info,
50 void *vinstance, void *arg)
52 struct motionSpeed_type *instance = (struct motionSpeed_type *)vinstance;
54 switch (info->status) {
57 case CQL: /* criticalQueueLevel */
62 void createMotorPublisher(void *arg, struct orte_data *data)
64 NtpTime persistence, delay;
66 motionSpeed_type_register(data->orteDomain);
67 NTPTIME_BUILD(persistence, 3);
68 NTPTIME_BUILD(delay, 1);
70 data->publisherMotor = ORTEPublicationCreate(
71 data->orteDomain, "motor", "motionSpeed",
72 &data->orteMotionSpeed, &persistence, 1,
73 sendMotorCallBack, NULL, &delay);
76 void sendServoCallBack(const ORTESendInfo *info,
77 void *vinstance, void *arg)
79 struct stateServa_type *instance = (struct stateServa_type *)vinstance;
81 switch (info->status) {
84 case CQL: /* criticalQueueLevel */
89 void createServoPublisher(void *arg, struct orte_data *data)
91 NtpTime persistence, delay;
93 stateServa_type_register(data->orteDomain);
94 NTPTIME_BUILD(persistence, 3);
95 NTPTIME_BUILD(delay, 1);
97 data->publisherServos = ORTEPublicationCreate(
98 data->orteDomain, "serva", "stateServa",
99 &data->orteServosStatus, &persistence, 1,
100 sendServoCallBack, arg, &delay);
103 void sendSharpLongsCallBack(const ORTESendInfo *info,
104 void *vinstance, void *arg)
106 struct sharpLongs_type *instance = (struct sharpLongs_type*)vinstance;
108 switch (info->status) {
111 case CQL: /* criticalQueueLevel */
116 void createSharpLongsPublisher(void *arg, struct orte_data *data)
118 NtpTime persistence, delay;
120 sharpLongs_type_register(data->orteDomain);
121 NTPTIME_BUILD(persistence, 3);
122 NTPTIME_BUILD(delay, 1);
124 data->publisherSharpLong = ORTEPublicationCreate(
125 data->orteDomain, "sharpSouper", "sharpLongs",
126 &data->orteSharpOpponent, &persistence, 2,
127 sendSharpLongsCallBack, NULL, &delay);
130 void sendSharpShortsCallBack(const ORTESendInfo *info,
131 void *vinstance, void *arg)
133 struct sharpShorts_type *instance = (struct sharpShorts_type*)vinstance;
135 switch (info->status) {
138 case CQL: /* criticalQueueLevel */
143 void createSharpShortsPublisher(void *arg, struct orte_data *data)
145 NtpTime persistence, delay;
147 sharpShorts_type_register(data->orteDomain);
148 NTPTIME_BUILD(persistence, 3);
149 NTPTIME_BUILD(delay, 1);
151 data->publisherSharpShort = ORTEPublicationCreate(
152 data->orteDomain, "sharpLahve", "sharpShorts",
153 &data->orteSharpWaste, &persistence, 2,
154 sendSharpShortsCallBack, NULL, &delay);
157 void createDOPublisher(void *arg, struct orte_data *data)
159 NtpTime persistence, delay;
161 ORTETypeRegisterAdd(data->orteDomain, "DOMsg", NULL, NULL,
162 NULL, sizeof(data->stateDO));
163 NTPTIME_BUILD(persistence, 3);
164 NTPTIME_BUILD(delay, 1);
166 data->publisherDO = ORTEPublicationCreate(
167 data->orteDomain, "DO", "DOMsg", &data->stateDO,
168 &persistence, 1, NULL, NULL, &delay);
171 void sendPowerControlCallBack(const ORTESendInfo *info,
172 void *vinstance, void *arg)
174 struct pwr_ctrl_type *instance =
175 (struct pwr_ctrl_type *)vinstance;
177 switch (info->status) {
180 case CQL: /* criticalQueueLevel */
185 void createPowerControlPublisher(void *arg, struct orte_data *data)
187 NtpTime persistence, delay;
189 pwr_ctrl_type_register(data->orteDomain);
190 NTPTIME_BUILD(persistence, 3);
191 NTPTIME_BUILD(delay, 1);
193 data->publisherPowerControl = ORTEPublicationCreate(
194 data->orteDomain, "pwr_ctrl", "pwr_ctrl",
195 &data->ortePowerControl, &persistence, 1,
196 sendPowerControlCallBack, NULL, &delay);
199 /* ----------------------------------------------------------------------
201 * ---------------------------------------------------------------------- */
202 void receiveMotionStatusCallBack(const ORTERecvInfo *info,
203 void *vinstance, void *arg)
205 switch (info->status) {
207 POST_QEVENT(arg, QEV_MOTION_STATUS);
210 printf("motion status deadline occurred\n");
215 void createMotionStatusSubscriber(void *arg, struct orte_data *data)
218 NtpTime deadline,minimumSeparation;
220 motionStatus_type_register(data->orteDomain);
221 NTPTIME_BUILD(deadline, 10);
222 NTPTIME_BUILD(minimumSeparation, 0);
224 s = ORTESubscriptionCreate(
225 data->orteDomain, IMMEDIATE, BEST_EFFORTS,
226 "motion_status", "motionStatus",
227 &data->orteMotionStatus, &deadline,
228 &minimumSeparation, receiveMotionStatusCallBack,
229 arg, IPADDRESS_INVALID);
232 void receiveActualPositionCallBack(const ORTERecvInfo *info,
233 void *vinstance, void *arg)
235 switch (info->status) {
237 POST_QEVENT(arg, QEV_ACTUAL_POSITION);
240 printf("pos deadline occurred\n");
245 void createActualPositionSubscriber(void *arg, struct orte_data *data)
248 NtpTime deadline, minimumSeparation;
250 position_type_register(data->orteDomain);
251 NTPTIME_BUILD(deadline,10);
252 NTPTIME_BUILD(minimumSeparation,0);
254 s = ORTESubscriptionCreate(
255 data->orteDomain, IMMEDIATE, BEST_EFFORTS,
256 "pos", "position", &data->orteActPos, &deadline,
257 &minimumSeparation, receiveActualPositionCallBack,
258 arg, IPADDRESS_INVALID);
261 void receiveEstimatedPositionCallBack(const ORTERecvInfo *info,
262 void *vinstance, void *arg)
264 switch (info->status) {
266 POST_QEVENT(arg, QEV_ESTIMATED_POSITION);
269 printf("est_pos deadline occurred\n");
274 void createEstimatedPositionSubscriber(void *arg, struct orte_data *data)
277 NtpTime deadline,minimumSeparation;
279 position_type_register(data->orteDomain);
280 NTPTIME_BUILD(deadline, 10);
281 NTPTIME_BUILD(minimumSeparation, 0);
283 s = ORTESubscriptionCreate(
284 data->orteDomain, IMMEDIATE, BEST_EFFORTS,
285 "est_pos", "position", &data->orteEstPos,
286 &deadline, &minimumSeparation,
287 receiveEstimatedPositionCallBack, arg,
291 void receiveSharpLongsCallBack(const ORTERecvInfo *info,
292 void *vinstance, void *arg)
294 switch (info->status) {
296 POST_QEVENT(arg, QEV_SHARP_LONGS);
299 printf("sharp1 deadline occurred\n");
303 void createSharpLongsSubscriber(void *arg, struct orte_data *data)
306 NtpTime deadline,minimumSeparation;
308 sharpLongs_type_register(data->orteDomain);
309 NTPTIME_BUILD(deadline, 10);
310 NTPTIME_BUILD(minimumSeparation, 0);
311 s = ORTESubscriptionCreate(
312 data->orteDomain, IMMEDIATE, BEST_EFFORTS,
313 "sharpSouper", "sharpLongs", &data->orteSharpLongs, //FIXME
314 &deadline, &minimumSeparation,
315 receiveSharpLongsCallBack, arg, IPADDRESS_INVALID);
318 void receiveSharpShortsCallBack(const ORTERecvInfo *info,
319 void *vinstance, void *arg)
321 switch (info->status) {
323 POST_QEVENT(arg, QEV_SHARP_SHORTS);
326 printf("sharp2 deadline occurred\n");
331 void createSharpShortsSubscriber(void *arg, struct orte_data *data)
334 NtpTime deadline, minimumSeparation;
336 sharpShorts_type_register(data->orteDomain);
337 NTPTIME_BUILD(deadline, 10);
338 NTPTIME_BUILD(minimumSeparation, 0);
340 s = ORTESubscriptionCreate(
341 data->orteDomain, IMMEDIATE, BEST_EFFORTS,
342 "sharpLahve", "sharpShorts", &data->orteSharpShorts,
343 &deadline, &minimumSeparation,
344 receiveSharpShortsCallBack, arg, IPADDRESS_INVALID);
347 void receiveIRCallBack(const ORTERecvInfo *info,
348 void *vinstance, void *arg)
350 switch (info->status) {
352 POST_QEVENT(arg, QEV_IR);
355 printf("IR deadline occurred\n");
360 void createIRSubscriber(void *arg, struct orte_data *data)
363 NtpTime deadline, minimumSeparation;
365 stateInnerIR_type_register(data->orteDomain);
366 NTPTIME_BUILD(deadline, 10);
367 NTPTIME_BUILD(minimumSeparation, 0);
369 s = ORTESubscriptionCreate(
370 data->orteDomain, IMMEDIATE, BEST_EFFORTS,
371 "IR", "stateInnerIR", &data->orteStateInnerIR,
372 &deadline, &minimumSeparation, receiveIRCallBack,
373 arg, IPADDRESS_INVALID);
376 void receiveDICallBack(const ORTERecvInfo *info,
377 void *vinstance, void *arg)
379 switch (info->status) {
381 POST_QEVENT(arg, QEV_DI);
384 printf("DI deadline occurred\n");
389 void createDISubscriber(void *arg, struct orte_data *data)
392 NtpTime deadline, minimumSeparation;
394 stateDigIn_type_register(data->orteDomain);
395 NTPTIME_BUILD(deadline, 10);
396 NTPTIME_BUILD(minimumSeparation, 0);
398 s = ORTESubscriptionCreate(
399 data->orteDomain, IMMEDIATE, BEST_EFFORTS, "DI",
400 "stateDigIn", &data->orteStateDI, &deadline,
401 &minimumSeparation, receiveDICallBack,
402 arg, IPADDRESS_INVALID);
405 void receiveLaserCallBack(const ORTERecvInfo *info,
406 void *vinstance, void *arg)
408 switch (info->status) {
410 POST_QEVENT(arg, QEV_LASER);
413 printf("laser deadline occurred\n");
418 void createLaserSubscriber(void *arg, struct orte_data *data)
421 NtpTime deadline, minimumSeparation;
423 laserData_type_register(data->orteDomain);
424 NTPTIME_BUILD(deadline, 10);
425 NTPTIME_BUILD(minimumSeparation, 0);
427 s = ORTESubscriptionCreate(
428 data->orteDomain, IMMEDIATE, BEST_EFFORTS,
429 "laser", "laserData", &data->orteLaserData,
430 &deadline, &minimumSeparation, receiveLaserCallBack,
431 arg, IPADDRESS_INVALID);
434 void receiveAccelerometerCallBack(const ORTERecvInfo *info,
435 void *vinstance, void *arg)
437 unsigned int *instance = (unsigned int *)vinstance;
439 switch (info->status) {
441 printf("accel: %d, %d, %d\n",
443 instance[1]>>16,instance[2]>>16);
444 POST_QEVENT(arg, QEV_ACCELEROMETER);
447 printf("accel deadline occurred\n");
452 void createAccelerometerSubscriber(void *arg, struct orte_data *data)
455 NtpTime deadline,minimumSeparation;
457 ORTETypeRegisterAdd(data->orteDomain, "AccelMsg", NULL, NULL,
458 NULL, sizeof(data->accelRecv));
459 NTPTIME_BUILD(deadline, 10);
460 NTPTIME_BUILD(minimumSeparation, 0);
462 s = ORTESubscriptionCreate(
463 data->orteDomain, IMMEDIATE, BEST_EFFORTS, "accel",
464 "AccelMsg", &data->accelRecv, &deadline,
465 &minimumSeparation, receiveAccelerometerCallBack,
466 arg, IPADDRESS_INVALID);
469 void receiveAccumulatorCallBack(const ORTERecvInfo *info,
470 void *vinstance, void *arg)
472 switch (info->status) {
474 POST_QEVENT(arg, QEV_ACCUMULATOR);
477 printf("accu deadline occurred\n");
482 void createAccumulatorSubscriber(void *arg, struct orte_data *data)
485 NtpTime deadline, minimumSeparation;
487 accumulator_type_register(data->orteDomain);
488 NTPTIME_BUILD(deadline, 10);
489 NTPTIME_BUILD(minimumSeparation, 0);
491 s = ORTESubscriptionCreate(
492 data->orteDomain, IMMEDIATE, BEST_EFFORTS,
493 "accu", "accumulator", &data->orteAccumulator,
494 &deadline, &minimumSeparation,
495 receiveAccumulatorCallBack, arg, IPADDRESS_INVALID);
498 void receivePowerVoltageCallBack(const ORTERecvInfo *info,
499 void *vinstance, void *arg)
501 switch (info->status) {
503 //printf("voltage: %2.2f\n",);
504 POST_QEVENT(arg, QEV_POWER_VOLTAGE);
507 printf("pwr_act_volts deadline occurred\n");
512 void createPowerVoltageSubscriber(void *arg, struct orte_data *data)
515 NtpTime deadline, minimumSeparation;
517 pwr_act_volts_type_register(data->orteDomain);
518 NTPTIME_BUILD(deadline, 10);
519 NTPTIME_BUILD(minimumSeparation, 0);
521 s = ORTESubscriptionCreate(
522 data->orteDomain, IMMEDIATE, BEST_EFFORTS,
523 "pwr_voltage", "pwr_act_volts",
524 &data->ortePowerVoltage, &deadline, &minimumSeparation,
525 receivePowerVoltageCallBack, arg, IPADDRESS_INVALID);