Skip to content
Snippets Groups Projects
Commit a9fa6365 authored by benjamin.franksen's avatar benjamin.franksen
Browse files

seq: pvMonitor and pvStopMonitor support multi-PV arrays

parent a8a7a119
No related branches found
No related tags found
No related merge requests found
...@@ -94,9 +94,9 @@ epicsShareFunc seqBool seq_pvPutComplete(SS_ID, VAR_ID, ...@@ -94,9 +94,9 @@ epicsShareFunc seqBool seq_pvPutComplete(SS_ID, VAR_ID,
epicsShareFunc void seq_pvGetCancel(SS_ID, VAR_ID, unsigned); epicsShareFunc void seq_pvGetCancel(SS_ID, VAR_ID, unsigned);
epicsShareFunc void seq_pvPutCancel(SS_ID, VAR_ID, unsigned); epicsShareFunc void seq_pvPutCancel(SS_ID, VAR_ID, unsigned);
epicsShareFunc pvStat seq_pvAssign(SS_ID, VAR_ID, const char *); epicsShareFunc pvStat seq_pvAssign(SS_ID, VAR_ID, const char *);
epicsShareFunc pvStat seq_pvMonitor(SS_ID, VAR_ID); epicsShareFunc pvStat seq_pvMonitor(SS_ID, VAR_ID, unsigned);
epicsShareFunc void seq_pvSync(SS_ID, VAR_ID, unsigned, EV_ID); epicsShareFunc void seq_pvSync(SS_ID, VAR_ID, unsigned, EV_ID);
epicsShareFunc pvStat seq_pvStopMonitor(SS_ID, VAR_ID); epicsShareFunc pvStat seq_pvStopMonitor(SS_ID, VAR_ID, unsigned);
/* pv info */ /* pv info */
epicsShareFunc char *seq_pvName(SS_ID, VAR_ID); epicsShareFunc char *seq_pvName(SS_ID, VAR_ID);
epicsShareFunc unsigned seq_pvCount(SS_ID, VAR_ID); epicsShareFunc unsigned seq_pvCount(SS_ID, VAR_ID);
......
...@@ -692,53 +692,77 @@ epicsShareFunc pvStat seq_pvAssign(SS_ID ss, VAR_ID varId, const char *pvName) ...@@ -692,53 +692,77 @@ epicsShareFunc pvStat seq_pvAssign(SS_ID ss, VAR_ID varId, const char *pvName)
/* /*
* Initiate a monitor. * Initiate a monitor.
*/ */
epicsShareFunc pvStat seq_pvMonitor(SS_ID ss, VAR_ID varId) epicsShareFunc pvStat seq_pvMonitor(SS_ID ss, VAR_ID varId, unsigned length)
{ {
PROG *sp = ss->prog; PROG *sp = ss->prog;
CHAN *ch = sp->chan + varId; pvStat status = pvStatOK;
DBCHAN *dbch = ch->dbch; unsigned i;
if (!dbch && optTest(sp, OPT_SAFE)) for (i=0; i<length; i++)
{ {
CHAN *ch = sp->chan + varId + i;
DBCHAN *dbch = ch->dbch;
if (!dbch && optTest(sp, OPT_SAFE))
{
ch->monitored = TRUE;
continue;
}
if (!dbch)
{
errlogSevPrintf(errlogMajor,
"pvMonitor(%s): user error (not assigned to a PV)\n",
ch->varName
);
return pvStatERROR;
}
ch->monitored = TRUE; ch->monitored = TRUE;
return pvStatOK; status = seq_camonitor(ch, TRUE);
} if (status != pvStatOK)
if (!dbch) {
{ pv_call_failure(dbch, metaPtr(ch,ss), status);
errlogSevPrintf(errlogMajor, break;
"pvMonitor(%s): user error (variable not assigned)\n", }
ch->varName
);
return pvStatERROR;
} }
ch->monitored = TRUE; return status;
return seq_camonitor(ch, TRUE);
} }
/* /*
* Cancel a monitor. * Cancel a monitor.
*/ */
epicsShareFunc pvStat seq_pvStopMonitor(SS_ID ss, VAR_ID varId) epicsShareFunc pvStat seq_pvStopMonitor(SS_ID ss, VAR_ID varId, unsigned length)
{ {
PROG *sp = ss->prog; PROG *sp = ss->prog;
CHAN *ch = sp->chan + varId; pvStat status = pvStatOK;
DBCHAN *dbch = ch->dbch; unsigned i;
if (!dbch && optTest(sp, OPT_SAFE)) for (i=0; i<length; i++)
{ {
CHAN *ch = sp->chan + varId + i;
DBCHAN *dbch = ch->dbch;
if (!dbch && optTest(sp, OPT_SAFE))
{
ch->monitored = FALSE;
continue;
}
if (!dbch)
{
errlogSevPrintf(errlogMajor,
"pvStopMonitor(%s): user error (not assigned to a PV)\n",
ch->varName
);
return pvStatERROR;
}
ch->monitored = FALSE; ch->monitored = FALSE;
return pvStatOK; status = seq_camonitor(ch, FALSE);
} if (status != pvStatOK)
if (!dbch) {
{ pv_call_failure(dbch, metaPtr(ch,ss), status);
errlogSevPrintf(errlogMajor, break;
"pvStopMonitor(%s): user error (variable not assigned)\n", }
ch->varName
);
return pvStatERROR;
} }
ch->monitored = FALSE; return status;
return seq_camonitor(ch, FALSE);
} }
/* /*
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment