00001
#ifndef RWENUM_IMPL_H
00002
#define RWENUM_IMPL_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
#ifndef __cplusplus
00018
#error This is a C++ include file and cannot be used from plain C
00019
#endif
00020
00021
#include <baciDB.h>
00022
#include <logging.h>
00023
#include <baciROpattern.h>
00024
#include <baciRecovery.h>
00025
#include <enumpropAlarm.h>
00026
#include <baciErrTypeProperty.h>
00027
#include <baciCharacteristicModelImpl.h>
00028
00029 #define HISTORY_SIZE 32
00030
00031
00032 #define ACS_ENUM_T(T) T, T##CB, T##Seq, T##Seq_out, T##Alarm
00033 #define ACS_ENUM_C class T, class TCB, class TSeq, class TSeq_out, class TAlarm, class SK
00034
00037
template <ACS_ENUM_C>
00038 class RWEnumImpl:
public virtual PortableServer::
RefCountServantBase,
00039
public SK,
00040
public baci::CharacteristicModelImpl,
00041
public baci::PropertyImplementator,
00042
public baci::ActionImplementator
00043 {
00044
00045
public:
00046
00047
00053
RWEnumImpl(
const ACE_CString&
name,
baci::BACIComponent *cob,
DevIO<T> *devIO=0,
bool flagdeldevIO=
false);
00054
00058
virtual ~RWEnumImpl();
00059
00066 virtual int initialization() {
return initialization_m; }
00067
00072 CORBA::Object_ptr
getCORBAReference()
const
00073
{
00074
return reference_mp;
00075 }
00076
00080 baci::BACIProperty*
getProperty()
const
00081
{
00082
return property_mp;
00083 }
00084
00088 DevIO<T>*
getDevIO()
const
00089
{
00090
return devIO_mp;
00091 }
00092
00099
virtual void destroy();
00100
00101
00102
00103
00104
virtual baci::ActionRequest
getValueAction(
baci::BACIComponent* cob,
const int& callbackID,
00105
const CBDescIn& descIn,
baci::BACIValue* value,
00106
Completion& completion,
CBDescOut& descOut);
00107
00108
00109
00110
00111
virtual baci::ActionRequest
setValueAction(
baci::BACIComponent* cob,
const int& callbackID,
00112
const CBDescIn& descIn,
baci::BACIValue* value,
00113
Completion& completion,
CBDescOut& descOut);
00114
00115
00116
00134
virtual baci::ActionRequest
invokeAction(
int function,
00135
baci::BACIComponent* cob,
const int& callbackID,
00136
const CBDescIn& descIn,
baci::BACIValue* value,
00137
Completion& completion,
CBDescOut& descOut);
00138
00139
00140
00148
virtual void getValue(
baci::BACIProperty* property,
00149
baci::BACIValue* value,
00150
Completion &completion,
00151
CBDescOut& descOut);
00152
00153
00154
00163
virtual void setValue(
baci::BACIProperty* property,
00164
baci::BACIValue* value,
00165
Completion &completion,
00166
CBDescOut& descOut);
00167
00168
00169
00170
00171
00172
00173
00174
virtual char *
name (
00175
00176 );
00177
00178
00179
00180
00181
00182
00183
00184
00185
00186
00187
00188
00189
00190
00191
00192
virtual char *
characteristic_component_name (
00193
00194 );
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
virtual char *
description (
00205
00206 );
00207
00208
virtual char *
format (
00209
00210 );
00211
00212
virtual char *
units (
00213
00214 );
00215
00216
virtual ACS::pattern
resolution (
00217
00218 );
00219
00220
virtual CORBA::Boolean
initialize_devio ();
00221
00222
00223
00224
virtual ACS::TimeInterval
default_timer_trigger (
00225
00226 );
00227
00228
virtual ACS::TimeInterval
min_timer_trigger (
00229
00230 );
00231
00232
virtual T
default_value (
00233
00234 );
00235
00236
virtual T
get_sync (
00237 ACSErr::Completion_out c
00238
00239 );
00240
00241
virtual void get_async (
00242
CBpattern* cb,
00243
const ACS::CBDescIn & desc
00244
00245 );
00246
00247
virtual CORBA::Long
get_history (
00248 CORBA::Long n_last_values,
00249 TSeq_out vs,
00250 ACS::TimeSeq_out ts
00251
00252 );
00253
00254
virtual ACS::Monitorpattern*
create_monitor (
00255
CBpattern* cb,
00256
const ACS::CBDescIn & desc
00257
00258 );
00259
00260
virtual ACS::Monitor*
create_postponed_monitor (
00261 ACS::Time start_time,
00262
CBpattern* cb,
00263
const ACS::CBDescIn & desc
00264
00265 );
00266
00267
virtual ACS::stringSeq *
statesDescription (
00268
00269 );
00270
00271
virtual ACS::ConditionSeq *
condition (
00272
00273 );
00274
00275
virtual TSeq *
allStates (
00276
00277 );
00278
00279
00280
virtual ACSErr::Completion *
set_sync ( T value );
00281
00282
virtual void set_async ( T value,
00283 ACS::CBvoid_ptr cb,
00284
const ACS::CBDescIn & desc
00285
00286 ) ;
00287
00288
virtual void set_nonblocking ( T value);
00289
00290
protected:
00291
00297
virtual bool readCharacteristics();
00298
00299
00300
00301
void addValueToHistory(ACS::Time time, ACS::pattern value);
00302
private:
00303
00304 T
state;
00308
00309
00310
00311
00313 int initialization_m;
00314
00316 bool destroyed_m;
00317
00319 CORBA::Object_ptr
reference_mp;
00320
00322 baci::BACIProperty*
property_mp;
00323
00325 T
historyValue_m[
HISTORY_SIZE];
00326
00328 ACS::Time
historyTime_m[
HISTORY_SIZE];
00329
00331 int historyStart_m;
00332
00334 bool historyTurnaround_m;
00335
00339
00340
00341 ACE_CString
m_description;
00342 ACE_CString
format_m;
00343 ACE_CString
units_m;
00344 ACS::pattern
m_resolution;
00345 bool initializeDevIO_m;
00346
00347
00348 T
defaultValue_m;
00349 ACS::TimeInterval
defaultTimerTrig_m;
00350 ACS::TimeInterval
minTimerTrig_m;
00351
00352 ACS::stringSeq
m_statesDescription;
00353 ACS::ConditionSeq
m_condition;
00354
00355 DevIO<T> *
devIO_mp;
00356 bool deldevIO_m;
00357 T
m_value;
00358 int m_enumLength;
00359 };
00360
00361
#include "enumpropRWImpl.i"
00362
00363
#endif