35 #include "menuYesNo.h" 37 #define GEN_SIZE_OFFSET 38 #include "eventRecord.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(eventRecord *);
84 static long readValue(eventRecord *);
87 static long init_record(
struct dbCommon *pcommon,
int pass)
89 struct eventRecord *
prec = (
struct eventRecord *)pcommon;
93 if (pass == 0)
return 0;
95 recGblInitSimm(pcommon, &prec->sscn, &prec->oldsimm, &prec->simm, &prec->siml);
96 recGblInitConstantLink(&prec->siol,
DBF_STRING, &prec->sval);
98 if( (pdset=(eventdset *)(prec->dset)) && (pdset->common.init_record) )
99 status=(*pdset->common.init_record)(pcommon);
101 prec->epvt = eventNameToHandle(prec->val);
106 static long process(
struct dbCommon *pcommon)
108 struct eventRecord *
prec = (
struct eventRecord *)pcommon;
109 eventdset *pdset = (eventdset *)(prec->dset);
111 unsigned char pact=prec->pact;
113 if((pdset!=
NULL) && (pdset->common.number >= 5) && pdset->read_event )
114 status=readValue(prec);
116 if ( !pact && prec->pact )
return(0);
119 postEvent(prec->epvt);
121 recGblGetTimeStampSimm(prec, prec->simm, &prec->siol);
134 static long special(DBADDR *paddr,
int after)
136 eventRecord *
prec = (eventRecord *)paddr->precord;
138 if (dbGetFieldIndex(paddr) == eventRecordSIMM) {
140 recGblSaveSimm(prec->sscn, &prec->oldsimm, prec->simm);
142 recGblCheckSimm((dbCommon *)prec, &prec->sscn, prec->oldsimm, prec->simm);
146 if (!after)
return 0;
148 if (dbGetFieldIndex(paddr) == eventRecordVAL) {
149 prec->epvt = eventNameToHandle(prec->val);
156 static void monitor(eventRecord *
prec)
158 unsigned short monitor_mask;
161 monitor_mask = recGblResetAlarms(prec);
162 db_post_events(prec,&prec->val,monitor_mask|
DBE_VALUE);
166 static long readValue(eventRecord *
prec)
168 eventdset *pdset = (eventdset *) prec->dset;
172 status = recGblGetSimm((dbCommon *)prec, &prec->sscn, &prec->oldsimm, &prec->simm, &prec->siml);
176 switch (prec->simm) {
178 status = pdset->read_event(prec);
183 if (prec->pact || (prec->sdly < 0.)) {
186 if (strcmp(prec->sval, prec->val) != 0) {
187 strcpy(prec->val, prec->sval);
188 prec->epvt = eventNameToHandle(prec->val);
194 epicsCallback *pvt = prec->simpvt;
196 pvt = calloc(1,
sizeof(epicsCallback));
199 if (pvt) callbackRequestProcessCallbackDelayed(pvt, prec->prio, prec, prec->sdly);
epicsExportAddress(rset, eventRSET)
Miscellaneous macro definitions.
#define get_control_double
#define get_graphic_double