Compare commits

...

5 Commits

4 changed files with 23 additions and 13 deletions

View File

@ -1,12 +1,10 @@
include /ioc/tools/driver.makefile
EXCLUDE_VERSIONS = 3.13.2
PROJECT=stream2
PROJECT=stream
BUILDCLASSES += Linux
#DOCUDIR = doc
DBDS = stream.dbd
BUSSES += AsynDriver
BUSSES += Dummy
@ -42,9 +40,9 @@ HEADERS += StreamBuffer.h
HEADERS += StreamError.h
ifeq (${EPICS_BASETYPE},3.13)
USR_INCLUDES += -include $(INSTALL_INCLUDE)/compat3_13.h
endif
ifeq (${EPICS_BASETYPE},3.14)
# old gcc needs full path for -include
CXXFLAGS += -include $(foreach d,${INCLUDES:-I%=%},$(wildcard $d/compat3_13.h))
else
RECORDTYPES += calcout
endif
@ -54,5 +52,7 @@ streamReferences:
perl ../src/makeref.pl Interface $(BUSSES) > $@
perl ../src/makeref.pl Converter $(FORMATS) >> $@
stream.dbd:
# have to hack a bit to work with both versions of driver.makefile
DBDFILES = O.$${EPICSVERSION}_$${T_A}/streamSup.dbd
../O.${EPICSVERSION}_${T_A}/streamSup.dbd:
perl ../src/makedbd.pl $(RECORDTYPES) > $@

View File

@ -680,7 +680,7 @@ writeHandler()
clientName());
status = pasynOctet->read(pvtOctet, pasynUser,
buffer, sizeof(buffer), &received, &eomReason);
if (received == 0) break;
if (status == asynError || received == 0) break;
#ifndef NO_TEMPORARY
if (received) debug("AsynDriverInterface::writeHandler(%s): flushing %ld bytes: \"%s\"\n",
clientName(), (long)received, StreamBuffer(buffer, received).expand()());

View File

@ -965,13 +965,13 @@ getFieldAddress(const char* fieldname, StreamBuffer& address)
else
{
// FIELD in this record or VAL in other record
char fullname[PVNAME_SZ + 1];
sprintf(fullname, "%s.%s", name(), fieldname);
if (dbNameToAddr(fullname, &dbaddr) != OK)
StreamBuffer fullname;
fullname.print("%s.%s", name(), fieldname);
if (dbNameToAddr(fullname(), &dbaddr) != OK)
{
// VAL in other record
sprintf(fullname, "%s.VAL", fieldname);
if (dbNameToAddr(fullname, &dbaddr) != OK) return false;
fullname.clear().print("%s.VAL", fieldname);
if (dbNameToAddr(fullname(), &dbaddr) != OK) return false;
}
}
address.append(&dbaddr, sizeof(dbaddr));

View File

@ -20,6 +20,7 @@
#include "devStream.h"
#include <aiRecord.h>
#include <menuConvert.h>
#include <epicsExport.h>
static long readData (dbCommon *record, format_t *format)
@ -45,6 +46,11 @@ static long readData (dbCommon *record, format_t *format)
{
long rval;
if (streamScanf (record, format, &rval)) return ERROR;
if (ai->linr == menuConvertNO_CONVERSION)
{
ai->val = (double) rval;
return DO_NOT_CONVERT;
}
ai->rval = rval;
return OK;
}
@ -67,6 +73,10 @@ static long writeData (dbCommon *record, format_t *format)
}
case DBF_LONG:
{
if (ai->linr == menuConvertNO_CONVERSION)
{
return streamPrintf (record, format, (long) ai->val);
}
return streamPrintf (record, format, (long) ai->rval);
}
}