24 #include "dbChannel.h" 31 #include "stringinRecord.h" 35 #define GET_OPTIONS (DBR_STATUS | DBR_TIME) 53 stringinRecord *
prec = (stringinRecord *)ppn->usrPvt;
57 if (ppn->status==notifyCanceled) {
58 printf(
"devSiSoftCallback::getCallback notifyCanceled\n");
62 assert(type == getFieldType);
63 pdevPvt->status = dbChannelGetField(ppn->chan,
DBR_STRING,
64 &pdevPvt->buffer, &pdevPvt->options, &no_elements, 0);
67 static void doneCallback(processNotify *ppn)
69 stringinRecord *
prec = (stringinRecord *)ppn->usrPvt;
72 callbackRequestProcessCallback(&pdevPvt->callback, prec->prio, prec);
75 static long add_record(dbCommon *pcommon)
77 stringinRecord *
prec = (stringinRecord *)pcommon;
78 DBLINK *plink = &prec->inp;
83 if (dbLinkIsDefined(plink) && dbLinkIsConstant(plink))
87 long status = S_db_badField;
89 recGblRecordError(status, (
void *)prec,
90 "devSiSoftCallback (add_record) Illegal INP field");
94 pdevPvt = calloc(1,
sizeof(*pdevPvt));
96 long status = S_db_noMemory;
98 recGblRecordError(status, (
void *)prec,
99 "devSiSoftCallback (add_record) out of memory, calloc() failed");
106 long status = S_db_notFound;
108 recGblRecordError(status, (
void *)prec,
109 "devSiSoftCallback (add_record) linked record not found");
119 ppn->doneCallback = doneCallback;
120 ppn->requestType = processGetRequest;
124 prec->dpvt = pdevPvt;
128 static long del_record(dbCommon *pcommon) {
129 stringinRecord *
prec = (stringinRecord *)pcommon;
130 DBLINK *plink = &prec->inp;
133 if (dbLinkIsDefined(plink) && dbLinkIsConstant(plink))
138 dbNotifyCancel(&pdevPvt->
pn);
139 dbChannelDelete(pdevPvt->
pn.chan);
146 static struct dsxt dsxtSoftCallback = {
150 static long init(
int pass)
152 if (pass == 0)
devExtend(&dsxtSoftCallback);
158 stringinRecord *
prec = (stringinRecord *)pcommon;
160 if (recGblInitConstantLink(&prec->inp,
DBR_STRING, &prec->val))
166 static long read_si(stringinRecord *
prec)
174 dbProcessNotify(&pdevPvt->
pn);
188 switch (prec->inp.value.pv_link.pvlMask &
pvlOptMsMode) {
200 pdevPvt->
buffer.severity);
204 if (dbLinkIsConstant(&prec->tsel) &&
206 prec->time = pdevPvt->
buffer.time;
#define assert(exp)
Declare that a condition should be true.
An EPICS-specific replacement for ANSI C's assert.
void devExtend(dsxt *pdsxt)
epicsExportAddress(dset, devSiSoftCallback)
pvd::StructureConstPtr type
Miscellaneous macro definitions.
stringindset devSiSoftCallback
#define epicsTimeEventDeviceTime
long(* add_record)(struct dbCommon *precord)
DBRstatus DBRtime epicsFloat64 value
long(* del_record)(struct dbCommon *precord)
Routines for code that can't continue or return after an error.