diff --git a/src/StreamEpics.cc b/src/StreamEpics.cc index 9e972e2..37c1520 100644 --- a/src/StreamEpics.cc +++ b/src/StreamEpics.cc @@ -967,10 +967,11 @@ getFieldAddress(const char* fieldname, StreamBuffer& address) } static const unsigned char dbfMapping[] = +#ifdef DBF_INT64 + {0, DBF_UINT64, DBF_INT64, DBF_ENUM, DBF_DOUBLE, DBF_STRING}; +#else {0, DBF_ULONG, DBF_LONG, DBF_ENUM, DBF_DOUBLE, DBF_STRING}; -static const short typeSize[] = - {0, sizeof(epicsUInt32), sizeof(epicsInt32), sizeof(epicsUInt16), - sizeof(epicsFloat64), MAX_STRING_SIZE}; +#endif bool Stream:: formatValue(const StreamFormat& format, const void* fieldaddress) @@ -1018,7 +1019,7 @@ formatValue(const StreamFormat& format, const void* fieldaddress) /* convert type to LONG, ENUM, DOUBLE, or STRING */ long nelem = pdbaddr->no_elements; - size_t size = nelem * typeSize[format.type]; + size_t size = nelem * dbValueSize(fmt.type); /* print (U)CHAR arrays as string */ if (format.type == string_format && @@ -1137,7 +1138,7 @@ matchValue(const StreamFormat& format, const void* fieldaddress) DBADDR* pdbaddr = (DBADDR*)fieldaddress; long nord; long nelem = pdbaddr->no_elements; - size_t size = nelem * typeSize[format.type]; + size_t size = nelem * dbValueSize(fmt.type); buffer = fieldBuffer.clear().reserve(size); for (nord = 0; nord < nelem; nord++) { diff --git a/src/devaaiStream.c b/src/devaaiStream.c index 33ed0db..8ea41ad 100644 --- a/src/devaaiStream.c +++ b/src/devaaiStream.c @@ -73,6 +73,12 @@ static long readData (dbCommon *record, format_t *format) case DBF_FLOAT: ((epicsFloat32 *)aai->bptr)[aai->nord] = (epicsFloat32)lval; break; +#ifdef DBF_INT64 + case DBF_INT64: + case DBF_UINT64: + ((epicsInt64 *)aai->bptr)[aai->nord] = (epicsInt64)lval; + break; +#endif case DBF_LONG: case DBF_ULONG: ((epicsInt32 *)aai->bptr)[aai->nord] = (epicsInt32)lval; @@ -163,6 +169,14 @@ static long writeData (dbCommon *record, format_t *format) case DBF_FLOAT: dval = ((epicsFloat32 *)aai->bptr)[nowd]; break; +#ifdef DBF_INT64 + case DBF_INT64: + dval = ((epicsInt64 *)aai->bptr)[nowd]; + break; + case DBF_UINT64: + dval = ((epicsUInt64 *)aai->bptr)[nowd]; + break; +#endif case DBF_LONG: dval = ((epicsInt32 *)aai->bptr)[nowd]; break; @@ -198,6 +212,14 @@ static long writeData (dbCommon *record, format_t *format) { switch (aai->ftvl) { +#ifdef DBF_INT64 + case DBF_INT64: + lval = ((epicsInt64 *)aao->bptr)[nowd]; + break; + case DBF_UINT64: + lval = ((epicsUInt64 *)aao->bptr)[nowd]; + break; +#endif case DBF_LONG: lval = ((epicsInt32 *)aai->bptr)[nowd]; break; @@ -274,10 +296,9 @@ static long writeData (dbCommon *record, format_t *format) static long initRecord (dbCommon *record) { - static const int typesize[] = {MAX_STRING_SIZE,1,1,2,2,4,4,4,8,2}; aaiRecord *aai = (aaiRecord *) record; - aai->bptr = calloc(aai->nelm, typesize[aai->ftvl]); + aai->bptr = calloc(aai->nelm, dbValueSize(aai->ftvl)); if (aai->bptr == NULL) { errlogSevPrintf (errlogFatal, diff --git a/src/devaaoStream.c b/src/devaaoStream.c index c41c2e1..89b6ac0 100644 --- a/src/devaaoStream.c +++ b/src/devaaoStream.c @@ -73,6 +73,12 @@ static long readData (dbCommon *record, format_t *format) case DBF_FLOAT: ((epicsFloat32 *)aao->bptr)[aao->nord] = (epicsFloat32)lval; break; +#ifdef DBF_INT64 + case DBF_INT64: + case DBF_UINT64: + ((epicsInt64 *)aao->bptr)[aao->nord] = (epicsInt64)lval; + break; +#endif case DBF_LONG: case DBF_ULONG: ((epicsInt32 *)aao->bptr)[aao->nord] = (epicsInt32)lval; @@ -163,6 +169,14 @@ static long writeData (dbCommon *record, format_t *format) case DBF_FLOAT: dval = ((epicsFloat32 *)aao->bptr)[nowd]; break; +#ifdef DBF_INT64 + case DBF_INT64: + dval = ((epicsInt64 *)aao->bptr)[nowd]; + break; + case DBF_UINT64: + dval = ((epicsUInt64 *)aao->bptr)[nowd]; + break; +#endif case DBF_LONG: dval = ((epicsInt32 *)aao->bptr)[nowd]; break; @@ -198,6 +212,14 @@ static long writeData (dbCommon *record, format_t *format) { switch (aao->ftvl) { +#ifdef DBF_INT64 + case DBF_INT64: + lval = ((epicsInt64 *)aao->bptr)[nowd]; + break; + case DBF_UINT64: + lval = ((epicsUInt64 *)aao->bptr)[nowd]; + break; +#endif case DBF_LONG: lval = ((epicsInt32 *)aao->bptr)[nowd]; break; @@ -274,10 +296,9 @@ static long writeData (dbCommon *record, format_t *format) static long initRecord (dbCommon *record) { - static const int typesize[] = {MAX_STRING_SIZE,1,1,2,2,4,4,4,8,2}; aaoRecord *aao = (aaoRecord *) record; - aao->bptr = calloc(aao->nelm, typesize[aao->ftvl]); + aao->bptr = calloc(aao->nelm, dbValueSize(aao->ftvl)); if (aao->bptr == NULL) { errlogSevPrintf (errlogFatal, diff --git a/src/devwaveformStream.c b/src/devwaveformStream.c index f5c22ba..868d50f 100644 --- a/src/devwaveformStream.c +++ b/src/devwaveformStream.c @@ -73,6 +73,12 @@ static long readData (dbCommon *record, format_t *format) case DBF_FLOAT: ((epicsFloat32 *)wf->bptr)[wf->nord] = (epicsFloat32)lval; break; +#ifdef DBF_INT64 + case DBF_INT64: + case DBF_UINT64: + ((epicsInt64 *)wf->bptr)[aao->nord] = (epicsInt64)lval; + break; +#endif case DBF_LONG: case DBF_ULONG: ((epicsInt32 *)wf->bptr)[wf->nord] = (epicsInt32)lval; @@ -163,6 +169,14 @@ static long writeData (dbCommon *record, format_t *format) case DBF_FLOAT: dval = ((epicsFloat32 *)wf->bptr)[nowd]; break; +#ifdef DBF_INT64 + case DBF_INT64: + dval = ((epicsInt64 *)wf->bptr)[nowd]; + break; + case DBF_UINT64: + dval = ((epicsUInt64 *)wf->bptr)[nowd]; + break; +#endif case DBF_LONG: dval = ((epicsInt32 *)wf->bptr)[nowd]; break; @@ -197,6 +211,14 @@ static long writeData (dbCommon *record, format_t *format) { switch (wf->ftvl) { +#ifdef DBF_INT64 + case DBF_INT64: + lval = ((epicsInt64 *)wf->bptr)[nowd]; + break; + case DBF_UINT64: + lval = ((epicsUInt64 *)wf->bptr)[nowd]; + break; +#endif case DBF_LONG: lval = ((epicsInt32 *)wf->bptr)[nowd]; break;