mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-13 05:17:13 +02:00
fix merge
This commit is contained in:
@ -2448,6 +2448,32 @@ const slsDetectorDefs::ROI *multiSlsDetector::getROI(int &n, int detPos) {
|
||||
return retval;
|
||||
}
|
||||
|
||||
void multiSlsDetector::setADCEnableMask(uint32_t mask, int detPos) {
|
||||
// single
|
||||
if (detPos >= 0) {
|
||||
detectors[detPos]->setADCEnableMask(mask);
|
||||
}
|
||||
|
||||
// multi
|
||||
parallelCall(&slsDetector::setADCEnableMask, mask);
|
||||
}
|
||||
|
||||
uint32_t multiSlsDetector::getADCEnableMask(int detPos) {
|
||||
// single
|
||||
if (detPos >= 0) {
|
||||
return detectors[detPos]->getADCEnableMask();
|
||||
}
|
||||
|
||||
// multi
|
||||
auto r = parallelCall(&slsDetector::getADCEnableMask);
|
||||
if (sls::allEqual(r)) {
|
||||
return r.front();
|
||||
}
|
||||
|
||||
// can't have different values
|
||||
throw RuntimeError("Error: Different Values for function getADCEnableMask");
|
||||
}
|
||||
|
||||
int multiSlsDetector::writeAdcRegister(uint32_t addr, uint32_t val, int detPos) {
|
||||
// single
|
||||
if (detPos >= 0) {
|
||||
|
@ -484,15 +484,16 @@ void slsDetector::updateTotalNumberOfChannels() {
|
||||
if (shm()->myDetectorType == CHIPTESTBOARD ||
|
||||
shm()->myDetectorType == MOENCH) {
|
||||
|
||||
// default number of channels
|
||||
shm()->nChan[X] = 32;
|
||||
|
||||
// if roi, recalculate #nchanX
|
||||
if (shm()->nROI > 0) {
|
||||
shm()->nChan[X] = 0;
|
||||
for (int iroi = 0; iroi < shm()->nROI; ++iroi) {
|
||||
shm()->nChan[X] += (shm()->roiLimits[iroi].xmax -
|
||||
shm()->roiLimits[iroi].xmin + 1);
|
||||
int nchans = 0;
|
||||
// calculate analog channels
|
||||
uint32_t mask = shm()->adcEnableMask;
|
||||
if (mask == BIT32_MASK) {
|
||||
nchans = 32;
|
||||
} else {
|
||||
nchans = 0;
|
||||
for (int ich = 0; ich < 32; ++ich) {
|
||||
if (mask & (1 << ich))
|
||||
++nchans;
|
||||
}
|
||||
}
|
||||
|
||||
@ -502,6 +503,7 @@ void slsDetector::updateTotalNumberOfChannels() {
|
||||
((shm()->roFlags & ANALOG_AND_DIGITAL) != 0))) {
|
||||
shm()->nChan[X] += 4;
|
||||
}
|
||||
shm()->nChan[X] = nchans;
|
||||
|
||||
// recalculate derived parameters chans and databytes
|
||||
shm()->nChans = shm()->nChan[X];
|
||||
@ -786,10 +788,10 @@ int slsDetector::updateDetectorNoWait(sls::ClientSocket &client) {
|
||||
n += client.receiveData(&i32, sizeof(i32));
|
||||
shm()->roiLimits[i].xmax = i32;
|
||||
}
|
||||
// moench (send to processor)
|
||||
if (shm()->myDetectorType == MOENCH) {
|
||||
sendROIToProcessor();
|
||||
}
|
||||
// // moench (send to processor)
|
||||
// if (shm()->myDetectorType == MOENCH) {
|
||||
// sendROIToProcessor();
|
||||
// }
|
||||
}
|
||||
|
||||
// update #nchans and databytes, as it depends on #samples, roi,
|
||||
@ -2491,17 +2493,17 @@ int slsDetector::setCounterBit(int cb) {
|
||||
return retval;
|
||||
}
|
||||
|
||||
int slsDetector::sendROIToProcessor() {
|
||||
std::ostringstream os;
|
||||
os << "[" << shm()->roiLimits[0].xmin << ", " << shm()->roiLimits[0].xmax
|
||||
<< ", " << shm()->roiLimits[0].ymin << ", " << shm()->roiLimits[0].ymax
|
||||
<< "]";
|
||||
std::string sroi = os.str();
|
||||
std::string result = setAdditionalJsonParameter("roi", sroi);
|
||||
if (result == sroi)
|
||||
return OK;
|
||||
return FAIL;
|
||||
}
|
||||
// int slsDetector::sendROIToProcessor() {
|
||||
// std::ostringstream os;
|
||||
// os << "[" << shm()->roiLimits[0].xmin << ", " << shm()->roiLimits[0].xmax
|
||||
// << ", " << shm()->roiLimits[0].ymin << ", " << shm()->roiLimits[0].ymax
|
||||
// << "]";
|
||||
// std::string sroi = os.str();
|
||||
// std::string result = setAdditionalJsonParameter("roi", sroi);
|
||||
// if (result == sroi)
|
||||
// return OK;
|
||||
// return FAIL;
|
||||
// }
|
||||
|
||||
int slsDetector::setROI(int n, ROI roiLimits[]) {
|
||||
std::sort(roiLimits, roiLimits + n,
|
||||
@ -2509,7 +2511,7 @@ int slsDetector::setROI(int n, ROI roiLimits[]) {
|
||||
|
||||
int ret = sendROI(n, roiLimits);
|
||||
if (shm()->myDetectorType == MOENCH) {
|
||||
sendROIToProcessor();
|
||||
// sendROIToProcessor();
|
||||
}
|
||||
// update #nchans and databytes, as it depends on #samples, roi,
|
||||
if (shm()->myDetectorType == CHIPTESTBOARD ||
|
||||
@ -2639,6 +2641,42 @@ int slsDetector::sendROI(int n, ROI roiLimits[]) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
void slsDetector::setADCEnableMask(uint32_t mask) {
|
||||
uint32_t arg = mask;
|
||||
FILE_LOG(logDEBUG1) << "Setting ADC Enable mask to 0x" << std::hex << arg << std::dec;
|
||||
if (shm()->onlineFlag == ONLINE_FLAG) {
|
||||
sendToDetector(F_SET_ADC_ENABLE_MASK, &arg, sizeof(arg), nullptr, 0);
|
||||
shm()->adcEnableMask = mask;
|
||||
|
||||
// update #nchans and databytes, as it depends on #samples, adcmask, readoutflags
|
||||
updateTotalNumberOfChannels();
|
||||
|
||||
// send to processor
|
||||
if (shm()->myDetectorType == MOENCH)
|
||||
setAdditionalJsonParameter("adcmask", std::to_string(shm()->adcEnableMask));
|
||||
|
||||
if (shm()->rxOnlineFlag == ONLINE_FLAG) {
|
||||
int fnum = F_RECEIVER_SET_ADC_MASK;
|
||||
int retval = -1;
|
||||
mask = shm()->adcEnableMask;
|
||||
FILE_LOG(logDEBUG1)
|
||||
<< "Setting ADC Enable mask to 0x" << std:: hex << mask << std::dec << " in receiver";
|
||||
sendToReceiver(fnum, &mask, sizeof(mask), &retval, sizeof(retval));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t slsDetector::getADCEnableMask() {
|
||||
uint32_t retval = -1;
|
||||
FILE_LOG(logDEBUG1) << "Getting ADC Enable mask";
|
||||
if (shm()->onlineFlag == ONLINE_FLAG) {
|
||||
sendToDetector(F_GET_ADC_ENABLE_MASK, nullptr, 0, &retval, sizeof(retval));
|
||||
shm()->adcEnableMask = retval;
|
||||
FILE_LOG(logDEBUG1) << "ADC Enable Mask: 0x" << std::hex << retval << std::dec;
|
||||
}
|
||||
return shm()->adcEnableMask;
|
||||
}
|
||||
|
||||
int slsDetector::writeAdcRegister(uint32_t addr, uint32_t val) {
|
||||
uint32_t args[]{addr, val};
|
||||
FILE_LOG(logDEBUG1) << "Writing to ADC register 0x" << std::hex << addr
|
||||
@ -3974,4 +4012,4 @@ std::vector<std::string> slsDetector::getSettingsFileDacNames() {
|
||||
"Unknown detector type - unknown format for settings file");
|
||||
}
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
@ -5554,74 +5554,22 @@ std::string slsDetectorCommand::cmdPattern(int narg, char *args[], int action, i
|
||||
os << std::hex << myDet->readRegister(123, detPos) << std::dec ; //0x7b
|
||||
} else if (cmd == "adcdisable") {
|
||||
|
||||
int nroi = 0;
|
||||
ROI roiLimits[MAX_ROIS];
|
||||
|
||||
if (action == PUT_ACTION) {
|
||||
|
||||
if (sscanf(args[1], "%x", &addr))
|
||||
uint32_t adcEnableMask = 0;
|
||||
if (sscanf(args[1], "%x", &adcEnableMask))
|
||||
;
|
||||
else
|
||||
return std::string("Could not scan adcdisable reg ") + std::string(args[1]);
|
||||
|
||||
/******USE ROI?!?!?!?*********/
|
||||
// roiLimits[i].xmin;roiLimits[i].xmax;roiLimits[i].ymin;roiLimits[i].ymin;roiLimits[i].ymax
|
||||
//int mask=1;
|
||||
int ii = 0;
|
||||
while (ii < 32) {
|
||||
++nroi;
|
||||
roiLimits[nroi - 1].xmin = ii;
|
||||
roiLimits[nroi - 1].ymin = 0;
|
||||
roiLimits[nroi - 1].ymax = 0;
|
||||
while ((addr & (1 << ii))) {
|
||||
++ii;
|
||||
if (ii >= 32)
|
||||
break;
|
||||
}
|
||||
if (ii >= 32) {
|
||||
break;
|
||||
std::cout << "ROI " << nroi << " xmin " << roiLimits[nroi - 1].xmin << " xmax " << roiLimits[nroi - 1].xmax << std::endl;
|
||||
roiLimits[nroi - 1].xmax = 31;
|
||||
break;
|
||||
}
|
||||
roiLimits[nroi - 1].xmin = ii;
|
||||
while ((addr & (1 << ii)) == 0) {
|
||||
++ii;
|
||||
if (ii >= 32)
|
||||
break;
|
||||
}
|
||||
roiLimits[nroi - 1].xmax = ii - 1;
|
||||
if (ii >= 32) {
|
||||
std::cout << "ROI " << nroi << " xmin " << roiLimits[nroi - 1].xmin << " xmax " << roiLimits[nroi - 1].xmax << std::endl;
|
||||
++nroi;
|
||||
break;
|
||||
}
|
||||
std::cout << "ROI " << nroi << " xmin " << roiLimits[nroi - 1].xmin << " xmax " << roiLimits[nroi - 1].xmax << std::endl;
|
||||
}
|
||||
std::cout << "********ROI " << nroi << std::endl;
|
||||
myDet->setROI(nroi - 1, roiLimits, detPos);
|
||||
// myDet->writeRegister(94,addr, detPos);
|
||||
// myDet->writeRegister(120,addr, detPos);
|
||||
|
||||
// get enable mask from enable mask
|
||||
adcEnableMask ^= 0xFFFFFFFF;
|
||||
myDet->setADCEnableMask(adcEnableMask, detPos);
|
||||
}
|
||||
|
||||
const ROI *aa = myDet->getROI(nroi, detPos);
|
||||
|
||||
int reg = 0xffffffff;
|
||||
if (nroi < 1)
|
||||
reg = 0;
|
||||
else {
|
||||
for (int iroi = 0; iroi < nroi; ++iroi) {
|
||||
std::cout << iroi << " xmin " << (aa + iroi)->xmin << " xmax " << (aa + iroi)->xmax << std::endl;
|
||||
for (int ich = (aa + iroi)->xmin; ich <= (aa + iroi)->xmax; ++ich) {
|
||||
reg &= ~(1 << ich);
|
||||
}
|
||||
}
|
||||
}
|
||||
os << std::hex << reg << std::dec ;
|
||||
if (aa != NULL)
|
||||
delete [] aa;
|
||||
//os <<" "<< std::hex << myDet->readRegister(120, detPos) << std::dec ;
|
||||
|
||||
uint32_t retval = myDet->getADCEnableMask(detPos);
|
||||
// get disable mask
|
||||
retval ^= 0xFFFFFFFF;
|
||||
os << std::hex << retval << std::dec;
|
||||
}
|
||||
|
||||
else
|
||||
|
Reference in New Issue
Block a user