13 #include <epicsExport.h> 23 #include <stringinRecord.h> 48 long stringin_add(dbCommon *praw)
50 stringinRecord *prec=(stringinRecord*)(praw);
53 assert(prec->inp.type==INST_IO);
58 if (
linkOptionsStore(eventdef, priv.get(), prec->inp.value.instio.string, 0))
59 throw std::runtime_error(
"Couldn't parse link string");
63 errlogPrintf(
"%s: failed to find object '%s'\n", praw->name, priv->obj);
66 priv->evr=
dynamic_cast<EVR*
>(O);
68 throw std::runtime_error(
"Failed to lookup device");
70 prec->dpvt=(
void*)priv.release();
74 }
catch(std::runtime_error& e) {
75 recGblRecordError(S_dev_noDevice, (
void*)prec, e.what());
77 }
catch(std::exception& e) {
78 recGblRecordError(S_db_noMemory, (
void*)prec, e.what());
85 static long read_si(stringinRecord* prec)
97 strncpy(prec->val,
"EVR time unavailable",
sizeof(prec->val));
98 return S_dev_deviceTMO;
101 if (ts.secPastEpoch==priv->
last_bad)
104 size_t r=epicsTimeToStrftime(prec->val,
106 "%a, %d %b %Y %H:%M:%S %z",
108 if(r==0||r==
sizeof(prec->val)){
109 recGblRecordError(S_dev_badArgument, (
void*)prec,
110 "Format string resulted in error");
112 return S_dev_badArgument;
115 if(prec->tse==epicsTimeEventDeviceTime) {
120 }
catch(std::exception& e) {
121 recGblRecordError(S_db_noMemory, (
void*)prec, e.what());
122 return S_db_noMemory;
128 dsxt
dxtSIEVR={&stringin_add,&del_record_delete<ts_priv>};
133 dset_cast(&init_dset<&dxtSIEVR>),
134 (DEVSUPFUN) init_record_empty,
static Object * getObject(const std::string &name)
int epicsShareAPI linkOptionsStore(const linkOptionDef *opts, void *user, const char *str, int options)
Parse a string a store the result.
#define linkInt32(Struct, Member, Name, Req, Over)
epicsExportAddress(dset, devSIEVR)
Hardware link parsing and storage.
#define linkString(Struct, Member, Name, Req, Over)
virtual bool getTimeStamp(epicsTimeStamp *ts, epicsUInt32 event)=0