Skip to content
Snippets Groups Projects
Commit b959f593 authored by Marco Filho's avatar Marco Filho
Browse files

Add acquire and isAcquiring records.

parent 91cd4ece
No related branches found
No related tags found
1 merge request!7Major refactor
......@@ -4,9 +4,29 @@ record(bo, "$(P)$(R)Acquire-S") {
field(ZNAM, "Done")
field(ONAM, "Acquire")
field(DTYP, "asynInt32")
field(FLNK, "$(P)$(R)IsAcquiring-R")
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))VMM_FEN_ACQUIRE")
}
record(bi, "$(P)$(R)IsAcquiring-R") {
field(DESC, "Is VMM FEN Acquiring ?")
field(VAL, "0")
field(ZNAM, "Idle")
field(ONAM, "Acquiring")
field(DTYP, "asynInt32")
field(SCAN, "I/O Intr")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))VMM_FEN_ACQUIRING")
}
record(waveform, "$(P)$(R)IOCMessage-R") {
field(DESC, "General message from IOC driver")
field(DTYP, "asynOctetRead")
field(NELM, "256")
field(FTVL, "CHAR")
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))IOC_MESSAGE")
field(SCAN, "I/O Intr")
}
record(ai, "$(P)$(R)RegBankVersion-R"){
field(DESC, "Register bank version")
field(PINI, "YES")
......
......@@ -29,7 +29,7 @@ asynStatus VMMTbl::readInt32(asynUser *pasynUser, epicsInt32 *value) {
int tmp_val;
bool tmp_val_bool;
uint8_t tmp_val_uint8;
int param_index, hyb_index, vmm_index;
int param_index = 0, hyb_index, vmm_index;
if (function < FIRST_VMM_PARAM) {
return asynPortDriver::readInt32(pasynUser, value);
......@@ -39,7 +39,14 @@ asynStatus VMMTbl::readInt32(asynUser *pasynUser, epicsInt32 *value) {
vmmStatus result = this->pVmmAPI->getRegBankVersion(val);
if (result != vmmSuccess) status = asynError;
*value = val;
param_index = 10000; /// \todo So endOfReadInt32 won't return asynError; Maybe improve mechanism?
goto endOfReadInt32;
}
if (function == vmmIsAcquiring_) {
vmmStatus result = this->pVmmAPI->isAcquiring(tmp_val_bool);
printf("Is acquiring: %d\n", tmp_val_bool);
if (result != vmmSuccess) status = asynError;
*value = tmp_val_bool;
goto endOfReadInt32;
}
......@@ -110,7 +117,7 @@ asynStatus VMMTbl::readOctet(asynUser *pasynUser, char *value,
int status = asynSuccess;
int function = pasynUser->reason;
std::string read = "";
/* If this parameter belongs to a base class call its method */
if (function < FIRST_VMM_PARAM) {
status = asynPortDriver::readOctet(pasynUser, value, nChars, nActual,
......@@ -152,10 +159,10 @@ asynStatus VMMTbl::readOctet(asynUser *pasynUser, char *value,
callParamCallbacks();
return asynSuccess;
}
asynStatus VMMTbl::createParamAndStoreInVector(std::string paramName, asynParamType typ,
asynStatus VMMTbl::createParamAndStoreInVector(std::string paramName, asynParamType typ,
std::vector<int>* vectorToStore){
int paramIndex;
......@@ -174,8 +181,11 @@ asynStatus VMMTbl::createParamAndStoreInVector(std::string paramName, asynParamT
asynStatus VMMTbl::createEpicsParams() {
createParam("REG_BANK_VERSION", asynParamInt32, &vmmRegBankVersion);
createParam("VMM_FEN_ACQUIRE", asynParamInt32, &vmmAcquire_);
createParam("VMM_FEN_ACQUIRING", asynParamInt32, &vmmIsAcquiring_);
createParam("IOC_MESSAGE", asynParamOctet, &IOCMessage);
std::tuple<std::string, asynParamType, std::vector<int>*>
std::tuple<std::string, asynParamType, std::vector<int>*>
hyb_params_to_create[7] = {{"_FW_VERSION", asynParamOctet, &vmmHybFwVersion_},
{"_ID", asynParamOctet, &vmmHybId_},
{"_GEOPOS", asynParamOctet, &vmmHybGeoPos_},
......@@ -196,7 +206,7 @@ asynStatus VMMTbl::createEpicsParams() {
}
std::vector<int> SC, SL, ST, STH, SM, SD, SMX, ADCIDX, ADCVAL;
for (int vmm=0; vmm < VMMS_PER_HYBRID; vmm++) {
......@@ -257,22 +267,28 @@ asynStatus VMMTbl::writeInt32(asynUser *pasynUser, epicsInt32 value) {
asynStatus status = asynSuccess;
vmmStatus vmm_stat;
bool is_acquiring;
int function = pasynUser->reason;
int param_index = -1, hyb_index, vmm_index;
// if (function == vmmAcquire_) {
// if (value) pVmmAPI->acquire(true);
// else pVmmAPI->acquire(false);
// for (int hyb = 0; hyb < number_hybrids; hyb++)
// setIntegerParam(vmmHybLinkStatus_[hyb], std::stoi(pVmmAPI->checkLinkStatus(hyb)));
// }
int param_index = 0, hyb_index, vmm_index;
if (function < FIRST_VMM_PARAM) {
return asynPortDriver::writeInt32(pasynUser, value);
}
if (function == vmmAcquire_) {
vmm_stat = this->pVmmAPI->isAcquiring(is_acquiring);
if (is_acquiring == (bool)value) {
setStringParam(IOCMessage, "Set to acquire/stop but already acquiring/stopped.");
status = asynError;
} else {
this->pVmmAPI->acquire((bool)value);
}
goto endOfWriteInt32;
}
//Search for parameter in all parameter vectors. If found, execute correct function for specific hybrid.
param_index = VecUtils::getIndex(vmmHybSkew_, function);
if (param_index >= 0) {
......
......@@ -35,6 +35,8 @@ protected:
int vmmMonitorValueVMM0_;
int vmmMonitorValueVMM1_;
int vmmAcquire_;
int vmmIsAcquiring_;
int IOCMessage;
std::vector<int> vmmHybFwVersion_;
std::vector<int> vmmHybId_;
std::vector<int> vmmHybGeoPos_;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment