instant.h

Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 #ifndef INSTANT_H
00009 #define INSTANT_H
00010 
00011 #include <transpose.h>
00012 #include <granules.h>
00013 #include <cafeEnum.h>
00014 
00015 
00016 template <class CTYPE> class Instant {
00017 
00018 private:
00019     Transpose<dbr_string_t> renderString; // 0
00020     Transpose<dbr_short_t>  renderShort;  // 1
00021     Transpose<dbr_float_t>  renderFloat;  // 2
00022     Transpose<dbr_enum_t>   renderEnum;   // 3
00023     Transpose<dbr_char_t>   renderChar;   // 4
00024     Transpose<dbr_long_t>   renderLong;   // 5
00025     Transpose<dbr_double_t> renderDouble; // 6
00026 
00027     CAFEStatus   cafeStatus;
00028     Granules cafeGranules;
00029 
00030     PolicyHelper policyHelper;
00031 
00032           HandleHelper helper;
00033 
00034     Conduit cc;
00035     ChannelTimeoutPolicy         channelTimeoutPolicyGet;
00036     ChannelRequestPolicy         channelRequestPolicyGet;
00037     ChannelRequestStatus         channelRequestStatusGet;
00038     ChannelRequestDataTypePolicy channelRequestDataTypePolicy;
00039 
00040     ChannelRequestMetaDataClient channelRequestMetaDataClient; //-1
00041 
00042     int  status;
00043 
00044     int  clientRequests(const unsigned int  _handle,    const chtype dbrType,  const CTYPE * _val);
00045 
00046     int  clientRequests(const unsigned int  _handle,    const chtype dbrType,       CTYPE * _val,
00047                         dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts,
00048                         bool isCacheRequest);
00049 public:
00050 
00051     Instant (){};
00052    ~Instant (){};
00053 
00054     int  set(const unsigned int  *handleArray,  const unsigned int  nelem,
00055                                     const chtype _dbrType, const  CTYPE * val, int  *statusArray);
00056 
00057     int  set(const unsigned int  _handle, const chtype dbrType, const CTYPE * _val);
00058 
00059     int  get(const unsigned int  _handle, const chtype dbrType, CTYPE * _val,
00060              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts);
00061 
00062     int  get(const unsigned int  _handle, const chtype dbrType, CTYPE * _val,
00063                             dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity){
00064         epicsTimeStamp ts;
00065         return get(_handle, dbrType, _val, alarmStatus,  alarmSeverity,  ts);
00066     };
00067 
00068     int  get(const unsigned int  _handle, const chtype dbrType, CTYPE * _val){
00069         dbr_short_t alarmStatus; dbr_short_t alarmSeverity; epicsTimeStamp ts;
00070         return get(_handle, dbrType, _val, alarmStatus,  alarmSeverity,  ts);               
00071     };
00072 
00073     int  getCache(const unsigned int  _handle, const chtype dbrType, CTYPE * _val,
00074              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts);
00075 
00076     int  getCache(const unsigned int  _handle, const chtype dbrType, CTYPE * _val,
00077                             dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity){
00078         epicsTimeStamp ts;
00079         return getCache(_handle, dbrType, _val, alarmStatus,  alarmSeverity,  ts);
00080     };
00081 
00082     int  getCache(const unsigned int  _handle, const chtype dbrType, CTYPE * _val){
00083         dbr_short_t alarmStatus; dbr_short_t alarmSeverity; epicsTimeStamp ts;
00084         return getCache(_handle, dbrType, _val, alarmStatus,  alarmSeverity,  ts);
00085     };
00086 
00087     int  getCache(const unsigned int  *handleArray, const unsigned int  nelem,
00088                   const chtype _dbrType,  CTYPE * val, int  *statusArray,
00089                   dbr_short_t *alarmStatus, dbr_short_t *alarmSeverity, epicsTimeStamp *ts);
00090 
00091     int  getCache(const unsigned int  *handleArray, const unsigned int  nelem,
00092                   const chtype _dbrType,  CTYPE * val, int  *statusArray,
00093                   dbr_short_t *alarmStatus, dbr_short_t *alarmSeverity ) {
00094         epicsTimeStamp * ts;
00095         return getCache(handleArray, nelem, _dbrType,  val, statusArray,
00096                         alarmStatus, alarmSeverity, ts);
00097     };
00098     int  getCache(const unsigned int  *handleArray, const unsigned int  nelem,
00099                   const chtype _dbrType,  CTYPE * val, int  *statusArray) {
00100         dbr_short_t * alarmStatus; dbr_short_t * alarmSeverity; epicsTimeStamp * ts;
00101         return getCache(handleArray, nelem, _dbrType,  val, statusArray,
00102                         alarmStatus, alarmSeverity, ts);
00103     };
00104 
00105     int  setAndGet(const unsigned int handleSet, const chtype dbrType, CTYPE valSet, CTYPE &valGet);
00106     int  setAndMatch(const unsigned int handleSet, const chtype dbrType, CTYPE valSet, const unsigned int handleMatch,
00107                           CTYPE tolerance, double timeout, bool printFlag);
00108                                                                                                                                                                                                         
00109     int  setAndMatchMany(vector<unsigned int> handleSetV, const chtype dbrType, vector<CTYPE> valSet, vector<unsigned int> handleMatch,
00110                           CTYPE tolerance, double timeout, bool printFlag);
00111 
00112                 int  matchMany(                                                                                                                         const chtype dbrType, vector<CTYPE> valSet, vector<unsigned int> handleMatch,
00113                           CTYPE tolerance, double timeout, bool printFlag);
00114 
00115                 int  match(                                                                                                                     const chtype dbrType, CTYPE valSet, unsigned int handleMatch,
00116                           CTYPE tolerance, double timeout, bool printFlag);
00117 
00118 
00126     int  setAndGetString(const unsigned int handleSet, string valSet, string &valGet) {
00127 #define __METHOD__ "Instant<CTYPE>::setAndGetString(const unsigned int handleSet, string valSet, string &valGet"
00128         //CheckPolicy
00129 
00130         dbr_string_t valGetA[1];  dbr_string_t valSetA[1];
00131 
00132         strcpy(valGetA[0],"0");
00133         valGet="0";
00134     
00135         helper.removeLeadingAndTrailingSpaces(valSet.c_str(), valSetA[0]);
00136                         
00137         status=Instant::set(handleSet, DBR_STRING, valSetA);
00138         if (status==ICAFE_NORMAL) {
00139             status=Instant::get(handleSet, DBR_STRING, valGetA);
00140 
00141             valGet=valGetA[0];
00142         }
00143         else {
00144             return status;
00145         }
00146 
00147         if (strcmp(valSetA[0],valGetA[0])==0) {
00148             return ICAFE_NORMAL;
00149         }
00150 
00151                                 //Check if number
00152                                 istringstream ins, ous;
00153                                 double oud=0;
00154         ous.clear();
00155         ous.str(valGetA[0]);
00156         ous>>oud;
00157                                 double ind=0;
00158         ins.clear();
00159         ins.str(valSetA[0]);
00160         ins>>ind;
00161 
00162 
00163         if ( !ous.fail()  && !ins.fail()) {
00164                   if (ind==oud) {return ICAFE_NORMAL;}
00165         }
00166                                 //Cater for enums that are refered to by their integer values in string format
00167                                 else if (!ins.fail()) {
00168                                                         short enumval=-1;
00169                                                                                                         
00170                                                         enumval=helper.getEnumFromString(handleSet, valGet);
00171                                         
00172                                                         //Convert integer to string
00173                                                         
00174                                                         stringstream ss;
00175                                                         ss << enumval;                                           
00176                                                         valGet= ss.str();
00177                                                         if ((short)ind==enumval)  {
00178                                                         return ICAFE_NORMAL;
00179                                                         }
00180                                 
00181                                 }               
00182                                                 
00183                                                                                                 
00184         cout << __FILE__ << "//" << __LINE__ << "//" << __METHOD__ << endl;
00185         cout << "Process Variable = " << helper.getPVFromHandle(handleSet) << endl;
00186         cout << "Set Value: " << valSetA[0] << " Get Value: " << valGet.c_str() << endl;
00187         return ICAFE_SET_AND_GET_MISMATCH;
00188 #undef __METHOD__
00189 
00190     };
00191                 
00192 
00200     int  setAndGetDbrString(const unsigned int handleSet, dbr_string_t valSet, dbr_string_t &valGet) {
00201 #define __METHOD__ "Instant<CTYPE>::setAndGetDbrString(const unsigned int handleSet, dbr_string_tvalSet, dbr_string_t &valGet"
00202         //CheckPolicy
00203 
00204         dbr_string_t valGetA[1];  dbr_string_t valSetA[1];
00205 
00206         strcpy(valGetA[0],"0");
00207         strcpy(valGet,"0");
00208  
00209         helper.removeLeadingAndTrailingSpaces(valSet, valSetA[0]);      
00210                           
00211         status=Instant::set(handleSet, DBR_STRING, valSetA);
00212         if (status==ICAFE_NORMAL) {
00213             status=Instant::get(handleSet, DBR_STRING, valGetA);
00214 
00215             strcpy(valGet,valGetA[0]);
00216         }
00217         else {
00218             return status;
00219         }
00220 
00221         if (strcmp(valSetA[0],valGetA[0])==0) {
00222             return ICAFE_NORMAL;
00223         }
00224 
00225                                 //Check if number
00226                                         //Check if number
00227                                 istringstream ins, ous;
00228                                 double oud=0;
00229         ous.clear();
00230         ous.str(valGetA[0]);
00231         ous>>oud;
00232                                 double ind=0;
00233         ins.clear();
00234         ins.str(valSetA[0]);
00235         ins>>ind;
00236 
00237         if ( !ous.fail()  && !ins.fail()) {
00238                   if (ind==oud) {return ICAFE_NORMAL;}
00239         }
00240                                 //Cater for enums that are refered to by their integer values in string format
00241                                 else if (!ins.fail()) {
00242                                                         short enumval=-1;
00243                                                                                                 
00244                                                         enumval=helper.getEnumFromString(handleSet, valGet);
00245                                                 
00246                                                         //Convert integer to string
00247                                                         stringstream ss;
00248                                                         ss << enumval;                                           
00249                                                         strcpy(valGet, ss.str().c_str());
00250                                                         
00251                                                         if ((short) ind==enumval)  {                                                                                            
00252                                                           return ICAFE_NORMAL;
00253                                                         }
00254                                                         
00255                                 
00256                                 } 
00257                                 
00258 
00259         cout << __FILE__ << "//" << __LINE__ << "//" << __METHOD__ << endl;
00260         cout << "Process Variable = " << helper.getPVFromHandle(handleSet) << endl;
00261         cout << "Set Value: " << valSetA[0] << " Get Value: " << valGet << endl;
00262         return ICAFE_SET_AND_GET_MISMATCH;
00263 #undef __METHOD__
00264 
00265     };
00266                 
00267 };
00268 
00269 #include "instant.cpp"
00270 
00271 #endif // INSTANT_H
00272 

Generated on 3 May 2017 for CAFE by  doxygen 1.6.1