@@ -138,7 +138,7 @@ struct priv {
138138 template <typename VAL>
139139 VAL read (epicsUInt32 off=0 ) const
140140 {
141- epicsUInt32 OV (readraw<VAL >(off));
141+ epicsUInt32 OV (readraw<epicsUInt32 >(off));
142142 if (vmask) OV &= vmask;
143143 OV >>= vshift;
144144 return OV;
@@ -152,7 +152,7 @@ struct priv {
152152 unsigned i;
153153 for (i=0 ; i<count && addr<end; i++, addr+=step)
154154 {
155- epicsUInt32 OV = read<VAL >(addr);
155+ epicsUInt32 OV = read<epicsUInt32 >(addr);
156156 *val++ = castval<VAL,epicsUInt32>::op (OV);
157157 }
158158 return i;
@@ -408,14 +408,14 @@ long explore_read_real_val(REC *prec)
408408 Guard G (pvt->lock );
409409 ival = pun.ival = pvt->read <epicsUInt32>();
410410 }
411+ epicsFloat64 dval = pun.fval ;
412+ dval += prec->roff ;
413+ if (prec->aslo ) dval *= prec->aslo ;
414+ dval += prec->aoff ;
415+ if (prec->eslo ) dval *= prec->eslo ;
416+ dval += prec->eoff ;
411417
412- pun.fval += prec->roff ;
413- if (prec->aslo ) pun.fval *= prec->aslo ;
414- pun.fval += prec->aoff ;
415- if (prec->eslo ) pun.fval *= prec->eslo ;
416- pun.fval += prec->eoff ;
417-
418- prec->val = pun.fval ;
418+ prec->val = dval;
419419
420420 if (prec->tpro >1 ) {
421421 errlogPrintf (" %s: read %08x -> %08x -> VAL=%g\n " , prec->name , (unsigned )pvt->offset , (unsigned )ival, prec->val );
@@ -430,13 +430,14 @@ long explore_write_real_val(REC *prec)
430430{
431431 TRY {
432432 punny32 pun;
433- pun. fval = prec->val ;
433+ epicsFloat64 dval = prec->val ;
434434
435- pun.fval -= prec->eoff ;
436- if (prec->eslo ) pun.fval /= prec->eslo ;
437- pun.fval -= prec->aoff ;
438- if (prec->aslo ) pun.fval /= prec->aslo ;
439- pun.fval -= prec->roff ;
435+ dval -= prec->eoff ;
436+ if (prec->eslo ) dval /= prec->eslo ;
437+ dval -= prec->aoff ;
438+ if (prec->aslo ) dval /= prec->aslo ;
439+ dval -= prec->roff ;
440+ pun.fval = (epicsFloat32)dval;
440441
441442 if (prec->tpro >1 ) {
442443 errlogPrintf (" %s: write %08x <- %08x <- VAL=%g\n " , prec->name , (unsigned )pvt->offset , (unsigned )pun.ival , prec->val );
@@ -485,7 +486,7 @@ long explore_write_wf(waveformRecord *prec)
485486{
486487 TRY {
487488 Guard G (pvt->lock );
488- unsigned nwritten = - 1 ;
489+ unsigned nwritten = 0 ;
489490 switch (prec->ftvl ) {
490491 case menuFtypeCHAR :
491492 case menuFtypeUCHAR : nwritten = pvt->writeArray ((epicsUInt8*) prec->bptr , prec->nord ); break ;
@@ -527,6 +528,8 @@ struct dset6 {
527528
528529} // namespace
529530
531+ extern " C" {
532+
530533#define SUP (NAME, REC, OP, DIR, SIZE, END ) static dset6<REC##Record> NAME = \
531534 {6 , NULL , NULL , &explore_init_record_##OP<REC##Record,SIZE,END>, NULL , &explore_##DIR##_##OP<REC##Record>, NULL }; \
532535 epicsExportAddress (dset, NAME)
@@ -637,3 +640,4 @@ SUP(devExploreWfWriteU16MSB, write, 2, priv::BE);
637640SUP (devExploreWfWriteU32NAT, write, 4 , priv::NAT);
638641SUP (devExploreWfWriteU32LSB, write, 4 , priv::LE);
639642SUP (devExploreWfWriteU32MSB, write, 4 , priv::BE);
643+ } // extern "C"
0 commit comments