/// /// \file PVCtrlHolder.h /// \author Jan Chrin, PSI /// \date November 2014 /// \version CAFE 1.0.0 /// #ifndef PVCTRLHOLDER_H #define PVCTRLHOLDER_H #include /** * \class PVCtrlHolder * \brief This class is the holder of values associated with the * EPICS DBR_CTRL_(dataType) control structure of a given handle/pv */ class PVCtrlHolder : public PVHolder { friend class CAFE; friend class Connect; friend class Conduit; friend struct change_dataBufferPVCtrlHolder; friend struct change_dataBufferSize_CTRL; friend struct change_connectionHandlerArgs; friend struct change_pvAlias; private: short precision; char units[MAX_UNITS_SIZE]; CAFE_DATATYPE_UNION RISC_pad; CAFE_DATATYPE_UNION upperDispLimit; CAFE_DATATYPE_UNION lowerDispLimit; CAFE_DATATYPE_UNION upperAlarmLimit; CAFE_DATATYPE_UNION upperWarningLimit; CAFE_DATATYPE_UNION lowerWarningLimit; CAFE_DATATYPE_UNION lowerAlarmLimit; CAFE_DATATYPE_UNION upperCtrlLimit; CAFE_DATATYPE_UNION lowerCtrlLimit; Helper helper; public: PVCtrlHolder() { alarmStatus=0; alarmSeverity=0; precision=0; status=ECA_NORMAL; nelem=1; size=1; rule=true; beamEventNo=0; hasAlarm=true; noStr=0; dataType=(CAFE_DATATYPE) CAFE_NO_ACCESS; dataTypeNative=(CAFE_DATATYPE) CAFE_NO_ACCESS; strcpy(pv,""); strcpy(pvAlias,""); strcpy(device,""); strcpy(attrib,""); strcpy(units,""); val.reset( new CAFE_DATATYPE_UNION[nelem] ); val[0].d=0.00; }; PVCtrlHolder(unsigned int _sizeOfArray) { alarmStatus=0; alarmSeverity=0; precision=0; status=ECA_NORMAL; nelem=_sizeOfArray; size=_sizeOfArray; rule=true; beamEventNo=0; hasAlarm=true; noStr=0; dataType=(CAFE_DATATYPE) CAFE_NO_ACCESS; dataTypeNative=(CAFE_DATATYPE) CAFE_NO_ACCESS; strcpy(pv,""); strcpy(pvAlias,""); strcpy(device,""); strcpy(attrib,""); strcpy(units,""); val.reset( new CAFE_DATATYPE_UNION[nelem] ); for (unsigned int i=0; i0 ? nelem=_nelem : nelem=1; if (_nelem>size) { size=_nelem; val.reset( new CAFE_DATATYPE_UNION[size] ); } return nelem; }; short getPrecision() const { return precision; } const char * getUnits() const { return units; } std::string getUnitsAsString() const { return (std::string) units; } short getNoEnumStrings () const { return noStr; }; char * getEnumString(short indx) const { return (char *) strs[indx]; }; std::vector getEnumStrings() const { std::vector vEnumStrings; vEnumStrings.reserve(noStr>0?noStr:1); for ( short i=0; i