rec: Code format cleanup to mbbi, mbbo records

No intentional changes to functionality.
This commit is contained in:
Andrew Johnson
2012-12-11 18:23:17 -06:00
parent afb182a3cd
commit 475fc8e122
2 changed files with 140 additions and 168 deletions
+67 -80
View File
@@ -94,7 +94,7 @@ struct mbbidset { /* multi bit binary input dset */
static void checkAlarms(mbbiRecord *, epicsTimeStamp *);
static void monitor(mbbiRecord *);
static long readValue(mbbiRecord *);
static void init_common(mbbiRecord *prec)
{
epicsUInt32 *pstate_values = &prec->zrvl;
@@ -113,47 +113,44 @@ static void init_common(mbbiRecord *prec)
static long init_record(mbbiRecord *prec, int pass)
{
struct mbbidset *pdset;
long status;
struct mbbidset *pdset = (struct mbbidset *) prec->dset;
long status = 0;
if (pass == 0)
return 0;
if (prec->siml.type == CONSTANT) {
recGblInitConstantLink(&prec->siml, DBF_USHORT, &prec->simm);
}
if (prec->siol.type == CONSTANT) {
recGblInitConstantLink(&prec->siol, DBF_USHORT, &prec->sval);
}
pdset = (struct mbbidset *) prec->dset;
if (!pdset) {
recGblRecordError(S_dev_noDSET, prec, "mbbi: init_record");
return S_dev_noDSET;
}
/* must have read_mbbi function defined */
if ((pdset->number < 5) || (pdset->read_mbbi == NULL)) {
recGblRecordError(S_dev_missingSup, prec, "mbbi: init_record");
return S_dev_missingSup;
}
/* initialize mask if the user didn't */
if (prec->siml.type == CONSTANT)
recGblInitConstantLink(&prec->siml, DBF_USHORT, &prec->simm);
if (prec->siol.type == CONSTANT)
recGblInitConstantLink(&prec->siol, DBF_USHORT, &prec->sval);
/* Initialize MASK if the user didn't */
if (prec->mask == 0)
prec->mask = (1 << prec->nobt) - 1;
if (pdset->init_record) {
if (pdset->init_record)
status = pdset->init_record(prec);
}
else
status = 0;
init_common(prec);
prec->mlst = prec->val;
prec->lalm = prec->val;
prec->oraw = prec->rval;
return status;
}
static long process(mbbiRecord *prec)
{
struct mbbidset *pdset = (struct mbbidset *) prec->dset;
@@ -169,14 +166,17 @@ static long process(mbbiRecord *prec)
timeLast = prec->time;
status = readValue(prec); /* read the new value */
/* check if device support set pact */
status = readValue(prec);
/* Done if device support set PACT */
if (!pact && prec->pact)
return 0;
prec->pact = TRUE;
prec->pact = TRUE;
recGblGetTimeStamp(prec);
if (status == 0) { /* convert the value */
if (status == 0) {
/* Convert RVAL to VAL */
epicsUInt32 *pstate_values;
short i;
epicsUInt32 rval = prec->rval;
@@ -184,9 +184,10 @@ static long process(mbbiRecord *prec)
prec->udf = FALSE;
if (prec->shft > 0)
rval >>= prec->shft;
if (prec->sdef) {
pstate_values = &(prec->zrvl);
prec->val = 65535; /* initalize to unknown state*/
prec->val = 65535; /* Initalize to unknown state*/
for (i = 0; i < 16; i++) {
if (*pstate_values == rval) {
prec->val = i;
@@ -195,39 +196,30 @@ static long process(mbbiRecord *prec)
pstate_values++;
}
}
else {
/* the raw value is the desired value */
else /* No states defined, set VAL = RVAL */
prec->val = rval;
}
}
else {
if (status == 2) {
status = 0;
}
}
else if (status == 2)
status = 0;
/* check for alarms */
checkAlarms(prec, &timeLast);
/* check event list */
monitor(prec);
/* process the forward scan link record */
/* Wrap up */
recGblFwdLink(prec);
prec->pact=FALSE;
return status;
}
static long special(DBADDR *paddr, int after)
{
mbbiRecord *prec = (mbbiRecord *) paddr->precord;
int special_type = paddr->special;
int fieldIndex = dbGetFieldIndex(paddr);
if (!after) return 0;
switch (special_type) {
if (!after)
return 0;
switch (paddr->special) {
case SPC_MOD:
init_common(prec);
if (fieldIndex >= mbbiRecordZRST && fieldIndex <= mbbiRecordFFST) {
@@ -309,14 +301,14 @@ static void checkAlarms(mbbiRecord *prec, epicsTimeStamp *timeLast)
epicsEnum16 asev;
epicsEnum16 val = prec->val;
/* check for udf alarm */
/* Check for UDF alarm */
if (prec->udf) {
recGblSetSevr(prec, UDF_ALARM, INVALID_ALARM);
prec->afvl = 0;
return;
}
/* check for state alarm */
/* Check for STATE alarm */
if (val > 15) {
/* Unknown state */
alarm = prec->unsv;
@@ -352,76 +344,71 @@ static void checkAlarms(mbbiRecord *prec, epicsTimeStamp *timeLast)
asev = alarm;
recGblSetSevr(prec, STATE_ALARM, asev);
/* check for cos alarm */
if (val == prec->lalm)
/* Check for COS alarm */
if (val == prec->lalm ||
recGblSetSevr(prec, COS_ALARM, prec->cosv))
return;
recGblSetSevr(prec, COS_ALARM, prec->cosv);
prec->lalm = val;
}
static void monitor(mbbiRecord *prec)
{
unsigned short monitor_mask;
epicsUInt16 events = recGblResetAlarms(prec);
monitor_mask = recGblResetAlarms(prec);
/* check for value change */
if (prec->mlst != prec->val) {
/* post events for value change and archive change */
monitor_mask |= (DBE_VALUE | DBE_LOG);
/* update last value monitored */
events |= DBE_VALUE | DBE_LOG;
prec->mlst = prec->val;
}
/* send out monitors connected to the value field */
if (monitor_mask) {
db_post_events(prec, &prec->val, monitor_mask);
}
if (events)
db_post_events(prec, &prec->val, events);
if (prec->oraw != prec->rval) {
db_post_events(prec, &prec->rval, monitor_mask | DBE_VALUE);
db_post_events(prec, &prec->rval, events | DBE_VALUE | DBE_LOG);
prec->oraw = prec->rval;
}
}
static long readValue(mbbiRecord *prec)
{
struct mbbidset *pdset = (struct mbbidset *) prec->dset;
long status;
if (prec->pact) {
status = pdset->read_mbbi(prec);
return status;
}
if (prec->pact)
return pdset->read_mbbi(prec);
status = dbGetLink(&prec->siml, DBR_USHORT, &prec->simm, 0, 0);
status = dbGetLink(&prec->siml, DBR_ENUM, &prec->simm, 0, 0);
if (status)
return status;
if (prec->simm == menuSimmNO) {
status = pdset->read_mbbi(prec);
return status;
}
if (prec->simm == menuSimmYES) {
status=dbGetLink(&prec->siol, DBR_ULONG, &prec->sval, 0, 0);
switch (prec->simm) {
case menuSimmNO:
return pdset->read_mbbi(prec);
case menuSimmYES:
status = dbGetLink(&prec->siol, DBR_ULONG, &prec->sval, 0, 0);
if (status == 0) {
prec->val = prec->sval;
prec->udf = FALSE;
}
status = 2; /* dont convert */
}
else if (prec->simm == menuSimmRAW) {
status = 2; /* Don't convert */
break;
case menuSimmRAW:
status = dbGetLink(&prec->siol, DBR_ULONG, &prec->sval, 0, 0);
if (status == 0) {
prec->rval = prec->sval;
prec->udf = FALSE;
prec->udf = FALSE;
}
status = 0; /* convert since we've written RVAL */
}
else {
status = -1;
recGblSetSevr(prec, SOFT_ALARM, INVALID_ALARM);
return status;
}
recGblSetSevr(prec, SIMM_ALARM, prec->sims);
status = 0; /* Convert RVAL */
break;
default:
recGblSetSevr(prec, SOFT_ALARM, INVALID_ALARM);
return -1;
}
recGblSetSevr(prec, SIMM_ALARM, prec->sims);
return status;
}
+73 -88
View File
@@ -10,12 +10,12 @@
/* $Revision-Id$ */
/* recMbbo.c - Record Support Routines for multi bit binary Output records */
/* mbboRecord.c - Record Support Routines for multi bit binary Output records */
/*
* Original Author: Bob Dalesio
* Date: 7-17-87
*/
#include <stddef.h>
#include <stdlib.h>
#include <stdarg.h>
@@ -97,7 +97,7 @@ static void convert(mbboRecord *);
static void monitor(mbboRecord *);
static long writeValue(mbboRecord *);
static void init_common(mbboRecord *prec)
{
epicsUInt32 *pstate_values = &prec->zrvl;
@@ -113,7 +113,7 @@ static void init_common(mbboRecord *prec)
}
prec->sdef = FALSE;
}
static long init_record(mbboRecord *prec, int pass)
{
struct mbbodset *pdset;
@@ -124,26 +124,25 @@ static long init_record(mbboRecord *prec, int pass)
return 0;
}
if (prec->siml.type == CONSTANT) {
recGblInitConstantLink(&prec->siml, DBF_USHORT, &prec->simm);
}
pdset = (struct mbbodset *) prec->dset;
if (!pdset) {
recGblRecordError(S_dev_noDSET, prec, "mbbo: init_record");
return S_dev_noDSET;
}
/* must have write_mbbo function defined */
if ((pdset->number < 5) || (pdset->write_mbbo == NULL)) {
recGblRecordError(S_dev_missingSup, prec, "mbbo: init_record");
return S_dev_missingSup;
}
if (prec->dol.type == CONSTANT) {
if (prec->siml.type == CONSTANT)
recGblInitConstantLink(&prec->siml, DBF_USHORT, &prec->simm);
if (prec->dol.type == CONSTANT)
if (recGblInitConstantLink(&prec->dol, DBF_USHORT, &prec->val))
prec->udf = FALSE;
}
/* initialize mask if the user didn't */
/* Initialize MASK if the user didn't */
if (prec->mask == 0)
prec->mask = (1 << prec->nobt) - 1;
@@ -151,7 +150,7 @@ static long init_record(mbboRecord *prec, int pass)
status = pdset->init_record(prec);
init_common(prec);
if (status == 0) {
/* convert initial read-back */
/* Convert initial read-back */
epicsUInt32 rval = prec->rval;
if (prec->shft > 0)
@@ -183,15 +182,16 @@ static long init_record(mbboRecord *prec, int pass)
init_common(prec);
status = 0;
}
/* convert val to rval */
/* Convert VAL to RVAL */
convert(prec);
prec->mlst = prec->val;
prec->lalm = prec->val;
prec->oraw = prec->rval;
prec->orbv = prec->rbv;
return status;
}
static long process(mbboRecord *prec)
{
struct mbbodset *pdset = (struct mbbodset *) prec->dset;
@@ -205,33 +205,32 @@ static long process(mbboRecord *prec)
}
if (!pact) {
if (prec->dol.type != CONSTANT && prec->omsl == menuOmslclosed_loop) {
long status;
unsigned short val;
if (prec->dol.type != CONSTANT &&
prec->omsl == menuOmslclosed_loop) {
epicsUInt16 val;
status = dbGetLink(&prec->dol, DBR_USHORT, &val, 0, 0);
if (status == 0) {
prec->val = val;
prec->udf = FALSE;
} else {
if (dbGetLink(&prec->dol, DBR_USHORT, &val, 0, 0)) {
recGblSetSevr(prec, LINK_ALARM, INVALID_ALARM);
goto CONTINUE;
}
prec->val = val;
}
if (prec->udf==TRUE) {
else if (prec->udf) {
recGblSetSevr(prec, UDF_ALARM, INVALID_ALARM);
goto CONTINUE;
}
/* convert val to rval */
prec->udf = FALSE;
/* Convert VAL to RVAL */
convert(prec);
}
CONTINUE:
/* check for alarms */
/* Check for alarms */
checkAlarms(prec);
if (prec->nsev < INVALID_ALARM)
status = writeValue(prec); /* write the new value */
status = writeValue(prec);
else {
switch (prec->ivoa) {
case menuIvoaSet_output_to_IVOV:
@@ -239,9 +238,9 @@ CONTINUE:
prec->val = prec->ivov;
convert(prec);
}
/* no break, fall through... */
/* No break, fall through... */
case menuIvoaContinue_normally:
status = writeValue(prec); /* write the new value */
status = writeValue(prec);
break;
case menuIvoaDon_t_drive_outputs:
break;
@@ -252,32 +251,29 @@ CONTINUE:
}
}
/* check if device support set pact */
/* Done if device support set pact */
if (!pact && prec->pact)
return 0;
prec->pact = TRUE;
recGblGetTimeStamp(prec);
/* check event list */
monitor(prec);
/* process the forward scan link record */
/* Wrap up */
recGblFwdLink(prec);
prec->pact = FALSE;
return status;
}
static long special(DBADDR *paddr, int after)
{
mbboRecord *prec = (mbboRecord *) paddr->precord;
int special_type = paddr->special;
int fieldIndex = dbGetFieldIndex(paddr);
if (!after)
return 0;
switch (special_type) {
switch (paddr->special) {
case SPC_MOD:
init_common(prec);
if (fieldIndex >= mbboRecordZRST && fieldIndex <= mbboRecordFFST) {
@@ -312,8 +308,8 @@ static long cvt_dbaddr(DBADDR *paddr)
static long get_enum_str(DBADDR *paddr, char *pstring)
{
mbboRecord *prec = (mbboRecord *) paddr->precord;
unsigned short *pfield = paddr->pfield;
int val = *pfield;
epicsEnum16 *pfield = paddr->pfield;
epicsEnum16 val = *pfield;
if (dbGetFieldIndex(paddr) != mbboRecordVAL) {
strcpy(pstring, "Bad Field");
@@ -328,7 +324,7 @@ static long get_enum_str(DBADDR *paddr, char *pstring)
}
return 0;
}
static long get_enum_strs(DBADDR *paddr, struct dbr_enumStrs *pes)
{
mbboRecord *prec = (mbboRecord *) paddr->precord;
@@ -339,18 +335,20 @@ static long get_enum_strs(DBADDR *paddr, struct dbr_enumStrs *pes)
pstate = prec->zrst;
for (i = 0; i < 16; i++) {
strncpy(pes->strs[i], pstate, sizeof(prec->zrst));
if (*pstate) states = i + 1;
if (*pstate)
states = i + 1;
pstate += sizeof(prec->zrst);
}
pes->no_str = states;
return 0;
}
static long put_enum_str(DBADDR *paddr,char *pstring)
{
mbboRecord *prec = (mbboRecord *) paddr->precord;
const char *pstate;
short i;
int i;
if (prec->sdef) {
pstate = prec->zrst;
@@ -364,12 +362,12 @@ static long put_enum_str(DBADDR *paddr,char *pstring)
}
return S_db_badChoice;
}
static void checkAlarms(mbboRecord *prec)
{
epicsEnum16 val = prec->val;
/* check for state alarm */
/* Check for STATE alarm */
if (val > 15) {
/* Unknown state */
recGblSetSevr(prec, STATE_ALARM, prec->unsv);
@@ -380,46 +378,42 @@ static void checkAlarms(mbboRecord *prec)
recGblSetSevr(prec, STATE_ALARM, severities[prec->val]);
}
/* check for cos alarm */
if (val == prec->lalm) return;
if (recGblSetSevr(prec,COS_ALARM,prec->cosv)) return;
/* Check for COS alarm */
if (val == prec->lalm ||
recGblSetSevr(prec, COS_ALARM, prec->cosv))
return;
prec->lalm = val;
return;
}
static void monitor(mbboRecord *prec)
{
unsigned short monitor_mask;
epicsUInt16 events = recGblResetAlarms(prec);
monitor_mask = recGblResetAlarms(prec);
/* check for value change */
if (prec->mlst != prec->val) {
/* post events for value change and archive change */
monitor_mask |= (DBE_VALUE | DBE_LOG);
/* update last value monitored */
events |= DBE_VALUE | DBE_LOG;
prec->mlst = prec->val;
}
/* send out monitors connected to the value field */
if (monitor_mask) {
db_post_events(prec, &prec->val, monitor_mask);
}
if (events)
db_post_events(prec, &prec->val, events);
events |= DBE_VALUE | DBE_LOG;
if (prec->oraw != prec->rval) {
db_post_events(prec, &prec->rval, monitor_mask | DBE_VALUE);
db_post_events(prec, &prec->rval, events);
prec->oraw = prec->rval;
}
if (prec->orbv != prec->rbv) {
db_post_events(prec, &prec->rbv, monitor_mask | DBE_VALUE);
db_post_events(prec, &prec->rbv, events);
prec->orbv = prec->rbv;
}
return;
}
static void convert(mbboRecord *prec)
{
epicsUInt32 *pvalues = &prec->zrvl;
/* convert val to rval */
/* Convert VAL to RVAL */
if (prec->sdef) {
epicsUInt32 *pvalues = &prec->zrvl;
if (prec->val > 15) {
recGblSetSevr(prec, SOFT_ALARM, INVALID_ALARM);
return;
@@ -431,39 +425,30 @@ static void convert(mbboRecord *prec)
if (prec->shft > 0)
prec->rval <<= prec->shft;
return;
}
static long writeValue(mbboRecord *prec)
{
long status;
struct mbbodset *pdset = (struct mbbodset *) prec->dset;
if (prec->pact) {
status = pdset->write_mbbo(prec);
return status;
}
if (prec->pact)
return pdset->write_mbbo(prec);
status = dbGetLink(&prec->siml, DBR_USHORT, &prec->simm, 0, 0);
if (status)
return status;
if (prec->simm == menuYesNoNO) {
status = pdset->write_mbbo(prec);
return status;
}
if (prec->simm == menuYesNoYES) {
status = dbPutLink(&prec->siol, DBR_USHORT, &prec->val, 1);
}
else {
status=-1;
recGblSetSevr(prec, SOFT_ALARM, INVALID_ALARM);
return status;
}
recGblSetSevr(prec, SIMM_ALARM, prec->sims);
switch (prec->simm) {
case menuYesNoNO:
return pdset->write_mbbo(prec);
return status;
case menuYesNoYES:
recGblSetSevr(prec, SIMM_ALARM, prec->sims);
return dbPutLink(&prec->siol, DBR_USHORT, &prec->val, 1);
default:
recGblSetSevr(prec, SOFT_ALARM, INVALID_ALARM);
return -1;
}
}