1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
// $Id$
#include "EC_Kokyu_Scheduling.h"
#include "EC_QOS_Info.h"
#include "EC_ProxyConsumer.h"
#include "EC_ProxySupplier.h"
#include "EC_Supplier_Filter.h"
#if ! defined (__ACE_INLINE__)
#include "EC_Kokyu_Scheduling.i"
#endif /* __ACE_INLINE__ */
ACE_RCSID(Event, EC_Kokyu_Scheduling, "$Id$")
TAO_EC_Kokyu_Scheduling::~TAO_EC_Kokyu_Scheduling (void)
{
}
void
TAO_EC_Kokyu_Scheduling::add_proxy_supplier_dependencies (
TAO_EC_ProxyPushSupplier *supplier,
TAO_EC_ProxyPushConsumer *consumer
ACE_ENV_ARG_DECL)
{
const RtecEventChannelAdmin::SupplierQOS& qos =
consumer->publications ();
for (CORBA::ULong i = 0; i < qos.publications.length (); ++i)
{
const RtecEventComm::EventHeader &header =
qos.publications[i].event.header;
TAO_EC_QOS_Info qos_info;
qos_info.rt_info = qos.publications[i].dependency_info.rt_info;
RtecScheduler::OS_Priority os_priority;
RtecScheduler::Preemption_Subpriority_t p_subpriority;
RtecScheduler::Preemption_Priority_t p_priority;
this->scheduler_->priority (qos_info.rt_info,
os_priority,
p_subpriority,
p_priority
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
qos_info.preemption_priority = p_priority;
supplier->add_dependencies (header, qos_info ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
}
void
TAO_EC_Kokyu_Scheduling::schedule_event (const RtecEventComm::EventSet &event,
TAO_EC_ProxyPushConsumer *consumer,
TAO_EC_Supplier_Filter *filter
ACE_ENV_ARG_DECL)
{
RtecEventChannelAdmin::SupplierQOS qos =
consumer->publications ();
for (CORBA::ULong j = 0; j != event.length (); ++j)
{
const RtecEventComm::Event& e = event[j];
RtecEventComm::Event* buffer =
const_cast<RtecEventComm::Event*> (&e);
RtecEventComm::EventSet single_event (1, 1, buffer, 0);
TAO_EC_QOS_Info qos_info;
for (CORBA::ULong i = 0; i != qos.publications.length (); ++i)
{
const RtecEventComm::EventHeader &qos_header =
qos.publications[i].event.header;
if (TAO_EC_Filter::matches (e.header, qos_header) == 0)
continue;
qos_info.rt_info = qos.publications[i].dependency_info.rt_info;
RtecScheduler::OS_Priority os_priority;
RtecScheduler::Preemption_Subpriority_t p_subpriority;
RtecScheduler::Preemption_Priority_t p_priority;
this->scheduler_->priority (qos_info.rt_info,
os_priority,
p_subpriority,
p_priority
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
qos_info.preemption_priority = p_priority;
}
filter->push_scheduled_event (single_event, qos_info
ACE_ENV_ARG_PARAMETER);
ACE_CHECK;
}
}
|