diff --git a/src/rec/aiRecord.dbd b/src/rec/aiRecord.dbd index a7518ab73..69a9f396c 100644 --- a/src/rec/aiRecord.dbd +++ b/src/rec/aiRecord.dbd @@ -176,8 +176,8 @@ recordtype(ai) { pp(TRUE) interest(2) } - field(ROFF,DBF_LONG) { - prompt("Raw Offset, obsolete") + field(ROFF,DBF_ULONG) { + prompt("Raw Offset") pp(TRUE) interest(2) } diff --git a/src/rec/aoRecord.c b/src/rec/aoRecord.c index e4fb7e533..d2b45e832 100644 --- a/src/rec/aoRecord.c +++ b/src/rec/aoRecord.c @@ -469,10 +469,20 @@ static void convert(aoRecord *prec, double value) } value -= prec->aoff; if (prec->aslo != 0) value /= prec->aslo; - if (value >= 0.0) - prec->rval = (epicsInt32)(value + 0.5) - prec->roff; - else - prec->rval = (epicsInt32)(value - 0.5) - prec->roff; + + /* Apply raw offset and limits, round to 32-bit integer */ + value -= prec->roff; + if (value >= 0.0) { + if (value >= (0x7fffffff - 0.5)) + prec->rval = 0x7fffffff; + else + prec->rval = (epicsInt32)(value + 0.5); + } else { + if (value > (0.5 - 0x80000000)) + prec->rval = (epicsInt32)(value - 0.5); + else + prec->rval = 0x80000000; + } } diff --git a/src/rec/aoRecord.dbd b/src/rec/aoRecord.dbd index a1caa6b56..3c2d8cf9c 100644 --- a/src/rec/aoRecord.dbd +++ b/src/rec/aoRecord.dbd @@ -82,8 +82,8 @@ recordtype(ao) { interest(1) size(16) } - field(ROFF,DBF_LONG) { - prompt("Raw Offset, obsolete") + field(ROFF,DBF_ULONG) { + prompt("Raw Offset") pp(TRUE) interest(2) }