00001 #ifndef baciMonitor_T_H
00002 #define baciMonitor_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
00028
00034 #ifndef __cplusplus
00035 #error This is a C++ include file and cannot be used from plain C
00036 #endif
00037
00038 #include <acsutil.h>
00039 #include <ace/SString.h>
00040 #include <baci.h>
00041 #include <baciS.h>
00042 #include <logging.h>
00043 #include <baciRecovery.h>
00044 #include <baciRecoverableObject.h>
00045
00046
00047 namespace baci {
00048
00049 #ifdef MAKE_VXWORKS
00050 unsigned long long convString2LLU(char *);
00051 char *printLLUasString(unsigned long long);
00052 #endif
00053
00054 #ifdef MAKE_VXWORKS
00055 #define HEADER_PRINT_GET_OBJECT_STATE \
00056 ACE_OS::sprintf(buffer_p, "%s %s %lu %s %s %s %s %d %u %u", \
00057 getName(), ior.in(), \
00058 printLLUasString(tag), \
00059 printLLUasString(bcb_p->getDescIn().normal_timeout), \
00060 printLLUasString(monitor_mp->getTransmitTime()), \
00061 monitor_mp->getTriggerTime(), \
00062 valueTrigger.c_str(), \
00063 monitor_mp->getUpdateMode(), monitor_mp->getTriggerOnValue(), \
00064 monitor_mp->isSuspended());
00065 #else
00066
00069 #define HEADER_PRINT_GET_OBJECT_STATE \
00070 ACE_OS::sprintf(buffer_p, "%s %s %lu %llu %llu %llu %s %d %u %u", \
00071 getName(), ior.in(), tag, bcb_p->getDescIn().normal_timeout, \
00072 monitor_mp->getTransmitTime(), monitor_mp->getTriggerTime(), \
00073 valueTrigger.c_str(), \
00074 monitor_mp->getUpdateMode(), monitor_mp->getTriggerOnValue(), \
00075 monitor_mp->isSuspended());
00076 #endif
00077
00078 #ifdef MAKE_VXWORKS
00079 #define IMPL_PRINT_GET_OBJECT_STATE \
00080 ACE_OS::sprintf(buffer_p, "%s %s %lu %s %s %s %d %u", \
00081 getName(), ior.in(), \
00082 printLLUasString(tag), \
00083 printLLUasString(bcb_p->getDescIn().normal_timeout), \
00084 monitor_mp->getTransmitTime(), \
00085 printLLUasString(monitor_mp->getTriggerTime()), \
00086 monitor_mp->getUpdateMode(), \
00087 monitor_mp->isSuspended());
00088 #else
00089
00092 #define IMPL_PRINT_GET_OBJECT_STATE \
00093 ACE_OS::sprintf(buffer_p, "%s %s %lu %llu %llu %llu %d %u", \
00094 getName(), ior.in(), tag, bcb_p->getDescIn().normal_timeout, \
00095 monitor_mp->getTransmitTime(), \
00096 monitor_mp->getTriggerTime(), \
00097 monitor_mp->getUpdateMode(), \
00098 monitor_mp->isSuspended());
00099 #endif
00100
00101 #ifdef MAKE_VXWORKS
00102 #define HEADER_SCAN_SET_OBJECT_STATE \
00103 char *tmpPtr1, *tmpPtr2, *tmpPtr3; \
00104 sscanf(state, "%s %s %lu %s %s %s %s %d %u %u", \
00105 cname, ior, &tag, \
00106 tmpPtr1, \
00107 tmpPtr2, \
00108 tmpPtr3, \
00109 valueTrigger, &mode, \
00110 &triggerOnValue, &isSuspended); \
00111 descIn.normal_timeout = convString2LLU(tmpPtr1); \
00112 transmitTime = convString2LLU(tmpPtr2); \
00113 timeTrigger = convString2LLU(tmpPtr3);
00114 #else
00115
00118 #define HEADER_SCAN_SET_OBJECT_STATE \
00119 sscanf(state, "%s %s %lu %llu %llu %llu %s %d %u %u", \
00120 cname, ior, &tag, &descIn.normal_timeout, \
00121 &transmitTime, &timeTrigger, valueTrigger, &mode, \
00122 &triggerOnValue, &isSuspended);
00123 #endif
00124
00125 #ifdef MAKE_VXWORKS
00126 #define IMPL_SCAN_SET_OBJECT_STATE \
00127 char *tmpPtr1, *tmpPtr2, *tmpPtr3; \
00128 sscanf(state, "%s %s %lu %s %s %s %d %u", \
00129 cname, ior, &tag, \
00130 tmpPtr1, \
00131 tmpPtr2, \
00132 tmpPtr3, \
00133 &mode, \
00134 &isSuspended); \
00135 descIn.normal_timeout = convString2LLU(tmpPtr1); \
00136 transmitTime = convString2LLU(tmpPtr2); \
00137 timeTrigger = convString2LLU(tmpPtr3);
00138 #else
00139
00142 #define IMPL_SCAN_SET_OBJECT_STATE \
00143 sscanf(state, "%s %s %lu %llu %llu %llu %d %u", \
00144 cname, ior, &tag, &descIn.normal_timeout, \
00145 &transmitTime, &timeTrigger, &mode, \
00146 &isSuspended);
00147 #endif
00148
00152 #define MAX_VALUE_LENGTH 500
00153
00157 #define ACS_MONITOR_C class TCORBA, class TCORBA_out, class TCB, class TPOA, baci::BACIValue::Type TBACIValuetype
00158
00161 #define ACS_MONITOR_T TCORBA, TCORBA_out, TCB, TPOA, TBACIValuetype
00162
00166 #define ACS_MONITOR_SEQ(T,TCORBA) TCORBA, TCORBA##_out, ACS::CB##T##Seq, POA_ACS::Monitor##T, baci::BACIValue::type_##T##Seq
00167
00170 #define ACS_MONITOR(T,TCORBA) TCORBA, TCORBA##_out, ACS::CB##T, POA_ACS::Monitor##T, baci::BACIValue::type_##T
00171
00172 template <ACS_MONITOR_C>
00173 class baci_EXPORT Monitor: public virtual PortableServer::RefCountServantBase,
00174 public TPOA,
00175 public RecoverableObject,
00176 public MonitorImplementator
00177 {
00178 public:
00179
00180 Monitor(ACE_CString name,
00181 const ACS::TimeInterval& minTriggerTime,
00182 const baci::BACIValue& minTriggerValue,
00183 BACIProperty* property);
00184
00185 Monitor(ACE_CString name,
00186 Callback_ptr callback_p, const CBDescIn& inDesc,
00187 const ACS::TimeInterval& triggerTime,
00188 const baci::BACIValue& triggerValue,
00189 const ACS::TimeInterval& minTriggerTime,
00190 const baci::BACIValue& minTriggerValue,
00191 BACIProperty* property,
00192 const ACS::TimeInterval& transmitTime = 0,
00193 const BACIMonitor::UpdateMode& updateMode=BACIMonitor::mumLast);
00194
00195 virtual ~Monitor();
00196
00197 virtual int initialization()
00198 {
00199 return initialization_m;
00200 }
00201
00202 CORBA::Object_ptr getCORBAReference() const
00203 {
00204 return reference_mp;
00205 }
00206
00207 BACIMonitor* getMonitor() const
00208 {
00209 return monitor_mp;
00210 }
00211
00212 virtual int getId(void);
00213 virtual const char* getName(void);
00214 virtual const char* getObjectState(void);
00215 virtual void setObjectState(const char * state);
00216
00217 virtual void setObjectState(const char * state,
00218 const ACS::TimeInterval& minTriggerTime,
00219 const baci::BACIValue& minTriggerValue,
00220 BACIProperty * property);
00221
00222
00223 virtual void monitorDestroyed(void);
00224
00225 virtual void monitorStateChanged(void);
00226
00227
00228 virtual void suspend ();
00229
00230 virtual void resume ();
00231
00232 virtual void destroy ();
00233
00234 virtual void set_timer_trigger (ACS::TimeInterval timer);
00235
00236 virtual void get_timer_trigger (ACS::TimeInterval_out timer);
00237
00238 virtual void set_value_trigger (TCORBA delta, CORBA::Boolean enable);
00239
00240 virtual void get_value_trigger (TCORBA_out delta, CORBA::Boolean_out enable);
00241
00242 virtual void set_value_percent_trigger (CORBA::Double delta, CORBA::Boolean enable);
00243
00244 virtual void get_value_percent_trigger (CORBA::Double_out delta, CORBA::Boolean_out enable);
00245
00246 virtual ACS::Time start_time ();
00247
00248 private:
00249
00250 int initialization_m;
00251
00252 BACIMonitor* monitor_mp;
00253
00254 CORBA::Object_ptr reference_mp;
00255
00259 void operator=(const Monitor&);
00260
00264 Monitor(const Monitor&);
00265
00266 };
00267
00271 #define ACS_MONITOR_BASIC_C class TCORBA, class TCORBA_out, class TCB, class TPOA, baci::BACIValue::Type TBACIValuetype
00272
00275 #define ACS_MONITOR_BASIC_T TCORBA, TCORBA_out, TCB, TPOA, TBACIValuetype
00276
00277 template<ACS_MONITOR_BASIC_C>
00278 class baci_EXPORT MonitorBasic: public virtual PortableServer::RefCountServantBase,
00279 public POA_ACS::Monitor,
00280 public RecoverableObject,
00281 public MonitorImplementator
00282 {
00283
00284 public:
00285
00286 MonitorBasic(ACE_CString name,
00287 const ACS::TimeInterval& minTriggerTime,
00288 const baci::BACIValue& minTriggerValue,
00289 BACIProperty* property);
00290
00291 MonitorBasic(ACE_CString name,
00292 Callback_ptr callback_p, const CBDescIn& inDesc,
00293 const ACS::TimeInterval& triggerTime,
00294 const baci::BACIValue& triggerValue,
00295 const ACS::TimeInterval& minTriggerTime,
00296 const baci::BACIValue& minTriggerValue,
00297 BACIProperty* property,
00298 const ACS::TimeInterval& transmitTime = 0,
00299 const BACIMonitor::UpdateMode& updateMode=BACIMonitor::mumLast);
00300
00301 virtual ~MonitorBasic();
00302
00303 virtual int initialization()
00304 {
00305 return initialization_m;
00306 }
00307
00308 CORBA::Object_ptr getCORBAReference() const
00309 {
00310 return reference_mp;
00311 }
00312
00313 BACIMonitor* getMonitor() const
00314 {
00315 return monitor_mp;
00316 }
00317
00318
00319 virtual int getId(void);
00320 virtual const char* getName(void);
00321 virtual const char* getObjectState(void);
00322 virtual void setObjectState(const char * state);
00323
00324 virtual void setObjectState(const char * state,
00325 const ACS::TimeInterval& minTriggerTime,
00326 BACIProperty * property);
00327
00328
00329 virtual void monitorDestroyed(void);
00330
00331 virtual void monitorStateChanged(void);
00332
00333
00334 virtual void suspend ();
00335
00336 virtual void resume ();
00337
00338 virtual void destroy ();
00339
00340 virtual void set_timer_trigger (ACS::TimeInterval timer);
00341
00342 virtual void get_timer_trigger (ACS::TimeInterval_out timer);
00343
00344 virtual ACS::Time start_time ();
00345
00346 private:
00347
00348 int initialization_m;
00349
00350 BACIMonitor* monitor_mp;
00351
00352 CORBA::Object_ptr reference_mp;
00353
00357 void operator=(const MonitorBasic&);
00358
00362 MonitorBasic(const MonitorBasic&);
00363
00364 };
00365
00366 };
00367
00368 #endif
00369
00370
00371
00372
00373
00374