diff --git a/motorApp/NewportSrc/XPSAxis.cpp b/motorApp/NewportSrc/XPSAxis.cpp index 14ade6aa..0beced1d 100644 --- a/motorApp/NewportSrc/XPSAxis.cpp +++ b/motorApp/NewportSrc/XPSAxis.cpp @@ -870,80 +870,102 @@ asynStatus XPSAxis::setClosedLoop(bool closedLoop) return (asynStatus)status; } -asynStatus XPSAxis::setPositionCompare(bool enable, double minPosition, double maxPosition, double stepSize, - double pulseWidth, double settlingTime) +asynStatus XPSAxis::setPositionCompare() { + int enable; + double minPosition, maxPosition, stepSize, pulseWidth, settlingTime; + int itemp; int status; static const char *functionName = "setPositionCompare"; + + pC_->getIntegerParam(pC_->XPSPositionCompareEnable_, &enable); + pC_->getDoubleParam (pC_->XPSPositionCompareMinPosition_, &minPosition); + pC_->getDoubleParam (pC_->XPSPositionCompareMaxPosition_, &maxPosition); + pC_->getDoubleParam (pC_->XPSPositionCompareStepSize_, &stepSize); + pC_->getIntegerParam(pC_->XPSPositionComparePulseWidth_, &itemp); + pulseWidth = positionComparePulseWidths[itemp]; + pC_->getIntegerParam(pC_->XPSPositionCompareSettlingTime_, &itemp); + settlingTime = positionCompareSettlingTimes[itemp]; + // Disable the position compare so we can set parameters + status = PositionerPositionCompareDisable(pollSocket_, positionerName_); + if (status) { + asynPrint(pasynUser_, ASYN_TRACE_ERROR, + "%s:%s: [%s,%d]: error calling PositionerPositionCompareDisable status=%d\n", + driverName, functionName, pC_->portName, axisNo_, status); + return asynError; + } + status = PositionerPositionComparePulseParametersSet(pollSocket_, positionerName_, pulseWidth, settlingTime); + if (status) { + asynPrint(pasynUser_, ASYN_TRACE_ERROR, + "%s:%s: [%s,%d]: error calling PositionerPositionComparePulseParametersSet status=%d\n", + driverName, functionName, pC_->portName, axisNo_, status); + return asynError; + } + status = PositionerPositionCompareSet(pollSocket_, positionerName_, minPosition, maxPosition, stepSize); + if (status) { + asynPrint(pasynUser_, ASYN_TRACE_ERROR, + "%s:%s: [%s,%d]: error calling PositionerPositionCompareSet status=%d\n", + driverName, functionName, pC_->portName, axisNo_, status); + return asynError; + } if (enable) { - status = PositionerPositionComparePulseParametersSet(pollSocket_, positionerName_, pulseWidth, settlingTime); - if (status) { - asynPrint(pasynUser_, ASYN_TRACE_ERROR, - "%s:%s: [%s,%d]: error calling PositionerPositionComparePulseParametersSet status=%d\n", - driverName, functionName, pC_->portName, axisNo_, status); - return asynError; - } - status = PositionerPositionCompareSet(pollSocket_, positionerName_, minPosition, maxPosition, stepSize); - if (status) { - asynPrint(pasynUser_, ASYN_TRACE_ERROR, - "%s:%s: [%s,%d]: error calling PositionerPositionCompareSet status=%d\n", - driverName, functionName, pC_->portName, axisNo_, status); - return asynError; - } status = PositionerPositionCompareEnable(pollSocket_, positionerName_); if (status) { asynPrint(pasynUser_, ASYN_TRACE_ERROR, "%s:%s: [%s,%d]: error calling PositionerPositionCompareEnable status=%d\n", driverName, functionName, pC_->portName, axisNo_, status); return asynError; - } else { - asynPrint(pasynUser_, ASYN_TRACE_FLOW, - "%s:%s: set XPS %s, axis %d positionCompare set and enable\n", - driverName, functionName, pC_->portName, axisNo_); } - } else { - status = PositionerPositionCompareDisable(pollSocket_, positionerName_); - if (status) { - asynPrint(pasynUser_, ASYN_TRACE_ERROR, - "%s:%s: [%s,%d]: error calling PositionerPositionCompareDisable status=%d\n", - driverName, functionName, pC_->portName, axisNo_, status); - return asynError; - } else { - asynPrint(pasynUser_, ASYN_TRACE_FLOW, - "%s:%s: motorAxisSetInteger set XPS %s, axis %d positionCompare disable\n", - driverName, functionName, pC_->portName, axisNo_); - } - } + } + + asynPrint(pasynUser_, ASYN_TRACE_FLOW, + "%s:%s: set XPS %s, axis %d positionCompare set and enable\n", + driverName, functionName, pC_->portName, axisNo_); + return asynSuccess; } -asynStatus XPSAxis::getPositionCompare(bool *enable, double *minPosition, double *maxPosition, double *stepSize, - double *pulseWidth, double *settlingTime) +asynStatus XPSAxis::getPositionCompare() { + bool enable; int status; - static const char *functionName = "setPositionCompare"; + int i; + double minPosition, maxPosition, stepSize, pulseWidth, settlingTime; + static const char *functionName = "getPositionCompare"; - status = PositionerPositionComparePulseParametersGet(pollSocket_, positionerName_, pulseWidth, settlingTime); - if (status) { - asynPrint(pasynUser_, ASYN_TRACE_ERROR, - "%s:%s: [%s,%d]: error calling PositionerPositionComparePulseParametersSet status=%d\n", - driverName, functionName, pC_->portName, axisNo_, status); - return asynError; - } - status = PositionerPositionCompareGet(pollSocket_, positionerName_, minPosition, maxPosition, stepSize, enable); - if (status) { - asynPrint(pasynUser_, ASYN_TRACE_ERROR, - "%s:%s: [%s,%d]: error calling PositionerPositionCompareSet status=%d\n", - driverName, functionName, pC_->portName, axisNo_, status); - return asynError; - } else { - asynPrint(pasynUser_, ASYN_TRACE_FLOW, - "%s:%s: set XPS %s, axis %d positionCompareGet," - " enable=%d, minPosition=%f, maxPosition=%f, stepSize=%f, pulseWidth=%f, settlingTime=%f\n", - driverName, functionName, pC_->portName, axisNo_, - *enable, *minPosition, *maxPosition, *stepSize, *pulseWidth, *settlingTime); - } + status = PositionerPositionComparePulseParametersGet(pollSocket_, positionerName_, &pulseWidth, &settlingTime); + if (status) { + asynPrint(pasynUser_, ASYN_TRACE_ERROR, + "%s:%s: [%s,%d]: error calling PositionerPositionComparePulseParametersGet status=%d\n", + driverName, functionName, pC_->portName, axisNo_, status); + return asynError; + } + status = PositionerPositionCompareGet(pollSocket_, positionerName_, &minPosition, &maxPosition, &stepSize, &enable); + if (status) { + asynPrint(pasynUser_, ASYN_TRACE_ERROR, + "%s:%s: [%s,%d]: error calling PositionerPositionCompareGet status=%d\n", + driverName, functionName, pC_->portName, axisNo_, status); + return asynError; + } + asynPrint(pasynUser_, ASYN_TRACE_FLOW, + "%s:%s: set XPS %s, axis %d positionCompareGet," + " enable=%d, minPosition=%f, maxPosition=%f, stepSize=%f, pulseWidth=%f, settlingTime=%f\n", + driverName, functionName, pC_->portName, axisNo_, + enable, minPosition, maxPosition, stepSize, pulseWidth, settlingTime); + + setIntegerParam(pC_->XPSPositionCompareEnable_, enable); + setDoubleParam(pC_->XPSPositionCompareMinPosition_, minPosition); + setDoubleParam(pC_->XPSPositionCompareMaxPosition_, maxPosition); + setDoubleParam(pC_->XPSPositionCompareStepSize_, stepSize); + for (i=0; iXPSPositionComparePulseWidth_, i); + for (i=0; iXPSPositionCompareSettlingTime_, i); return asynSuccess; }