• Classes
  • Modules
  • Namespaces
  • Files
  • Related Pages
  • File List
  • File Members

baciMonitor_T.h

Go to the documentation of this file.
00001 #ifndef baciMonitor_T_H
00002 #define baciMonitor_T_H
00003 
00004 /*******************************************************************************
00005 * ALMA - Atacama Large Millimiter Array
00006 * (c) European Southern Observatory, 2003 
00007 *
00008 *This library is free software; you can redistribute it and/or
00009 *modify it under the terms of the GNU Lesser General Public
00010 *License as published by the Free Software Foundation; either
00011 *version 2.1 of the License, or (at your option) any later version.
00012 *
00013 *This library is distributed in the hope that it will be useful,
00014 *but WITHOUT ANY WARRANTY; without even the implied warranty of
00015 *MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00016 *Lesser General Public License for more details.
00017 *
00018 *You should have received a copy of the GNU Lesser General Public
00019 *License along with this library; if not, write to the Free Software
00020 *Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
00021 *
00022 * "@(#) $Id: baciMonitor_T.h,v 1.106 2011/09/02 11:39:00 bjeram Exp $"
00023 *
00024 * who       when      what
00025 * --------  --------  ----------------------------------------------
00026 * oat 2003-01-21 added templates for Monitors
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   /* baciMonitorTempl_H */
00369 
00370 
00371 
00372 
00373 
00374 

Generated on Thu Jan 12 2012 23:13:50 for ACS-10.0 C++ API by  doxygen 1.7.0