26 static long read_ai_from_real(aiRecord* prec)
28 if (!prec->dpvt) {(void)recGblSetSevr(prec, COMM_ALARM, INVALID_ALARM);
return -1; }
33 scopedLock<mrf::Object> g(*priv->
O);
34 prec->val = priv->
P->get();
38 prec->val*=prec->aslo;
39 prec->val+=prec->aoff;
41 if(prec->linr==menuConvertLINEAR){
43 prec->val*=prec->eslo;
44 prec->val+=prec->eoff;
49 }
CATCH(S_dev_badArgument)
55 (&add_record_inp<aiRecord,double>),
58 &read_ai_from_real<double>,
62 static long read_ai_from_integer(aiRecord* prec)
64 if (!prec->dpvt) {(void)recGblSetSevr(prec, COMM_ALARM, INVALID_ALARM);
return -1; }
70 scopedLock<mrf::Object> g(*priv->
O);
71 prec->rval = priv->
P->get();
75 }
catch(std::exception& e) {
76 epicsPrintf(
"%s: read error: %s\n", prec->name, e.what());
84 (&add_record_inp<aiRecord,epicsUInt32>),
87 &read_ai_from_integer<epicsUInt32>,
93 (&add_record_inp<aiRecord,epicsUInt16>),
96 &read_ai_from_integer<epicsUInt16>,
104 static long write_ao_from_real(aoRecord* prec)
106 if (!prec->dpvt) {(void)recGblSetSevr(prec, COMM_ALARM, INVALID_ALARM);
return -1; }
111 double val=prec->val;
113 if(prec->linr==menuConvertLINEAR){
124 scopedLock<mrf::Object> g(*priv->
O);
130 prec->val = priv->
P->get();
134 prec->val*=prec->aslo;
135 prec->val+=prec->aoff;
137 if(prec->linr==menuConvertLINEAR){
139 prec->val*=prec->eslo;
140 prec->val+=prec->eoff;
144 }
CATCH(S_dev_badArgument)
150 (&add_record_out<aoRecord,double>),
151 &del_record_property,
152 &init_record_return2,
153 &write_ao_from_real<double>,
157 static long write_ao_from_integer(aoRecord* prec)
159 if (!prec->dpvt) {(void)recGblSetSevr(prec, COMM_ALARM, INVALID_ALARM);
return -1; }
165 scopedLock<mrf::Object> g(*priv->
O);
166 priv->
P->set(prec->rval);
168 prec->rbv = priv->
P->get();
172 }
CATCH(S_dev_badArgument)
178 (&add_record_out<aoRecord,epicsUInt32>),
179 &del_record_property,
181 &write_ao_from_integer<epicsUInt32>,
187 (&add_record_out<aoRecord,epicsUInt16>),
188 &del_record_property,
190 &write_ao_from_integer<epicsUInt16>,
194 #include <epicsExport.h>
OBJECT_DSET_EXPORT(AIFromDouble)
OBJECT_DSET(AIFromDouble,(&add_record_inp< aiRecord, double >), &del_record_property, &init_record_empty, &read_ai_from_real< double >, NULL)
mrf::auto_ptr< mrf::property< T > > P