00001
#ifndef _baciPcommonImpl_T_H_
00002
#define _baciPcommonImpl_T_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00037
#ifndef __cplusplus
00038
#error This is a C++ include file and cannot be used from plain C
00039
#endif
00040
00041
#include "baciDB.h"
00042
#include <acsutil.h>
00043
#include <baci.h>
00044
#include <baciS.h>
00045
#include <baciCORBA.h>
00046
#include <baciCORBAMem.h>
00047
#include <baciEvent.h>
00048
#include <baciDevIOMem.h>
00049
#include <baciCharacteristicModelImpl.h>
00050
#include <ACSErrTypeCommon.h>
00051
#include <ACSErrTypeDevIO.h>
00052
#include <baciErrTypeProperty.h>
00053
#include <baciErrTypeDevIO.h>
00054
00060 #define HISTORY_SIZE 32
00061
00064
00068 #define ACS_P_T(T, TC) TC, ACS::CB##T, ACS::T##Seq, ACS::T##Seq_out, ACS::Monitor##T, baci::Monitor##T,TC, TC, TC
00069
00070
00071
00072
00076 #define ACS_P_TL T, TCB, TSeq, TSeq_out, TMonitor, TMonitorImpl, TM, TS, TSM, POA_SK
00077
00081 #define ACS_P_C class T, class TCB, class TSeq, class TSeq_out, class TMonitor, class TMonitorImpl, class TM, class TS, class TSM, class POA_SK
00082
00083
00084
namespace baci {
00085
00089
template <
class T>
00090 class CDBconverter
00091 {
00092
public:
00093 static void convertValue(
const char *str, T& v)
00094 {
00095 std::istringstream is(str);
00096 (istream&) is >> v;
00097
if (!is)
00098
throw cdbErrType::WrongCDBDataTypeExImpl(__FILE__, __LINE__,
"CDBconverter::converterValue");
00099 }
00100 };
00101
00102
template<>
00103 class CDBconverter<ACE_CString>
00104 {
00105
public:
00106 static void convertValue(
const char *s, ACE_CString& v)
00107 {
00108 v = (
const char*)s;
00109 }
00110 };
00111
00117
template<ACS_P_C>
00118 class baci_EXPORT PcommonImpl:
public virtual POA_SK,
00119
public CharacteristicModelImpl,
00120
public PropertyImplementator,
00121
public ActionImplementator
00122 {
00123
00124
00125
public:
00131 PcommonImpl(
const ACE_CString& name,
BACIComponent *component_p,
DevIO<TM> *devIO,
bool flagdeldevIO);
00132
00136
virtual ~PcommonImpl();
00137
00138
00139
00140
00141
00142
00143
00144 virtual int initialization() {
return initialization_m; }
00145
00150 CORBA::Object_ptr getCORBAReference()
const {
return reference_mp; }
00151
00155 BACIProperty* getProperty()
const {
return property_mp; }
00156
00163
virtual void destroy();
00164
00168 DevIO<TM>* getDevIO()
const {
return devIO_mp; }
00169
00170
00171
00172
00173
virtual ActionRequest getValueAction(
BACIComponent* component_p,
00174
int callbackID,
00175
const CBDescIn& descIn,
00176
BACIValue* value,
00177
Completion& completion,
00178
CBDescOut& descOut);
00179
00180
00181
00182
00200
virtual ActionRequest invokeAction(
int function,
00201
BACIComponent* component_p,
00202
const int &callbackID,
00203
const CBDescIn& descIn,
00204
BACIValue* value,
00205
Completion& completion,
00206
CBDescOut& descOut);
00207
00208
00209
00217
virtual void getValue(
BACIProperty* property,
00218
BACIValue* value,
00219
Completion &completion,
00220
CBDescOut& descOut);
00221
00222
00223
00224
00225
00226
00227
00228
virtual char * name ();
00229
00230
virtual char * characteristic_component_name ();
00231
00232
00233
00234
00235
00236
00237
00238
00239
virtual CORBA::Boolean initialize_devio ();
00240
00241
virtual char * description ();
00242
00243
virtual char * format ();
00244
00245
virtual char * units ();
00246
00247
virtual ACS::pattern resolution ();
00248
00249
00250
00251
virtual ACS::TimeInterval default_timer_trigger ();
00252
00253
virtual ACS::TimeInterval min_timer_trigger ();
00254
00255
virtual TS default_value ();
00256
00257
virtual T get_sync (ACSErr::Completion_out c);
00258
00259
virtual void get_async (TCB *cb,
00260
const ACS::CBDescIn & desc);
00261
00262
virtual CORBA::Long get_history (CORBA::Long n_last_values,
00263 TSeq_out vs,
00264 ACS::TimeSeq_out ts);
00265
00266
virtual TMonitor* create_monitor (TCB*cb,
00267
const ACS::CBDescIn & desc);
00268
00269
virtual TMonitor* create_postponed_monitor (ACS::Time start_time,
00270 TCB *cb,
00271
const ACS::CBDescIn & desc);
00272
00273
protected:
00274
00280
virtual bool readCharacteristics();
00281
00282
00283
00284
void addValueToHistory(ACS::Time time, TM &value);
00285
00287 BACIProperty* property_mp;
00288
00289 DevIO<TM> *devIO_mp;
00290 bool deldevIO_m;
00291 TM value_m;
00292
00294 int initialization_m;
00295
00308
typedef ActionRequest (
PcommonImpl<ACS_P_TL>::*ActionFunction)(
BACIComponent* component_p,
00309 int callbackID,
00310
const CBDescIn&
descIn,
00311
BACIValue*
value,
00312 ACSErr::Completion&
completion,
00313
CBDescOut&
descOut);
00316
00317 bool destroyed_m;
00318
00320 CORBA::Object_ptr reference_mp;
00321
00323 TM historyValue_m[
HISTORY_SIZE];
00324
00326 ACS::Time historyTime_m[
HISTORY_SIZE];
00327
00329 int historyStart_m;
00330
00332 bool historyTurnaround_m;
00333
00337
00338 bool initializeDevIO_m;
00339
00340 ACE_CString description_m;
00341 ACE_CString format_m;
00342 ACE_CString units_m;
00343 ACS::pattern resolution_m;
00344
00345
00346 TSM defaultValue_m;
00347 ACS::TimeInterval defaultTimerTrig_m;
00348 ACS::TimeInterval minTimerTrig_m;
00349
00350
private:
00354
void operator=(
const PcommonImpl&);
00355
00359 PcommonImpl(
const PcommonImpl&);
00360 };
00361
00362
00363
00364 };
00365
00366
#endif
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00377
00378
00379
00380
00381
00382
00383
00384
00385
00386
00387
00388
00389