Skip to content

Commit 1640284

Browse files
committed
Fixes to get sync DAC output working on both Linux and Windows
1 parent 67aa4cb commit 1640284

File tree

1 file changed

+10
-7
lines changed

1 file changed

+10
-7
lines changed

measCompApp/src/drvMultiFunction.cpp

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2147,10 +2147,11 @@ asynStatus MultiFunction::writeInt32(asynUser *pasynUser, epicsInt32 value)
21472147
}
21482148

21492149
else if (function == analogOutSyncMaster_) {
2150+
// In the record 0=Master, 1=Slave. Windows uses these, Linux uses enums.
21502151
#ifdef _WIN32
2151-
status = cbSetConfig(BOARDINFO, boardNum_, addr, BISYNCMODE, value ? 0 : 1);
2152+
status = cbSetConfig(BOARDINFO, boardNum_, addr, BISYNCMODE, value);
21522153
#else
2153-
status = ulAOSetConfig(daqDeviceHandle_, AO_CFG_SYNC_MODE, addr, value ? AOSM_MASTER : AOSM_SLAVE);
2154+
status = ulAOSetConfig(daqDeviceHandle_, AO_CFG_SYNC_MODE, addr, value ? AOSM_SLAVE : AOSM_MASTER);
21542155
#endif
21552156
reportError(status, functionName, "Setting analog out master");
21562157
}
@@ -2250,19 +2251,21 @@ int MultiFunction::writeAnalogOutSync()
22502251
long rate = 0;
22512252
epicsUInt16 aoValues[MAX_ANALOG_OUT];
22522253
for (int i=0; i<MAX_ANALOG_OUT; i++) {
2253-
getIntegerParam(analogOutValue_, &iTemp);
2254+
getIntegerParam(i, analogOutValue_, &iTemp);
22542255
aoValues[i] = (epicsUInt16) iTemp;
22552256
}
22562257
status = cbAOutScan(boardNum_, 0, numAnalogOut_-1, numAnalogOut_, &rate, BIP10VOLTS, aoValues, options);
22572258
#else
2258-
double rate = 0.;
2259+
int flags = AOUTARRAY_FF_NOSCALEDATA | AOUTARRAY_FF_SIMULTANEOUS;
22592260
epicsFloat64 aoValues[MAX_ANALOG_OUT];
2261+
Range aoRanges[MAX_ANALOG_OUT];
22602262
for (int i=0; i<MAX_ANALOG_OUT; i++) {
2261-
getIntegerParam(analogOutValue_, &iTemp);
2263+
getIntegerParam(i, analogOutValue_, &iTemp);
22622264
aoValues[i] = double(iTemp);
2265+
getIntegerParam(i, analogOutRange_, &iTemp);
2266+
mapRange(iTemp, &aoRanges[i]);
22632267
}
2264-
status = ulAOutScan(daqDeviceHandle_, 0, numAnalogOut_-1, BIP10VOLTS, numAnalogOut_, &rate, (ScanOption) options,
2265-
AOUTSCAN_FF_NOSCALEDATA, aoValues);
2268+
status = ulAOutArray(daqDeviceHandle_, 0, numAnalogOut_-1, aoRanges, (AOutArrayFlag)flags, aoValues);
22662269
#endif
22672270
return status;
22682271
}

0 commit comments

Comments
 (0)