handleHelper.h

Go to the documentation of this file.
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 #ifndef HANDLEHELPER_H
00009 #define HANDLEHELPER_H
00010 
00011 #include <cadef.h>
00012 #include <helper.h>
00013 #include <defines.h>
00014 #include <hashConduit.h>
00015 #include <conduitFriends.h>
00016 #include <hashConduitGroup.h>
00017 #include <cafeDataType.h>
00018 
00019 
00020 class HandleHelper : public Helper {
00021 
00022     private:
00023         CAFEStatus cafeStatus;
00024         cafeConduit_set::iterator itcs;
00025 
00026         cafeGroup_set::iterator itgs;
00027 
00028         ChannelRequestMetaDataClient channelRequestMetaDataClient;
00029         ChannelRequestMetaData channelRequestMetaData;
00030 
00031         ChannelRequestMetaDataClient channelRequestMetaCtrlClient;
00032         ChannelRequestMetaData channelRequestMetaCtrl;
00033 
00034         ChannelDeviceAttribute channelDeviceAttribute;
00035 
00036         CAFEDataTypeCode cafeDataTypeCode;
00037 
00038         struct etsNorm{ unsigned int secPastEpoch; unsigned int nsec;};
00039         struct etsDate{ int year; int mon; int day;
00040                         int hour; int min; int sec; unsigned long nsec;};
00041 
00042 
00043     public:
00044         HandleHelper(){};
00045         ~HandleHelper(){};
00046 
00047                                 //Move to private if possible
00048                                 int setSTS(unsigned int  _handle, dbr_short_t a, dbr_short_t s, epicsTimeStamp ets);
00049 
00050 
00051         etsNorm _etsNorm;
00052         etsDate _etsDate;
00053 
00054         int  checkConsistency();
00055         int  checkConsistency(unsigned int  _handle);
00056 
00057         int  setChannelDeviceAttribute(std::string deliminator);
00058         int  setChannelDeviceAttribute(unsigned int  _handle, std::string deliminator);
00059 
00060         int  getChannelDevice(unsigned int  _handle, std::string & device);
00061         int  getChannelAttribute(unsigned int  _handle, std::string & attribute);
00062 
00063         int  getChannelRegalia(unsigned int  _handle, ChannelRegalia & channelInfo);
00064 
00065 
00066         //Add getPVFromHandle       
00067         ca_client_context *  getContextFromPV     (const char * _pv);
00068         ca_client_context *  getContextFromHandle (unsigned int _handle);
00069 
00070         const char * getPVFromHandle     (unsigned int  _handle);
00071         const char * getPVFromHandle     (unsigned int  _handle, ca_client_context * ccc);
00072 
00073         unsigned int  getHandleFromPV     (const char * _pv);
00074         unsigned int  getHandleFromPV     (const char * _pv, ca_client_context * ccc);
00075         unsigned int  getHandleFromPVAlias(const char * _pv);
00076         unsigned int  getHandleFromPVAlias(const char * _pv, ca_client_context * ccc);
00077 
00078 
00079                     vector<unsigned int>  getHandlesFromWithinGroupV(unsigned int  gh);
00080         unsigned int * getHandlesFromWithinGroup(unsigned int  gh);
00081 
00082         unsigned int  getHandleFromPVWithinGroup(const char * _pv, unsigned int  gh);
00083         unsigned int  getHandleFromPVWithinGroup(const char * _pv,
00084                                   ca_client_context * ccc, unsigned int  gh);
00085 
00086         int getStatus   (unsigned int  h);
00087         int getTimeStamp(unsigned int  h, epicsTimeStamp &ts);
00088 
00089 
00090         etsNorm getEpicsTimeStampAsUInt32(unsigned int h) {
00091             epicsTimeStamp ts;
00092             getTimeStamp(h, ts);
00093             _etsNorm.secPastEpoch=ts.secPastEpoch; _etsNorm.nsec=ts.nsec;
00094             return _etsNorm;};
00095 
00096         etsDate getEpicsTimeStampAsDate(unsigned int h) {
00097             epicsTimeStamp ts;
00098 
00099             getTimeStamp(h, ts);
00100 
00101             epicsTime time(ts);
00102 
00103             local_tm_nano_sec local = (local_tm_nano_sec) time;
00104             _etsDate.year = local.ansi_tm.tm_year + 1900;
00105             _etsDate.mon = local.ansi_tm.tm_mon  + 1;
00106             _etsDate.day = local.ansi_tm.tm_mday;
00107             _etsDate.hour = local.ansi_tm.tm_hour;
00108             _etsDate.min = local.ansi_tm.tm_min;
00109             _etsDate.sec = local.ansi_tm.tm_sec;
00110 
00111                                                 _etsDate.nsec = (unsigned long) ts.nsec;
00112 
00113             return _etsDate;
00114         }
00115 
00116                 etsDate epicsTimeStampToDate(epicsTimeStamp ts) {
00117                         epicsTime time(ts);
00118                         local_tm_nano_sec local = (local_tm_nano_sec) time;
00119                         _etsDate.year = local.ansi_tm.tm_year + 1900;
00120                         _etsDate.mon = local.ansi_tm.tm_mon  + 1;
00121                         _etsDate.day = local.ansi_tm.tm_mday;
00122                         _etsDate.hour = local.ansi_tm.tm_hour;
00123                         _etsDate.min = local.ansi_tm.tm_min;
00124                         _etsDate.sec = local.ansi_tm.tm_sec;
00125                         _etsDate.nsec = (unsigned long) ts.nsec;
00126                         return _etsDate;
00127                 }
00128 
00129 
00130 
00131         int getPulseID(unsigned int h, unsigned int &pulseID) {
00132             epicsTimeStamp ts;            
00133             int status=getTimeStamp(h, ts);
00134             if (status==ICAFE_NORMAL){
00135                 std::string nsS = static_cast<ostringstream*>( &(ostringstream() << ts.nsec) )->str();              
00136                 int l=nsS.length();
00137                 int startPos=max(l-6,0);
00138                 std::string pidS = nsS.substr(startPos,min(6,l));
00139                 if ( ! (istringstream(pidS) >> pulseID) ) pulseID = 0;
00140             }
00141             return status;
00142         }
00143 
00144         unsigned int getPulseIDFromTS(epicsTimeStamp ts) {
00145             unsigned int pulseID;
00146             std::string nsS = static_cast<ostringstream*>( &(ostringstream() << ts.nsec) )->str();
00147             int l=nsS.length();
00148             int startPos=max(l-6,0);
00149             std::string pidS = nsS.substr(startPos,min(6,l));
00150             if ( ! (istringstream(pidS) >> pulseID) ) pulseID = 0;
00151             return pulseID;
00152         }
00153 
00154         int  getAlarmStatusSeverity(unsigned int  h, dbr_short_t as[2]);
00155                                 int  getAlarmStatusSeverityAsString(unsigned int  h, string asas[2]);
00156         unsigned int  getNoHandles();
00157         unsigned int  getNextFreeHandle();
00158 
00159         bool isChannelConnected(unsigned int handle);
00160 
00161         int  printHandle (unsigned int  h);
00162                     int  printHandlesV(vector<unsigned int> handleV);
00163                     int  printHandles(unsigned int * handleArray, unsigned int nHandles);      
00164                                 unsigned int  printHandles();
00165         unsigned int  printChannels(){return printHandles();};
00166         unsigned int  printDisconnectedHandles();
00167         unsigned int  printDisconnectedChannels(){return printDisconnectedChannels();};
00168                     unsigned int  getDisconnectedHandles(vector<unsigned int> &, vector<string> &);
00169                                 unsigned int  getConnectedHandles(vector<unsigned int> &, vector<string> &);
00170                                 unsigned int  getHandles(vector<unsigned int> &, vector<string> &);
00171                                 unsigned int  getHandleStates(vector<unsigned int> &, vector<string> &, vector<unsigned short> &);
00172         unsigned int  printMonitors(); 
00173                                 
00174                                 vector<unsigned int> getHandlesWithMonitors();
00175         int  getMonitorHandlesAndActions(vector<unsigned int> & handleV, vector<string> & actionV);  
00176                                                 
00177                     int  setCafeDbrTypeV(vector<unsigned int>  _handleV, CAFENUM::DBR_TYPE cdt);
00178         int  setCafeDbrType(unsigned int  _handle, CAFENUM::DBR_TYPE cdt);
00179         int  getCafeDbrType(unsigned int  _handle, CAFENUM::DBR_TYPE &cdt);
00180 
00181         bool isEnum(unsigned int  _handle);
00182                                 short  getEnumFromString(unsigned int  _handle, string enumStringValue);
00183                                 string getStringFromEnum(unsigned int  _handle, unsigned short enumValue);
00184 
00185         int  getDataTypeNative (unsigned int  _handle, chtype &ndt);
00186         int  getDataTypeRequest(unsigned int  _handle, chtype &rdt);
00187 
00188         int  eraseMonitorAction(unsigned int  _handle);
00189         int  clearMonitorAction(unsigned int  _handle);
00190 
00191         int  clearMonitorAction();
00192 
00193         int  addMonitorAction(unsigned int  _handle, string mAction);
00194         int  getMonitorAction(unsigned int  _handle, vector<string> &msV);
00195         vector<string> getMonitorAction(bool onlyIfNewData); //all handles; false gives all
00196 
00197         int  getMonitorPolicyVector(unsigned int  _handle, vector<MonitorPolicy> &mpV);
00198                                 int  getMonitorPolicyInWaitingVector(unsigned int  _handle, vector<MonitorPolicy> &mpV);
00199                     int  getNmonitor(unsigned int _handle);
00200                                 int  getNmonitorData(unsigned int _handle);
00201                                 int  getNmonitorCtrl(unsigned int _handle);
00202                                 vector<unsigned int> getMonitorIDs(unsigned int _handle);
00203                                 vector<unsigned int> getMonitorIDsInWaiting(unsigned int _handle);
00204 
00205         unsigned int getUsrArgsAsUInt(unsigned int _handle); //From  c.channelRequestMetaData.usrArg 
00206         chtype getDataTypeCB(unsigned int _handle);
00207                                 chtype getDbrDataTypeCB(unsigned int _handle);
00208                                 CAFENUM::DBR_TYPE getCafeDbrTypeCB(unsigned int _handle);
00209  
00210         //setNoElements
00211         int     setNelem (); //All handles to native
00212         unsigned int     setNelem (unsigned int  _handle); //To Native
00213                                 unsigned int     setNelemToNative (unsigned int  _handle){return setNelem(_handle);}; //To Native
00214         unsigned int     setNelem (unsigned int  _handle, unsigned int  _nelem);
00215         //For Arrays:
00216                           unsigned int     setNelemToRetrieveFromCache (unsigned int  _handle);
00217         unsigned int     setNelemToRetrieveFromCache (unsigned int  _handle, unsigned int  _nelem);
00218                                 unsigned int     setNelemToRetrieveFromCtrlCache (unsigned int  _handle);
00219         unsigned int     setNelemToRetrieveFromCtrlCache (unsigned int  _handle, unsigned int  _nelem);
00220         unsigned int     getNelemToRetrieveFromCache (unsigned int  _handle);
00221         unsigned int     getNelemToRetrieveFromCtrlCache (unsigned int  _handle);
00222 
00223         char * getPV      (unsigned int  _handle);
00224         char * getPVAlias (unsigned int  _handle);
00225 
00226         unsigned int     getNelemClient  (unsigned int  _handle);
00227         unsigned int     getNelemNative  (unsigned int  _handle);
00228         unsigned int     getNelemRequest (unsigned int  _handle);
00229 
00230         int  getNelem(unsigned int  _handle, unsigned int  &c, unsigned int  &n,  unsigned int  &r);
00231 
00232         //Ctrl
00233                                 
00234         unsigned int     setNelemCtrl (unsigned int  _handle, unsigned int  _nelem);
00235         unsigned int     getNelemRequestCtrl (unsigned int _handle);
00236         unsigned int     getNelemClientCtrl  (unsigned int _handle);
00237         //setOffSet
00238         unsigned int     setOffset(unsigned int  _handle, unsigned int  _offset);
00239         unsigned int     getOffset(unsigned int  _handle);
00240                                 unsigned int     getOffsetLast(unsigned int  _handle);
00241 
00242         void    setFirstAndLastArrayElements(unsigned int  _handle,
00243                                     unsigned int  _start, unsigned int  _last){
00244             if (_last > _start ) { setOffset(_handle, _start); setNelem(_handle, _last);}
00245             else {std::cout << " offset must be less than the nelements" <<std::endl; };
00246         };
00247 
00248 
00249         //long    setOffsetCtrl(unsigned int  _handle, unsigned int  _offset);
00250 
00251         //Groups
00252         unsigned int  getGroupHandleFromGroupName(const char * _groupName){
00253             ca_client_context * ccc= ca_current_context();
00254             return getGroupHandleFromGroupName(_groupName, ccc);
00255         }
00256 
00257         unsigned int  getGroupHandleFromGroupName(const char * _groupName, ca_client_context * ccc);
00258         string getGroupNameFromGroupHandle(unsigned int  groupHandle);
00259 
00260         unsigned int getGroupNPV(unsigned int gHandle);
00261         unsigned int getGroupNPV(const char * _groupName, ca_client_context * ccc);
00262         unsigned int getGroupNPV(const char * _groupName){
00263             ca_client_context * ccc= ca_current_context();
00264             return getGroupNPV(_groupName, ccc);
00265         }
00266 
00267 };
00268 #endif

Generated on 3 May 2017 for CAFE by  doxygen 1.6.1