Merge pull request #2303 from jwillemsen/jwi-803
[ACE_TAO.git] / TAO / examples / Kokyu_dsrt_schedulers / EDF_Scheduler.h
blobdfd9e9d0a0143adfa9205be81841989e1015ba51
1 #ifndef EDF_SCHEDULER_H
2 #define EDF_SCHEDULER_H
4 #include "tao/RTScheduling/RTScheduler.h"
5 #include "EDF_SchedulingC.h"
6 #include "Kokyu/Kokyu_dsrt.h"
7 #include "Kokyu_dsrt_schedulers_export.h"
8 #include "tao/LocalObject.h"
9 #include "ace/Reactor.h"
10 #include "tao/ORB_Core.h"
12 struct EDF_Scheduler_Traits
14 typedef RTScheduling::Current::IdType Guid_t;
16 typedef TimeBase::TimeT Time_t;
18 struct _QoSDescriptor_t
20 typedef long Importance_t;
22 typedef TimeBase::TimeT Time_t;
24 Importance_t importance_;
25 Time_t deadline_;
26 Time_t period_;
27 int task_id_;
30 typedef _QoSDescriptor_t QoSDescriptor_t;
32 typedef Kokyu::EDF_Comparator<QoSDescriptor_t> QoSComparator_t;
34 class _Guid_Hash
36 public:
37 u_long operator () (const Guid_t& id)
39 return ACE::hash_pjw ((const char *) id.get_buffer (),
40 id.length ());
43 typedef _Guid_Hash Guid_Hash;
46 class Kokyu_DSRT_Schedulers_Export EDF_Sched_Param_Policy:
47 public EDF_Scheduling::SchedulingParameterPolicy,
48 public ::CORBA::LocalObject
50 public:
51 EDF_Scheduling::SchedulingParameter value ();
53 void value (const EDF_Scheduling::SchedulingParameter & value);
55 private:
56 EDF_Scheduling::SchedulingParameter value_;
59 class Kokyu_DSRT_Schedulers_Export EDF_Scheduler:
60 public EDF_Scheduling::Scheduler,
61 public ::CORBA::LocalObject
63 public:
64 EDF_Scheduler (CORBA::ORB_ptr orb,
65 Kokyu::DSRT_Dispatcher_Impl_t,
66 int ace_sched_policy,
67 int ace_sched_scope);
69 ~EDF_Scheduler ();
72 virtual EDF_Scheduling::SchedulingParameterPolicy_ptr
73 create_scheduling_parameter (const EDF_Scheduling::SchedulingParameter & value);
75 void shutdown ();
77 virtual void begin_new_scheduling_segment (const RTScheduling::Current::IdType & guid,
78 const char * name,
79 CORBA::Policy_ptr sched_param,
80 CORBA::Policy_ptr implicit_sched_param);
82 virtual void begin_nested_scheduling_segment (const RTScheduling::Current::IdType & guid,
83 const char * name,
84 CORBA::Policy_ptr sched_param,
85 CORBA::Policy_ptr implicit_sched_param);
87 virtual void update_scheduling_segment (const RTScheduling::Current::IdType & guid,
88 const char * name,
89 CORBA::Policy_ptr sched_param,
90 CORBA::Policy_ptr implicit_sched_param);
92 virtual void end_scheduling_segment (const RTScheduling::Current::IdType & guid,
93 const char * name);
95 virtual void end_nested_scheduling_segment (const RTScheduling::Current::IdType & guid,
96 const char * name,
97 CORBA::Policy_ptr outer_sched_param);
99 virtual void send_request (PortableInterceptor::ClientRequestInfo_ptr ri);
101 virtual void send_poll (PortableInterceptor::ClientRequestInfo_ptr ri);
103 virtual void receive_request (PortableInterceptor::ServerRequestInfo_ptr ri,
104 RTScheduling::Current::IdType_out guid,
105 CORBA::String_out name,
106 CORBA::Policy_out sched_param,
107 CORBA::Policy_out implicit_sched_param);
109 virtual void send_reply (PortableInterceptor::ServerRequestInfo_ptr ri);
111 virtual void send_exception (PortableInterceptor::ServerRequestInfo_ptr ri);
113 virtual void send_other (PortableInterceptor::ServerRequestInfo_ptr ri);
115 virtual void receive_reply (PortableInterceptor::ClientRequestInfo_ptr ri);
117 virtual void receive_exception (PortableInterceptor::ClientRequestInfo_ptr ri);
119 virtual void receive_other (PortableInterceptor::ClientRequestInfo_ptr ri);
121 virtual void cancel (const RTScheduling::Current::IdType & guid);
123 virtual CORBA::PolicyList * scheduling_policies ();
125 virtual void scheduling_policies (const CORBA::PolicyList & scheduling_policies);
127 virtual CORBA::PolicyList * poa_policies ();
129 virtual char * scheduling_discipline_name ();
131 virtual RTScheduling::ResourceManager_ptr create_resource_manager (const char * name,
132 CORBA::Policy_ptr scheduling_parameter);
134 virtual void set_scheduling_parameter (PortableServer::Servant & resource,
135 const char * name,
136 CORBA::Policy_ptr scheduling_parameter);
138 Kokyu::DSRT_Dispatcher_Factory<EDF_Scheduler_Traits>::DSRT_Dispatcher_Auto_Ptr
139 kokyu_dispatcher_;
140 private:
141 CORBA::ORB_var orb_;
142 IOP::Codec_var codec_;
143 RTScheduling::Current_var current_;
144 // Kokyu::DSRT_Dispatcher_Factory<EDF_Scheduler_Traits>::DSRT_Dispatcher_Auto_Ptr
145 // kokyu_dispatcher_;
146 Kokyu::DSRT_Dispatcher_Impl_t disp_impl_type_;
147 int ace_sched_policy_;
148 int ace_sched_scope_;
151 //extern int ID_BEGIN;
153 #endif //EDF_SCHEDULER_H