35 #include "menuYesNo.h" 37 #define GEN_SIZE_OFFSET 38 #include "stringinRecord.h" 39 #undef GEN_SIZE_OFFSET 44 #define initialize NULL 46 static long process(
struct dbCommon *);
47 static long special(DBADDR *,
int);
48 #define get_value NULL 49 #define cvt_dbaddr NULL 50 #define get_array_info NULL 51 #define put_array_info NULL 52 #define get_units NULL 53 #define get_precision NULL 54 #define get_enum_str NULL 55 #define get_enum_strs NULL 56 #define put_enum_str NULL 57 #define get_graphic_double NULL 58 #define get_control_double NULL 59 #define get_alarm_double NULL 83 static void monitor(stringinRecord *);
84 static long readValue(stringinRecord *);
87 static long init_record(
struct dbCommon *pcommon,
int pass)
89 struct stringinRecord *
prec = (
struct stringinRecord *)pcommon;
92 stringindset *pdset = (stringindset *) prec->dset;
94 if (pass == 0)
return 0;
96 recGblInitSimm(pcommon, &prec->sscn, &prec->oldsimm, &prec->simm, &prec->siml);
97 recGblInitConstantLink(&prec->siol,
DBF_STRING, prec->sval);
100 recGblRecordError(
S_dev_noDSET, prec,
"stringin: init_record");
105 if ((pdset->common.number < 5) || (pdset->read_stringin ==
NULL)) {
110 if (pdset->common.init_record) {
111 long status = pdset->common.init_record(pcommon);
116 strncpy(prec->oval, prec->val,
sizeof(prec->oval));
122 static long process(
struct dbCommon *pcommon)
124 struct stringinRecord *
prec = (
struct stringinRecord *)pcommon;
125 stringindset *pdset = (stringindset *)(prec->dset);
127 unsigned char pact=prec->pact;
129 if( (pdset==
NULL) || (pdset->read_stringin==
NULL) ) {
135 status=readValue(prec);
137 if ( !pact && prec->pact )
return(0);
140 recGblGetTimeStampSimm(prec, prec->simm, &prec->siol);
151 static long special(DBADDR *paddr,
int after)
153 stringinRecord *
prec = (stringinRecord *)(paddr->precord);
154 int special_type = paddr->special;
156 switch(special_type) {
158 if (dbGetFieldIndex(paddr) == stringinRecordSIMM) {
160 recGblSaveSimm(prec->sscn, &prec->oldsimm, prec->simm);
162 recGblCheckSimm((dbCommon *)prec, &prec->sscn, prec->oldsimm, prec->simm);
166 recGblDbaddrError(S_db_badChoice, paddr,
"stringin: special");
167 return(S_db_badChoice);
171 static void monitor(stringinRecord *
prec)
173 int monitor_mask = recGblResetAlarms(prec);
175 if (strncmp(prec->oval, prec->val,
sizeof(prec->val))) {
177 strncpy(prec->oval, prec->val,
sizeof(prec->oval));
180 if (prec->mpst == stringinPOST_Always)
182 if (prec->apst == stringinPOST_Always)
186 db_post_events(prec, prec->val, monitor_mask);
189 static long readValue(stringinRecord *
prec)
191 stringindset *pdset = (stringindset *) prec->dset;
195 status = recGblGetSimm((dbCommon *)prec, &prec->sscn, &prec->oldsimm, &prec->simm, &prec->siml);
199 switch (prec->simm) {
201 status = pdset->read_stringin(prec);
206 if (prec->pact || (prec->sdly < 0.)) {
209 strncpy(prec->val, prec->sval,
sizeof(prec->val));
214 epicsCallback *pvt = prec->simpvt;
216 pvt = calloc(1,
sizeof(epicsCallback));
219 if (pvt) callbackRequestProcessCallbackDelayed(pvt, prec->prio, prec, prec->sdly);
epicsExportAddress(rset, stringinRSET)
#define get_graphic_double
Miscellaneous macro definitions.
#define STATIC_ASSERT(expr)
Declare a condition that should be true at compile-time.
#define get_control_double