fist part.
-- Benjamin Sailer
pas_SOURCES += ca/server/paramBlobRecord.cc
pas_SOURCES += ca/server/paramFilenameRecord.cc
pas_SOURCES += ca/server/paramIntRecord.cc
-pas_SOURCES += ca/server/paramRecord.cc
pas_SOURCES += ca/server/paramRecordSet.cc
pas_SOURCES += ca/server/paramStringRecord.cc
pas_SOURCES += ca/server/record.cc
libtclParam_a_CFLAGS =
libtclParam_p_a_CFLAGS = -DPTHREADS
-pas_SOURCES = ca/server/arrayDest.cc ca/server/paramBlobRecord.cc ca/server/paramFilenameRecord.cc ca/server/paramIntRecord.cc ca/server/paramRecord.cc ca/server/paramRecordSet.cc ca/server/paramStringRecord.cc ca/server/record.cc ca/server/paramServer.cc
+pas_SOURCES = ca/server/arrayDest.cc ca/server/paramBlobRecord.cc ca/server/paramFilenameRecord.cc ca/server/paramIntRecord.cc ca/server/paramRecordSet.cc ca/server/paramStringRecord.cc ca/server/record.cc ca/server/paramServer.cc
EXTRA_BUILT_SOURCES_MY = oraParam.c
subdir = .
am_pas_OBJECTS = arrayDest.$(OBJEXT) paramBlobRecord.$(OBJEXT) \
paramFilenameRecord.$(OBJEXT) paramIntRecord.$(OBJEXT) \
- paramRecord.$(OBJEXT) paramRecordSet.$(OBJEXT) \
- paramStringRecord.$(OBJEXT) record.$(OBJEXT) \
- paramServer.$(OBJEXT)
+ paramRecordSet.$(OBJEXT) paramStringRecord.$(OBJEXT) \
+ record.$(OBJEXT) paramServer.$(OBJEXT)
pas_OBJECTS = $(am_pas_OBJECTS)
pas_LDADD = $(LDADD)
pas_DEPENDENCIES =
@AMDEP_TRUE@ ./$(DEPDIR)/paramBlobRecord.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/paramFilenameRecord.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/paramIntRecord.Po \
-@AMDEP_TRUE@ ./$(DEPDIR)/paramRecord.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/paramRecordSet.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/paramServer.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/paramStringRecord.Po \
paramBlobRecord.$(OBJEXT): ca/server/paramBlobRecord.cc
paramFilenameRecord.$(OBJEXT): ca/server/paramFilenameRecord.cc
paramIntRecord.$(OBJEXT): ca/server/paramIntRecord.cc
-paramRecord.$(OBJEXT): ca/server/paramRecord.cc
paramRecordSet.$(OBJEXT): ca/server/paramRecordSet.cc
paramStringRecord.$(OBJEXT): ca/server/paramStringRecord.cc
record.$(OBJEXT): ca/server/record.cc
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paramBlobRecord.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paramFilenameRecord.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paramIntRecord.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paramRecord.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paramRecordSet.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paramServer.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/paramStringRecord.Po@am__quote@
@AMDEP_TRUE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o paramIntRecord.obj `cygpath -w ca/server/paramIntRecord.cc`
-paramRecord.o: ca/server/paramRecord.cc
-@AMDEP_TRUE@ source='ca/server/paramRecord.cc' object='paramRecord.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@ depfile='$(DEPDIR)/paramRecord.Po' tmpdepfile='$(DEPDIR)/paramRecord.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o paramRecord.o `test -f 'ca/server/paramRecord.cc' || echo '$(srcdir)/'`ca/server/paramRecord.cc
-
-paramRecord.obj: ca/server/paramRecord.cc
-@AMDEP_TRUE@ source='ca/server/paramRecord.cc' object='paramRecord.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@ depfile='$(DEPDIR)/paramRecord.Po' tmpdepfile='$(DEPDIR)/paramRecord.TPo' @AMDEPBACKSLASH@
-@AMDEP_TRUE@ $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
- $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o paramRecord.obj `cygpath -w ca/server/paramRecord.cc`
-
paramRecordSet.o: ca/server/paramRecordSet.cc
@AMDEP_TRUE@ source='ca/server/paramRecordSet.cc' object='paramRecordSet.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@ depfile='$(DEPDIR)/paramRecordSet.Po' tmpdepfile='$(DEPDIR)/paramRecordSet.TPo' @AMDEPBACKSLASH@
-static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramBlobRecord.cc,v 1.13 2003-01-31 12:25:32 hadaq Exp $";
+static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramBlobRecord.cc,v 1.14 2003-05-19 11:01:55 sailer Exp $";
#define _POSIX_C_SOURCE 199509L
#if HAVE_CONFIG_H
#define EPICS_MAX_INDEX 4092
ParamBlobRecord::ParamBlobRecord(caServer& cas, const Param *p, const char *rn, const char *u) :
- ParamRecord(cas, p, rn, u)
+ Record(cas, p, rn, u, aitEnumUint32)
{
size_t size;
FILE *tmp;
funcTable.installReadFunc("severity", &Record::readSeverity);
funcTable.installReadFunc("seconds", &Record::readSeconds);
- funcTable.installReadFunc("alarmLow", &ParamRecord::readAlarmLow);
- funcTable.installReadFunc("alarmHigh", &ParamRecord::readAlarmHigh);
- funcTable.installReadFunc("alarmLowWarning", &ParamRecord::readAlarmLowWarning);
- funcTable.installReadFunc("alarmHighWarning", &ParamRecord::readAlarmHighWarning);
- funcTable.installReadFunc("graphicLow", &ParamRecord::readGraphicLow);
- funcTable.installReadFunc("graphicHigh", &ParamRecord::readGraphicHigh);
- funcTable.installReadFunc("controlLow", &ParamRecord::readControlLow);
- funcTable.installReadFunc("controlHigh", &ParamRecord::readControlHigh);
- funcTable.installReadFunc("precision", &ParamRecord::readPrecision);
+ funcTable.installReadFunc("alarmLow", &Record::readAlarmLow);
+ funcTable.installReadFunc("alarmHigh", &Record::readAlarmHigh);
+ funcTable.installReadFunc("alarmLowWarning", &Record::readAlarmLowWarning);
+ funcTable.installReadFunc("alarmHighWarning", &Record::readAlarmHighWarning);
+ funcTable.installReadFunc("graphicLow", &Record::readGraphicLow);
+ funcTable.installReadFunc("graphicHigh", &Record::readGraphicHigh);
+ funcTable.installReadFunc("controlLow", &Record::readControlLow);
+ funcTable.installReadFunc("controlHigh", &Record::readControlHigh);
+ funcTable.installReadFunc("precision", &Record::readPrecision);
funcTable.installReadFunc("value", &ParamBlobRecord::readValue);
}
val->setSevr(epicsSevNone);
if (this->interest == aitTrue && pCAS != NULL) {
- casEventMask select(pCAS->valueEventMask|pCAS->logEventMask|pCAS->alarmEventMask);
+#if EPICS_RELEASE >= 314
+ casEventMask select(pCAS->valueEventMask()|pCAS->logEventMask()|
+ pCAS->alarmEventMask());
+#else
+ casEventMask select(pCAS->valueEventMask|pCAS->logEventMask|
+ pCAS->alarmEventMask);
+#endif
this->postEvent (select, *val);
}
return ((scan() == S_cas_success) && funcTable.read(*this, prototype));
}
+#if EPICS_RELEASE >= 314
+caStatus ParamBlobRecord::write(const casCtx &ctx, const gdd &value)
+#else
caStatus ParamBlobRecord::write(const casCtx &ctx, gdd &value)
+#endif
{
return S_cas_noWrite;
}
#include "paramRecord.h"
-class ParamBlobRecord : public ParamRecord {
+class ParamBlobRecord : public Record {
private:
aitIndex index;
gddAppFuncTable<ParamBlobRecord> funcTable;
public:
- ParamBlobRecord(caServer&, const Param *, const char *, const char *);
+ ParamBlobRecord(caServer&, const Param *p, const char *rn, const char *u);
~ParamBlobRecord();
epicsShareFunc aitEnum bestExternalType() const;
epicsShareFunc unsigned maxDimension() const;
epicsShareFunc aitIndex maxBound(unsigned int) const;
gddAppFuncTableStatus readValue(gdd &);
+
caStatus scan();
- caStatus read(const casCtx &, gdd &);
- caStatus write(const casCtx &, gdd &);
+ caStatus read(const casCtx &ctx, gdd &value);
+#if EPICS_RELEASE >= 314
+ caStatus write(const casCtx &ctx, const gdd &value);
+#else
+ caStatus write(const casCtx &ctx, gdd &value);
+#endif
};
#endif /* !PARAMBLOBRECORD_H */
-static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramFilenameRecord.cc,v 1.9 2003-01-31 12:25:32 hadaq Exp $";
+static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramFilenameRecord.cc,v 1.10 2003-05-19 11:01:55 sailer Exp $";
#define _POSIX_C_SOURCE 199509L
#if HAVE_CONFIG_H
#include "paramFilenameRecord.h"
ParamFilenameRecord::ParamFilenameRecord(caServer& cas, const Param *p, const char *rn, const char *u) :
- ParamRecord(cas, p, rn, u)
+ Record(cas, p, rn, u, aitEnumString)
{
int rows;
char *tmp[PARAM_MAX_ARRAY_LEN];
funcTable.installReadFunc("severity", &Record::readSeverity);
funcTable.installReadFunc("seconds", &Record::readSeconds);
- funcTable.installReadFunc("alarmLow", &ParamRecord::readAlarmLow);
- funcTable.installReadFunc("alarmHigh", &ParamRecord::readAlarmHigh);
- funcTable.installReadFunc("alarmLowWarning", &ParamRecord::readAlarmLowWarning);
- funcTable.installReadFunc("alarmHighWarning", &ParamRecord::readAlarmHighWarning);
- funcTable.installReadFunc("graphicLow", &ParamRecord::readGraphicLow);
- funcTable.installReadFunc("graphicHigh", &ParamRecord::readGraphicHigh);
- funcTable.installReadFunc("controlLow", &ParamRecord::readControlLow);
- funcTable.installReadFunc("controlHigh", &ParamRecord::readControlHigh);
- funcTable.installReadFunc("precision", &ParamRecord::readPrecision);
+ funcTable.installReadFunc("alarmLow", &Record::readAlarmLow);
+ funcTable.installReadFunc("alarmHigh", &Record::readAlarmHigh);
+ funcTable.installReadFunc("alarmLowWarning", &Record::readAlarmLowWarning);
+ funcTable.installReadFunc("alarmHighWarning", &Record::readAlarmHighWarning);
+ funcTable.installReadFunc("graphicLow", &Record::readGraphicLow);
+ funcTable.installReadFunc("graphicHigh", &Record::readGraphicHigh);
+ funcTable.installReadFunc("controlLow", &Record::readControlLow);
+ funcTable.installReadFunc("controlHigh", &Record::readControlHigh);
+ funcTable.installReadFunc("precision", &Record::readPrecision);
funcTable.installReadFunc("value", &ParamFilenameRecord::readValue);
}
val->setSevr(epicsSevNone);
if (this->interest == aitTrue && pCAS != NULL) {
- casEventMask select(pCAS->valueEventMask|pCAS->logEventMask|pCAS->alarmEventMask);
+#if EPICS_RELEASE >= 314
+ casEventMask select(pCAS->valueEventMask()|pCAS->logEventMask()|
+ pCAS->alarmEventMask());
+#else
+ casEventMask select(pCAS->valueEventMask|pCAS->logEventMask|
+ pCAS->alarmEventMask);
+#endif
this->postEvent (select, *val);
}
return ((scan() == S_cas_success) && funcTable.read(*this, prototype));
}
+#if EPICS_RELEASE >= 314
+caStatus ParamFilenameRecord::write(const casCtx &ctx, const gdd &value)
+#else
caStatus ParamFilenameRecord::write(const casCtx &ctx, gdd &value)
+#endif
{
return S_cas_noWrite;
}
#include "paramRecord.h"
-class ParamFilenameRecord : public ParamRecord {
+class ParamFilenameRecord : public Record {
private:
aitIndex index;
char *ourValue[PARAM_MAX_ARRAY_LEN];
gddAppFuncTable<ParamFilenameRecord> funcTable;
public:
- ParamFilenameRecord(caServer&, const Param *, const char *, const char *);
+ ParamFilenameRecord(caServer&, const Param *p, const char *rn, const char *u);
~ParamFilenameRecord();
epicsShareFunc aitEnum bestExternalType() const;
epicsShareFunc unsigned maxDimension() const;
epicsShareFunc aitIndex maxBound(unsigned int) const;
gddAppFuncTableStatus readValue(gdd &);
+
caStatus scan();
- caStatus read(const casCtx &, gdd &);
- caStatus write(const casCtx &, gdd &);
+ caStatus read(const casCtx &ctx, gdd &value);
+#if EPICS_RELEASE >= 314
+ caStatus write(const casCtx &ctx, const gdd &value);
+#else
+ caStatus write(const casCtx &ctx, gdd &value);
+#endif
};
#endif /* !PARAMFILENAMERECORD_H */
-static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramIntRecord.cc,v 1.12 2003-01-31 12:25:32 hadaq Exp $";
+static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramIntRecord.cc,v 1.13 2003-05-19 11:01:55 sailer Exp $";
#define _POSIX_C_SOURCE 199509L
#if HAVE_CONFIG_H
#include "paramIntRecord.h"
ParamIntRecord::ParamIntRecord(caServer& cas, const Param *p, const char *rn, const char *u) :
- ParamRecord(cas, p, rn, u)
+ Record(cas, p, rn, u, aitEnumUint32)
{
int rows;
unsigned long int tmp[PARAM_MAX_ARRAY_LEN];
funcTable.installReadFunc("severity", &Record::readSeverity);
funcTable.installReadFunc("seconds", &Record::readSeconds);
- funcTable.installReadFunc("alarmLow", &ParamRecord::readAlarmLow);
- funcTable.installReadFunc("alarmHigh", &ParamRecord::readAlarmHigh);
- funcTable.installReadFunc("alarmLowWarning", &ParamRecord::readAlarmLowWarning);
- funcTable.installReadFunc("alarmHighWarning", &ParamRecord::readAlarmHighWarning);
- funcTable.installReadFunc("graphicLow", &ParamRecord::readGraphicLow);
- funcTable.installReadFunc("graphicHigh", &ParamRecord::readGraphicHigh);
- funcTable.installReadFunc("controlLow", &ParamRecord::readControlLow);
- funcTable.installReadFunc("controlHigh", &ParamRecord::readControlHigh);
- funcTable.installReadFunc("precision", &ParamRecord::readPrecision);
+ funcTable.installReadFunc("alarmLow", &Record::readAlarmLow);
+ funcTable.installReadFunc("alarmHigh", &Record::readAlarmHigh);
+ funcTable.installReadFunc("alarmLowWarning", &Record::readAlarmLowWarning);
+ funcTable.installReadFunc("alarmHighWarning", &Record::readAlarmHighWarning);
+ funcTable.installReadFunc("graphicLow", &Record::readGraphicLow);
+ funcTable.installReadFunc("graphicHigh", &Record::readGraphicHigh);
+ funcTable.installReadFunc("controlLow", &Record::readControlLow);
+ funcTable.installReadFunc("controlHigh", &Record::readControlHigh);
+ funcTable.installReadFunc("precision", &Record::readPrecision);
funcTable.installReadFunc("value", &ParamIntRecord::readValue);
}
val->setSevr(epicsSevNone);
if (this->interest == aitTrue && pCAS != NULL) {
- casEventMask select(pCAS->valueEventMask|pCAS->logEventMask|pCAS->alarmEventMask);
+#if EPICS_RELEASE >= 314
+ casEventMask select(pCAS->valueEventMask()|pCAS->logEventMask()|
+ pCAS->alarmEventMask());
+#else
+ casEventMask select(pCAS->valueEventMask|pCAS->logEventMask|
+ pCAS->alarmEventMask);
+#endif
this->postEvent (select, *val);
}
return ((scan() == S_cas_success) && funcTable.read(*this, prototype));
}
+#if EPICS_RELEASE >= 314
+caStatus ParamIntRecord::write(const casCtx &ctx, const gdd &value)
+#else
caStatus ParamIntRecord::write(const casCtx &ctx, gdd &value)
+#endif
{
aitUint32 intValue;
#include "paramRecord.h"
#include "arrayDest.h"
-class ParamIntRecord : public ParamRecord {
+class ParamIntRecord : public Record {
private:
aitIndex index;
unsigned long int ourValue[PARAM_MAX_ARRAY_LEN];
gddAppFuncTable<ParamIntRecord> funcTable;
public:
- ParamIntRecord(caServer&, const Param *, const char *, const char *);
+ ParamIntRecord(caServer&, const Param *p, const char *rn, const char *u);
~ParamIntRecord();
epicsShareFunc aitEnum bestExternalType() const;
epicsShareFunc unsigned maxDimension() const;
epicsShareFunc aitIndex maxBound(unsigned int) const;
gddAppFuncTableStatus readValue(gdd &);
+
caStatus scan();
- caStatus read(const casCtx &, gdd &);
- caStatus write(const casCtx &, gdd &);
+ caStatus read(const casCtx &ctx, gdd &value);
+#if EPICS_RELEASE >= 314
+ caStatus write(const casCtx &ctx, const gdd &value);
+#else
+ caStatus write(const casCtx &ctx, gdd &value);
+#endif
};
#endif /* !PARAMINTRECORD_H */
+++ /dev/null
-static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/Attic/paramRecord.cc,v 1.9 2003-01-31 12:25:32 hadaq Exp $";
-#define _POSIX_C_SOURCE 199509L
-
-#if HAVE_CONFIG_H
-#include <config.h>
-#endif /* HAVE_CONFIG_H */
-
-extern "C" {
- #include <unistd.h>
-
- #include <ctype.h>
- #include <stdio.h>
- #include <string.h>
-}
-
-#include "paramRecord.h"
-
-ParamRecord::ParamRecord(caServer& cas, const Param *p, const char *rn, const char *u) :
- Record(cas, rn, u, aitEnumString), param(p)
-{
- char tmp;
- char buf1[PARAM_MAX_NAME_LEN];
- char buf2[PARAM_MAX_NAME_LEN];
- char buf3[PARAM_MAX_NAME_LEN];
-
- strcpy(pPVName, rn);
- strcpy(buf1, "");
- strcpy(buf2, "");
- strcpy(buf3, "");
- if(sscanf(pPVName, "HAD:P%c:%[^:]:%[^:]:%[^:]", &tmp, buf1, buf2, buf3) != 4) {
- strcpy(name, buf1);
- strcpy(idx, buf2);
- } else {
- strcpy(name, buf2);
- strcpy(idx, buf3);
- }
-
- for (unsigned int i = 0 ; i < strlen(name) ; i++) {
- name[i] = tolower(name[i]);
- }
- for (unsigned int i = 0 ; i < strlen(idx) ; i++) {
- idx[i] = tolower(idx[i]);
- }
- interest = aitFalse;
-}
-
-ParamRecord::~ParamRecord()
-{
- delete pDest;
-}
-
-const char *ParamRecord::getPVName()
-{
- return pPVName;
-}
-
-gddAppFuncTableStatus ParamRecord::readAlarmLow(gdd &value)
-{
- value.putConvert(0);
- return S_casApp_success;
-}
-
-gddAppFuncTableStatus ParamRecord::readAlarmHigh(gdd &value)
-{
- value.putConvert(0);
- return S_casApp_success;
-}
-
-gddAppFuncTableStatus ParamRecord::readAlarmLowWarning(gdd &value)
-{
- value.putConvert(0);
- return S_casApp_success;
-}
-
-gddAppFuncTableStatus ParamRecord::readAlarmHighWarning(gdd &value)
-{
- value.putConvert(0);
- return S_casApp_success;
-}
-
-gddAppFuncTableStatus ParamRecord::readGraphicLow(gdd &value)
-{
- value.putConvert(0);
- return S_casApp_success;
-}
-
-gddAppFuncTableStatus ParamRecord::readGraphicHigh(gdd &value)
-{
- value.putConvert(0);
- return S_casApp_success;
-}
-
-gddAppFuncTableStatus ParamRecord::readControlLow(gdd &value)
-{
- value.putConvert(0);
- return S_casApp_success;
-}
-
-gddAppFuncTableStatus ParamRecord::readControlHigh(gdd &value)
-{
- value.putConvert(0);
- return S_casApp_success;
-}
-
-gddAppFuncTableStatus ParamRecord::readPrecision(gdd &value)
-{
- value.putConvert(0);
- return S_casApp_success;
-}
-
+++ /dev/null
-#ifndef PARAMRECORD_H
-#define PARAMRECORD_H
-
-#include <gdd.h>
-
-extern "C" {
- #include <allParam.h>
-}
-
-#include "record.h"
-#include "arrayDest.h"
-
-class ParamRecord : public Record {
- protected:
- ArrayDestructor *pDest;
- const Param *param;
- char pPVName[PARAM_MAX_VALUE_LEN];
- char name[PARAM_MAX_VALUE_LEN];
- char idx[PARAM_MAX_VALUE_LEN];
-
- public:
- ParamRecord(caServer&, const Param *, const char *, const char *);
- ~ParamRecord();
-
- const char *getPVName();
-
- virtual gddAppFuncTableStatus readAlarmLow(gdd &);
- virtual gddAppFuncTableStatus readAlarmHigh(gdd &);
- virtual gddAppFuncTableStatus readAlarmLowWarning(gdd &);
- virtual gddAppFuncTableStatus readAlarmHighWarning(gdd &);
- virtual gddAppFuncTableStatus readGraphicLow(gdd &);
- virtual gddAppFuncTableStatus readGraphicHigh(gdd &);
- virtual gddAppFuncTableStatus readControlLow(gdd &);
- virtual gddAppFuncTableStatus readControlHigh(gdd &);
- virtual gddAppFuncTableStatus readPrecision(gdd &);
-
- virtual gddAppFuncTableStatus readValue(gdd &) = 0;
-
- virtual caStatus scan() = 0;
- virtual caStatus read(const casCtx &, gdd &) = 0;
- virtual caStatus write(const casCtx &, gdd &) = 0;
-};
-
-#endif /* !PARAMRECORD_H */
-
class ParamRecordSet : public caServer {
private:
int numPv;
- ParamRecord *pvs[MAX_NUM_PV];
+ Record *pvs[MAX_NUM_PV];
int numParamSrc;
Param *param[MAX_PARAM_SRC];
-static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramServer.cc,v 1.5 2003-01-31 12:25:32 hadaq Exp $";
-#define _POSIX_C_SOURCE 199509L
+static const char rcsId[] =
+ "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramServer.cc,v 1.6 2003-05-19 11:01:55 sailer Exp $";
+#define _POSIX_C_SOURCE 199506L
+#define SYSLOG_NAMES
#if HAVE_CONFIG_H
#include <config.h>
#endif /* HAVE_CONFIG_H */
extern "C" {
- #include <unistd.h>
+extern char *optarg;
+extern int optind, opterr, optopt;
- #include <ctype.h>
- #include <string.h>
- #include <syslog.h>
+#include <unistd.h>
+
+#include <ctype.h>
+#include <string.h>
+#include <syslog.h>
}
#include <fdManager.h>
#include "paramRecordSet.h"
-int main(int argc, char *argv[]) {
- openlog(argv[0], LOG_PERROR | LOG_PID, LOG_LOCAL0);
+static const char *ourBasename(const char *s)
+{
+ const char *p;
+
+ p = strrchr(s, '/');
+ return p != NULL ? p + 1 : s;
+}
+
+static void help(const char *name)
+{
+ fprintf(stdout, "%s: Usage(1): %s [ -d ] [ -v verbosity ] [ -w workdir ]\n", name, name);
+ fprintf(stdout, "%s: Option -d (optional): start as daemon\n",
+ name);
+ fprintf(stdout, "%s: Option -v (optional): verbosity, defaults to info\n", name);
+ fprintf(stdout, "%s: Option -w (optional): workdir for temporary files (needs to be unique)\n", name);
+ fprintf(stdout, "%s: Usage(2): %s -h\n", name, name);
+ fprintf(stdout, "%s: Option -h (required): help\n", name);
+}
+
+static void usage(const char *name)
+{
+ fprintf(stderr, "%s: Usage(1): %s [ -d ] [ -v verbosity ] [ -w workdir ]\n", name, name);
+ fprintf(stderr, "%s: Usage(2): %s -h\n", name, name);
+}
+
+int main(int argc, char *argv[])
+{
+ int logoption = LOG_PID;
+ pid_t myPid = 0;
+ int daemon = 0;
+ int i;
+ char *cwd = NULL;
+ int val;
+ char *verbosity = NULL;
+
+ while((val = getopt(argc, argv, "dhv:w:")) != -1) {
+ switch(val) {
+ case('d'):
+ daemon = 1;
+ break;
+ case('h'):
+ help(ourBasename(argv[0]));
+ exit(EXIT_SUCCESS);
+ break;
+ case('v'):
+ verbosity = optarg;
+ break;
+ case('w'):
+ cwd = optarg;
+ break;
+ default:
+ usage(ourBasename(argv[0]));
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ if (daemon) {
+ if (0 < (myPid = fork())) {
+ exit(EXIT_SUCCESS);
+ } else {
+ setsid();
+ if (0 < (myPid = fork())) {
+ exit(EXIT_SUCCESS);
+ } else {
+ if (!cwd) {
+ cwd = "/";
+ }
+ chdir(cwd);
+ freopen("/dev/null", "r", stdin);
+ freopen("/dev/null", "a", stdout);
+ freopen("/dev/console", "a", stderr);
+ myPid = getpid();
+ }
+ }
+ } else {
+ logoption |= LOG_PERROR;
+ }
+
+ openlog(ourBasename(argv[0]), logoption, LOG_LOCAL0);
+
+ if (verbosity == NULL) {
+ verbosity = "info";
+ }
+ for (i = 0; prioritynames[i].c_name != NULL
+ && 0 != strcmp(prioritynames[i].c_name, verbosity); i++) {
+ }
+ if (prioritynames[i].c_name == NULL) {
+ syslog(LOG_ERR, "%s, %d: Unknown verbosity %s. Exiting.",
+ __FILE__, __LINE__, verbosity);
+ exit(EXIT_FAILURE);
+ } else {
+ setlogmask(LOG_UPTO(prioritynames[i].c_val));
+ }
ParamRecordSet *cas;
if (NULL == (cas = new ParamRecordSet(MAX_NUM_PV))) {
- syslog(LOG_ERR, "Cannot allocate memory for the RecordSet. Exiting.\n");
- exit(-1);
+ syslog(LOG_ERR, "Cannot allocate memory for the RecordSet. Exiting.");
+ exit(EXIT_FAILURE);
}
cas->setDebugLevel(0u);
-static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramStringRecord.cc,v 1.11 2003-01-31 12:25:32 hadaq Exp $";
+static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/paramStringRecord.cc,v 1.12 2003-05-19 11:01:55 sailer Exp $";
#define _POSIX_C_SOURCE 199509L
#if HAVE_CONFIG_H
#include "paramStringRecord.h"
ParamStringRecord::ParamStringRecord(caServer& cas, const Param *p, const char *rn, const char *u) :
- ParamRecord(cas, p, rn, u)
+ Record(cas, p, rn, u, aitEnumString)
{
int rows;
char *tmp[PARAM_MAX_ARRAY_LEN];
funcTable.installReadFunc("severity", &Record::readSeverity);
funcTable.installReadFunc("seconds", &Record::readSeconds);
- funcTable.installReadFunc("alarmLow", &ParamRecord::readAlarmLow);
- funcTable.installReadFunc("alarmHigh", &ParamRecord::readAlarmHigh);
- funcTable.installReadFunc("alarmLowWarning", &ParamRecord::readAlarmLowWarning);
- funcTable.installReadFunc("alarmHighWarning", &ParamRecord::readAlarmHighWarning);
- funcTable.installReadFunc("graphicLow", &ParamRecord::readGraphicLow);
- funcTable.installReadFunc("graphicHigh", &ParamRecord::readGraphicHigh);
- funcTable.installReadFunc("controlLow", &ParamRecord::readControlLow);
- funcTable.installReadFunc("controlHigh", &ParamRecord::readControlHigh);
- funcTable.installReadFunc("precision", &ParamRecord::readPrecision);
+ funcTable.installReadFunc("alarmLow", &Record::readAlarmLow);
+ funcTable.installReadFunc("alarmHigh", &Record::readAlarmHigh);
+ funcTable.installReadFunc("alarmLowWarning", &Record::readAlarmLowWarning);
+ funcTable.installReadFunc("alarmHighWarning", &Record::readAlarmHighWarning);
+ funcTable.installReadFunc("graphicLow", &Record::readGraphicLow);
+ funcTable.installReadFunc("graphicHigh", &Record::readGraphicHigh);
+ funcTable.installReadFunc("controlLow", &Record::readControlLow);
+ funcTable.installReadFunc("controlHigh", &Record::readControlHigh);
+ funcTable.installReadFunc("precision", &Record::readPrecision);
funcTable.installReadFunc("value", &ParamStringRecord::readValue);
}
}
if (this->interest == aitTrue && pCAS != NULL) {
- casEventMask select(pCAS->valueEventMask|pCAS->logEventMask|pCAS->alarmEventMask);
+#if EPICS_RELEASE >= 314
+ casEventMask select(pCAS->valueEventMask()|pCAS->logEventMask()|
+ pCAS->alarmEventMask());
+#else
+ casEventMask select(pCAS->valueEventMask|pCAS->logEventMask|
+ pCAS->alarmEventMask);
+#endif
this->postEvent (select, *val);
}
return ((scan() == S_cas_success) && funcTable.read(*this, prototype));
}
+#if EPICS_RELEASE >= 314
+caStatus ParamStringRecord::write(const casCtx &ctx, const gdd &value)
+#else
caStatus ParamStringRecord::write(const casCtx &ctx, gdd &value)
+#endif
{
aitString stringValue;
#include "paramRecord.h"
-class ParamStringRecord : public ParamRecord {
+class ParamStringRecord : public Record {
private:
aitIndex index;
char *ourValue[PARAM_MAX_ARRAY_LEN];
gddAppFuncTable<ParamStringRecord> funcTable;
public:
- ParamStringRecord(caServer&, const Param *, const char *, const char *);
+ ParamStringRecord(caServer&, const Param *p, const char *rn, const char *u);
~ParamStringRecord();
epicsShareFunc aitEnum bestExternalType() const;
epicsShareFunc unsigned maxDimension() const;
epicsShareFunc aitIndex maxBound(unsigned int) const;
gddAppFuncTableStatus readValue(gdd &);
+
caStatus scan();
- caStatus read(const casCtx &, gdd &);
- caStatus write(const casCtx &, gdd &);
+ caStatus read(const casCtx &ctx, gdd &value);
+#if EPICS_RELEASE >= 314
+ caStatus write(const casCtx &ctx, const gdd &value);
+#else
+ caStatus write(const casCtx &ctx, gdd &value);
+#endif
};
#endif /* !PARAMSTRINGRECORD_H */
-static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/record.cc,v 1.4 2003-01-31 12:25:32 hadaq Exp $";
-#define _POSIX_C_SOURCE 199509L
+static const char rcsId[] = "$Header: /misc/hadesprojects/daq/cvsroot/eventbuilder/allParam/ca/server/record.cc,v 1.5 2003-05-19 11:01:56 sailer Exp $";
+#define _POSIX_C_SOURCE 199506L
#if HAVE_CONFIG_H
#include <config.h>
#endif /* HAVE_CONFIG_H */
extern "C" {
- #include <unistd.h>
+#include <unistd.h>
- #include <string.h>
- #include <time.h>
+#include <ctype.h>
+#include <string.h>
+#include <time.h>
}
#include "record.h"
-/********************
- * record Functions *
- ********************/
-
-Record::Record(caServer &cas, const char *n, const char *u, aitEnum t) : casPV(cas), units(u), type(t) {
- strcpy (name, n);
+#if EPICS_RELEASE >= 314
+Record::Record(caServer &cas, const Param *p, const char *n, const char *u, aitEnum t) : casPV(cas), param(p), units(u), type(t), timer(getCAS()->createTimer())
+#else
+Record::Record(caServer &cas, const Param *p, const char *n, const char *u, aitEnum t) : casPV(cas), param(p), units(u), type(t)
+#endif
+{
+ char buf1[PARAM_MAX_NAME_LEN];
+ char buf2[PARAM_MAX_NAME_LEN];
+ char buf3[PARAM_MAX_NAME_LEN];
+
+ strcpy (pPVName, n);
interest = aitFalse;
alarmStatus = epicsAlarmNone;
alarmSeverity = epicsSevNone;
+ if(sscanf(pPVName, "HAD:P%*c:%[^:]:%[^:]:%[^:]", buf1, buf2, buf3) != 4) {
+ strcpy(name, buf1);
+ strcpy(idx, buf2);
+ } else {
+ strcpy(name, buf2);
+ strcpy(idx, buf3);
+ }
+ for (unsigned int i = 0 ; i < strlen(name) ; i++) {
+ name[i] = tolower(name[i]);
+ }
+ for (unsigned int i = 0 ; i < strlen(idx) ; i++) {
+ idx[i] = tolower(idx[i]);
+ }
+
+ interest = aitFalse;
+
recordScanTimer = new scanTimer(*this);
+#if EPICS_RELEASE >= 314
+ timer.start(*recordScanTimer, 1.0);
+#endif
}
-Record::~Record() {
+Record::~Record()
+{
+ delete pDest;
}
-/* Misc Functions which are the same in all records */
-
-void Record::destroy() {
+void Record::destroy()
+{
}
-caStatus Record::interestRegister() {
+caStatus Record::interestRegister()
+{
interest = aitTrue;
return S_casApp_success;
}
-void Record::interestDelete() {
+void Record::interestDelete()
+{
interest = aitFalse;
}
-const char *Record::getName() const {
- return name;
+const char *Record::getName() const
+{
+ return pPVName;
}
-aitEnum Record::bestExternalType() const {
+aitEnum Record::bestExternalType() const
+{
return type;
}
-/* Read Functions which are the same for all records */
-
-gddAppFuncTableStatus Record::readUnits(gdd &value) {
+gddAppFuncTableStatus Record::readUnits(gdd &value)
+{
value.putConvert(*units);
return S_casApp_success;
}
-gddAppFuncTableStatus Record::readStatus(gdd &value) {
- value.putConvert((unsigned int) alarmStatus);
+gddAppFuncTableStatus Record::readStatus(gdd &value)
+{
+ value.putConvert((aitInt32) alarmStatus);
return S_casApp_success;
}
-gddAppFuncTableStatus Record::readSeverity(gdd &value) {
- value.putConvert((unsigned int) alarmSeverity);
+gddAppFuncTableStatus Record::readSeverity(gdd &value)
+{
+ value.putConvert((aitInt32) alarmSeverity);
return S_casApp_success;
}
-gddAppFuncTableStatus Record::readSeconds(gdd &value) {
+gddAppFuncTableStatus Record::readSeconds(gdd &value)
+{
time_t now;
now = time(NULL);
value.putConvert((aitUint32) now);
return S_casApp_success;
}
-/***********************
- * scanTimer Functions *
- ***********************/
+gddAppFuncTableStatus Record::readName(gdd &value)
+{
+ value.putConvert(pPVName);
+ return S_casApp_success;
+}
+
+gddAppFuncTableStatus Record::readAlarmLow(gdd &value)
+{
+ value.putConvert(0);
+ return S_casApp_success;
+}
-scanTimer::scanTimer (Record &pv) : osiTimer(1.0), procVar(pv) {
+gddAppFuncTableStatus Record::readAlarmHigh(gdd &value)
+{
+ value.putConvert(2147483647);
+ return S_casApp_success;
+}
+
+gddAppFuncTableStatus Record::readAlarmLowWarning(gdd &value)
+{
+ value.putConvert(0);
+ return S_casApp_success;
+}
+
+gddAppFuncTableStatus Record::readAlarmHighWarning(gdd &value)
+{
+ value.putConvert(2147483647);
+ return S_casApp_success;
+}
+
+gddAppFuncTableStatus Record::readGraphicLow(gdd &value)
+{
+ value.putConvert(0);
+ return S_casApp_success;
}
-void scanTimer::expire() {
+gddAppFuncTableStatus Record::readGraphicHigh(gdd &value)
+{
+ value.putConvert(2147483647);
+ return S_casApp_success;
+}
+
+gddAppFuncTableStatus Record::readControlLow(gdd &value)
+{
+ value.putConvert(0);
+ return S_casApp_success;
+}
+
+gddAppFuncTableStatus Record::readControlHigh(gdd &value)
+{
+ value.putConvert(2147483647);
+ return S_casApp_success;
+}
+
+gddAppFuncTableStatus Record::readEnums(gdd &value)
+{
+ value.putConvert((aitString) "not implemented");
+ return S_casApp_success;
+}
+
+gddAppFuncTableStatus Record::readPrecision(gdd &value)
+{
+ value.putConvert(0);
+ return S_casApp_success;
+}
+
+#if EPICS_RELEASE >= 314
+scanTimer::scanTimer (Record &pv) : procVar(pv)
+#else
+scanTimer::scanTimer (Record &pv) : osiTimer(1.0), procVar(pv)
+#endif
+{
+}
+
+#if EPICS_RELEASE >= 314
+epicsTimerNotify::expireStatus scanTimer::expire(const epicsTime &t)
+{
+ procVar.scan();
+ return expireStatus(restart, 1.0);
+}
+#else
+void scanTimer::expire()
+{
procVar.scan();
}
-osiBool scanTimer::again() const {
+osiBool scanTimer::again() const
+{
return osiTrue;
}
-
+#endif
#ifndef RECORD_H
#define RECORD_H
-#include <casdef.h>
+#if HAVE_CONFIG_H
+#include <config.h>
+#endif /* HAVE_CONFIG_H */
+#include <casdef.h>
+#if EPICS_RELEASE >= 314
+#include <epicsTimer.h>
+#else
#include <osiTimer.h>
+#endif
#include <aitTypes.h>
#include <aitHelpers.h>
-
#include <gddApps.h>
#include <gddAppFuncTable.h>
-#define NAMELENGTH 28
+extern "C" {
+ #include <allParam.h>
+}
+
+#include "arrayDest.h"
class scanTimer;
class Record : public casPV {
protected:
- char name[NAMELENGTH + 1];
+ const Param *param;
const char *units;
aitEnum type;
gdd *val;
+#if EPICS_RELEASE >= 314
+ epicsTimer &timer;
+#endif
scanTimer *recordScanTimer;
aitBool interest;
epicsAlarmCondition alarmStatus;
epicsAlarmSeverity alarmSeverity;
+
+ ArrayDestructor *pDest;
+ char pPVName[PARAM_MAX_VALUE_LEN];
+ char name[PARAM_MAX_VALUE_LEN];
+ char idx[PARAM_MAX_VALUE_LEN];
+
public:
- Record(caServer&, const char*, const char*, aitEnum);
+ Record(caServer &cas, const Param *p, const char *n, const char *u, aitEnum t);
~Record();
void destroy();
const char *getName() const;
aitEnum bestExternalType() const;
+ inline const char *getPVName() { return pPVName; }
+
gddAppFuncTableStatus readUnits(gdd &);
gddAppFuncTableStatus readStatus(gdd &);
gddAppFuncTableStatus readSeverity(gdd &);
gddAppFuncTableStatus readSeconds(gdd &);
+ gddAppFuncTableStatus readName(gdd &);
+ gddAppFuncTableStatus readAlarmLow(gdd &);
+ gddAppFuncTableStatus readAlarmHigh(gdd &);
+ gddAppFuncTableStatus readAlarmLowWarning(gdd &);
+ gddAppFuncTableStatus readAlarmHighWarning(gdd &);
+ gddAppFuncTableStatus readGraphicLow(gdd &);
+ gddAppFuncTableStatus readGraphicHigh(gdd &);
+ gddAppFuncTableStatus readControlLow(gdd &);
+ gddAppFuncTableStatus readControlHigh(gdd &);
+ gddAppFuncTableStatus readEnums(gdd &);
+ gddAppFuncTableStatus readPrecision(gdd &);
virtual gddAppFuncTableStatus readValue(gdd &) = 0;
+
virtual caStatus scan() = 0;
virtual caStatus read(const casCtx &, gdd &) = 0;
+#if EPICS_RELEASE >= 314
+ virtual caStatus write(const casCtx &, const gdd &) = 0;
+#else
virtual caStatus write(const casCtx &, gdd &) = 0;
+#endif
};
+#if EPICS_RELEASE >= 314
+class scanTimer : public epicsTimerNotify {
+ private:
+ Record &procVar;
+ public:
+ scanTimer(Record &);
+ expireStatus expire(const epicsTime &t);
+};
+#else
class scanTimer : public osiTimer {
private:
Record &procVar;
void expire();
osiBool again() const;
};
+#endif
#endif /* !RECORD_H */