static long processAo(aoRecord *pr) { devPvt *pPvt = (devPvt *)pr->dpvt; asynStatus status; if (getCallbackValue(pPvt)) { if (pPvt->result.status == asynSuccess) { pr->val = pPvt->result.value; pr->udf = 0; } } else if(pr->pact == 0) { pPvt->result.value = pr->oval; if(pPvt->canBlock) pr->pact = 1; status = pasynManager->queueRequest(pPvt->pasynUser, 0, 0); if((status==asynSuccess) && pPvt->canBlock) return 0; if(pPvt->canBlock) pr->pact = 0; reportQueueRequestStatus(pPvt, status); } pasynEpicsUtils->asynStatusToEpicsAlarm(pPvt->result.status, WRITE_ALARM, &pPvt->result.alarmStatus, INVALID_ALARM, &pPvt->result.alarmSeverity); recGblSetSevr(pr, pPvt->result.alarmStatus, pPvt->result.alarmSeverity); if(pPvt->result.status == asynSuccess) { return 0; } else { pPvt->result.status = asynSuccess; return -1; } }
static long processLo(longoutRecord *pr) { devPvt *pPvt = (devPvt *)pr->dpvt; asynStatus status; if(getCallbackValue(pPvt)) { /* We got a callback from the driver */ if (pPvt->result.status == asynSuccess) { pr->val = pPvt->result.value & pPvt->mask; pr->udf = 0; } } else if(pr->pact == 0) { pPvt->result.value = pr->val & pPvt->mask; if(pPvt->canBlock) pr->pact = 1; status = pasynManager->queueRequest(pPvt->pasynUser, 0, 0); if((status==asynSuccess) && pPvt->canBlock) return 0; if(pPvt->canBlock) pr->pact = 0; reportQueueRequestStatus(pPvt, status); } if(pPvt->result.status != asynSuccess) { pasynEpicsUtils->asynStatusToEpicsAlarm(pPvt->result.status, WRITE_ALARM, &pPvt->alarmStat, INVALID_ALARM, &pPvt->alarmSevr); recGblSetSevr(pr, pPvt->alarmStat, pPvt->alarmSevr); } return 0; }
static long processMbbi(mbbiRecord *pr) { devPvt *pPvt = (devPvt *)pr->dpvt; int status; if(!getCallbackValue(pPvt) && !pr->pact) { if(pPvt->canBlock) pr->pact = 1; status = pasynManager->queueRequest(pPvt->pasynUser, 0, 0); if((status==asynSuccess) && pPvt->canBlock) return 0; if(pPvt->canBlock) pr->pact = 0; reportQueueRequestStatus(pPvt, status); } pr->rval = pPvt->result.value & pr->mask; pr->time = pPvt->result.time; if(pPvt->result.status==asynSuccess) { pr->udf=0; } else { pasynEpicsUtils->asynStatusToEpicsAlarm(pPvt->result.status, READ_ALARM, &pPvt->alarmStat, INVALID_ALARM, &pPvt->alarmSevr); recGblSetSevr(pr, pPvt->alarmStat, pPvt->alarmSevr); } pPvt->result.status = asynSuccess; return 0; }
static long processAi(aiRecord *pr) { devPvt *pPvt = (devPvt *)pr->dpvt; asynStatus status; if (!getCallbackValue(pPvt) && !pr->pact) { if(pPvt->canBlock) pr->pact = 1; status = pasynManager->queueRequest(pPvt->pasynUser, 0, 0); if((status==asynSuccess) && pPvt->canBlock) return 0; if(pPvt->canBlock) pr->pact = 0; reportQueueRequestStatus(pPvt, status); } pr->time = pPvt->result.time; pasynEpicsUtils->asynStatusToEpicsAlarm(pPvt->result.status, READ_ALARM, &pPvt->result.alarmStatus, INVALID_ALARM, &pPvt->result.alarmSeverity); recGblSetSevr(pr, pPvt->result.alarmStatus, pPvt->result.alarmSeverity); if(pPvt->result.status==asynSuccess) { epicsFloat64 val64 = pPvt->result.value; /* ASLO/AOFF conversion */ if (pr->aslo != 0.0) val64 *= pr->aslo; val64 += pr->aoff; /* Smoothing */ if (pr->smoo == 0.0 || pr->udf || !finite(pr->val)) pr->val = val64; else pr->val = pr->val * pr->smoo + val64 * (1.0 - pr->smoo); pr->udf = 0; return 2; } else { return -1; } }
static long processBo(boRecord *pr) { devInt32Pvt *pPvt = (devInt32Pvt *)pr->dpvt; int status; if(getCallbackValue(pPvt)) { /* We got a callback from the driver */ if (pPvt->result.status == asynSuccess) { pr->rval = pPvt->result.value; pr->val = (pr->rval) ? 1 : 0; pr->udf = 0; } } else if(pr->pact == 0) { pPvt->result.value = pr->rval; if(pPvt->canBlock) pr->pact = 1; status = pasynManager->queueRequest(pPvt->pasynUser, 0, 0); if((status==asynSuccess) && pPvt->canBlock) return 0; if(pPvt->canBlock) pr->pact = 0; reportQueueRequestStatus(pPvt, status); } if(pPvt->result.status == asynSuccess) { return 0; } else { pasynEpicsUtils->asynStatusToEpicsAlarm(pPvt->result.status, WRITE_ALARM, &pPvt->alarmStat, INVALID_ALARM, &pPvt->alarmSevr); (void)recGblSetSevr(pr, pPvt->alarmStat, pPvt->alarmSevr); pPvt->result.status = asynSuccess; return -1; } }
static long processAo(aoRecord *pr) { devInt32Pvt *pPvt = (devInt32Pvt *)pr->dpvt; asynStatus status; double value; if (getCallbackValue(pPvt)) { /* We got a callback from the driver */ if (pPvt->result.status == asynSuccess) { pr->rval = pPvt->result.value; pr->udf = 0; value = (double)pr->rval + (double)pr->roff; if(pr->aslo!=0.0) value *= pr->aslo; value += pr->aoff; if (pr->linr == menuConvertNO_CONVERSION){ ; /*do nothing*/ } else if ((pr->linr == menuConvertLINEAR) || (pr->linr == menuConvertSLOPE)) { value = value*pr->eslo + pr->eoff; } else { if(cvtRawToEngBpt(&value,pr->linr,pr->init, (void *)&pr->pbrk,&pr->lbrk)!=0) { asynPrint(pPvt->pasynUser, ASYN_TRACE_ERROR, "%s devAsynInt32 cvtRawToEngBpt failed\n", pr->name); (void)recGblSetSevr(pr, WRITE_ALARM, INVALID_ALARM); return -1; } } pr->val = value; pr->udf = isnan(value); } } else if(pr->pact == 0) { pPvt->result.value = pr->rval; if(pPvt->canBlock) pr->pact = 1; status = pasynManager->queueRequest(pPvt->pasynUser, 0, 0); if((status==asynSuccess) && pPvt->canBlock) return 0; if(pPvt->canBlock) pr->pact = 0; reportQueueRequestStatus(pPvt, status); } if(pPvt->result.status == asynSuccess) { return 0; } else { pasynEpicsUtils->asynStatusToEpicsAlarm(pPvt->result.status, WRITE_ALARM, &pPvt->alarmStat, INVALID_ALARM, &pPvt->alarmSevr); (void)recGblSetSevr(pr, pPvt->alarmStat, pPvt->alarmSevr); pPvt->result.status = asynSuccess; return -1; } }
static long processAo(aoRecord *pr) { devPvt *pPvt = (devPvt *)pr->dpvt; asynStatus status; epicsMutexLock(pPvt->devPvtLock); if (pPvt->newOutputCallbackValue && getCallbackValue(pPvt)) { if (pPvt->result.status == asynSuccess) { epicsFloat64 val64 = pPvt->result.value; /* ASLO/AOFF conversion */ if (pr->aslo != 0.0) val64 *= pr->aslo; val64 += pr->aoff; pr->val = val64; pr->udf = 0; } } else if(pr->pact == 0) { /* ASLO/AOFF conversion */ epicsFloat64 val64 = pr->oval - pr->aoff; if (pr->aslo != 0.0) val64 /= pr->aslo; pPvt->result.value = val64; if(pPvt->canBlock) { pr->pact = 1; pPvt->asyncProcessingActive = 1; } epicsMutexUnlock(pPvt->devPvtLock); status = pasynManager->queueRequest(pPvt->pasynUser, 0, 0); if((status==asynSuccess) && pPvt->canBlock) return 0; if(pPvt->canBlock) pr->pact = 0; epicsMutexLock(pPvt->devPvtLock); reportQueueRequestStatus(pPvt, status); } pasynEpicsUtils->asynStatusToEpicsAlarm(pPvt->result.status, WRITE_ALARM, &pPvt->result.alarmStatus, INVALID_ALARM, &pPvt->result.alarmSeverity); recGblSetSevr(pr, pPvt->result.alarmStatus, pPvt->result.alarmSeverity); if (pPvt->numDeferredOutputCallbacks > 0) { callbackRequest(&pPvt->outputCallback); pPvt->numDeferredOutputCallbacks--; } pPvt->newOutputCallbackValue = 0; pPvt->asyncProcessingActive = 0; epicsMutexUnlock(pPvt->devPvtLock); if(pPvt->result.status == asynSuccess) { return 0; } else { pPvt->result.status = asynSuccess; return -1; } }
static long processBo(boRecord *pr) { devPvt *pPvt = (devPvt *)pr->dpvt; asynStatus status; if(pPvt->newOutputCallbackValue && getCallbackValue(pPvt)) { /* We got a callback from the driver */ if (pPvt->result.status == asynSuccess) { pr->rval = pPvt->result.value & pr->mask; pr->val = (pr->rval) ? 1 : 0; pr->udf = 0; } } else if(pr->pact == 0) { pPvt->result.value = pr->rval;; if(pPvt->canBlock) pr->pact = 1; status = pasynManager->queueRequest(pPvt->pasynUser, 0, 0); if((status==asynSuccess) && pPvt->canBlock) return 0; if(pPvt->canBlock) pr->pact = 0; reportQueueRequestStatus(pPvt, status); } pasynEpicsUtils->asynStatusToEpicsAlarm(pPvt->result.status, WRITE_ALARM, &pPvt->result.alarmStatus, INVALID_ALARM, &pPvt->result.alarmSeverity); recGblSetSevr(pr, pPvt->result.alarmStatus, pPvt->result.alarmSeverity); if (pPvt->numDeferredOutputCallbacks > 0) { callbackRequest(&pPvt->outputCallback); pPvt->numDeferredOutputCallbacks--; } pPvt->newOutputCallbackValue = 0; if(pPvt->result.status == asynSuccess) { return 0; } else { pPvt->result.status = asynSuccess; return -1; } }