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

Generated on 28 May 2018 for CAFE by  doxygen 1.6.1