Merge up changes from 3.15 branch into 3.16
This commit is contained in:
@@ -23,6 +23,7 @@
|
||||
#include "dbDefs.h"
|
||||
#include "dbAccess.h"
|
||||
#include "dbConstLink.h"
|
||||
#include "dbEvent.h"
|
||||
#include "recGbl.h"
|
||||
#include "devSup.h"
|
||||
#include "cantProceed.h"
|
||||
@@ -96,11 +97,15 @@ static long readLocked(struct link *pinp, void *dummy)
|
||||
|
||||
static long read_aai(aaiRecord *prec)
|
||||
{
|
||||
epicsUInt32 nord = prec->nord;
|
||||
struct link *pinp = prec->simm == menuYesNoYES ? &prec->siol : &prec->inp;
|
||||
long status = dbLinkDoLocked(pinp, readLocked, NULL);
|
||||
|
||||
if (status == S_db_noLSET)
|
||||
status = readLocked(pinp, NULL);
|
||||
|
||||
if (!status && nord != prec->nord)
|
||||
db_post_events(prec, &prec->nord, DBE_VALUE | DBE_LOG);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Copyright (c) 2002 Lawrence Berkeley Laboratory,The Control Systems
|
||||
* Group, Systems Engineering Department
|
||||
* EPICS BASE is distributed subject to a Software License Agreement found
|
||||
* in file LICENSE that is included with this distribution.
|
||||
* in file LICENSE that is included with this distribution.
|
||||
\*************************************************************************/
|
||||
|
||||
/*
|
||||
@@ -19,6 +19,7 @@
|
||||
#include "alarm.h"
|
||||
#include "dbDefs.h"
|
||||
#include "dbAccess.h"
|
||||
#include "dbEvent.h"
|
||||
#include "recGbl.h"
|
||||
#include "devSup.h"
|
||||
#include "subArrayRecord.h"
|
||||
@@ -101,6 +102,7 @@ static long read_sa(subArrayRecord *prec)
|
||||
{
|
||||
long status;
|
||||
struct sart rt;
|
||||
epicsUInt32 nord = prec->nord;
|
||||
|
||||
rt.nRequest = prec->indx + prec->nelm;
|
||||
if (rt.nRequest > prec->malm)
|
||||
@@ -123,8 +125,12 @@ static long read_sa(subArrayRecord *prec)
|
||||
status = readLocked(&prec->inp, &rt);
|
||||
}
|
||||
|
||||
if (!status && rt.nRequest > 0)
|
||||
if (!status && rt.nRequest > 0) {
|
||||
subset(prec, rt.nRequest);
|
||||
|
||||
if (nord != prec->nord)
|
||||
db_post_events(prec, &prec->nord, DBE_VALUE | DBE_LOG);
|
||||
}
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Copyright (c) 2002 The Regents of the University of California, as
|
||||
* Operator of Los Alamos National Laboratory.
|
||||
* EPICS BASE is distributed subject to a Software License Agreement found
|
||||
* in file LICENSE that is included with this distribution.
|
||||
* in file LICENSE that is included with this distribution.
|
||||
\*************************************************************************/
|
||||
|
||||
/*
|
||||
@@ -81,6 +81,7 @@ static long read_wf(waveformRecord *prec)
|
||||
{
|
||||
long status;
|
||||
struct wfrt rt;
|
||||
epicsUInt32 nord = prec->nord;
|
||||
|
||||
rt.nRequest = prec->nelm;
|
||||
rt.ptime = (dbLinkIsConstant(&prec->tsel) &&
|
||||
@@ -93,6 +94,8 @@ static long read_wf(waveformRecord *prec)
|
||||
if (!status && rt.nRequest > 0) {
|
||||
prec->nord = rt.nRequest;
|
||||
prec->udf = FALSE;
|
||||
if (nord != prec->nord)
|
||||
db_post_events(prec, &prec->nord, DBE_VALUE | DBE_LOG);
|
||||
}
|
||||
|
||||
return status;
|
||||
|
||||
+24
-27
@@ -2,7 +2,7 @@
|
||||
* Copyright (c) 2002 Southeastern Universities Research Association, as
|
||||
* Operator of Thomas Jefferson National Accelerator Facility.
|
||||
* EPICS BASE is distributed subject to a Software License Agreement found
|
||||
* in file LICENSE that is included with this distribution.
|
||||
* in file LICENSE that is included with this distribution.
|
||||
\*************************************************************************/
|
||||
/* recAai.c */
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
* Original Author: Dave Barker
|
||||
*
|
||||
* C E B A F
|
||||
*
|
||||
*
|
||||
* Continuous Electron Beam Accelerator Facility
|
||||
* Newport News, Virginia, USA.
|
||||
*
|
||||
@@ -140,9 +140,9 @@ static long init_record(struct dbCommon *pcommon, int pass)
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
recGblInitConstantLink(&prec->siml,DBF_USHORT,&prec->simm);
|
||||
|
||||
|
||||
recGblInitConstantLink(&prec->siml, DBF_USHORT, &prec->simm);
|
||||
|
||||
/* must have read_aai function defined */
|
||||
if (pdset->number < 5 || pdset->read_aai == NULL) {
|
||||
recGblRecordError(S_dev_missingSup, prec, "aai: init_record");
|
||||
@@ -203,10 +203,14 @@ static long get_array_info(DBADDR *paddr, long *no_elements, long *offset)
|
||||
static long put_array_info(DBADDR *paddr, long nNew)
|
||||
{
|
||||
aaiRecord *prec = (aaiRecord *)paddr->precord;
|
||||
epicsUInt32 nord = prec->nord;
|
||||
|
||||
prec->nord = nNew;
|
||||
if (prec->nord > prec->nelm)
|
||||
prec->nord = prec->nelm;
|
||||
|
||||
if (nord != prec->nord)
|
||||
db_post_events(prec, &prec->nord, DBE_VALUE | DBE_LOG);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -219,7 +223,7 @@ static long get_units(DBADDR *paddr, char *units)
|
||||
switch (dbGetFieldIndex(paddr)) {
|
||||
case indexof(VAL):
|
||||
if (prec->ftvl == DBF_STRING || prec->ftvl == DBF_ENUM)
|
||||
break;
|
||||
break;
|
||||
case indexof(HOPR):
|
||||
case indexof(LOPR):
|
||||
strncpy(units,prec->egu,DB_UNITS_SIZE);
|
||||
@@ -313,35 +317,28 @@ static void monitor(aaiRecord *prec)
|
||||
|
||||
static long readValue(aaiRecord *prec)
|
||||
{
|
||||
long status;
|
||||
struct aaidset *pdset = (struct aaidset *)prec->dset;
|
||||
long status;
|
||||
|
||||
if (prec->pact == TRUE){
|
||||
status = pdset->read_aai(prec);
|
||||
return status;
|
||||
}
|
||||
/* NB: Device support must post updates to NORD */
|
||||
|
||||
if (prec->pact == TRUE)
|
||||
goto do_read;
|
||||
|
||||
status = dbGetLink(&prec->siml, DBR_ENUM, &prec->simm, 0, 0);
|
||||
if (status)
|
||||
return status;
|
||||
|
||||
if (prec->simm == menuYesNoNO){
|
||||
return pdset->read_aai(prec);
|
||||
}
|
||||
|
||||
if (prec->simm == menuYesNoYES){
|
||||
/* Device suport is responsible for buffer
|
||||
which might be read-only so we may not be
|
||||
allowed to call dbGetLink on it.
|
||||
Maybe also device support has an advanced
|
||||
simulation mode.
|
||||
Thus call device now.
|
||||
*/
|
||||
if (prec->simm == menuYesNoYES) {
|
||||
recGblSetSevr(prec, SIMM_ALARM, prec->sims);
|
||||
return pdset->read_aai(prec);
|
||||
goto do_read;
|
||||
}
|
||||
|
||||
recGblSetSevr(prec, SOFT_ALARM, INVALID_ALARM);
|
||||
return -1;
|
||||
}
|
||||
if (prec->simm != menuYesNoNO) {
|
||||
recGblSetSevr(prec, SOFT_ALARM, INVALID_ALARM);
|
||||
return -1;
|
||||
}
|
||||
|
||||
do_read:
|
||||
return pdset->read_aai(prec);
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* Copyright (c) 2002 Southeastern Universities Research Association, as
|
||||
* Operator of Thomas Jefferson National Accelerator Facility.
|
||||
* EPICS BASE is distributed subject to a Software License Agreement found
|
||||
* in file LICENSE that is included with this distribution.
|
||||
* in file LICENSE that is included with this distribution.
|
||||
\*************************************************************************/
|
||||
/* recAao.c */
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
* Original Author: Dave Barker
|
||||
*
|
||||
* C E B A F
|
||||
*
|
||||
*
|
||||
* Continuous Electron Beam Accelerator Facility
|
||||
* Newport News, Virginia, USA.
|
||||
*
|
||||
@@ -203,10 +203,14 @@ static long get_array_info(DBADDR *paddr, long *no_elements, long *offset)
|
||||
static long put_array_info(DBADDR *paddr, long nNew)
|
||||
{
|
||||
aaoRecord *prec = (aaoRecord *)paddr->precord;
|
||||
epicsUInt32 nord = prec->nord;
|
||||
|
||||
prec->nord = nNew;
|
||||
if (prec->nord > prec->nelm)
|
||||
prec->nord = prec->nelm;
|
||||
|
||||
if (nord != prec->nord)
|
||||
db_post_events(prec, &prec->nord, DBE_VALUE | DBE_LOG);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -219,7 +223,7 @@ static long get_units(DBADDR *paddr, char *units)
|
||||
switch (dbGetFieldIndex(paddr)) {
|
||||
case indexof(VAL):
|
||||
if (prec->ftvl == DBF_STRING || prec->ftvl == DBF_ENUM)
|
||||
break;
|
||||
break;
|
||||
case indexof(HOPR):
|
||||
case indexof(LOPR):
|
||||
strncpy(units,prec->egu,DB_UNITS_SIZE);
|
||||
@@ -342,4 +346,3 @@ static long writeValue(aaoRecord *prec)
|
||||
recGblSetSevr(prec, SOFT_ALARM, INVALID_ALARM);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,12 +4,12 @@
|
||||
* Copyright (c) 2002 The Regents of the University of California, as
|
||||
* Operator of Los Alamos National Laboratory.
|
||||
* EPICS BASE is distributed subject to a Software License Agreement found
|
||||
* in file LICENSE that is included with this distribution.
|
||||
* in file LICENSE that is included with this distribution.
|
||||
\*************************************************************************/
|
||||
|
||||
/*
|
||||
* Original Author: Bob Dalesio
|
||||
* Date: 7-14-89
|
||||
* Date: 7-14-89
|
||||
*/
|
||||
|
||||
#include <stddef.h>
|
||||
@@ -439,12 +439,16 @@ static long get_array_info(DBADDR *paddr, long *no_elements, long *offset)
|
||||
static long put_array_info(DBADDR *paddr, long nNew)
|
||||
{
|
||||
compressRecord *prec = (compressRecord *) paddr->precord;
|
||||
epicsUInt32 nuse = prec->nuse;
|
||||
|
||||
if (prec->balg == bufferingALG_FIFO)
|
||||
prec->off = (prec->off + nNew) % prec->nsam;
|
||||
prec->nuse += nNew;
|
||||
if (prec->nuse > prec->nsam)
|
||||
prec->nuse = prec->nsam;
|
||||
|
||||
if (nuse != prec->nuse)
|
||||
db_post_events(prec, &prec->nuse, DBE_VALUE | DBE_LOG);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -2,17 +2,17 @@
|
||||
* Copyright (c) 2002 Lawrence Berkeley Laboratory,The Control Systems
|
||||
* Group, Systems Engineering Department
|
||||
* EPICS BASE is distributed subject to a Software License Agreement found
|
||||
* in file LICENSE that is included with this distribution.
|
||||
* in file LICENSE that is included with this distribution.
|
||||
\*************************************************************************/
|
||||
|
||||
/* recSubArray.c - Record Support Routines for SubArray records
|
||||
/* recSubArray.c - Record Support Routines for SubArray records
|
||||
*
|
||||
*
|
||||
* Author: Carl Lionberger
|
||||
* Date: 090293
|
||||
*
|
||||
* NOTES:
|
||||
* Derived from waveform record.
|
||||
* Derived from waveform record.
|
||||
* Modification Log:
|
||||
* -----------------
|
||||
*/
|
||||
@@ -126,7 +126,7 @@ static long init_record(struct dbCommon *pcommon, int pass)
|
||||
}
|
||||
|
||||
if (pdset->init_record)
|
||||
return (*pdset->init_record)(prec);
|
||||
return pdset->init_record(prec);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -194,11 +194,14 @@ static long get_array_info(DBADDR *paddr, long *no_elements, long *offset)
|
||||
static long put_array_info(DBADDR *paddr, long nNew)
|
||||
{
|
||||
subArrayRecord *prec = (subArrayRecord *) paddr->precord;
|
||||
epicsUInt32 nord = prec->nord;
|
||||
|
||||
if (nNew > prec->malm)
|
||||
nNew = prec->malm;
|
||||
prec->nord = nNew;
|
||||
if (prec->nord > prec->malm)
|
||||
prec->nord = prec->malm;
|
||||
|
||||
if (nord != prec->nord)
|
||||
db_post_events(prec, &prec->nord, DBE_VALUE | DBE_LOG);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -211,7 +214,7 @@ static long get_units(DBADDR *paddr, char *units)
|
||||
switch (dbGetFieldIndex(paddr)) {
|
||||
case indexof(VAL):
|
||||
if (prec->ftvl == DBF_STRING || prec->ftvl == DBF_ENUM)
|
||||
break;
|
||||
break;
|
||||
case indexof(HOPR):
|
||||
case indexof(LOPR):
|
||||
strncpy(units,prec->egu,DB_UNITS_SIZE);
|
||||
@@ -321,4 +324,3 @@ static long readValue(subArrayRecord *prec)
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
* Copyright (c) 2002 The Regents of the University of California, as
|
||||
* Operator of Los Alamos National Laboratory.
|
||||
* EPICS BASE is distributed subject to a Software License Agreement found
|
||||
* in file LICENSE that is included with this distribution.
|
||||
* in file LICENSE that is included with this distribution.
|
||||
\*************************************************************************/
|
||||
|
||||
/* recWaveform.c - Record Support Routines for Waveform records */
|
||||
@@ -183,12 +183,14 @@ static long get_array_info(DBADDR *paddr, long *no_elements, long *offset)
|
||||
static long put_array_info(DBADDR *paddr, long nNew)
|
||||
{
|
||||
waveformRecord *prec = (waveformRecord *) paddr->precord;
|
||||
epicsUInt32 nord = prec->nord;
|
||||
|
||||
prec->nord = nNew;
|
||||
if (prec->nord > prec->nelm)
|
||||
prec->nord = prec->nelm;
|
||||
|
||||
db_post_events(prec, &prec->nord, DBE_VALUE | DBE_LOG);
|
||||
if (nord != prec->nord)
|
||||
db_post_events(prec, &prec->nord, DBE_VALUE | DBE_LOG);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -201,7 +203,7 @@ static long get_units(DBADDR *paddr, char *units)
|
||||
switch (dbGetFieldIndex(paddr)) {
|
||||
case indexof(VAL):
|
||||
if (prec->ftvl == DBF_STRING || prec->ftvl == DBF_ENUM)
|
||||
break;
|
||||
break;
|
||||
case indexof(HOPR):
|
||||
case indexof(LOPR):
|
||||
strncpy(units,prec->egu,DB_UNITS_SIZE);
|
||||
@@ -304,11 +306,11 @@ static void monitor(waveformRecord *prec)
|
||||
|
||||
static long readValue(waveformRecord *prec)
|
||||
{
|
||||
long status;
|
||||
struct wfdset *pdset = (struct wfdset *) prec->dset;
|
||||
long status;
|
||||
|
||||
if (prec->pact == TRUE){
|
||||
return (*pdset->read_wf)(prec);
|
||||
return pdset->read_wf(prec);
|
||||
}
|
||||
|
||||
status = dbGetLink(&prec->siml, DBR_ENUM, &prec->simm, 0, 0);
|
||||
@@ -318,22 +320,23 @@ static long readValue(waveformRecord *prec)
|
||||
if (prec->simm == menuYesNoNO){
|
||||
epicsUInt32 nord = prec->nord;
|
||||
|
||||
status = (*pdset->read_wf)(prec);
|
||||
status = pdset->read_wf(prec);
|
||||
if (nord != prec->nord)
|
||||
db_post_events(prec, &prec->nord, DBE_VALUE | DBE_LOG);
|
||||
return status;
|
||||
}
|
||||
|
||||
if (prec->simm == menuYesNoYES){
|
||||
epicsUInt32 nord = prec->nord;
|
||||
long nRequest = prec->nelm;
|
||||
|
||||
status = dbGetLink(&prec->siol, prec->ftvl, prec->bptr, 0, &nRequest);
|
||||
/* nord set only for db links: needed for old db_access */
|
||||
if (!dbLinkIsConstant(&prec->siol)) {
|
||||
prec->nord = nRequest;
|
||||
db_post_events(prec, &prec->nord, DBE_VALUE | DBE_LOG);
|
||||
if (nord != prec->nord)
|
||||
db_post_events(prec, &prec->nord, DBE_VALUE | DBE_LOG);
|
||||
if (status == 0)
|
||||
prec->udf=FALSE;
|
||||
prec->udf = FALSE;
|
||||
}
|
||||
} else {
|
||||
recGblSetSevr(prec, SOFT_ALARM, INVALID_ALARM);
|
||||
@@ -343,4 +346,3 @@ static long readValue(waveformRecord *prec)
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
eval 'exec perl -S $0 ${1+"$@"}' # -*- Mode: perl -*-
|
||||
if $running_under_some_shell;
|
||||
#!/usr/bin/env perl
|
||||
#*************************************************************************
|
||||
# Copyright (c) 2010 UChicago Argonne LLC, as Operator of Argonne
|
||||
# National Laboratory.
|
||||
|
||||
Reference in New Issue
Block a user