cafe.h

Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 #ifndef CAFE_H
00010 #define CAFE_H
00011 
00012 #include <connect.h>
00013 #include <conduitEventHandlerArgs.h>
00014 #include <instant.h>
00015 #include <cafeDataType.h>
00016 #include <global.h>
00017 #if HAVE_PYTHON_H
00018 #include <unicodeobject.h>
00019 #endif
00020 
00021 #if HAVE_ZEROMQ
00022 #include <zbsDataHolders.h>
00023 using namespace CAFEBS;
00024 #endif
00025 
00030 class CAFE : public Connect
00031 {
00032 
00033 private:
00034     Instant<dbr_string_t>   cafeSoluble;
00035     Instant<dbr_float_t>    cafeFrappuccino;
00036     Instant<dbr_short_t>    cafeSchale;
00037     Instant<dbr_enum_t>     cafeEspresso;
00038     Instant<dbr_char_t>     cafeCappuccino;
00039     Instant<dbr_long_t>     cafeLatte;
00040     Instant<dbr_double_t>   cafeDoppio;
00041 
00042     Transpose<dbr_string_t> renderString; // 0
00043     Transpose<dbr_short_t>  renderShort;  // 1
00044     Transpose<dbr_float_t>  renderFloat;  // 2
00045     Transpose<dbr_enum_t>   renderEnum;   // 3
00046     Transpose<dbr_char_t>   renderChar;   // 4
00047     Transpose<dbr_long_t>   renderLong;   // 5
00048     Transpose<dbr_double_t> renderDouble; // 6
00049 
00050     Granules cafeGranules;
00051 
00052     ChannelGetCacheWaitPolicy channelGetCacheWaitPolicy;
00053 
00054     ChannelRequestStatus  channelRequestStatusGet;
00055     ChannelRequestStatus  channelRequestStatusGetCtrl;
00056 
00057     ChannelRequestMetaDataClient channelRequestMetaDataClient; //used for PVDataHolder
00058     ChannelRequestMetaDataClient channelRequestMetaCtrlClient; //used for PVCtrlHolder
00059 
00060     CAFENUM::DBR_TYPE vectorDbrType;
00061 
00062     //Groups
00063     ChannelTimeoutPolicy channelTimeoutPolicySGGet;
00064     ChannelTimeoutPolicy channelTimeoutPolicySGPut;
00065         
00066 
00067 public:
00068 
00069     CAFE(){vectorDbrType=CAFENUM::DBR_NONE;
00070                 //Put in default values
00071                 
00072                 //make no wait
00073                 channelRequestPolicyMasterPut.setPolicy(CAFENUM::FLUSH_AFTER_EACH_MESSAGE,
00074                                                                           CAFENUM::NO_WAIT,  CAFENUM::WITH_CALLBACK_DEFAULT); //WITHOUT_CALLBACK)               
00075                 /*
00076     channelRequestPolicyMasterGet.setPolicy(CAFENUM::FLUSH_AFTER_EACH_MESSAGE,
00077                                                                           CAFENUM::WAIT,  CAFENUM::WITH_CALLBACK_DEFAULT); //WITHOUT_CALLBACK);
00078 
00079     channelRequestPolicyMasterGetCtrl.setPolicy(CAFENUM::FLUSH_AFTER_EACH_MESSAGE,
00080                                                                           CAFENUM::WAIT, CAFENUM::WITH_CALLBACK_DEFAULT); //WITH_CALLBACK_DEFAULT);
00081                 */                                                                                                                              
00082                 
00083                 }; //cafeVectors.h
00084                 
00085                 
00086           //28 May 2017
00087           CAFE( ChannelRequestPolicy _channelRequestPolicyMasterPut, 
00088                                   ChannelRequestPolicy _channelRequestPolicyMasterGet,          
00089                                   ChannelGetActionWhenMonitorPolicy _channelGetActionWhenMonitorPolicyMaster) { 
00090                 channelRequestPolicyMasterPut                   = _channelRequestPolicyMasterPut;
00091                         channelRequestPolicyMasterGet                   = _channelRequestPolicyMasterGet;
00092                         channelRequestPolicyMasterGetCtrl       = _channelRequestPolicyMasterGet;
00093                         channelGetActionWhenMonitorPolicyMaster = _channelGetActionWhenMonitorPolicyMaster;
00094                 
00095                         vectorDbrType=CAFENUM::DBR_NONE;
00096                 }
00097                 
00098           //28 May 2017
00099           CAFE(ChannelRequestPolicy _channelRequestPolicyMasterPut, ChannelRequestPolicy _channelRequestPolicyMasterGet) {      
00100                 channelRequestPolicyMasterPut                   = _channelRequestPolicyMasterPut;
00101                         channelRequestPolicyMasterGet                   = _channelRequestPolicyMasterGet;
00102                         channelRequestPolicyMasterGetCtrl       = _channelRequestPolicyMasterGet;                                       
00103                         vectorDbrType=CAFENUM::DBR_NONE;
00104                 }
00105                         
00106           //28 May 2017
00107           CAFE(ChannelRequestPolicy _channelRequestPolicyMasterPut) {   
00108                 channelRequestPolicyMasterPut                   = _channelRequestPolicyMasterPut;
00109                 
00110         //channelRequestPolicyMasterGet.setPolicy(CAFENUM::FLUSH_AFTER_EACH_MESSAGE,
00111                         //                                                CAFENUM::WAIT,  CAFENUM::WITH_CALLBACK_DEFAULT); //WITHOUT_CALLBACK);
00112 
00113         //channelRequestPolicyMasterGetCtrl.setPolicy(CAFENUM::FLUSH_AFTER_EACH_MESSAGE,
00114                         //                                                CAFENUM::WAIT, CAFENUM::WITH_CALLBACK_DEFAULT); //WITH_CALLBACK_DEFAULT);
00115         
00116                         vectorDbrType=CAFENUM::DBR_NONE;
00117                 }
00118                 
00119                 
00120 
00121     #include "cafeCache.h"
00122     #include "cafeVectors.h"
00123     #include "cafeRoast.h"
00124 //if HAVE_LIBQTXML
00125     //only if qt xml activated
00126     #include "cafeXML.h" 
00127                 // if HAVE_LIBQTXML moved to within header file
00128 //endif
00129 
00130 
00131     //get NON_BLOCKING
00132     int  getNonBlocking(const unsigned int  handle){return get(handle);};
00133 
00134     int  get      (const unsigned int  handle);
00135     int  get      (const unsigned int  *handleArray, unsigned int nelem, int  *statusArray);
00136           int  get      (const unsigned int  *handleArray, unsigned int nHandles, std::vector<int> &statusV);
00137         
00138     int  getCtrl  (const unsigned int  handle);
00139 
00140     //get BLOCKING
00141     int  get      (const unsigned int  handle, PVDataHolder & pvd);
00142     int  get      (const unsigned int  *handleArray, unsigned int nelem, PVDataHolder * pvd);
00143 
00144         int waitForBundledEvents(std::vector<unsigned int> handleV, std::vector<int> &vRB);
00145         int waitForBundledEvents(unsigned int  *handleArray, unsigned int nHandles, std::vector<int> &vRB);
00146 
00147           int waitForGetEvent(unsigned int handle);
00148                 
00149     
00150     int  getCtrl  (const unsigned int  handle, PVCtrlHolder & pvc);
00151     int  getCtrl  (const unsigned int  *handleArray, unsigned int nelem, PVCtrlHolder * pvc);
00152 
00153     //pvName
00154     //NON_BLOCKING
00155     int  get      (const char * pv);
00156     int  getCtrl  (const char * pv);
00157 
00158     //BLOCKING
00159     int  get    (const char * pv, PVDataHolder & pvd);
00160     int  getCtrl(const char * pv, PVCtrlHolder & pvc);
00161 
00162     //Special
00163     int getWFAsString(unsigned int handle, std::string & message); 
00164                 int getWFAsString(const char * pv, std::string & message){              
00165         unsigned int  handle; status=ICAFE_NORMAL;
00166         try {status = open(pv,  handle);}
00167                 catch (CAFEException_open & e) { return e.pvEx.statusCode;}
00168         if (status == ICAFE_NORMAL) {status=getWFAsString(handle, message);}
00169         return status;
00170                 }
00171                 
00172     int getWFAsStringCache(unsigned int handle, std::string & message); 
00173                 int getWFAsStringCache(const char * pv, std::string & message){         
00174         unsigned int  handle; status=ICAFE_NORMAL;
00175         try {status = open(pv,  handle);}
00176                 catch (CAFEException_open & e) { return e.pvEx.statusCode;}
00177         if (status == ICAFE_NORMAL) {status=getWFAsStringCache(handle, message);}
00178         return status;
00179                 }
00180                 
00181     std::string getChannelIDAsString(chid _chid) {
00182                                                 std::stringstream ss;
00183                                                 ss << _chid;                                            
00184                                                 return ss.str();                
00185                 }
00186 
00187                 #if HAVE_ZEROMQ
00188           //zbsCafeService.h
00189                 int  calcDBPMStatus(int, int, std::string);
00190                 int  setBS2CA(CAFEBS::BSDataHolder &bsd);
00191                         
00192                 int  setBS(CAFEBS::BSDataHolder &bsd, bool closeCA);
00193                 int  getBS(CAFEBS::BSDataHolder &bsd);
00194                 int  closeBS(CAFEBS::BSDataHolder &bsd);
00195                 
00196                 int  setPulseIDBufferSize(unsigned int _handle, unsigned short _bsize) {
00197                         return handleHelper.setMapPulseIDBufferSize(_handle, _bsize);
00198                 }
00199                 int  setPulseIDBufferSize(const char * _pv, unsigned short _bsize) {
00200                         unsigned int _handle=handleHelper.getHandleFromPV(_pv);
00201                         return handleHelper.setMapPulseIDBufferSize(_handle, _bsize);
00202                 }
00203                 
00204                 int  setPulseIDBufferSizeAll(unsigned short _bsize) {
00205                         return handleHelper.setMapPulseIDBufferSizeAll(_bsize);
00206                 }
00207                         
00208                 int  getDBPM(DBPMKeeper &dbpm);
00209                 int  readDBPMOffsets(DBPMKeeper &dbpm);
00210                 
00211                 int  prepareDBPM(std::vector<std::string> &_glist, std::vector<unsigned int> &_hV, std::vector<std::string> &dev,  std::vector<float> &pos) ;
00212                 int  prepareDBPM(std::vector<std::string> &_glist, std::vector<unsigned int> &_hV, std::map<float, std::string> &posDev) ;
00213           #endif 
00214 
00215     //Standard BLOCKING get
00216 
00217     //0+
00218     int  get(const unsigned int  handle, std::string * valStr,  dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts) {
00219 
00220         unsigned int nn=handleHelper.getNelemClient(handle);
00221         if (nn==0) {return ECAFE_INVALID_HANDLE;}
00222         //check on handle number before proceeding!
00223         dbr_string_t * _val = new dbr_string_t[nn];
00224         status=cafeSoluble.get(handle, DBR_TIME_STRING, _val, alarmStatus, alarmSeverity, ts);
00225         for (unsigned int i=0; i< handleHelper.getNelemRequest(handle); ++i) { valStr[i]=_val[i]; }
00226         delete [] _val; return status;
00227     };
00228     int  get(const unsigned int  handle, std::string * valStr, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity) {
00229         unsigned int nn=handleHelper.getNelemClient(handle);
00230         if (nn==0) {return ECAFE_INVALID_HANDLE;}
00231         dbr_string_t * _val = new dbr_string_t[nn];
00232         status=cafeSoluble.get(handle, DBR_STS_STRING, _val, alarmStatus, alarmSeverity);
00233         for (unsigned int i=0; i< handleHelper.getNelemRequest(handle); ++i) { valStr[i]=_val[i]; }
00234         delete [] _val; return status;
00235     };
00236     int  get(const unsigned int  handle, std::string * valStr){
00237         unsigned int nn=handleHelper.getNelemClient(handle);
00238         if (nn==0) {return ECAFE_INVALID_HANDLE;}               
00239         dbr_string_t * _val = new dbr_string_t[nn];
00240         status=cafeSoluble.get(handle, DBR_STRING, _val);       
00241                 for (unsigned int i=0; i< handleHelper.getNelemRequest(handle); ++i) {valStr[i]=_val[i];}
00242         delete [] _val; return status;
00243     };
00244 
00245     //0
00246     int  get(const unsigned int  handle, dbr_string_t * _val,  dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts) {
00247         return cafeSoluble.get(handle, DBR_TIME_STRING, _val, alarmStatus, alarmSeverity, ts);
00248     };
00249     int  get(const unsigned int  handle, dbr_string_t * _val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity) {
00250         return cafeSoluble.get(handle, DBR_STS_STRING, _val, alarmStatus, alarmSeverity);
00251     };
00252     int  get(const unsigned int  handle, dbr_string_t * _val){
00253         return cafeSoluble.get(handle, DBR_STRING, _val);
00254     };
00255     //1
00256     int  get(const unsigned int  handle, dbr_short_t * _val,  dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts) {
00257         return cafeSchale.get (handle, DBR_TIME_SHORT, _val, alarmStatus, alarmSeverity, ts);
00258     };
00259     int  get(const unsigned int  handle, dbr_short_t * _val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity) {
00260         return cafeSchale.get (handle, DBR_STS_SHORT, _val, alarmStatus, alarmSeverity);
00261     };
00262     int  get(const unsigned int  handle, dbr_short_t * _val){
00263         return cafeSchale.get (handle, DBR_SHORT, _val);
00264     };
00265     //2
00266     int  get(const unsigned int  handle, dbr_float_t * _val,  dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts) {
00267         return cafeFrappuccino.get(handle, DBR_TIME_FLOAT, _val, alarmStatus, alarmSeverity, ts);
00268     };
00269     int  get(const unsigned int  handle, dbr_float_t * _val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity) {
00270         return cafeFrappuccino.get(handle, DBR_STS_FLOAT, _val, alarmStatus, alarmSeverity);
00271     };
00272     int  get(const unsigned int  handle, dbr_float_t * _val){
00273         return cafeFrappuccino.get (handle, DBR_FLOAT, _val);
00274     };
00275     //3
00276     int  get(const unsigned int  handle, dbr_ushort_t * _val,  dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts) {
00277         return cafeEspresso.get (handle, DBR_TIME_ENUM, _val, alarmStatus, alarmSeverity, ts);
00278     };
00279     int  get(const unsigned int  handle, dbr_ushort_t * _val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity) {
00280         return cafeEspresso.get (handle, DBR_STS_ENUM, _val, alarmStatus, alarmSeverity);
00281     };
00282     int  get(const unsigned int  handle, dbr_ushort_t * _val){
00283         return cafeEspresso.get (handle, DBR_ENUM, _val);
00284     };
00285 
00286 
00287     //4
00288     int  get(const unsigned int  handle, dbr_char_t * _val,  dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts) {
00289         return cafeCappuccino.get (handle, DBR_TIME_CHAR, _val, alarmStatus, alarmSeverity, ts);
00290     };
00291     int  get(const unsigned int  handle, dbr_char_t * _val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity) {
00292         return cafeCappuccino.get (handle, DBR_STS_CHAR, _val, alarmStatus, alarmSeverity);
00293     };
00294     int  get(const unsigned int  handle, dbr_char_t * _val){
00295         return cafeCappuccino.get (handle, DBR_CHAR, _val);
00296     };
00297     //5
00298     int  get(const unsigned int  handle, dbr_long_t * _val,  dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts) {
00299         return cafeLatte.get (handle, DBR_TIME_LONG, _val, alarmStatus, alarmSeverity, ts);
00300     };
00301     int  get(const unsigned int  handle, dbr_long_t * _val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity) {
00302         return cafeLatte.get (handle, DBR_STS_LONG, _val, alarmStatus, alarmSeverity);
00303     };
00304     int  get(const unsigned int  handle, dbr_long_t * _val){
00305         return cafeLatte.get (handle, DBR_LONG, _val);
00306     };
00307     //5+ long long
00308     int  get(const unsigned int  handle, long long   * _val,  dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, \
00309              epicsTimeStamp &ts);
00310     int  get(const unsigned int  handle, long long   * _val, \
00311              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity);
00312     int  get(const unsigned int  handle, long long   * _val);
00313 
00314     //6
00315     int  get(const unsigned int handle, dbr_double_t * _val,  dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts) {
00316         return cafeDoppio.get (handle, DBR_TIME_DOUBLE, _val, alarmStatus, alarmSeverity, ts);
00317     };
00318     int  get(const unsigned int handle, dbr_double_t * _val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity) {
00319         return cafeDoppio.get (handle, DBR_STS_DOUBLE, _val, alarmStatus, alarmSeverity);
00320     };
00321     int  get(const unsigned int handle, dbr_double_t * _val){
00322         return cafeDoppio.get (handle, DBR_DOUBLE, _val);
00323     };
00324 
00325     //Arrays
00326     int getCharArray(const unsigned int handle, dbr_char_t * _val){
00327         return cafeCappuccino.get (handle, DBR_CHAR, _val);
00328     };   
00329     int getShortArray(const unsigned int handle, dbr_short_t * _val){
00330         return cafeSchale.get (handle, DBR_SHORT, _val);
00331     };           
00332     int getUShortArray(const unsigned int handle, dbr_ushort_t * _val){
00333         return cafeEspresso.get (handle, DBR_ENUM, _val);
00334     };  
00335     int getDoubleArray(const unsigned int handle, dbr_double_t * _val){
00336         return cafeDoppio.get (handle, DBR_DOUBLE, _val);
00337     };
00338     int getFloatArray(const unsigned int handle, dbr_float_t * _val){
00339         return cafeFrappuccino.get (handle, DBR_FLOAT, _val);
00340     };
00341     int getLongArray(const unsigned int handle, dbr_long_t * _val){
00342         return cafeLatte.get (handle, DBR_LONG, _val);
00343     };
00344                 int getLongLongArray(const unsigned int handle, long long * _val){
00345         return get (handle, _val);
00346     };
00347     int getStringArray(const unsigned int handle, std::string * valStr){
00348         return  get(handle, valStr);
00349     };
00350           int getDbrStringArray(const unsigned int  handle, dbr_string_t * _val){
00351                         return cafeSoluble.get(handle, DBR_STRING, _val);
00352                 };
00353 
00354         //0
00355 
00356     //single values
00357     int getString(const unsigned int handle, std::string  & valStr) { //0+
00358         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00359         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00360         dbr_string_t val[1]={""};
00361         status=cafeSoluble.get(handle, DBR_STRING, val);
00362         if (status==ICAFE_NORMAL) {valStr=val[0];}
00363         CAFE::setNelemToPrevious(handle, nelemPrevious);
00364         return status;
00365     }
00366     int get(const unsigned int handle, std::string  & valStr) { //0+
00367         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00368         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00369         dbr_string_t val[1]={""};
00370         status=cafeSoluble.get(handle, DBR_STRING, val);
00371         if (status==ICAFE_NORMAL) {valStr=val[0];}
00372         CAFE::setNelemToPrevious(handle, nelemPrevious);
00373         return status;
00374     }
00375 
00376     int get(const unsigned int  handle, std::string  & valStr, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity) {//0
00377         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00378         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00379         dbr_string_t val[1]={""};
00380         status=cafeSoluble.get(handle, DBR_STS_STRING, val, alarmStatus, alarmSeverity);
00381         if (status==ICAFE_NORMAL) {valStr=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00382         return status;
00383     }
00384 
00385         int  getStringTS(const unsigned int  handle, std::string  & valStr,
00386                          dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts){ //0
00387                    unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00388                    if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00389                    dbr_string_t val[1]={""};
00390                    status=cafeSoluble.get(handle, DBR_TIME_STRING, val, alarmStatus, alarmSeverity, ts);
00391                    if (status==ICAFE_NORMAL) {valStr=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00392                    return status;
00393           }
00394 
00395     int get(const unsigned int  handle, std::string  & valStr,
00396              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts){ //0
00397         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00398         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00399         dbr_string_t val[1]={""};
00400         status=cafeSoluble.get(handle, DBR_TIME_STRING, val, alarmStatus, alarmSeverity, ts);
00401         if (status==ICAFE_NORMAL) {valStr=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00402         return status;
00403     }
00404 
00405 
00406     int get(const unsigned int handle, dbr_string_t  & _val) { //0
00407         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00408         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00409         dbr_string_t val[1]={""};
00410         status=cafeSoluble.get(handle, DBR_STRING, val);
00411         if (status==ICAFE_NORMAL) {sprintf(_val, val[0]);}
00412         CAFE::setNelemToPrevious(handle, nelemPrevious);
00413         return status;
00414     }
00415     int get(const unsigned int  handle, dbr_string_t  & _val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity) {//0
00416         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00417         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00418         dbr_string_t val[1]={""};
00419         status=cafeSoluble.get(handle, DBR_STS_STRING, val, alarmStatus, alarmSeverity);
00420         if (status==ICAFE_NORMAL) {sprintf(_val, val[0]);} CAFE::setNelemToPrevious(handle, nelemPrevious);
00421         return status;
00422     }
00423     int get(const unsigned int  handle, dbr_string_t  & _val,
00424              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts){ //0
00425         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00426         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00427         dbr_string_t val[1]={""};
00428         status=cafeSoluble.get(handle, DBR_TIME_STRING, val, alarmStatus, alarmSeverity, ts);
00429         if (status==ICAFE_NORMAL) {sprintf(_val, val[0]);} CAFE::setNelemToPrevious(handle, nelemPrevious);
00430         return status;
00431     }
00432     int  get(const unsigned int  handle, dbr_short_t  & _val){ //1
00433         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00434         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00435         dbr_short_t val[1]={0};
00436         status=cafeSchale.get(handle, DBR_SHORT, val);
00437         if (status==ICAFE_NORMAL) {_val=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00438         return status;
00439     }
00440     int get(const unsigned int  handle, dbr_short_t  & _val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity){ //1
00441         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00442         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00443         dbr_short_t val[1]={0};
00444         status=cafeSchale.get(handle, DBR_STS_SHORT, val, alarmStatus, alarmSeverity);
00445         if (status==ICAFE_NORMAL) {_val=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00446         return status;
00447     }
00448     int get(const unsigned int  handle, dbr_short_t  & _val,
00449             dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts){ //1
00450         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00451         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00452         dbr_short_t val[1]={0};
00453         status=cafeSchale.get(handle, DBR_TIME_SHORT, val, alarmStatus, alarmSeverity, ts);
00454         if (status==ICAFE_NORMAL) {_val=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00455         return status;
00456     }
00457     int get(const unsigned int  handle, dbr_float_t  &_val){ //2
00458         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00459         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00460         dbr_float_t val[1]={0};
00461         status=cafeFrappuccino.get(handle, DBR_FLOAT, val);
00462         if (status==ICAFE_NORMAL) {_val=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00463         return status;
00464     }
00465     int get(const unsigned int  handle, dbr_float_t  &_val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity){ //2
00466         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00467         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00468         dbr_float_t val[1]={0};
00469         status=cafeFrappuccino.get(handle, DBR_STS_FLOAT, val, alarmStatus, alarmSeverity);
00470         if (status==ICAFE_NORMAL) {_val=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00471         return status;
00472     }
00473     int get(const unsigned int  handle, dbr_float_t  & _val,
00474              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts){ //2
00475         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00476         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00477         dbr_float_t val[1]={0};
00478         status=cafeFrappuccino.get(handle, DBR_TIME_FLOAT, val, alarmStatus, alarmSeverity, ts);
00479         if (status==ICAFE_NORMAL) {_val=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00480         return status;
00481     }
00482     int get(const unsigned int  handle, dbr_enum_t  & _val){ //3
00483         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00484         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00485         dbr_enum_t val[1]={0};
00486         status=cafeEspresso.get(handle, DBR_ENUM, val);
00487         if (status==ICAFE_NORMAL) {_val=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00488         return status;
00489     }
00490     int get(const unsigned int  handle, dbr_enum_t  & _val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity){ //3
00491         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00492         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00493         dbr_enum_t val[1]={0};
00494         status=cafeEspresso.get(handle, DBR_STS_ENUM, val, alarmStatus, alarmSeverity);
00495         if (status==ICAFE_NORMAL) {_val=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00496         return status;
00497     }
00498     int get(const unsigned int  handle, dbr_enum_t  & _val,
00499              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts){ //3
00500         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00501         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00502         dbr_enum_t val[1]={0};
00503         status=cafeEspresso.get(handle, DBR_TIME_ENUM, val, alarmStatus, alarmSeverity, ts);
00504         if (status==ICAFE_NORMAL) {_val=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00505         return status;
00506     }
00507     int get(const unsigned int  handle, dbr_char_t  & _val){ //4
00508         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00509         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00510         dbr_char_t val[1]={0};
00511         status=cafeCappuccino.get(handle, DBR_CHAR, val);
00512         if (status==ICAFE_NORMAL) {_val=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00513         return status;
00514     }
00515     int get(const unsigned int  handle, dbr_char_t  & _val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity){ //4
00516         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00517         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00518         dbr_char_t val[1]={0};
00519         status=cafeCappuccino.get(handle, DBR_STS_CHAR, val, alarmStatus, alarmSeverity);
00520         if (status==ICAFE_NORMAL) {_val=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00521         return status;
00522     }
00523     int get(const unsigned int  handle, dbr_char_t  & _val,
00524              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts){ //4
00525         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00526         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00527         dbr_char_t val[1]={0};
00528         status=cafeCappuccino.get(handle, DBR_TIME_CHAR, val, alarmStatus, alarmSeverity, ts);
00529         if (status==ICAFE_NORMAL) {_val=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00530         return status;
00531     }
00532     int getLong(const unsigned int  handle, dbr_long_t  & _val){ //5
00533         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00534         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00535         dbr_long_t val[1]={0};
00536         status=cafeLatte.get(handle, DBR_LONG, val);
00537         if (status==ICAFE_NORMAL) {_val=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00538         return status;
00539     }
00540     int get(const unsigned int  handle, dbr_long_t  & _val){ //5
00541         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00542         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00543         dbr_long_t val[1]={0};
00544         status=cafeLatte.get(handle, DBR_LONG, val);
00545         if (status==ICAFE_NORMAL) {_val=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00546         return status;
00547     }
00548     int get(const unsigned int  handle, dbr_long_t  & _val,
00549              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity){ //5
00550         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00551         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00552         dbr_long_t val[1]={0};
00553         status=cafeLatte.get(handle, DBR_STS_LONG, val, alarmStatus, alarmSeverity);
00554         if (status==ICAFE_NORMAL) {_val=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00555         return status;
00556     }
00557     int get(const unsigned int  handle, dbr_long_t  & _val,
00558              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts){ //5
00559         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00560         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00561         dbr_long_t val[1]={0};
00562         status=cafeLatte.get(handle, DBR_TIME_LONG, val, alarmStatus, alarmSeverity, ts);
00563         if (status==ICAFE_NORMAL) {_val=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00564         return status;
00565     }
00566 
00567     int get(const unsigned int  handle, long long  & _val){ //5+ long long
00568         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00569         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00570         long long val[1]={0};
00571         status=CAFE::get(handle, val);
00572         if (status==ICAFE_NORMAL) {_val=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00573         return status;
00574     }
00575     int get(const unsigned int  handle, long long  & _val,
00576              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity){ //5+ long long
00577         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00578         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00579         long long val[1]={0};
00580         status=CAFE::get(handle, val, alarmStatus, alarmSeverity);
00581         if (status==ICAFE_NORMAL) {_val=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00582         return status;
00583     }
00584     int get(const unsigned int  handle, long long & _val,
00585              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts){ //5+ long long
00586         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00587         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00588         long long val[1]={0};
00589         status=CAFE::get(handle, val, alarmStatus, alarmSeverity, ts);
00590         if (status==ICAFE_NORMAL) {_val=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00591         return status;
00592     }
00593 
00594     int getDouble(const unsigned int  handle, dbr_double_t  & _val){  //6
00595         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00596         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00597         dbr_double_t val[1]={0};
00598         status=cafeDoppio.get(handle, DBR_DOUBLE, val);
00599         if (status==ICAFE_NORMAL) {_val=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00600         return status;
00601     }
00602     int get(const unsigned int  handle, dbr_double_t  & _val){  //6
00603         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);                                
00604         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00605         dbr_double_t val[1]={0};
00606         status=cafeDoppio.get(handle, DBR_DOUBLE, val);                         
00607         if (status==ICAFE_NORMAL) {_val=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00608         return status;
00609     }
00610     int get(const unsigned int  handle, dbr_double_t  & _val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity){  //6
00611         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00612         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00613         dbr_double_t val[1]={0};
00614         status=cafeDoppio.get(handle, DBR_STS_DOUBLE, val, alarmStatus, alarmSeverity);
00615         if (status==ICAFE_NORMAL) {_val=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00616         return status;
00617     }
00618     int get(const unsigned int  handle, dbr_double_t  & _val,
00619              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts){ //6
00620         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00621         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00622         dbr_double_t val[1]={0};
00623         status=cafeDoppio.get(handle, DBR_TIME_DOUBLE, val, alarmStatus, alarmSeverity, ts);
00624         if (status==ICAFE_NORMAL) {_val=val[0];} CAFE::setNelemToPrevious(handle, nelemPrevious);
00625         return status;
00626     }
00627 
00628 
00629 
00630 
00632 
00633     int  get(const char * pv, std::string  * valStr); //0+
00634     int  get(const char * pv, std::string  * valStr, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity);//0+
00635     int  get(const char * pv, std::string  * valStr,
00636              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts); //0+
00637 
00638     int  get(const char * pv, dbr_string_t  * val); //0
00639     int  get(const char * pv, dbr_string_t  * val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity); //0
00640     int  get(const char * pv, dbr_string_t  * val,
00641              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts); //0
00642     int  get(const char * pv, dbr_short_t  * val);//1
00643     int  get(const char * pv, dbr_short_t  * val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity); //1
00644     int  get(const char * pv, dbr_short_t  * val,
00645              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts); //1
00646     int  get(const char * pv, dbr_float_t  * val);//2
00647     int  get(const char * pv, dbr_float_t  * val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity); //2
00648     int  get(const char * pv, dbr_float_t  * val,
00649              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts); //2
00650     int  get(const char * pv, dbr_enum_t  * val); //3
00651     int  get(const char * pv, dbr_enum_t  * val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity);  //3
00652     int  get(const char * pv, dbr_enum_t  * val,
00653              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts); //3
00654     int  get(const char * pv, dbr_char_t  * val); //4
00655     int  get(const char * pv, dbr_char_t  * val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity); //4
00656     int  get(const char * pv, dbr_char_t  * val,
00657              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts); //4
00658     int  get(const char * pv, dbr_long_t  * val); //5
00659     int  get(const char * pv, dbr_long_t  * val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity); //5
00660     int  get(const char * pv, dbr_long_t  * val,
00661              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts); //5
00662 
00663     int  get(const char * pv, long long  * val);  //5+ long long
00664     int  get(const char * pv, long long  * val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity); //5+ long long
00665     int  get(const char * pv, long long  * val,
00666              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts); //5+ long long
00667 
00668     int  get(const char * pv, dbr_double_t  * val);//6
00669     int  get(const char * pv, dbr_double_t  * val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity);  //6
00670     int  get(const char * pv, dbr_double_t  * val,
00671              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts); //6
00672 
00673 
00674     int  get(const char * pv, std::string  & valStr); //0+
00675     int  get(const char * pv, std::string  & valStr, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity); //0
00676     int  get(const char * pv, std::string  & valStr,
00677              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts); //0
00678 
00679     int  get(const char * pv, dbr_string_t  & val); //0
00680     int  get(const char * pv, dbr_string_t  & val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity); //0
00681     int  get(const char * pv, dbr_string_t  & val,
00682              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts); //0
00683     int  get(const char * pv, dbr_short_t  & val); //1
00684     int  get(const char * pv, dbr_short_t  & val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity); //1
00685     int  get(const char * pv, dbr_short_t  & val,
00686              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts); //1
00687     int  get(const char * pv, dbr_float_t  & val); //2
00688     int  get(const char * pv, dbr_float_t  & val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity); //2
00689     int  get(const char * pv, dbr_float_t  & val,
00690              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts); //2
00691     int  get(const char * pv, dbr_enum_t  & val); //3
00692     int  get(const char * pv, dbr_enum_t  & val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity); //3
00693     int  get(const char * pv, dbr_enum_t  & val,
00694              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts); //3
00695     int  get(const char * pv, dbr_char_t  & val); //4
00696     int  get(const char * pv, dbr_char_t  & val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity); //4
00697     int  get(const char * pv, dbr_char_t  & val,
00698              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts); //4
00699 
00700     int  get(const char * pv, dbr_long_t  & val); //5
00701     int  get(const char * pv, dbr_long_t  & val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity); //5
00702     int  get(const char * pv, dbr_long_t  & val,
00703              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts); //5
00704 
00705     int  get(const char * pv, long long  & val); //5+ long long
00706     int  get(const char * pv, long long  & val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity); //5+ long long
00707     int  get(const char * pv, long long  & val,
00708              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts); //5+ long long
00709 
00710     int  get(const char * pv, dbr_double_t  & val);  //6
00711     int  get(const char * pv, dbr_double_t  & val, dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity);  //6
00712     int  get(const char * pv, dbr_double_t  & val,
00713              dbr_short_t &alarmStatus, dbr_short_t &alarmSeverity, epicsTimeStamp &ts); //6
00714 
00715 
00716 
00718 
00719     int  waitForPut  (const unsigned int *h, const unsigned int nelem);
00720 
00722 
00723 
00724     int  set(const unsigned int  handle, PVDataHolder & pvd); //Yes
00725     int  set(const unsigned int  * handleArray, const unsigned int  nelem, PVDataHolder * pvd);
00726     int  set(const char *, PVDataHolder & pvd);
00727 
00728     //0
00729     int  set(const unsigned int  handle, const dbr_string_t * _val){
00730        return cafeSoluble.set (handle, DBR_STRING, _val);
00731     };
00732     //1
00733     int  set(const unsigned int  handle, const dbr_short_t * _val){
00734         return cafeSchale.set (handle, DBR_SHORT, _val);
00735     };
00736     //2
00737     int  set(const unsigned int  handle, const dbr_float_t * _val){
00738         return cafeFrappuccino.set (handle, DBR_FLOAT, _val);
00739     };
00740     //3
00741     int  set(const unsigned int  handle, const dbr_enum_t * _val){
00742         return cafeEspresso.set (handle, DBR_ENUM, _val);
00743     };
00744     //4
00745     int  set(const unsigned int  handle, const dbr_char_t * _val){
00746         return cafeCappuccino.set (handle, DBR_CHAR, _val);
00747     };
00748     //5
00749     int  set(const unsigned int  handle, const dbr_long_t * _val){
00750         return cafeLatte.set (handle, DBR_LONG, _val);
00751     };
00752     //5+ long long
00753     int  set(const unsigned int  handle, const long long * _val);
00754     //6
00755     int  set(const unsigned int  handle, const dbr_double_t * _val){
00756         return cafeDoppio.set (handle, DBR_DOUBLE, _val);
00757     };
00758 
00759 
00760     //set for PythonTypes
00761     //0
00762     int  setStringArray(const unsigned int handle, const dbr_string_t * _val){
00763        return cafeSoluble.set (handle, DBR_STRING, _val);
00764     };
00765                 
00766     //4
00767     int  setCharArray(const unsigned int handle, const dbr_char_t *  _val){
00768         return cafeCappuccino.set (handle, DBR_CHAR, _val);
00769     };
00770     //5
00771     int  setLongArray(const unsigned int handle, const dbr_long_t * _val){
00772         return cafeLatte.set (handle, DBR_LONG, _val);
00773     };          
00774     //6
00775     int  setDoubleArray(const unsigned int handle, const dbr_double_t * _val){
00776         return cafeDoppio.set (handle, DBR_DOUBLE, _val);
00777     };
00778 
00779     //0
00780     int  setString(const unsigned int handle, const std::string  _val){
00781        return set (handle, _val);
00782     };
00783                 //1
00784     int  setShort(const unsigned int  handle, const dbr_short_t  _val){
00785         return set (handle, _val);
00786     };
00787     //2
00788     int  setFloat(const unsigned int  handle, const dbr_float_t  _val){
00789         return set (handle, _val);
00790     };
00791     //3
00792     int  setUShort(const unsigned int  handle, const dbr_enum_t  _val){
00793         return set (handle, _val);
00794     };
00795     //4
00796     int  setChar(const unsigned int handle, const dbr_char_t   _val){
00797         return set (handle,  _val);
00798     };
00799     //5
00800     int   setLong(const unsigned int handle, const dbr_long_t  _val){
00801         return set (handle, _val);
00802     };
00803                 //5+
00804     int setLongLong(const unsigned int handle, const long long  _val){
00805         return set (handle, _val);
00806     };          
00807     //6
00808     int  setDouble(const unsigned int handle, const dbr_double_t  _val){
00809         return set (handle, _val);
00810     };
00811 
00812 
00813     //0
00814     int  set(const unsigned int  handle, std::string _val) {
00815         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00816         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00817         dbr_string_t val[1];
00818         //remove leading and trailing blanks;      
00819         char mess[MAX_STRING_SIZE];
00820         handleHelper.removeLeadingAndTrailingSpacesDbrString((char *) _val.c_str(),mess);
00821         sprintf(val[0],"%s",mess);
00822                                 
00823         status=cafeSoluble.set(handle, DBR_STRING, val);
00824         CAFE::setNelemToPrevious(handle, nelemPrevious); return status;
00825     }
00826     //0
00827     int  set(const unsigned int  handle, const dbr_string_t _val) {
00828         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00829         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00830         dbr_string_t val[1];
00831         sprintf(val[0],"%s",_val); status=cafeSoluble.set(handle, DBR_STRING, val);
00832         CAFE::setNelemToPrevious(handle, nelemPrevious); return status;
00833     }
00834     //1
00835     int  set(const unsigned int  handle, const dbr_short_t _val) {
00836         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00837         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00838         dbr_short_t val[1];
00839         val[0]=_val; status=cafeSchale.set(handle, DBR_SHORT, val);
00840         CAFE::setNelemToPrevious(handle, nelemPrevious); return status;
00841     }
00842     //2
00843     int  set(const unsigned int  handle, const dbr_float_t _val) {
00844         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00845         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00846         dbr_float_t val[1];
00847         val[0]=_val; status=cafeFrappuccino.set(handle, DBR_FLOAT, val);
00848         CAFE::setNelemToPrevious(handle, nelemPrevious); return status;
00849     }
00850     //3
00851     int  set(const unsigned int  handle, const dbr_enum_t _val) {
00852         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00853         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00854         dbr_enum_t val[1];
00855         val[0]=_val; status=cafeEspresso.set(handle, DBR_ENUM, val);
00856         CAFE::setNelemToPrevious(handle, nelemPrevious); return status;
00857     }
00858     //4
00859     int  set(const unsigned int  handle, const dbr_char_t _val) {
00860         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00861         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00862         dbr_char_t val[1];
00863         val[0]=_val; status=cafeCappuccino.set(handle, DBR_CHAR, val);
00864         CAFE::setNelemToPrevious(handle, nelemPrevious); return status;
00865     }
00866     //5
00867     int  set(const unsigned int  handle, const dbr_long_t _val) {
00868         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00869         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00870         dbr_long_t val[1];
00871         val[0]=_val; status=cafeLatte.set(handle, DBR_LONG, val);
00872         CAFE::setNelemToPrevious(handle, nelemPrevious); return status;
00873     }
00874     //5+ long long
00875     int  set(const unsigned int  handle, const long long _val) {
00876         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00877         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00878                                 if (_val <= LONG_MAX) {
00879                 dbr_long_t val[1];
00880                 val[0]=_val; 
00881                                         status=CAFE::set(handle,  val);
00882                                 }
00883                                 else {
00884                                         dbr_double_t val[1];
00885                 val[0]=_val; 
00886                                         status=CAFE::set(handle,  val);
00887                                 }       
00888         CAFE::setNelemToPrevious(handle, nelemPrevious); return status;
00889     }
00890     //6
00891     int  set(const unsigned int  handle, const dbr_double_t _val) {     
00892         unsigned int  nelemPrevious=CAFE::setNelemToOne(handle);
00893         if (nelemPrevious==0) { return ECAFE_INVALID_HANDLE;}
00894         dbr_double_t val[1];            
00895         val[0]=_val; status=cafeDoppio.set(handle, DBR_DOUBLE, val);    
00896                 CAFE::setNelemToPrevious(handle, nelemPrevious);                                
00897                 return status;
00898     }
00899 
00900 
00901     //0  non-blocking, flush at end
00902     int  set(const unsigned int  *handleArray,  const unsigned int  nelem, const dbr_string_t * _val,  int  *statusArray) {
00903         return cafeSoluble.set (handleArray, nelem, DBR_STRING, _val, statusArray);
00904     }
00905     //1  non-blocking, flush at end
00906     int  set(const unsigned int  *handleArray, const unsigned int  nelem, const dbr_short_t * _val,  int  *statusArray) {
00907         return cafeSchale.set (handleArray, nelem, DBR_SHORT, _val, statusArray);
00908     }
00909     //2  non-blocking, flush at end
00910     int  set(const unsigned int  *handleArray, const unsigned int  nelem, const dbr_float_t * _val,  int  *statusArray) {
00911         return cafeFrappuccino.set (handleArray, nelem, DBR_FLOAT, _val, statusArray);
00912     }
00913     //3  non-blocking, flush at end
00914     int  set(const unsigned int  *handleArray, const unsigned int  nelem, const dbr_enum_t * _val,  int  *statusArray) {
00915         return cafeEspresso.set (handleArray, nelem, DBR_ENUM, _val, statusArray);
00916     }
00917     //4  non-blocking, flush at end
00918     int  set(const unsigned int  *handleArray, const unsigned int  nelem, const dbr_char_t * _val,  int  *statusArray) {
00919         return cafeCappuccino.set (handleArray, nelem, DBR_CHAR, _val, statusArray);
00920     }
00921     //5  non-blocking, flush at end
00922     int  set(const unsigned int  *handleArray, const unsigned int  nelem, const dbr_long_t * _val,  int  *statusArray) {
00923         return cafeLatte.set (handleArray, nelem, DBR_LONG, _val, statusArray);
00924     }
00925     //5+ long long  non-blocking, flush at end
00926     int  set(const unsigned int  *handleArray, const unsigned int  nelem, const long long * _val,  int  *statusArray);
00927 
00928     //6  non-blocking, flush at end
00929     int  set(const unsigned int  *handleArray,  const unsigned int  nelem, const dbr_double_t * _val,  int  *statusArray) {
00930         return cafeDoppio.set (handleArray, nelem, DBR_DOUBLE, _val, statusArray);
00931     }
00932 
00933 
00934    
00935     //0
00936     int  set(const char *, const dbr_string_t * _val);
00937     //1
00938     int  set(const char *, const dbr_short_t * _val);
00939     //2
00940     int  set(const char *, const dbr_float_t * _val);
00941     //3
00942     int  set(const char *, const dbr_enum_t * _val);
00943     //4
00944     int  set(const char *, const dbr_char_t * _val);
00945     //5
00946     int  set(const char *, const dbr_long_t * _val);    
00947     //5+ long long
00948     int  set(const char *, const long long * _val);
00949     //6
00950     int  set(const char *, const dbr_double_t * _val);
00951                                         
00952     //0 string
00953     int  set(const char * pv, const std::string _val);
00954     //0
00955     int  set(const char *, const dbr_string_t _val);
00956     //1
00957     int  set(const char *, const dbr_short_t  _val);
00958     //2
00959     int  set(const char *, const dbr_float_t  _val);
00960     //3
00961     int  set(const char *, const dbr_enum_t   _val);
00962     //4
00963     int  set(const char *, const dbr_char_t   _val);
00964     //5
00965     int  set(const char *, const dbr_long_t   _val);
00966     //5+ long long
00967     int  set(const char *, const long long   _val);
00968     //6
00969     int  set(const char *, const dbr_double_t _val);
00970 
00971 
00972     //helper functions for &val methods
00973     unsigned int  setNelemToOne(const unsigned int handle);
00974     unsigned int  setNelemToPrevious(const unsigned int handle, unsigned int nelemPrevious);
00975 
00976     unsigned int  setNelemToRetrieveFromCacheToOne(const unsigned int handle);
00977     unsigned int  setNelemToRetrieveFromCacheToPrevious(const unsigned int handle, unsigned int nelemPrevious);
00978 
00979     //      group functions
00980     int  groupAttach (const unsigned int groupHandle, PVGroup &pvgroup);
00981     int  groupFetch(const unsigned int groupHandle, PVGroup &pvgroup);
00982 
00983     int  groupGet(PVGroup &pvgroup);
00984     int  groupGet(const unsigned int groupHandle, PVGroup &pvgroup);
00985                 
00986                 int  groupGetScalar(const unsigned int groupHandle, std::vector<std::string> &valV, std::vector<int> &statusV);
00987                 int  groupGetScalar(const unsigned int groupHandle, std::vector<double> &valV, std::vector<int> &statusV);              
00988                 int  groupGetScalar(const unsigned int groupHandle, std::vector<float> &valV, std::vector<int> &statusV);
00989                 int  groupGetScalar(const unsigned int groupHandle, std::vector<short> &valV, std::vector<int> &statusV);
00990                 int  groupGetScalar(const unsigned int groupHandle, std::vector<long> &valV, std::vector<int> &statusV);
00991                 int  groupGetScalar(const unsigned int groupHandle, std::vector<long long> &valV, std::vector<int> &statusV);           
00992                 int  groupGetScalar(const unsigned int groupHandle, std::vector<unsigned short> &valV, std::vector<int> &statusV);
00993                 int  groupGetScalar(const unsigned int groupHandle, std::vector<unsigned char> &valV, std::vector<int> &statusV);
00994                 int  groupGetScalar(const unsigned int groupHandle, std::vector<char> &valV, std::vector<int> &statusV);
00995                 
00996                 int  groupGetScalar(const unsigned int groupHandle, std::string * val,int * statusArray );      
00997                 int  groupGetScalar(const unsigned int groupHandle, double * val, int * statusArray);
00998                 int  groupGetScalar(const unsigned int groupHandle, float * val, int * statusArray);
00999                 int  groupGetScalar(const unsigned int groupHandle, short * val, int * statusArray);
01000                 int  groupGetScalar(const unsigned int groupHandle, long * val,int * statusArray );
01001                 int  groupGetScalar(const unsigned int groupHandle, long long * val, int * statusArray);
01002                 int  groupGetScalar(const unsigned int groupHandle, unsigned short * val, int * statusArray );
01003                 int  groupGetScalar(const unsigned int groupHandle, unsigned char * val,int * statusArray );
01004                 int  groupGetScalar(const unsigned int groupHandle, char * val,int * statusArray );
01005 
01006     int  groupGetCache(const unsigned int groupHandle, PVGroup &pvgroup) {
01007         const unsigned int * handleArray = handleHelper.getHandlesFromWithinGroup(groupHandle);         
01008                                 status=getCache (handleArray, pvgroup.getNPV(),  pvgroup.pvdata);               
01009                                 pvgroup.statusGroup=status;
01010                 return status;
01011     }
01012 
01013     //Closes channels but does not delete handle
01014                 std::vector<unsigned int> closeDisconnectedChannelsFromWithinGroupV(const unsigned int groupHandle) {   
01015                           std::vector<unsigned int> dhV=handleHelper.getDisconnectedHandlesFromWithinGroupV(groupHandle);
01016                                 if (dhV.size() >0) {closeChannelsKeepHandles(dhV);}
01017                                 return dhV;
01018                 }
01019 
01020                 std::vector<unsigned int> getDisconnectedHandlesFromWithinGroupV(const unsigned int groupHandle) {
01021                         return handleHelper.getDisconnectedHandlesFromWithinGroupV(groupHandle);
01022                 }
01023 
01024                 std::vector<unsigned int> getHandlesFromWithinGroupV(const unsigned int groupHandle) {
01025                         return handleHelper.getHandlesFromWithinGroupV(groupHandle);
01026                 }
01027 
01028 
01029                 unsigned int * getHandlesFromWithinGroup(const unsigned int groupHandle) {
01030                         return handleHelper.getHandlesFromWithinGroup(groupHandle);
01031                 }
01032 
01033     int  groupSet(PVGroup &pvgroup);
01034     int  groupSet(const unsigned int groupHandle, PVGroup &pvgroup);
01035 
01036     int  groupMonitorStart(const unsigned int  groupHandle, std::vector<int> &statusV) {
01037         std::vector<unsigned int> monitorIDV;
01038         return groupMonitorStart(groupHandle, statusV, monitorIDV);
01039     }
01040 
01041     int  groupMonitorStart(const unsigned int  groupHandle, std::vector<int> &statusV,
01042                            std::vector<MonitorPolicy> &mpV);
01043     int  groupMonitorStart(const unsigned int  groupHandle, std::vector<int> &statusV,
01044                            std::vector<unsigned int> &monitorIDV);
01045     int  groupMonitorStop (const unsigned int  groupHandle, std::vector<int> &statusV);
01046 
01047 
01048     unsigned int groupGetNPV(unsigned int _gHandle) {
01049         return handleHelper.getGroupNPV(_gHandle);
01050     }
01051     unsigned int groupGetNPV(const char * _gName) {
01052         return handleHelper.getGroupNPV(_gName);
01053     }
01054     unsigned int groupGetNPV(const char * _gName, ca_client_context * ccc) {
01055         return handleHelper.getGroupNPV(_gName, ccc);
01056     } 
01057         
01058                 
01059 #if HAVE_PYTHON_H
01060           void loadSFGroups(std::string suff);
01061 #endif
01062                 
01063 };
01064 
01065 #endif // CAFE_H
01066 

Generated on 28 May 2018 for CAFE by  doxygen 1.6.1