23 #include "dbChannel.h" 30 #include "longinRecord.h" 34 #define GET_OPTIONS (DBR_STATUS | DBR_TIME) 51 longinRecord *
prec = (longinRecord *)ppn->usrPvt;
55 if (ppn->status == notifyCanceled) {
56 printf(
"devLiSoftCallback::getCallback notifyCanceled\n");
60 assert(type == getFieldType);
61 pdevPvt->status = dbChannelGetField(ppn->chan,
DBR_LONG,
62 &pdevPvt->buffer, &pdevPvt->options, &no_elements, 0);
65 static void doneCallback(processNotify *ppn)
67 longinRecord *
prec = (longinRecord *)ppn->usrPvt;
70 callbackRequestProcessCallback(&pdevPvt->callback, prec->prio, prec);
73 static long add_record(dbCommon *pcommon)
75 longinRecord *
prec = (longinRecord *)pcommon;
76 DBLINK *plink = &prec->inp;
81 if (dbLinkIsDefined(plink) && dbLinkIsConstant(plink))
85 long status = S_db_badField;
87 recGblRecordError(status, (
void *)prec,
88 "devLiSoftCallback (add_record) Illegal INP field");
94 long status = S_db_notFound;
96 recGblRecordError(status, (
void *)prec,
97 "devLiSoftCallback (init_record) linked record not found");
101 pdevPvt = calloc(1,
sizeof(*pdevPvt));
103 long status = S_db_noMemory;
105 recGblRecordError(status, (
void *)prec,
106 "devLiSoftCallback (add_record) out of memory, calloc() failed");
117 ppn->doneCallback = doneCallback;
118 ppn->requestType = processGetRequest;
122 prec->dpvt = pdevPvt;
126 static long del_record(dbCommon *pcommon) {
127 longinRecord *
prec = (longinRecord *)pcommon;
128 DBLINK *plink = &prec->inp;
131 if (dbLinkIsDefined(plink) && dbLinkIsConstant(plink))
136 dbNotifyCancel(&pdevPvt->
pn);
137 dbChannelDelete(pdevPvt->
pn.chan);
144 static struct dsxt dsxtSoftCallback = {
148 static long init(
int pass)
150 if (pass == 0)
devExtend(&dsxtSoftCallback);
156 longinRecord *
prec = (longinRecord *)pcommon;
158 if (recGblInitConstantLink(&prec->inp,
DBR_LONG, &prec->val))
164 static long read_li(longinRecord *
prec)
172 dbProcessNotify(&pdevPvt->
pn);
185 switch (prec->inp.value.pv_link.pvlMask &
pvlOptMsMode) {
197 pdevPvt->
buffer.severity);
201 if (dbLinkIsConstant(&prec->tsel) &&
203 prec->time = pdevPvt->
buffer.time;
#define assert(exp)
Declare that a condition should be true.
DBRstatus DBRtime epicsInt32 value
An EPICS-specific replacement for ANSI C's assert.
void devExtend(dsxt *pdsxt)
pvd::StructureConstPtr type
Miscellaneous macro definitions.
#define epicsTimeEventDeviceTime
long(* add_record)(struct dbCommon *precord)
longindset devLiSoftCallback
DBRstatus DBRtime epicsFloat64 value
long(* del_record)(struct dbCommon *precord)
Routines for code that can't continue or return after an error.
epicsExportAddress(dset, devLiSoftCallback)