Changed set/getPositionCompare API

This commit is contained in:
MarkRivers
2015-03-11 20:02:03 +00:00
parent 01f9cbaaf1
commit 57bf44260e
+78 -56
View File
@@ -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; i<MAX_PULSE_WIDTHS; i++) {
if (fabs(pulseWidth - positionComparePulseWidths[i]) < 0.001) break;
}
setIntegerParam(pC_->XPSPositionComparePulseWidth_, i);
for (i=0; i<MAX_SETTLING_TIMES; i++) {
if (fabs(settlingTime - positionCompareSettlingTimes[i]) < 0.001) break;
}
setIntegerParam(pC_->XPSPositionCompareSettlingTime_, i);
return asynSuccess;
}