mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-21 19:30:03 +02:00
moench: first version
This commit is contained in:
parent
d7319968a7
commit
6bbcf6173d
@ -161,8 +161,6 @@ class qDrawPlot : public QWidget, private Ui::PlotObject {
|
|||||||
|
|
||||||
unsigned int nPixelsX{0};
|
unsigned int nPixelsX{0};
|
||||||
unsigned int nPixelsY{0};
|
unsigned int nPixelsY{0};
|
||||||
const static int npixelsx_jctb = 400;
|
|
||||||
int npixelsy_jctb{0};
|
|
||||||
uint32_t pixelMask{0};
|
uint32_t pixelMask{0};
|
||||||
uint32_t gainMask{0};
|
uint32_t gainMask{0};
|
||||||
int gainOffset{0};
|
int gainOffset{0};
|
||||||
|
@ -431,8 +431,7 @@ void qDetectorMain::ExecuteUtilities(QAction *action) {
|
|||||||
|
|
||||||
void qDetectorMain::ExecuteHelp(QAction *action) {
|
void qDetectorMain::ExecuteHelp(QAction *action) {
|
||||||
if (action == actionAbout) {
|
if (action == actionAbout) {
|
||||||
FILE_LOG(logINFO) << "About Common GUI for Eiger, Gotthard, Jungfrau "
|
FILE_LOG(logINFO) << "About Common GUI for Jungfrau, Eiger, Mythen3, Gotthard, Gotthard2 and Moench detectors";
|
||||||
"and Moench detectors";
|
|
||||||
|
|
||||||
std::string guiVersion = std::to_string(APIGUI);
|
std::string guiVersion = std::to_string(APIGUI);
|
||||||
std::string clientVersion = "unknown";
|
std::string clientVersion = "unknown";
|
||||||
@ -449,7 +448,7 @@ void qDetectorMain::ExecuteHelp(QAction *action) {
|
|||||||
clientVersion +
|
clientVersion +
|
||||||
"<br><br>"
|
"<br><br>"
|
||||||
"Common GUI to control the SLS Detectors: "
|
"Common GUI to control the SLS Detectors: "
|
||||||
"Eiger, Jungfrau, Mythen3, Gotthard, Gotthard2 and Moench.<br><br>"
|
"Jungfrau, Eiger, Mythen3, Gotthard, Gotthard2 and Moench.<br><br>"
|
||||||
"It can be operated in parallel with the command "
|
"It can be operated in parallel with the command "
|
||||||
"line interface:<br>"
|
"line interface:<br>"
|
||||||
"sls_detector_put,<br>sls_detector_get,<br>sls_"
|
"sls_detector_put,<br>sls_detector_get,<br>sls_"
|
||||||
|
@ -60,7 +60,6 @@ void qDrawPlot::SetupWidgetWindow() {
|
|||||||
detType = det->getDetectorType().squash();
|
detType = det->getDetectorType().squash();
|
||||||
switch (detType) {
|
switch (detType) {
|
||||||
case slsDetectorDefs::JUNGFRAU:
|
case slsDetectorDefs::JUNGFRAU:
|
||||||
case slsDetectorDefs::MOENCH:
|
|
||||||
pixelMask = ((1 << 14) - 1);
|
pixelMask = ((1 << 14) - 1);
|
||||||
gainMask = (3 << 14);
|
gainMask = (3 << 14);
|
||||||
gainOffset = 14;
|
gainOffset = 14;
|
||||||
@ -111,13 +110,6 @@ void qDrawPlot::SetupPlots() {
|
|||||||
nPixelsX = res.x;
|
nPixelsX = res.x;
|
||||||
nPixelsY = res.y;
|
nPixelsY = res.y;
|
||||||
switch(detType) {
|
switch(detType) {
|
||||||
case slsDetectorDefs::MOENCH:
|
|
||||||
try{
|
|
||||||
npixelsy_jctb = (det->getNumberOfAnalogSamples().tsquash("Inconsistent values for number of analog samples") * 2)/25;// for moench 03
|
|
||||||
nPixelsX = npixelsx_jctb;
|
|
||||||
nPixelsY = npixelsy_jctb;
|
|
||||||
} CATCH_DISPLAY ("Could not get number of analog samples.", "qDrawPlot::SetupPlots")
|
|
||||||
break;
|
|
||||||
case slsDetectorDefs::EIGER:
|
case slsDetectorDefs::EIGER:
|
||||||
try{
|
try{
|
||||||
if (det->getQuad().tsquash("Inconsistent values for quad type")) {
|
if (det->getQuad().tsquash("Inconsistent values for quad type")) {
|
||||||
@ -984,7 +976,6 @@ void qDrawPlot::toDoublePixelData(double *dest, char *source, int size, int data
|
|||||||
|
|
||||||
case 16:
|
case 16:
|
||||||
if (detType == slsDetectorDefs::JUNGFRAU ||
|
if (detType == slsDetectorDefs::JUNGFRAU ||
|
||||||
detType == slsDetectorDefs::MOENCH ||
|
|
||||||
detType == slsDetectorDefs::GOTTHARD2) {
|
detType == slsDetectorDefs::GOTTHARD2) {
|
||||||
|
|
||||||
// show gain plot
|
// show gain plot
|
||||||
|
@ -82,14 +82,14 @@ void qTabDeveloper::SetupWidgetWindow() {
|
|||||||
case slsDetectorDefs::MOENCH:
|
case slsDetectorDefs::MOENCH:
|
||||||
lblSpinHV->show();
|
lblSpinHV->show();
|
||||||
spinHV->show();
|
spinHV->show();
|
||||||
dacWidgets.push_back(new qDacWidget(this, det, true, "v Dac 0: ", getSLSIndex(detType, tempid++)));
|
dacWidgets.push_back(new qDacWidget(this, det, true, "vbp_colbuf: ", getSLSIndex(detType, tempid++)));
|
||||||
dacWidgets.push_back(new qDacWidget(this, det, true, "v Dac 1: ", getSLSIndex(detType, tempid++)));
|
dacWidgets.push_back(new qDacWidget(this, det, true, "vipre: ", getSLSIndex(detType, tempid++)));
|
||||||
dacWidgets.push_back(new qDacWidget(this, det, true, "v Dac 2: ", getSLSIndex(detType, tempid++)));
|
dacWidgets.push_back(new qDacWidget(this, det, true, "vin_cm: ", getSLSIndex(detType, tempid++)));
|
||||||
dacWidgets.push_back(new qDacWidget(this, det, true, "v Dac 3: ", getSLSIndex(detType, tempid++)));
|
dacWidgets.push_back(new qDacWidget(this, det, true, "vb_sda: ", getSLSIndex(detType, tempid++)));
|
||||||
dacWidgets.push_back(new qDacWidget(this, det, true, "v Dac 4: ", getSLSIndex(detType, tempid++)));
|
dacWidgets.push_back(new qDacWidget(this, det, true, "vcasc_sfp: ", getSLSIndex(detType, tempid++)));
|
||||||
dacWidgets.push_back(new qDacWidget(this, det, true, "v Dac 5: ", getSLSIndex(detType, tempid++)));
|
dacWidgets.push_back(new qDacWidget(this, det, true, "vout_cm: ", getSLSIndex(detType, tempid++)));
|
||||||
dacWidgets.push_back(new qDacWidget(this, det, true, "v Dac 6: ", getSLSIndex(detType, tempid++)));
|
dacWidgets.push_back(new qDacWidget(this, det, true, "vipre_cds: ", getSLSIndex(detType, tempid++)));
|
||||||
dacWidgets.push_back(new qDacWidget(this, det, true, "i Dac 7: ", getSLSIndex(detType, tempid++)));
|
dacWidgets.push_back(new qDacWidget(this, det, true, "ibias_sfp: ", getSLSIndex(detType, tempid++)));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case slsDetectorDefs::MYTHEN3:
|
case slsDetectorDefs::MYTHEN3:
|
||||||
@ -343,10 +343,27 @@ slsDetectorDefs::dacIndex qTabDeveloper::getSLSIndex(slsDetectorDefs::detectorTy
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case slsDetectorDefs::MOENCH:
|
case slsDetectorDefs::MOENCH:
|
||||||
if (index >= 0 && index < (int)dacWidgets.size()) {
|
switch (index) {
|
||||||
return (slsDetectorDefs::dacIndex)index;
|
case 0:
|
||||||
|
return slsDetectorDefs::VBP_COLBUF;
|
||||||
|
case 1:
|
||||||
|
return slsDetectorDefs::VIPRE;
|
||||||
|
case 2:
|
||||||
|
return slsDetectorDefs::VIN_CM;
|
||||||
|
case 3:
|
||||||
|
return slsDetectorDefs::VB_SDA;
|
||||||
|
case 4:
|
||||||
|
return slsDetectorDefs::VCASC_SFP;
|
||||||
|
case 5:
|
||||||
|
return slsDetectorDefs::VOUT_CM;
|
||||||
|
case 6:
|
||||||
|
return slsDetectorDefs::VIPRE_CDS;
|
||||||
|
case 7:
|
||||||
|
return slsDetectorDefs::IBIAS_SFP;
|
||||||
|
default:
|
||||||
|
throw sls::RuntimeError(std::string("Unknown dac/adc index") + std::to_string(index));
|
||||||
}
|
}
|
||||||
throw sls::RuntimeError(std::string("Unknown dac/adc index") + std::to_string(index));
|
break;
|
||||||
|
|
||||||
case slsDetectorDefs::MYTHEN3:
|
case slsDetectorDefs::MYTHEN3:
|
||||||
switch (index) {
|
switch (index) {
|
||||||
|
@ -72,7 +72,6 @@ void qTabPlot::SetupWidgetWindow() {
|
|||||||
chkGapPixels->setEnabled(true);
|
chkGapPixels->setEnabled(true);
|
||||||
break;
|
break;
|
||||||
case slsDetectorDefs::JUNGFRAU:
|
case slsDetectorDefs::JUNGFRAU:
|
||||||
case slsDetectorDefs::MOENCH:
|
|
||||||
chkGainPlot->setEnabled(true);
|
chkGainPlot->setEnabled(true);
|
||||||
chkGainPlot->setChecked(true);
|
chkGainPlot->setChecked(true);
|
||||||
plot->EnableGainPlot(true);
|
plot->EnableGainPlot(true);
|
||||||
@ -585,7 +584,6 @@ void qTabPlot::Refresh() {
|
|||||||
GetGapPixels();
|
GetGapPixels();
|
||||||
break;
|
break;
|
||||||
case slsDetectorDefs::JUNGFRAU:
|
case slsDetectorDefs::JUNGFRAU:
|
||||||
case slsDetectorDefs::MOENCH:
|
|
||||||
chkGainPlot->setEnabled(true);
|
chkGainPlot->setEnabled(true);
|
||||||
break;
|
break;
|
||||||
case slsDetectorDefs::GOTTHARD2:
|
case slsDetectorDefs::GOTTHARD2:
|
||||||
|
@ -515,7 +515,7 @@ void setupDetector() {
|
|||||||
// altera pll
|
// altera pll
|
||||||
ALTERA_PLL_SetDefines(PLL_CNTRL_REG, PLL_PARAM_REG, PLL_CNTRL_RCNFG_PRMTR_RST_MSK, PLL_CNTRL_WR_PRMTR_MSK, PLL_CNTRL_PLL_RST_MSK, PLL_CNTRL_ADDR_MSK, PLL_CNTRL_ADDR_OFST);
|
ALTERA_PLL_SetDefines(PLL_CNTRL_REG, PLL_PARAM_REG, PLL_CNTRL_RCNFG_PRMTR_RST_MSK, PLL_CNTRL_WR_PRMTR_MSK, PLL_CNTRL_PLL_RST_MSK, PLL_CNTRL_ADDR_MSK, PLL_CNTRL_ADDR_OFST);
|
||||||
|
|
||||||
bus_w(ADC_PORT_INVERT_REG, 0);// depends on chip
|
setADCInvertRegister(0);// depends on chip
|
||||||
|
|
||||||
FILE_LOG(logINFOBLUE, ("Setting Default parameters\n"));
|
FILE_LOG(logINFOBLUE, ("Setting Default parameters\n"));
|
||||||
cleanFifos(); // FIXME: why twice?
|
cleanFifos(); // FIXME: why twice?
|
||||||
|
@ -107,7 +107,6 @@ enum CLKINDEX {RUN_CLK, ADC_CLK, SYNC_CLK, DBIT_CLK, NUM_CLOCKS};
|
|||||||
#define BIT32_MSK (0xFFFFFFFF)
|
#define BIT32_MSK (0xFFFFFFFF)
|
||||||
#define BIT16_MASK (0xFFFF)
|
#define BIT16_MASK (0xFFFF)
|
||||||
|
|
||||||
#define ADC_PORT_INVERT_VAL (0x453b2593)
|
|
||||||
#define MAXIMUM_ADC_CLK (65)
|
#define MAXIMUM_ADC_CLK (65)
|
||||||
#define PLL_VCO_FREQ_MHZ (800)
|
#define PLL_VCO_FREQ_MHZ (800)
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include "slsDetectorFunctionList.h"
|
#include "slsDetectorFunctionList.h"
|
||||||
#include "versionAPI.h"
|
#include "versionAPI.h"
|
||||||
#include "clogger.h"
|
#include "clogger.h"
|
||||||
#include <sys/select.h>
|
|
||||||
#include "AD9257.h" // commonServerFunctions.h, blackfin.h, ansi.h
|
#include "AD9257.h" // commonServerFunctions.h, blackfin.h, ansi.h
|
||||||
#include "LTC2620.h" // dacs
|
#include "LTC2620.h" // dacs
|
||||||
#include "MAX1932.h" // hv
|
#include "MAX1932.h" // hv
|
||||||
@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h> // usleep
|
#include <unistd.h> // usleep
|
||||||
|
#include <sys/select.h>
|
||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
@ -34,6 +34,7 @@ $(PROGS): $(OBJS)
|
|||||||
mv $(PROGS) $(DESTDIR)
|
mv $(PROGS) $(DESTDIR)
|
||||||
rm *.gdb
|
rm *.gdb
|
||||||
rm $(main_src)*.o
|
rm $(main_src)*.o
|
||||||
|
rm *.o
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm -rf $(DESTDIR)/$(PROGS) *.o *.gdb $(main_src)*.o
|
rm -rf $(DESTDIR)/$(PROGS) *.o *.gdb $(main_src)*.o
|
||||||
|
@ -16,7 +16,7 @@
|
|||||||
/* Fix pattern RO register */
|
/* Fix pattern RO register */
|
||||||
#define FIX_PATT_REG (0x01 << MEM_MAP_SHIFT)
|
#define FIX_PATT_REG (0x01 << MEM_MAP_SHIFT)
|
||||||
|
|
||||||
#define FIX_PATT_VAL (0xACDC2014)
|
#define FIX_PATT_VAL (0xACDC2016)
|
||||||
|
|
||||||
/* Status RO register */
|
/* Status RO register */
|
||||||
#define STATUS_REG (0x02 << MEM_MAP_SHIFT)
|
#define STATUS_REG (0x02 << MEM_MAP_SHIFT)
|
||||||
@ -289,7 +289,7 @@
|
|||||||
/* Configuration RW register */
|
/* Configuration RW register */
|
||||||
#define CONFIG_REG (0x4D << MEM_MAP_SHIFT)
|
#define CONFIG_REG (0x4D << MEM_MAP_SHIFT)
|
||||||
|
|
||||||
#define CONFIG_LED_DSBL_OFST (0)
|
#define CONFIG_LED_DSBL_OFST (0) // Not used in firmware or software
|
||||||
#define CONFIG_LED_DSBL_MSK (0x00000001 << CONFIG_LED_DSBL_OFST)
|
#define CONFIG_LED_DSBL_MSK (0x00000001 << CONFIG_LED_DSBL_OFST)
|
||||||
#define CONFIG_DSBL_ANLG_OTPT_OFST (8)
|
#define CONFIG_DSBL_ANLG_OTPT_OFST (8)
|
||||||
#define CONFIG_DSBL_ANLG_OTPT_MSK (0x00000001 << CONFIG_DSBL_ANLG_OTPT_OFST)
|
#define CONFIG_DSBL_ANLG_OTPT_MSK (0x00000001 << CONFIG_DSBL_ANLG_OTPT_OFST)
|
||||||
@ -365,23 +365,23 @@
|
|||||||
#define PATTERN_CNTRL_RD_OFST (1)
|
#define PATTERN_CNTRL_RD_OFST (1)
|
||||||
#define PATTERN_CNTRL_RD_MSK (0x00000001 << PATTERN_CNTRL_RD_OFST)
|
#define PATTERN_CNTRL_RD_MSK (0x00000001 << PATTERN_CNTRL_RD_OFST)
|
||||||
#define PATTERN_CNTRL_ADDR_OFST (16)
|
#define PATTERN_CNTRL_ADDR_OFST (16)
|
||||||
#define PATTERN_CNTRL_ADDR_MSK (0x0000FFFF << PATTERN_CNTRL_ADDR_OFST)
|
#define PATTERN_CNTRL_ADDR_MSK (0x00001FFF << PATTERN_CNTRL_ADDR_OFST)
|
||||||
|
|
||||||
/* Pattern Limit RW regiser */
|
/* Pattern Limit RW regiser */
|
||||||
#define PATTERN_LIMIT_REG (0x53 << MEM_MAP_SHIFT)
|
#define PATTERN_LIMIT_REG (0x53 << MEM_MAP_SHIFT)
|
||||||
|
|
||||||
#define PATTERN_LIMIT_STRT_OFST (0)
|
#define PATTERN_LIMIT_STRT_OFST (0)
|
||||||
#define PATTERN_LIMIT_STRT_MSK (0x0000FFFF << PATTERN_LIMIT_STRT_OFST)
|
#define PATTERN_LIMIT_STRT_MSK (0x00001FFF << PATTERN_LIMIT_STRT_OFST)
|
||||||
#define PATTERN_LIMIT_STP_OFST (16)
|
#define PATTERN_LIMIT_STP_OFST (16)
|
||||||
#define PATTERN_LIMIT_STP_MSK (0x0000FFFF << PATTERN_LIMIT_STP_OFST)
|
#define PATTERN_LIMIT_STP_MSK (0x00001FFF << PATTERN_LIMIT_STP_OFST)
|
||||||
|
|
||||||
/* Pattern Loop 0 Address RW regiser */
|
/* Pattern Loop 0 Address RW regiser */
|
||||||
#define PATTERN_LOOP_0_ADDR_REG (0x54 << MEM_MAP_SHIFT)
|
#define PATTERN_LOOP_0_ADDR_REG (0x54 << MEM_MAP_SHIFT)
|
||||||
|
|
||||||
#define PATTERN_LOOP_0_ADDR_STRT_OFST (0)
|
#define PATTERN_LOOP_0_ADDR_STRT_OFST (0)
|
||||||
#define PATTERN_LOOP_0_ADDR_STRT_MSK (0x0000FFFF << PATTERN_LOOP_0_ADDR_STRT_OFST)
|
#define PATTERN_LOOP_0_ADDR_STRT_MSK (0x00001FFF << PATTERN_LOOP_0_ADDR_STRT_OFST)
|
||||||
#define PATTERN_LOOP_0_ADDR_STP_OFST (16)
|
#define PATTERN_LOOP_0_ADDR_STP_OFST (16)
|
||||||
#define PATTERN_LOOP_0_ADDR_STP_MSK (0x0000FFFF << PATTERN_LOOP_0_ADDR_STP_OFST)
|
#define PATTERN_LOOP_0_ADDR_STP_MSK (0x00001FFF << PATTERN_LOOP_0_ADDR_STP_OFST)
|
||||||
|
|
||||||
/* Pattern Loop 0 Iteration RW regiser */
|
/* Pattern Loop 0 Iteration RW regiser */
|
||||||
#define PATTERN_LOOP_0_ITERATION_REG (0x55 << MEM_MAP_SHIFT)
|
#define PATTERN_LOOP_0_ITERATION_REG (0x55 << MEM_MAP_SHIFT)
|
||||||
@ -390,9 +390,9 @@
|
|||||||
#define PATTERN_LOOP_1_ADDR_REG (0x56 << MEM_MAP_SHIFT)
|
#define PATTERN_LOOP_1_ADDR_REG (0x56 << MEM_MAP_SHIFT)
|
||||||
|
|
||||||
#define PATTERN_LOOP_1_ADDR_STRT_OFST (0)
|
#define PATTERN_LOOP_1_ADDR_STRT_OFST (0)
|
||||||
#define PATTERN_LOOP_1_ADDR_STRT_MSK (0x0000FFFF << PATTERN_LOOP_1_ADDR_STRT_OFST)
|
#define PATTERN_LOOP_1_ADDR_STRT_MSK (0x00001FFF << PATTERN_LOOP_1_ADDR_STRT_OFST)
|
||||||
#define PATTERN_LOOP_1_ADDR_STP_OFST (16)
|
#define PATTERN_LOOP_1_ADDR_STP_OFST (16)
|
||||||
#define PATTERN_LOOP_1_ADDR_STP_MSK (0x0000FFFF << PATTERN_LOOP_1_ADDR_STP_OFST)
|
#define PATTERN_LOOP_1_ADDR_STP_MSK (0x00001FFF << PATTERN_LOOP_1_ADDR_STP_OFST)
|
||||||
|
|
||||||
/* Pattern Loop 1 Iteration RW regiser */
|
/* Pattern Loop 1 Iteration RW regiser */
|
||||||
#define PATTERN_LOOP_1_ITERATION_REG (0x57 << MEM_MAP_SHIFT)
|
#define PATTERN_LOOP_1_ITERATION_REG (0x57 << MEM_MAP_SHIFT)
|
||||||
@ -401,9 +401,9 @@
|
|||||||
#define PATTERN_LOOP_2_ADDR_REG (0x58 << MEM_MAP_SHIFT)
|
#define PATTERN_LOOP_2_ADDR_REG (0x58 << MEM_MAP_SHIFT)
|
||||||
|
|
||||||
#define PATTERN_LOOP_2_ADDR_STRT_OFST (0)
|
#define PATTERN_LOOP_2_ADDR_STRT_OFST (0)
|
||||||
#define PATTERN_LOOP_2_ADDR_STRT_MSK (0x0000FFFF << PATTERN_LOOP_2_ADDR_STRT_OFST)
|
#define PATTERN_LOOP_2_ADDR_STRT_MSK (0x00001FFF << PATTERN_LOOP_2_ADDR_STRT_OFST)
|
||||||
#define PATTERN_LOOP_2_ADDR_STP_OFST (16)
|
#define PATTERN_LOOP_2_ADDR_STP_OFST (16)
|
||||||
#define PATTERN_LOOP_2_ADDR_STP_MSK (0x0000FFFF << PATTERN_LOOP_2_ADDR_STP_OFST)
|
#define PATTERN_LOOP_2_ADDR_STP_MSK (0x00001FFF << PATTERN_LOOP_2_ADDR_STP_OFST)
|
||||||
|
|
||||||
/* Pattern Loop 2 Iteration RW regiser */
|
/* Pattern Loop 2 Iteration RW regiser */
|
||||||
#define PATTERN_LOOP_2_ITERATION_REG (0x59 << MEM_MAP_SHIFT)
|
#define PATTERN_LOOP_2_ITERATION_REG (0x59 << MEM_MAP_SHIFT)
|
||||||
@ -412,31 +412,36 @@
|
|||||||
#define PATTERN_WAIT_0_ADDR_REG (0x5A << MEM_MAP_SHIFT)
|
#define PATTERN_WAIT_0_ADDR_REG (0x5A << MEM_MAP_SHIFT)
|
||||||
|
|
||||||
#define PATTERN_WAIT_0_ADDR_OFST (0)
|
#define PATTERN_WAIT_0_ADDR_OFST (0)
|
||||||
#define PATTERN_WAIT_0_ADDR_MSK (0x0000FFFF << PATTERN_WAIT_0_ADDR_OFST)
|
#define PATTERN_WAIT_0_ADDR_MSK (0x00001FFF << PATTERN_WAIT_0_ADDR_OFST)
|
||||||
//FIXME: is mask 3FF
|
//FIXME: is mask 3FF
|
||||||
|
|
||||||
/* Pattern Wait 1 RW regiser */
|
/* Pattern Wait 1 RW regiser */
|
||||||
#define PATTERN_WAIT_1_ADDR_REG (0x5B << MEM_MAP_SHIFT)
|
#define PATTERN_WAIT_1_ADDR_REG (0x5B << MEM_MAP_SHIFT)
|
||||||
|
|
||||||
#define PATTERN_WAIT_1_ADDR_OFST (0)
|
#define PATTERN_WAIT_1_ADDR_OFST (0)
|
||||||
#define PATTERN_WAIT_1_ADDR_MSK (0x0000FFFF << PATTERN_WAIT_1_ADDR_OFST)
|
#define PATTERN_WAIT_1_ADDR_MSK (0x00001FFF << PATTERN_WAIT_1_ADDR_OFST)
|
||||||
|
|
||||||
/* Pattern Wait 2 RW regiser */
|
/* Pattern Wait 2 RW regiser */
|
||||||
#define PATTERN_WAIT_2_ADDR_REG (0x5C << MEM_MAP_SHIFT)
|
#define PATTERN_WAIT_2_ADDR_REG (0x5C << MEM_MAP_SHIFT)
|
||||||
|
|
||||||
#define PATTERN_WAIT_2_ADDR_OFST (0)
|
#define PATTERN_WAIT_2_ADDR_OFST (0)
|
||||||
#define PATTERN_WAIT_2_ADDR_MSK (0x0000FFFF << PATTERN_WAIT_2_ADDR_OFST)
|
#define PATTERN_WAIT_2_ADDR_MSK (0x00001FFF << PATTERN_WAIT_2_ADDR_OFST)
|
||||||
|
|
||||||
/* Samples RW register */
|
/* Samples RW register */
|
||||||
#define SAMPLES_REG (0x5D << MEM_MAP_SHIFT)
|
#define SAMPLES_REG (0x5D << MEM_MAP_SHIFT)
|
||||||
|
|
||||||
|
#define SAMPLES_DIGITAL_OFST (0)
|
||||||
|
#define SAMPLES_DIGITAL_MSK (0x0000FFFF << SAMPLES_DIGITAL_OFST)
|
||||||
|
#define SAMPLES_ANALOG_OFST (16)
|
||||||
|
#define SAMPLES_ANALOG_MSK (0x0000FFFF << SAMPLES_ANALOG_OFST)
|
||||||
|
|
||||||
/** Power RW register */
|
/** Power RW register */
|
||||||
#define POWER_REG (0x5E << MEM_MAP_SHIFT)
|
#define POWER_REG (0x5E << MEM_MAP_SHIFT)
|
||||||
|
|
||||||
#define POWER_ENBL_VLTG_RGLTR_OFST (16)
|
#define POWER_CHIP_OFST (16)
|
||||||
#define POWER_ENBL_VLTG_RGLTR_MSK (0x0000001F << POWER_ENBL_VLTG_RGLTR_OFST)
|
#define POWER_CHIP_MSK (0x00000001 << POWER_CHIP_OFST)
|
||||||
#define POWER_HV_SLCT_OFST (31)
|
#define POWER_HV_INTERNAL_SLCT_OFST (31)
|
||||||
#define POWER_HV_SLCT_MSK (0x00000001 << POWER_HV_SLCT_OFST)
|
#define POWER_HV_INTERNAL_SLCT_MSK (0x00000001 << POWER_HV_INTERNAL_SLCT_OFST)
|
||||||
|
|
||||||
/* Number of Words RW register TODO */
|
/* Number of Words RW register TODO */
|
||||||
#define NUMBER_OF_WORDS_REG (0x5F << MEM_MAP_SHIFT)
|
#define NUMBER_OF_WORDS_REG (0x5F << MEM_MAP_SHIFT)
|
||||||
@ -493,17 +498,16 @@
|
|||||||
#define PATTERN_WAIT_TIMER_2_LSB_REG (0x76 << MEM_MAP_SHIFT)
|
#define PATTERN_WAIT_TIMER_2_LSB_REG (0x76 << MEM_MAP_SHIFT)
|
||||||
#define PATTERN_WAIT_TIMER_2_MSB_REG (0x77 << MEM_MAP_SHIFT)
|
#define PATTERN_WAIT_TIMER_2_MSB_REG (0x77 << MEM_MAP_SHIFT)
|
||||||
|
|
||||||
/* ADC Disable RW register TODO */
|
/* Readout enable RW register */
|
||||||
#define ADC_DISABLE_REG (0x78 << MEM_MAP_SHIFT)
|
#define READOUT_10G_ENABLE_REG (0x79 << MEM_MAP_SHIFT)
|
||||||
|
|
||||||
/* DAC Value RW register TODO */
|
#define READOUT_10G_ENABLE_ANLG_OFST (0)
|
||||||
//#define DAC_VALUE_REG (0x79 << MEM_MAP_SHIFT)
|
#define READOUT_10G_ENABLE_ANLG_MSK (0x000000FF << READOUT_10G_ENABLE_ANLG_OFST)
|
||||||
|
#define READOUT_10G_ENABLE_DGTL_OFST (8)
|
||||||
/* DAC Number RW register TODO */
|
#define READOUT_10G_ENABLE_DGTL_MSK (0x00000001 << READOUT_10G_ENABLE_DGTL_OFST)
|
||||||
//#define DAC_NUMBER_REG (0x7A << MEM_MAP_SHIFT)
|
|
||||||
|
|
||||||
/* Digital Bit External Trigger RW register */
|
/* Digital Bit External Trigger RW register */
|
||||||
#define DBIT_EXT_TRG_REG (0x7B << MEM_MAP_SHIFT)
|
#define DBIT_EXT_TRG_REG (0x7B << MEM_MAP_SHIFT) // Not used in firmware or software
|
||||||
|
|
||||||
#define DBIT_EXT_TRG_SRC_OFST (0)
|
#define DBIT_EXT_TRG_SRC_OFST (0)
|
||||||
#define DBIT_EXT_TRG_SRC_MSK (0x0000003F << DBIT_EXT_TRG_SRC_OFST)
|
#define DBIT_EXT_TRG_SRC_MSK (0x0000003F << DBIT_EXT_TRG_SRC_OFST)
|
||||||
@ -511,7 +515,8 @@
|
|||||||
#define DBIT_EXT_TRG_OPRTN_MD_MSK (0x00000001 << DBIT_EXT_TRG_OPRTN_MD_OFST)
|
#define DBIT_EXT_TRG_OPRTN_MD_MSK (0x00000001 << DBIT_EXT_TRG_OPRTN_MD_OFST)
|
||||||
|
|
||||||
/* Pin Delay 0 RW register */
|
/* Pin Delay 0 RW register */
|
||||||
#define OUTPUT_DELAY_0_REG (0x7C << MEM_MAP_SHIFT)
|
#define OUTPUT_DELAY_0_REG (0x7C << MEM_MAP_SHIFT) // Not used in firmware or software
|
||||||
|
|
||||||
#define OUTPUT_DELAY_0_OTPT_STTNG_STEPS (25)
|
#define OUTPUT_DELAY_0_OTPT_STTNG_STEPS (25)
|
||||||
#define OUTPUT_DELAY_0_OTPT_STTNG_OFST (0) //t = OTPT_STTNG * 25 ps, max for Cyclone V = 775 ps
|
#define OUTPUT_DELAY_0_OTPT_STTNG_OFST (0) //t = OTPT_STTNG * 25 ps, max for Cyclone V = 775 ps
|
||||||
#define OUTPUT_DELAY_0_OTPT_STTNG_MSK (0x0000001F << OUTPUT_DELAY_0_OTPT_STTNG_OFST)
|
#define OUTPUT_DELAY_0_OTPT_STTNG_MSK (0x0000001F << OUTPUT_DELAY_0_OTPT_STTNG_OFST)
|
||||||
@ -523,7 +528,7 @@
|
|||||||
|
|
||||||
/* Pin Delay 1 RW register
|
/* Pin Delay 1 RW register
|
||||||
* Each bit configured as enable for dynamic output delay configuration */
|
* Each bit configured as enable for dynamic output delay configuration */
|
||||||
#define PIN_DELAY_1_REG (0x7D << MEM_MAP_SHIFT)
|
#define PIN_DELAY_1_REG (0x7D << MEM_MAP_SHIFT) // Not used in firmware or software
|
||||||
|
|
||||||
/** Pattern Mask 64 bit RW regiser */
|
/** Pattern Mask 64 bit RW regiser */
|
||||||
#define PATTERN_MASK_LSB_REG (0x80 << MEM_MAP_SHIFT)
|
#define PATTERN_MASK_LSB_REG (0x80 << MEM_MAP_SHIFT)
|
||||||
@ -533,7 +538,7 @@
|
|||||||
#define PATTERN_SET_LSB_REG (0x82 << MEM_MAP_SHIFT)
|
#define PATTERN_SET_LSB_REG (0x82 << MEM_MAP_SHIFT)
|
||||||
#define PATTERN_SET_MSB_REG (0x83 << MEM_MAP_SHIFT)
|
#define PATTERN_SET_MSB_REG (0x83 << MEM_MAP_SHIFT)
|
||||||
|
|
||||||
|
/* Round Robin */
|
||||||
|
#define RXR_ENDPOINT_START_REG (0x1000 << MEM_MAP_SHIFT)
|
||||||
|
|
||||||
|
|
||||||
|
BIN
slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServer_developer
Executable file
BIN
slsDetectorServers/moenchDetectorServer/bin/moenchDetectorServer_developer
Executable file
Binary file not shown.
File diff suppressed because it is too large
Load Diff
@ -4,27 +4,51 @@
|
|||||||
|
|
||||||
|
|
||||||
#define MIN_REQRD_VRSN_T_RD_API 0x180314
|
#define MIN_REQRD_VRSN_T_RD_API 0x180314
|
||||||
#define REQRD_FRMWR_VRSN 0x180314
|
#define REQRD_FRMWR_VRSN 0x200302
|
||||||
|
|
||||||
#define CTRL_SRVR_INIT_TIME_US (300 * 1000)
|
#define CTRL_SRVR_INIT_TIME_US (2 * 1000 * 1000)
|
||||||
|
|
||||||
/* Struct Definitions */
|
/* Struct Definitions */
|
||||||
typedef struct ip_header_struct {
|
typedef struct udp_header_struct {
|
||||||
uint16_t ip_len;
|
uint32_t udp_destmac_msb;
|
||||||
uint8_t ip_tos;
|
uint16_t udp_srcmac_msb;
|
||||||
uint8_t ip_ihl:4 ,ip_ver:4;
|
uint16_t udp_destmac_lsb;
|
||||||
uint16_t ip_offset:13,ip_flag:3;
|
uint32_t udp_srcmac_lsb;
|
||||||
uint16_t ip_ident;
|
uint8_t ip_tos;
|
||||||
uint16_t ip_chksum;
|
uint8_t ip_ihl: 4, ip_ver: 4;
|
||||||
uint8_t ip_protocol;
|
uint16_t udp_ethertype;
|
||||||
uint8_t ip_ttl;
|
uint16_t ip_identification;
|
||||||
uint32_t ip_sourceip;
|
uint16_t ip_totallength;
|
||||||
uint32_t ip_destip;
|
uint8_t ip_protocol;
|
||||||
} ip_header;
|
uint8_t ip_ttl;
|
||||||
|
uint16_t ip_fragmentoffset: 13, ip_flags: 3;
|
||||||
|
uint16_t ip_srcip_msb;
|
||||||
|
uint16_t ip_checksum;
|
||||||
|
uint16_t ip_destip_msb;
|
||||||
|
uint16_t ip_srcip_lsb;
|
||||||
|
uint16_t udp_srcport;
|
||||||
|
uint16_t ip_destip_lsb;
|
||||||
|
uint16_t udp_checksum;
|
||||||
|
uint16_t udp_destport;
|
||||||
|
} udp_header;
|
||||||
|
|
||||||
|
#define IP_HEADER_SIZE (20)
|
||||||
|
#define UDP_IP_HEADER_LENGTH_BYTES (28)
|
||||||
|
|
||||||
/* Enums */
|
/* Enums */
|
||||||
|
enum DACINDEX {MO_VBP_COLBUF, MO_VIPRE, MO_VIN_CM, MO_VB_SDA, MO_VCASC_SFP, MO_VOUT_CM, MO_VIPRE_CDS, MO_IBIAS_SFP};
|
||||||
|
#define DEFAULT_DAC_VALS { 1300, /* MO_VBP_COLBUF */ \
|
||||||
|
1000, /* MO_VIPRE */ \
|
||||||
|
1400, /* MO_VIN_CM */ \
|
||||||
|
680, /* MO_VB_SDA */ \
|
||||||
|
1428, /* MO_VCASC_SFP */ \
|
||||||
|
1200, /* MO_VOUT_CM */ \
|
||||||
|
800, /* MO_VIPRE_CDS */ \
|
||||||
|
900 /* MO_IBIAS_SFP */ \
|
||||||
|
};
|
||||||
|
|
||||||
enum CLKINDEX {RUN_CLK, ADC_CLK, SYNC_CLK, DBIT_CLK, NUM_CLOCKS};
|
enum CLKINDEX {RUN_CLK, ADC_CLK, SYNC_CLK, DBIT_CLK, NUM_CLOCKS};
|
||||||
enum DACINDEX {D0, D1, D2, D3, D4, D5, D6, D7};
|
#define CLK_NAMES "run", "adc", "sync", "dbit"
|
||||||
|
|
||||||
/* Hardware Definitions */
|
/* Hardware Definitions */
|
||||||
#define NCHAN (32)
|
#define NCHAN (32)
|
||||||
@ -33,12 +57,13 @@ enum DACINDEX {D0, D1, D2, D3, D4, D5, D6, D7};
|
|||||||
#define DYNAMIC_RANGE (16)
|
#define DYNAMIC_RANGE (16)
|
||||||
#define NUM_BYTES_PER_PIXEL (DYNAMIC_RANGE / 8)
|
#define NUM_BYTES_PER_PIXEL (DYNAMIC_RANGE / 8)
|
||||||
#define CLK_FREQ (156.25) /* MHz */
|
#define CLK_FREQ (156.25) /* MHz */
|
||||||
|
#define NSAMPLES_PER_ROW (25)
|
||||||
|
|
||||||
/** Default Parameters */
|
/** Default Parameters */
|
||||||
#define DEFAULT_DATA_BYTES (NCHIP * NCHAN * NUM_BITS_PER_PIXEL)
|
#define DEFAULT_DATA_BYTES (NCHIP * NCHAN * NUM_BITS_PER_PIXEL)
|
||||||
#define DEFAULT_NUM_SAMPLES (1)
|
#define DEFAULT_NUM_SAMPLES (5000)
|
||||||
#define DEFAULT_EXPTIME (0)
|
#define DEFAULT_EXPTIME (0)
|
||||||
#define DEFAULT_NUM_FRAMES (100 * 1000 * 1000)
|
#define DEFAULT_NUM_FRAMES (1)
|
||||||
#define DEFAULT_NUM_CYCLES (1)
|
#define DEFAULT_NUM_CYCLES (1)
|
||||||
#define DEFAULT_PERIOD (1 * 1000 * 1000) //ns
|
#define DEFAULT_PERIOD (1 * 1000 * 1000) //ns
|
||||||
#define DEFAULT_DELAY (0)
|
#define DEFAULT_DELAY (0)
|
||||||
@ -49,32 +74,34 @@ enum DACINDEX {D0, D1, D2, D3, D4, D5, D6, D7};
|
|||||||
#define DEFAULT_RUN_CLK (40)
|
#define DEFAULT_RUN_CLK (40)
|
||||||
#define DEFAULT_ADC_CLK (20)
|
#define DEFAULT_ADC_CLK (20)
|
||||||
#define DEFAULT_SYNC_CLK (20)
|
#define DEFAULT_SYNC_CLK (20)
|
||||||
#define DEFAULT_DBIT_CLK (200)
|
#define DEFAULT_DBIT_CLK (20)
|
||||||
|
#define DEFAULT_ADC_PHASE_DEG (30)
|
||||||
|
#define DEFAULT_PIPELINE (14)
|
||||||
|
|
||||||
#define HIGHVOLTAGE_MIN (60)
|
#define HIGHVOLTAGE_MIN (60)
|
||||||
#define HIGHVOLTAGE_MAX (200)
|
#define HIGHVOLTAGE_MAX (200) // min dac val
|
||||||
#define DAC_MIN_MV (0)
|
#define DAC_MIN_MV (0)
|
||||||
#define DAC_MAX_MV (2500)
|
#define DAC_MAX_MV (2500)
|
||||||
|
|
||||||
/* Defines in the Firmware */
|
/* Defines in the Firmware */
|
||||||
#define MAX_PATTERN_LENGTH (0x7FFF)
|
#define MAX_PATTERN_LENGTH (0x2000)
|
||||||
#define DIGITAL_IO_DELAY_MAXIMUM_PS ((OUTPUT_DELAY_0_OTPT_STTNG_MSK >> OUTPUT_DELAY_0_OTPT_STTNG_OFST) * OUTPUT_DELAY_0_OTPT_STTNG_STEPS)
|
#define DIGITAL_IO_DELAY_MAXIMUM_PS ((OUTPUT_DELAY_0_OTPT_STTNG_MSK >> OUTPUT_DELAY_0_OTPT_STTNG_OFST) * OUTPUT_DELAY_0_OTPT_STTNG_STEPS)
|
||||||
#define MAX_PHASE_SHIFTS_STEPS (8)
|
#define MAX_PHASE_SHIFTS_STEPS (8)
|
||||||
|
|
||||||
#define WAIT_TME_US_FR_ACQDONE_REG (100) // wait time in us after acquisition done to ensure there is no data in fifo
|
#define WAIT_TME_US_FR_ACQDONE_REG (100) // wait time in us after acquisition done to ensure there is no data in fifo
|
||||||
#define WAIT_TIME_US_PLL (10 * 1000)
|
#define WAIT_TIME_US_PLL (10 * 1000)
|
||||||
#define WAIT_TIME_US_STP_ACQ (100)
|
#define WAIT_TIME_US_STP_ACQ (100)
|
||||||
#define WAIT_TIME_CONFIGURE_MAC (500 * 1000)
|
#define WAIT_TIME_CONFIGURE_MAC (2 * 1000 * 1000)
|
||||||
#define WAIT_TIME_PATTERN_READ (10)
|
#define WAIT_TIME_PATTERN_READ (10)
|
||||||
#define WAIT_TIME_FIFO_RD_STROBE (10)
|
#define WAIT_TIME_1US_FOR_LOOP_CNT (50) // around 30 is 1 us in blackfin
|
||||||
|
|
||||||
/* MSB & LSB DEFINES */
|
/* MSB & LSB DEFINES */
|
||||||
#define MSB_OF_64_BIT_REG_OFST (32)
|
#define MSB_OF_64_BIT_REG_OFST (32)
|
||||||
#define LSB_OF_64_BIT_REG_OFST (0)
|
#define LSB_OF_64_BIT_REG_OFST (0)
|
||||||
#define BIT_32_MSK (0xFFFFFFFF)
|
#define BIT32_MSK (0xFFFFFFFF)
|
||||||
|
#define BIT16_MASK (0xFFFF)
|
||||||
|
|
||||||
#define IP_PACKETSIZE (0x2032)
|
#define ADC_PORT_INVERT_VAL (0x4a342593)
|
||||||
#define ADC_PORT_INVERT_VAL (0x453b2593) //FIXME: a default value?
|
#define MAXIMUM_ADC_CLK (20)
|
||||||
#define MAXIMUM_ADC_CLK (40)
|
|
||||||
#define PLL_VCO_FREQ_MHZ (800)
|
#define PLL_VCO_FREQ_MHZ (800)
|
||||||
|
|
||||||
|
@ -3,6 +3,14 @@
|
|||||||
#ifdef GOTTHARDD
|
#ifdef GOTTHARDD
|
||||||
#include "clogger.h" // runState(enum TLogLevel)
|
#include "clogger.h" // runState(enum TLogLevel)
|
||||||
#endif
|
#endif
|
||||||
|
#ifndef VIRTUAL
|
||||||
|
#if defined(MYTHEN3D) || defined(GOTTHARD2D)
|
||||||
|
#include "programFpgaNios.h"
|
||||||
|
#elif defined(CHIPTESTBOARDD) || defined(JUNGFRAUD) || defined(MOENCHD)
|
||||||
|
#include "programFpgaBlackfin.h"
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h> // FILE
|
#include <stdio.h> // FILE
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@ -84,7 +92,7 @@ int updateDatabytesandAllocateRAM();
|
|||||||
void updateDataBytes();
|
void updateDataBytes();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(MYTHEN3D)
|
#if defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(MYTHEN3D) || defined(MOENCHD)
|
||||||
int setDefaultDacs();
|
int setDefaultDacs();
|
||||||
#endif
|
#endif
|
||||||
#ifdef GOTTHARD2D
|
#ifdef GOTTHARD2D
|
||||||
@ -141,6 +149,8 @@ void setADCEnableMask_10G(uint32_t mask);
|
|||||||
uint32_t getADCEnableMask_10G();
|
uint32_t getADCEnableMask_10G();
|
||||||
void setADCInvertRegister(uint32_t val);
|
void setADCInvertRegister(uint32_t val);
|
||||||
uint32_t getADCInvertRegister();
|
uint32_t getADCInvertRegister();
|
||||||
|
#endif
|
||||||
|
#if defined(CHIPTESTBOARDD)
|
||||||
int setExternalSamplingSource(int val);
|
int setExternalSamplingSource(int val);
|
||||||
int setExternalSampling(int val);
|
int setExternalSampling(int val);
|
||||||
#endif
|
#endif
|
||||||
@ -213,6 +223,8 @@ int64_t getStorageCellDelay();
|
|||||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||||
int setNumAnalogSamples(int val);
|
int setNumAnalogSamples(int val);
|
||||||
int getNumAnalogSamples();
|
int getNumAnalogSamples();
|
||||||
|
#endif
|
||||||
|
#ifdef CHIPTESTBOARDD
|
||||||
int setNumDigitalSamples(int val);
|
int setNumDigitalSamples(int val);
|
||||||
int getNumDigitalSamples();
|
int getNumDigitalSamples();
|
||||||
#endif
|
#endif
|
||||||
@ -298,11 +310,9 @@ void setPower(enum DACINDEX ind, int val);
|
|||||||
void powerOff();
|
void powerOff();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef MOENCHD
|
#if !defined(MOENCHD) && !defined(MYTHEN3D) && !defined(GOTTHARD2D)
|
||||||
#if !defined(MYTHEN3D) && !defined(GOTTHARD2D)
|
|
||||||
int getADC(enum ADCINDEX ind);
|
int getADC(enum ADCINDEX ind);
|
||||||
#endif
|
#endif
|
||||||
#endif
|
|
||||||
|
|
||||||
int setHighVoltage(int val);
|
int setHighVoltage(int val);
|
||||||
|
|
||||||
@ -358,6 +368,7 @@ int enableTenGigabitEthernet(int val);
|
|||||||
// moench specific - powerchip
|
// moench specific - powerchip
|
||||||
#ifdef MOENCHD
|
#ifdef MOENCHD
|
||||||
int powerChip (int on);
|
int powerChip (int on);
|
||||||
|
int setAnalogOnlyReadout();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// chip test board or moench specific - configure frequency, phase, pll, flashing firmware
|
// chip test board or moench specific - configure frequency, phase, pll, flashing firmware
|
||||||
@ -383,8 +394,10 @@ uint64_t writePatternWord(int addr, uint64_t word);
|
|||||||
int setPatternWaitAddress(int level, int addr);
|
int setPatternWaitAddress(int level, int addr);
|
||||||
uint64_t setPatternWaitTime(int level, uint64_t t);
|
uint64_t setPatternWaitTime(int level, uint64_t t);
|
||||||
void setPatternLoop(int level, int *startAddr, int *stopAddr, int *nLoop);
|
void setPatternLoop(int level, int *startAddr, int *stopAddr, int *nLoop);
|
||||||
|
#ifdef CHIPTESTBOARDD
|
||||||
int setLEDEnable(int enable);
|
int setLEDEnable(int enable);
|
||||||
void setDigitalIODelay(uint64_t pinMask, int delay);
|
void setDigitalIODelay(uint64_t pinMask, int delay);
|
||||||
|
#endif
|
||||||
void setPatternMask(uint64_t mask);
|
void setPatternMask(uint64_t mask);
|
||||||
uint64_t getPatternMask();
|
uint64_t getPatternMask();
|
||||||
void setPatternBitMask(uint64_t mask);
|
void setPatternBitMask(uint64_t mask);
|
||||||
|
@ -2,13 +2,6 @@
|
|||||||
#include "slsDetectorFunctionList.h"
|
#include "slsDetectorFunctionList.h"
|
||||||
#include "communication_funcs.h"
|
#include "communication_funcs.h"
|
||||||
#include "clogger.h"
|
#include "clogger.h"
|
||||||
#ifndef VIRTUAL
|
|
||||||
#if defined(MYTHEN3D) || defined(GOTTHARD2D)
|
|
||||||
#include "programFpgaNios.h"
|
|
||||||
#elif defined(CHIPTESTBOARDD) || defined(JUNGFRAUD) || defined(MOENCHD)
|
|
||||||
#include "programFpgaBlackfin.h"
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
@ -928,10 +921,35 @@ int set_dac(int file_des) {
|
|||||||
case V_LIMIT:
|
case V_LIMIT:
|
||||||
break;
|
break;
|
||||||
#elif MOENCHD
|
#elif MOENCHD
|
||||||
|
case VBP_COLBUF:
|
||||||
|
serverDacIndex = MO_VBP_COLBUF;
|
||||||
|
break;
|
||||||
|
case VIPRE:
|
||||||
|
serverDacIndex = MO_VIPRE;
|
||||||
|
break;
|
||||||
|
case VIN_CM:
|
||||||
|
serverDacIndex = MO_VIN_CM;
|
||||||
|
break;
|
||||||
|
case VB_SDA:
|
||||||
|
serverDacIndex = MO_VB_SDA;
|
||||||
|
break;
|
||||||
|
case VCASC_SFP:
|
||||||
|
serverDacIndex = MO_VCASC_SFP;
|
||||||
|
break;
|
||||||
|
case VOUT_CM:
|
||||||
|
serverDacIndex = MO_VOUT_CM;
|
||||||
|
break;
|
||||||
|
case VIPRE_CDS:
|
||||||
|
serverDacIndex = MO_VIPRE_CDS;
|
||||||
|
break;
|
||||||
|
case IBIAS_SFP:
|
||||||
|
serverDacIndex = MO_IBIAS_SFP;
|
||||||
|
break;
|
||||||
case ADC_VPP:
|
case ADC_VPP:
|
||||||
case HIGH_VOLTAGE:
|
case HIGH_VOLTAGE:
|
||||||
case V_LIMIT:
|
case V_LIMIT:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#elif MYTHEN3D
|
#elif MYTHEN3D
|
||||||
case HIGH_VOLTAGE:
|
case HIGH_VOLTAGE:
|
||||||
break;
|
break;
|
||||||
@ -1056,17 +1074,13 @@ int set_dac(int file_des) {
|
|||||||
serverDacIndex = J_VREF_COMP;
|
serverDacIndex = J_VREF_COMP;
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
default:
|
default:
|
||||||
#ifdef CHIPTESTBOARDD
|
#ifdef CHIPTESTBOARDD
|
||||||
if (ind < NDAC_ONLY) {
|
if (ind < NDAC_ONLY) {
|
||||||
serverDacIndex = ind;
|
serverDacIndex = ind;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#elif MOENCHD
|
|
||||||
if (ind < NDAC) {
|
|
||||||
serverDacIndex = ind;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
modeNotImplemented("Dac Index", (int)ind);
|
modeNotImplemented("Dac Index", (int)ind);
|
||||||
break;
|
break;
|
||||||
@ -1750,18 +1764,23 @@ int start_acquisition(int file_des) {
|
|||||||
FILE_LOG(logDEBUG1, ("Starting Acquisition\n"));
|
FILE_LOG(logDEBUG1, ("Starting Acquisition\n"));
|
||||||
// only set
|
// only set
|
||||||
if (Server_VerifyLock() == OK) {
|
if (Server_VerifyLock() == OK) {
|
||||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
#if defined(MOENCHD)
|
||||||
int mode = getReadoutMode();
|
if (getNumAnalogSamples() <= 0) {
|
||||||
int asamples = getNumAnalogSamples();
|
|
||||||
int dsamples = getNumDigitalSamples();
|
|
||||||
if ((mode == ANALOG_AND_DIGITAL || mode == ANALOG_ONLY) && (asamples <= 0)) {
|
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(mess, "Could not start acquisition. Invalid number of analog samples: %d.\n", asamples);
|
sprintf(mess, "Could not start acquisition. Invalid number of analog samples: %d.\n", getNumAnalogSamples());
|
||||||
FILE_LOG(logERROR,(mess));
|
FILE_LOG(logERROR,(mess));
|
||||||
}
|
}
|
||||||
else if ((mode == ANALOG_AND_DIGITAL || mode == DIGITAL_ONLY) && (dsamples <= 0)) {
|
else
|
||||||
|
#endif
|
||||||
|
#if defined(CHIPTESTBOARDD)
|
||||||
|
if ((getReadoutMode() == ANALOG_AND_DIGITAL || mode == ANALOG_ONLY) && (getNumAnalogSamples() <= 0)) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(mess, "Could not start acquisition. Invalid number of digital samples: %d.\n", dsamples);
|
sprintf(mess, "Could not start acquisition. Invalid number of analog samples: %d.\n", getNumAnalogSamples());
|
||||||
|
FILE_LOG(logERROR,(mess));
|
||||||
|
}
|
||||||
|
else if ((getReadoutMode() == ANALOG_AND_DIGITAL || mode == DIGITAL_ONLY) && (getNumDigitalSamples() <= 0)) {
|
||||||
|
ret = FAIL;
|
||||||
|
sprintf(mess, "Could not start acquisition. Invalid number of digital samples: %d.\n", getNumDigitalSamples());
|
||||||
FILE_LOG(logERROR,(mess));
|
FILE_LOG(logERROR,(mess));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -1880,18 +1899,23 @@ int start_and_read_all(int file_des) {
|
|||||||
FILE_LOG(logDEBUG1, ("Starting Acquisition\n"));
|
FILE_LOG(logDEBUG1, ("Starting Acquisition\n"));
|
||||||
// only set
|
// only set
|
||||||
if (Server_VerifyLock() == OK) {
|
if (Server_VerifyLock() == OK) {
|
||||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
#if defined(MOENCHD)
|
||||||
int mode = getReadoutMode();
|
if (getNumAnalogSamples() <= 0) {
|
||||||
int asamples = getNumAnalogSamples();
|
|
||||||
int dsamples = getNumDigitalSamples();
|
|
||||||
if ((mode == ANALOG_AND_DIGITAL || mode == ANALOG_ONLY) && (asamples <= 0)) {
|
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(mess, "Could not start acquisition. Invalid number of analog samples: %d.\n", asamples);
|
sprintf(mess, "Could not start acquisition. Invalid number of analog samples: %d.\n", getNumAnalogSamples());
|
||||||
FILE_LOG(logERROR,(mess));
|
FILE_LOG(logERROR,(mess));
|
||||||
}
|
}
|
||||||
else if ((mode == ANALOG_AND_DIGITAL || mode == DIGITAL_ONLY) && (dsamples <= 0)) {
|
else
|
||||||
|
#endif
|
||||||
|
#if defined(CHIPTESTBOARDD)
|
||||||
|
if ((getReadoutMode() == ANALOG_AND_DIGITAL || mode == ANALOG_ONLY) && (getNumAnalogSamples() <= 0)) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(mess, "Could not start acquisition. Invalid number of digital samples: %d.\n", dsamples);
|
sprintf(mess, "Could not start acquisition. Invalid number of analog samples: %d.\n", getNumAnalogSamples());
|
||||||
|
FILE_LOG(logERROR,(mess));
|
||||||
|
}
|
||||||
|
else if ((getReadoutMode() == ANALOG_AND_DIGITAL || mode == DIGITAL_ONLY) && (getNumDigitalSamples() <= 0)) {
|
||||||
|
ret = FAIL;
|
||||||
|
sprintf(mess, "Could not start acquisition. Invalid number of digital samples: %d.\n", getNumDigitalSamples());
|
||||||
FILE_LOG(logERROR,(mess));
|
FILE_LOG(logERROR,(mess));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -2102,14 +2126,23 @@ int set_num_analog_samples(int file_des) {
|
|||||||
#else
|
#else
|
||||||
// only set
|
// only set
|
||||||
if (Server_VerifyLock() == OK) {
|
if (Server_VerifyLock() == OK) {
|
||||||
ret = setNumAnalogSamples(arg);
|
#ifdef MOENCHD
|
||||||
if (ret == FAIL) {
|
if (arg % NSAMPLES_PER_ROW != 0) {
|
||||||
sprintf(mess, "Could not set number of analog samples to %d. Could not allocate RAM\n", arg);
|
ret = FAIL;
|
||||||
|
sprintf(mess, "Could not set number of analog samples to %d. Must be divisible by %d\n", arg, NSAMPLES_PER_ROW);
|
||||||
FILE_LOG(logERROR,(mess));
|
FILE_LOG(logERROR,(mess));
|
||||||
} else {
|
}
|
||||||
int retval = getNumAnalogSamples();
|
#endif
|
||||||
FILE_LOG(logDEBUG1, ("retval num analog samples %d\n", retval));
|
if (ret == OK) {
|
||||||
validate(arg, retval, "set number of analog samples", DEC);
|
ret = setNumAnalogSamples(arg);
|
||||||
|
if (ret == FAIL) {
|
||||||
|
sprintf(mess, "Could not set number of analog samples to %d. Could not allocate RAM\n", arg);
|
||||||
|
FILE_LOG(logERROR,(mess));
|
||||||
|
} else {
|
||||||
|
int retval = getNumAnalogSamples();
|
||||||
|
FILE_LOG(logDEBUG1, ("retval num analog samples %d\n", retval));
|
||||||
|
validate(arg, retval, "set number of analog samples", DEC);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -2121,7 +2154,7 @@ int get_num_digital_samples(int file_des) {
|
|||||||
memset(mess, 0, sizeof(mess));
|
memset(mess, 0, sizeof(mess));
|
||||||
int retval = -1;
|
int retval = -1;
|
||||||
|
|
||||||
#if !defined(CHIPTESTBOARDD) && !defined(MOENCHD)
|
#if !defined(CHIPTESTBOARDD)
|
||||||
functionNotImplemented();
|
functionNotImplemented();
|
||||||
#else
|
#else
|
||||||
// get only
|
// get only
|
||||||
@ -2140,7 +2173,7 @@ int set_num_digital_samples(int file_des) {
|
|||||||
return printSocketReadError();
|
return printSocketReadError();
|
||||||
FILE_LOG(logDEBUG1, ("Setting number of digital samples %d\n", arg));
|
FILE_LOG(logDEBUG1, ("Setting number of digital samples %d\n", arg));
|
||||||
|
|
||||||
#if !defined(CHIPTESTBOARDD) && !defined(MOENCHD)
|
#if !defined(CHIPTESTBOARDD)
|
||||||
functionNotImplemented();
|
functionNotImplemented();
|
||||||
#else
|
#else
|
||||||
// only set
|
// only set
|
||||||
@ -2856,10 +2889,16 @@ int send_update(int file_des) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
|
||||||
|
// analog samples
|
||||||
|
i32 = getNumAnalogSamples();
|
||||||
|
n = sendData(file_des,&i32,sizeof(i32),INT32);
|
||||||
|
if (n < 0) return printSocketReadError();
|
||||||
|
|
||||||
// 1g adcmask
|
// 1g adcmask
|
||||||
i32 = getADCEnableMask();
|
i32 = getADCEnableMask();
|
||||||
n = sendData(file_des,&i32,sizeof(i32),INT32);
|
n = sendData(file_des,&i32,sizeof(i32),INT32);
|
||||||
if (n < 0) return printSocketReadError();
|
if (n < 0) return printSocketReadError();
|
||||||
|
|
||||||
// 10g adc mask
|
// 10g adc mask
|
||||||
i32 = getADCEnableMask_10G();
|
i32 = getADCEnableMask_10G();
|
||||||
n = sendData(file_des,&i32,sizeof(i32),INT32);
|
n = sendData(file_des,&i32,sizeof(i32),INT32);
|
||||||
@ -4237,7 +4276,7 @@ int led(int file_des) {
|
|||||||
return printSocketReadError();
|
return printSocketReadError();
|
||||||
FILE_LOG(logDEBUG1, ("Setting led enable to %d\n", arg));
|
FILE_LOG(logDEBUG1, ("Setting led enable to %d\n", arg));
|
||||||
|
|
||||||
#if (!defined(MOENCHD)) && (!defined(CHIPTESTBOARDD))
|
#if (!defined(CHIPTESTBOARDD))
|
||||||
functionNotImplemented();
|
functionNotImplemented();
|
||||||
#else
|
#else
|
||||||
// set & get
|
// set & get
|
||||||
@ -4262,7 +4301,7 @@ int digital_io_delay(int file_des) {
|
|||||||
return printSocketReadError();
|
return printSocketReadError();
|
||||||
FILE_LOG(logDEBUG1, ("Digital IO Delay, pinMask: 0x%llx, delay:%d ps\n", args[0], (int)args[1]));
|
FILE_LOG(logDEBUG1, ("Digital IO Delay, pinMask: 0x%llx, delay:%d ps\n", args[0], (int)args[1]));
|
||||||
|
|
||||||
#if (!defined(MOENCHD)) && (!defined(CHIPTESTBOARDD))
|
#if (!defined(CHIPTESTBOARDD))
|
||||||
functionNotImplemented();
|
functionNotImplemented();
|
||||||
#else
|
#else
|
||||||
// only set
|
// only set
|
||||||
@ -6169,9 +6208,11 @@ int set_pipeline(int file_des) {
|
|||||||
case ADC_CLOCK:
|
case ADC_CLOCK:
|
||||||
c = ADC_CLK;
|
c = ADC_CLK;
|
||||||
break;
|
break;
|
||||||
|
#ifdef CHIPTESTBOARDD
|
||||||
case DBIT_CLOCK:
|
case DBIT_CLOCK:
|
||||||
c = DBIT_CLK;
|
c = DBIT_CLK;
|
||||||
break;
|
break;
|
||||||
|
#endif
|
||||||
default:
|
default:
|
||||||
modeNotImplemented("clock index (pipeline set)", ind);
|
modeNotImplemented("clock index (pipeline set)", ind);
|
||||||
break;
|
break;
|
||||||
|
@ -155,32 +155,32 @@ class Detector {
|
|||||||
|
|
||||||
void setPeriod(ns t, Positions pos = {});
|
void setPeriod(ns t, Positions pos = {});
|
||||||
|
|
||||||
/** [Gotthard][Jungfrau][CTB][Mythen3][Gotthard2] */
|
/** [Gotthard][Jungfrau][CTB][Moench][Mythen3][Gotthard2] */
|
||||||
Result<ns> getDelayAfterTrigger(Positions pos = {}) const;
|
Result<ns> getDelayAfterTrigger(Positions pos = {}) const;
|
||||||
|
|
||||||
/** [Gotthard][Jungfrau][CTB][Mythen3][Gotthard2] */
|
/** [Gotthard][Jungfrau][CTB][Moench][Mythen3][Gotthard2] */
|
||||||
void setDelayAfterTrigger(ns value, Positions pos = {});
|
void setDelayAfterTrigger(ns value, Positions pos = {});
|
||||||
|
|
||||||
/** [Gotthard][Jungfrau][CTB][Mythen3]
|
/** [Gotthard][Jungfrau][CTB][Moench][Mythen3]
|
||||||
* [Gotthard2] only in continuous mode */
|
* [Gotthard2] only in continuous mode */
|
||||||
Result<int64_t> getNumberOfFramesLeft(Positions pos = {}) const;
|
Result<int64_t> getNumberOfFramesLeft(Positions pos = {}) const;
|
||||||
|
|
||||||
/** [Gotthard][Jungfrau][CTB][Mythen3]
|
/** [Gotthard][Jungfrau][CTB][Moench][Mythen3]
|
||||||
* [Gotthard2] only in continuous mode */
|
* [Gotthard2] only in continuous mode */
|
||||||
Result<int64_t> getNumberOfTriggersLeft(Positions pos = {}) const;
|
Result<int64_t> getNumberOfTriggersLeft(Positions pos = {}) const;
|
||||||
|
|
||||||
/** [Gotthard][Jungfrau][CTB][Mythen3]
|
/** [Gotthard][Jungfrau][CTB][Moench][Mythen3]
|
||||||
* [Gotthard2] only in continuous mode */
|
* [Gotthard2] only in continuous mode */
|
||||||
Result<ns> getPeriodLeft(Positions pos = {}) const;
|
Result<ns> getPeriodLeft(Positions pos = {}) const;
|
||||||
|
|
||||||
/** [Gotthard][Jungfrau][CTB][Mythen3]
|
/** [Gotthard][Jungfrau][CTB][Moench][Mythen3]
|
||||||
* [Gotthard2] only in continuous mode */
|
* [Gotthard2] only in continuous mode */
|
||||||
Result<ns> getDelayAfterTriggerLeft(Positions pos = {}) const;
|
Result<ns> getDelayAfterTriggerLeft(Positions pos = {}) const;
|
||||||
|
|
||||||
Result<defs::timingMode> getTimingMode(Positions pos = {}) const;
|
Result<defs::timingMode> getTimingMode(Positions pos = {}) const;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [Gotthard][Jungfrau][CTB] Options: AUTO_TIMING, TRIGGER_EXPOSURE
|
* [Gotthard][Jungfrau][CTB][Moench] Options: AUTO_TIMING, TRIGGER_EXPOSURE
|
||||||
* [Eiger] Options: AUTO_TIMING, TRIGGER_EXPOSURE, GATED, BURST_TRIGGER
|
* [Eiger] Options: AUTO_TIMING, TRIGGER_EXPOSURE, GATED, BURST_TRIGGER
|
||||||
*/
|
*/
|
||||||
void setTimingMode(defs::timingMode value, Positions pos = {});
|
void setTimingMode(defs::timingMode value, Positions pos = {});
|
||||||
@ -192,19 +192,19 @@ class Detector {
|
|||||||
* Options: FULL_SPEED, HALF_SPEED, QUARTER_SPEED */
|
* Options: FULL_SPEED, HALF_SPEED, QUARTER_SPEED */
|
||||||
void setSpeed(defs::speedLevel value, Positions pos = {});
|
void setSpeed(defs::speedLevel value, Positions pos = {});
|
||||||
|
|
||||||
/** [Gotthard][Jungfrau][CTB] */
|
/** [Gotthard][Jungfrau][CTB][Moench] */
|
||||||
Result<int> getADCPhase(Positions pos = {}) const;
|
Result<int> getADCPhase(Positions pos = {}) const;
|
||||||
|
|
||||||
/** [Gotthard][Jungfrau][CTB] */
|
/** [Gotthard][Jungfrau][CTB][Moench] */
|
||||||
void setADCPhase(int value, Positions pos = {});
|
void setADCPhase(int value, Positions pos = {});
|
||||||
|
|
||||||
/** [Jungfrau][CTB] */
|
/** [Jungfrau][CTB][Moench] */
|
||||||
Result<int> getMaxADCPhaseShift(Positions pos = {}) const;
|
Result<int> getMaxADCPhaseShift(Positions pos = {}) const;
|
||||||
|
|
||||||
/** [Gotthard][Jungfrau][CTB] */
|
/** [Gotthard][Jungfrau][CTB][Moench] */
|
||||||
Result<int> getADCPhaseInDegrees(Positions pos = {}) const;
|
Result<int> getADCPhaseInDegrees(Positions pos = {}) const;
|
||||||
|
|
||||||
/** [Gotthard][Jungfrau][CTB] */
|
/** [Gotthard][Jungfrau][CTB][Moench] */
|
||||||
void setADCPhaseInDegrees(int value, Positions pos = {});
|
void setADCPhaseInDegrees(int value, Positions pos = {});
|
||||||
|
|
||||||
/** [Mythen3][Gotthard2] Hz */
|
/** [Mythen3][Gotthard2] Hz */
|
||||||
@ -244,7 +244,7 @@ class Detector {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* [Gotthard] Options: 0, 90, 110, 120, 150, 180, 200
|
* [Gotthard] Options: 0, 90, 110, 120, 150, 180, 200
|
||||||
* [Jungfrau], CTB Options: 0, 60 - 200
|
* [Jungfrau][CTB][Moench] Options: 0, 60 - 200
|
||||||
* [Eiger][Mythen3][Gotthard2] Options: 0 - 200
|
* [Eiger][Mythen3][Gotthard2] Options: 0 - 200
|
||||||
*/
|
*/
|
||||||
void setHighVoltage(int value, Positions pos = {});
|
void setHighVoltage(int value, Positions pos = {});
|
||||||
@ -415,10 +415,10 @@ class Detector {
|
|||||||
|
|
||||||
Result<std::string> printRxConfiguration(Positions pos = {}) const;
|
Result<std::string> printRxConfiguration(Positions pos = {}) const;
|
||||||
|
|
||||||
/** [Eiger][CTB] */
|
/** [Eiger][CTB][Moench] */
|
||||||
Result<bool> getTenGiga(Positions pos = {}) const;
|
Result<bool> getTenGiga(Positions pos = {}) const;
|
||||||
|
|
||||||
/** [Eiger][CTB] */
|
/** [Eiger][CTB][Moench] */
|
||||||
void setTenGiga(bool value, Positions pos = {});
|
void setTenGiga(bool value, Positions pos = {});
|
||||||
|
|
||||||
/** [Eiger, Jungfrau] */
|
/** [Eiger, Jungfrau] */
|
||||||
@ -954,18 +954,67 @@ class Detector {
|
|||||||
/** [Mythen3] countermask bit set for each counter enabled */
|
/** [Mythen3] countermask bit set for each counter enabled */
|
||||||
void setCounterMask(uint32_t countermask, Positions pos = {});
|
void setCounterMask(uint32_t countermask, Positions pos = {});
|
||||||
|
|
||||||
|
/**************************************************
|
||||||
|
* *
|
||||||
|
* CTB / Moench Specific *
|
||||||
|
* *
|
||||||
|
* ************************************************/
|
||||||
|
/** [CTB][Moench] */
|
||||||
|
Result<int> getNumberOfAnalogSamples(Positions pos = {}) const;
|
||||||
|
|
||||||
|
/** [CTB][Moench] */
|
||||||
|
void setNumberOfAnalogSamples(int value, Positions pos = {});
|
||||||
|
|
||||||
|
/** [CTB][Moench] */
|
||||||
|
Result<int> getADCClock(Positions pos = {}) const;
|
||||||
|
|
||||||
|
/** [CTB][Moench] */
|
||||||
|
void setADCClock(int value_in_MHz, Positions pos = {});
|
||||||
|
|
||||||
|
/** [CTB][Moench] */
|
||||||
|
Result<int> getRUNClock(Positions pos = {}) const;
|
||||||
|
|
||||||
|
/** [CTB][Moench] */
|
||||||
|
void setRUNClock(int value_in_MHz, Positions pos = {});
|
||||||
|
|
||||||
|
/** [CTB][Moench] */
|
||||||
|
Result<int> getSYNCClock(Positions pos = {}) const;
|
||||||
|
|
||||||
|
/** [CTB][Moench] */
|
||||||
|
Result<int> getADCPipeline(Positions pos = {}) const;
|
||||||
|
|
||||||
|
/** [CTB][Moench] */
|
||||||
|
void setADCPipeline(int value, Positions pos = {});
|
||||||
|
|
||||||
|
/** [CTB][Moench] */
|
||||||
|
Result<int> getVoltage(defs::dacIndex index, Positions pos = {}) const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* [CTB][Moench] mV
|
||||||
|
* [Ctb] Options: V_LIMIT, V_POWER_A, V_POWER_B, V_POWER_C,
|
||||||
|
* V_POWER_D, V_POWER_IO, V_POWER_CHIP
|
||||||
|
* [Moench] Options: V_LIMIT
|
||||||
|
*/
|
||||||
|
void setVoltage(defs::dacIndex index, int value, Positions pos = {});
|
||||||
|
|
||||||
|
/** [CTB][Moench] */
|
||||||
|
Result<uint32_t> getADCEnableMask(Positions pos = {}) const;
|
||||||
|
|
||||||
|
/** [CTB][Moench] */
|
||||||
|
void setADCEnableMask(uint32_t mask, Positions pos = {});
|
||||||
|
|
||||||
|
/** [CTB][Moench] */
|
||||||
|
Result<uint32_t> getTenGigaADCEnableMask(Positions pos = {}) const;
|
||||||
|
|
||||||
|
/** [CTB][Moench] */
|
||||||
|
void setTenGigaADCEnableMask(uint32_t mask, Positions pos = {});
|
||||||
|
|
||||||
/**************************************************
|
/**************************************************
|
||||||
* *
|
* *
|
||||||
* CTB Specific *
|
* CTB Specific *
|
||||||
* *
|
* *
|
||||||
* ************************************************/
|
* ************************************************/
|
||||||
|
|
||||||
/** [CTB] */
|
|
||||||
Result<int> getNumberOfAnalogSamples(Positions pos = {}) const;
|
|
||||||
|
|
||||||
/** [CTB] */
|
|
||||||
void setNumberOfAnalogSamples(int value, Positions pos = {});
|
|
||||||
|
|
||||||
/** [CTB] */
|
/** [CTB] */
|
||||||
Result<int> getNumberOfDigitalSamples(Positions pos = {}) const;
|
Result<int> getNumberOfDigitalSamples(Positions pos = {}) const;
|
||||||
|
|
||||||
@ -978,6 +1027,12 @@ class Detector {
|
|||||||
/** [CTB] Options: ANALOG_ONLY = 0, DIGITAL_ONLY = 1, ANALOG_AND_DIGITAL */
|
/** [CTB] Options: ANALOG_ONLY = 0, DIGITAL_ONLY = 1, ANALOG_AND_DIGITAL */
|
||||||
void setReadoutMode(defs::readoutMode value, Positions pos = {});
|
void setReadoutMode(defs::readoutMode value, Positions pos = {});
|
||||||
|
|
||||||
|
/** [CTB] */
|
||||||
|
Result<int> getDBITClock(Positions pos = {}) const;
|
||||||
|
|
||||||
|
/** [CTB] */
|
||||||
|
void setDBITClock(int value_in_MHz, Positions pos = {});
|
||||||
|
|
||||||
/** [CTB] */
|
/** [CTB] */
|
||||||
Result<int> getDBITPhase(Positions pos = {}) const;
|
Result<int> getDBITPhase(Positions pos = {}) const;
|
||||||
|
|
||||||
@ -993,49 +1048,12 @@ class Detector {
|
|||||||
/** [CTB] */
|
/** [CTB] */
|
||||||
void setDBITPhaseInDegrees(int value, Positions pos = {});
|
void setDBITPhaseInDegrees(int value, Positions pos = {});
|
||||||
|
|
||||||
/** [CTB] */
|
|
||||||
Result<int> getADCClock(Positions pos = {}) const;
|
|
||||||
|
|
||||||
/** [CTB] */
|
|
||||||
void setADCClock(int value_in_MHz, Positions pos = {});
|
|
||||||
|
|
||||||
/** [CTB] */
|
|
||||||
Result<int> getDBITClock(Positions pos = {}) const;
|
|
||||||
|
|
||||||
/** [CTB] */
|
|
||||||
void setDBITClock(int value_in_MHz, Positions pos = {});
|
|
||||||
|
|
||||||
/** [CTB] */
|
|
||||||
Result<int> getRUNClock(Positions pos = {}) const;
|
|
||||||
|
|
||||||
/** [CTB] */
|
|
||||||
void setRUNClock(int value_in_MHz, Positions pos = {});
|
|
||||||
|
|
||||||
/** [CTB] */
|
|
||||||
Result<int> getSYNCClock(Positions pos = {}) const;
|
|
||||||
|
|
||||||
/** [CTB] */
|
|
||||||
Result<int> getADCPipeline(Positions pos = {}) const;
|
|
||||||
|
|
||||||
/** [CTB] */
|
|
||||||
void setADCPipeline(int value, Positions pos = {});
|
|
||||||
|
|
||||||
/** [CTB] */
|
/** [CTB] */
|
||||||
Result<int> getDBITPipeline(Positions pos = {}) const;
|
Result<int> getDBITPipeline(Positions pos = {}) const;
|
||||||
|
|
||||||
/** [CTB] */
|
/** [CTB] */
|
||||||
void setDBITPipeline(int value, Positions pos = {});
|
void setDBITPipeline(int value, Positions pos = {});
|
||||||
|
|
||||||
/** [CTB] */
|
|
||||||
Result<int> getVoltage(defs::dacIndex index, Positions pos = {}) const;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* [CTB] mV
|
|
||||||
* Options: V_LIMIT, V_POWER_A, V_POWER_B, V_POWER_C,
|
|
||||||
* V_POWER_D, V_POWER_IO, V_POWER_CHIP
|
|
||||||
*/
|
|
||||||
void setVoltage(defs::dacIndex index, int value, Positions pos = {});
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [CTB] mV
|
* [CTB] mV
|
||||||
* Options: V_POWER_A, V_POWER_B, V_POWER_C, V_POWER_D, V_POWER_IO */
|
* Options: V_POWER_A, V_POWER_B, V_POWER_C, V_POWER_D, V_POWER_IO */
|
||||||
@ -1051,24 +1069,6 @@ class Detector {
|
|||||||
/** [CTB] Options: SLOW_ADC0 - SLOW_ADC7 in uV */
|
/** [CTB] Options: SLOW_ADC0 - SLOW_ADC7 in uV */
|
||||||
Result<int> getSlowADC(defs::dacIndex index, Positions pos = {}) const;
|
Result<int> getSlowADC(defs::dacIndex index, Positions pos = {}) const;
|
||||||
|
|
||||||
/** [CTB]*/
|
|
||||||
Result<uint32_t> getADCEnableMask(Positions pos = {}) const;
|
|
||||||
|
|
||||||
/** [CTB]*/
|
|
||||||
void setADCEnableMask(uint32_t mask, Positions pos = {});
|
|
||||||
|
|
||||||
/** [CTB]*/
|
|
||||||
Result<uint32_t> getTenGigaADCEnableMask(Positions pos = {}) const;
|
|
||||||
|
|
||||||
/** [CTB]*/
|
|
||||||
void setTenGigaADCEnableMask(uint32_t mask, Positions pos = {});
|
|
||||||
|
|
||||||
/** [CTB] */
|
|
||||||
Result<uint32_t> getADCInvert(Positions pos = {}) const;
|
|
||||||
|
|
||||||
/** [CTB]*/
|
|
||||||
void setADCInvert(uint32_t value, Positions pos = {});
|
|
||||||
|
|
||||||
/** [CTB] */
|
/** [CTB] */
|
||||||
Result<int> getExternalSamplingSource(Positions pos = {}) const;
|
Result<int> getExternalSamplingSource(Positions pos = {}) const;
|
||||||
|
|
||||||
@ -1113,72 +1113,71 @@ class Detector {
|
|||||||
* *
|
* *
|
||||||
* ************************************************/
|
* ************************************************/
|
||||||
|
|
||||||
/** [CTB] */
|
/** [CTB][Moench][Mythen3] */
|
||||||
void setPattern(const std::string &fname, Positions pos = {});
|
void setPattern(const std::string &fname, Positions pos = {});
|
||||||
|
|
||||||
/** [CTB] */
|
/** [CTB][Moench][Mythen3] */
|
||||||
void savePattern(const std::string &fname);
|
void savePattern(const std::string &fname);
|
||||||
|
|
||||||
/** [CTB] */
|
/** [CTB][Moench][Mythen3] */
|
||||||
Result<uint64_t> getPatternIOControl(Positions pos = {}) const;
|
Result<uint64_t> getPatternIOControl(Positions pos = {}) const;
|
||||||
|
|
||||||
/** [CTB] */
|
/** [CTB][Moench][Mythen3] */
|
||||||
void setPatternIOControl(uint64_t word, Positions pos = {});
|
void setPatternIOControl(uint64_t word, Positions pos = {});
|
||||||
|
|
||||||
/** [CTB] */
|
/** [CTB][Moench][Mythen3] */
|
||||||
Result<uint64_t> getPatternClockControl(Positions pos = {}) const;
|
Result<uint64_t> getPatternClockControl(Positions pos = {}) const;
|
||||||
|
|
||||||
/** [CTB] */
|
/** [CTB][Moench][Mythen3] */
|
||||||
void setPatternClockControl(uint64_t word, Positions pos = {});
|
void setPatternClockControl(uint64_t word, Positions pos = {});
|
||||||
|
|
||||||
/** [CTB] same as executing
|
/** [CTB][Moench][Mythen3] same as executing for ctb and moench */
|
||||||
* [Mythen3] */
|
|
||||||
Result<uint64_t> getPatternWord(int addr, Positions pos = {});
|
Result<uint64_t> getPatternWord(int addr, Positions pos = {});
|
||||||
|
|
||||||
/** [CTB] Caution: If word is -1 reads the addr (same as
|
/** [CTB] Caution: If word is -1 reads the addr (same as
|
||||||
* executing the pattern)
|
* executing the pattern)
|
||||||
* [Mythen3] */
|
* [Mythen3][Moench] */
|
||||||
void setPatternWord(int addr, uint64_t word, Positions pos = {});
|
void setPatternWord(int addr, uint64_t word, Positions pos = {});
|
||||||
|
|
||||||
/**[CTB][Mythen3] Options: level: -1 (complete pattern) and 0-2 levels
|
/**[CTB][Moench][Mythen3] Options: level: -1 (complete pattern) and 0-2 levels
|
||||||
* @returns array of start address and stop address
|
* @returns array of start address and stop address
|
||||||
*/
|
*/
|
||||||
Result<std::array<int, 2>> getPatternLoopAddresses(int level,
|
Result<std::array<int, 2>> getPatternLoopAddresses(int level,
|
||||||
Positions pos = {}) const;
|
Positions pos = {}) const;
|
||||||
|
|
||||||
/** [CTB][Mythen3] Options: level: -1 (complete pattern) and 0-2 levels */
|
/** [CTB][Moench][Mythen3] Options: level: -1 (complete pattern) and 0-2 levels */
|
||||||
void setPatternLoopAddresses(int level, int start, int stop, Positions pos = {});
|
void setPatternLoopAddresses(int level, int start, int stop, Positions pos = {});
|
||||||
|
|
||||||
/**[CTB][Mythen3] Options: level: -1 (complete pattern) and 0-2 levels
|
/**[CTB][Moench][Mythen3] Options: level: -1 (complete pattern) and 0-2 levels
|
||||||
* @returns number of loops
|
* @returns number of loops
|
||||||
*/
|
*/
|
||||||
Result<int> getPatternLoopCycles(int level, Positions pos = {}) const;
|
Result<int> getPatternLoopCycles(int level, Positions pos = {}) const;
|
||||||
|
|
||||||
/** [CTB][Mythen3] n: 0-2, level: -1 (complete pattern) and 0-2 levels */
|
/** [CTB][Moench][Mythen3] n: 0-2, level: -1 (complete pattern) and 0-2 levels */
|
||||||
void setPatternLoopCycles(int level, int n, Positions pos = {});
|
void setPatternLoopCycles(int level, int n, Positions pos = {});
|
||||||
|
|
||||||
/* [CTB][Mythen3] */
|
/* [CTB][Moench][Mythen3] */
|
||||||
Result<int> getPatternWaitAddr(int level, Positions pos = {}) const;
|
Result<int> getPatternWaitAddr(int level, Positions pos = {}) const;
|
||||||
|
|
||||||
/** [CTB][Mythen3] Options: level 0-2 */
|
/** [CTB][Moench][Mythen3] Options: level 0-2 */
|
||||||
void setPatternWaitAddr(int level, int addr, Positions pos = {});
|
void setPatternWaitAddr(int level, int addr, Positions pos = {});
|
||||||
|
|
||||||
/** [CTB][Mythen3] */
|
/** [CTB][Moench][Mythen3] */
|
||||||
Result<uint64_t> getPatternWaitTime(int level, Positions pos = {}) const;
|
Result<uint64_t> getPatternWaitTime(int level, Positions pos = {}) const;
|
||||||
|
|
||||||
/** [CTB][Mythen3] Options: level 0-2 */
|
/** [CTB][Moench][Mythen3] Options: level 0-2 */
|
||||||
void setPatternWaitTime(int level, uint64_t t, Positions pos = {});
|
void setPatternWaitTime(int level, uint64_t t, Positions pos = {});
|
||||||
|
|
||||||
/** [CTB][Mythen3] */
|
/** [CTB][Moench][Mythen3] */
|
||||||
Result<uint64_t> getPatternMask(Positions pos = {});
|
Result<uint64_t> getPatternMask(Positions pos = {});
|
||||||
|
|
||||||
/** [CTB][Mythen3] Sets the mask applied to every pattern to the selected bit mask */
|
/** [CTB][Moench][Mythen3] Sets the mask applied to every pattern to the selected bit mask */
|
||||||
void setPatternMask(uint64_t mask, Positions pos = {});
|
void setPatternMask(uint64_t mask, Positions pos = {});
|
||||||
|
|
||||||
/** [CTB][Mythen3] */
|
/** [CTB][Moench][Mythen3] */
|
||||||
Result<uint64_t> getPatternBitMask(Positions pos = {}) const;
|
Result<uint64_t> getPatternBitMask(Positions pos = {}) const;
|
||||||
|
|
||||||
/** [CTB][Mythen3] Sets the bitmask that the mask will be applied to for every
|
/** [CTB][Moench][Mythen3] Sets the bitmask that the mask will be applied to for every
|
||||||
* pattern
|
* pattern
|
||||||
*/
|
*/
|
||||||
void setPatternBitMask(uint64_t mask, Positions pos = {});
|
void setPatternBitMask(uint64_t mask, Positions pos = {});
|
||||||
@ -1238,26 +1237,26 @@ class Detector {
|
|||||||
* *
|
* *
|
||||||
* ************************************************/
|
* ************************************************/
|
||||||
|
|
||||||
/** [Jungfrau][CTB] fname is a pof file
|
/** [Jungfrau][CTB][Moench] fname is a pof file
|
||||||
* [Mythen3][Gotthard2] fname is an rbf file
|
* [Mythen3][Gotthard2] fname is an rbf file
|
||||||
*/
|
*/
|
||||||
void programFPGA(const std::string &fname, Positions pos = {});
|
void programFPGA(const std::string &fname, Positions pos = {});
|
||||||
|
|
||||||
/** [Jungfrau][CTB] */
|
/** [Jungfrau][CTB][Moench] */
|
||||||
void resetFPGA(Positions pos = {});
|
void resetFPGA(Positions pos = {});
|
||||||
|
|
||||||
/** [Jungfrau][Gotthard][CTB]
|
/** [Jungfrau][Gotthard][CTB][Moench]
|
||||||
* Copy detector server fname from tftp folder of hostname to detector
|
* Copy detector server fname from tftp folder of hostname to detector
|
||||||
* Also changes respawn server, which is effective after a reboot.
|
* Also changes respawn server, which is effective after a reboot.
|
||||||
*/
|
*/
|
||||||
void copyDetectorServer(const std::string &fname,
|
void copyDetectorServer(const std::string &fname,
|
||||||
const std::string &hostname, Positions pos = {});
|
const std::string &hostname, Positions pos = {});
|
||||||
|
|
||||||
/** [Jungfrau][Gotthard][CTB][Mythen3][Gotthard2] */
|
/** [Jungfrau][Gotthard][CTB][Moench][Mythen3][Gotthard2] */
|
||||||
void rebootController(Positions pos = {});
|
void rebootController(Positions pos = {});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* [Jungfrau][Gotthard][CTB]
|
* [Jungfrau][Gotthard][CTB][Moench]
|
||||||
* Updates the firmware, detector server and then reboots detector
|
* Updates the firmware, detector server and then reboots detector
|
||||||
* controller blackfin.
|
* controller blackfin.
|
||||||
* @param sname name of detector server binary found on tftp folder of host
|
* @param sname name of detector server binary found on tftp folder of host
|
||||||
@ -1278,13 +1277,13 @@ class Detector {
|
|||||||
|
|
||||||
void clearBit(uint32_t addr, int bitnr, Positions pos = {});
|
void clearBit(uint32_t addr, int bitnr, Positions pos = {});
|
||||||
|
|
||||||
/** [Gotthard][Jungfrau][Mythen3][Gotthard2][CTB] */
|
/** [Gotthard][Jungfrau][Mythen3][Gotthard2][CTB][Moench] */
|
||||||
void executeFirmwareTest(Positions pos = {});
|
void executeFirmwareTest(Positions pos = {});
|
||||||
|
|
||||||
/** [Gotthard][Jungfrau][Mythen3][Gotthard2][CTB] */
|
/** [Gotthard][Jungfrau][Mythen3][Gotthard2][CTB][Moench] */
|
||||||
void executeBusTest(Positions pos = {});
|
void executeBusTest(Positions pos = {});
|
||||||
|
|
||||||
/** [Gotthard][Jungfrau][CTB] not possible to read back*/
|
/** [Gotthard][Jungfrau][CTB][Moench] not possible to read back*/
|
||||||
void writeAdcRegister(uint32_t addr, uint32_t value, Positions pos = {});
|
void writeAdcRegister(uint32_t addr, uint32_t value, Positions pos = {});
|
||||||
|
|
||||||
bool getInitialChecks() const;
|
bool getInitialChecks() const;
|
||||||
@ -1293,6 +1292,12 @@ class Detector {
|
|||||||
* default enabled */
|
* default enabled */
|
||||||
void setInitialChecks(const bool value);
|
void setInitialChecks(const bool value);
|
||||||
|
|
||||||
|
/** [CTB][Moench][Jungfrau] */
|
||||||
|
Result<uint32_t> getADCInvert(Positions pos = {}) const;
|
||||||
|
|
||||||
|
/** [CTB][Moench][Jungfrau] */
|
||||||
|
void setADCInvert(uint32_t value, Positions pos = {});
|
||||||
|
|
||||||
/**************************************************
|
/**************************************************
|
||||||
* *
|
* *
|
||||||
* Insignificant *
|
* Insignificant *
|
||||||
@ -1321,15 +1326,15 @@ class Detector {
|
|||||||
/** Execute a command on the detector server console */
|
/** Execute a command on the detector server console */
|
||||||
void executeCommand(const std::string &value, Positions pos = {});
|
void executeCommand(const std::string &value, Positions pos = {});
|
||||||
|
|
||||||
/** [Jungfrau][Mythen3][CTB]
|
/** [Jungfrau][Mythen3][CTB][Moench]
|
||||||
* [Gotthard2] only in continuous mode */
|
* [Gotthard2] only in continuous mode */
|
||||||
Result<int64_t> getNumberOfFramesFromStart(Positions pos = {}) const;
|
Result<int64_t> getNumberOfFramesFromStart(Positions pos = {}) const;
|
||||||
|
|
||||||
/** [Jungfrau][Mythen3][CTB] Get time from detector start
|
/** [Jungfrau][Mythen3][CTB][Moench] Get time from detector start
|
||||||
* [Gotthard2] only in continuous mode */
|
* [Gotthard2] only in continuous mode */
|
||||||
Result<ns> getActualTime(Positions pos = {}) const;
|
Result<ns> getActualTime(Positions pos = {}) const;
|
||||||
|
|
||||||
/** [Jungfrau][Mythen3][CTB] Get timestamp at a frame start
|
/** [Jungfrau][Mythen3][CTB][Moench] Get timestamp at a frame start
|
||||||
* [Gotthard2] only in continuous mode */
|
* [Gotthard2] only in continuous mode */
|
||||||
Result<ns> getMeasurementTime(Positions pos = {}) const;
|
Result<ns> getMeasurementTime(Positions pos = {}) const;
|
||||||
|
|
||||||
|
@ -395,10 +395,10 @@ std::string CmdProxy::Adcphase(int action) {
|
|||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
os << cmd << ' ';
|
os << cmd << ' ';
|
||||||
if (action == defs::HELP_ACTION) {
|
if (action == defs::HELP_ACTION) {
|
||||||
os << "[n_value] [(optional)deg]\n\t[Jungfrau][Ctb][Gotthard] Phase "
|
os << "[n_value] [(optional)deg]\n\t[Jungfrau][Ctb][Moench][Moench][Gotthard] Phase "
|
||||||
"shift of ADC clock. \n\t[Jungfrau] Absolute phase shift. If deg "
|
"shift of ADC clock. \n\t[Jungfrau] Absolute phase shift. If deg "
|
||||||
"used, then shift in degrees. Changing Speed also resets "
|
"used, then shift in degrees. Changing Speed also resets "
|
||||||
"adcphase to recommended defaults.\n\t[Ctb] Absolute phase "
|
"adcphase to recommended defaults.\n\t[Ctb][Moench] Absolute phase "
|
||||||
"shift. If deg used, then shift in degrees. Changing adcclk also "
|
"shift. If deg used, then shift in degrees. Changing adcclk also "
|
||||||
"resets adcphase and sets it to previous values.\n\t[Gotthard] "
|
"resets adcphase and sets it to previous values.\n\t[Gotthard] "
|
||||||
"Relative phase shift"
|
"Relative phase shift"
|
||||||
@ -588,8 +588,10 @@ std::string CmdProxy::Dac(int action) {
|
|||||||
os << cmd << ' ';
|
os << cmd << ' ';
|
||||||
if (action == defs::HELP_ACTION) {
|
if (action == defs::HELP_ACTION) {
|
||||||
os << "[dac index] [dac or mv value] [(optional unit) mv] "
|
os << "[dac index] [dac or mv value] [(optional unit) mv] "
|
||||||
"\n\t[Ctb][Jungfrau] Dac."
|
"\n\t[Ctb] Dac."
|
||||||
<< '\n';
|
<< '\n';
|
||||||
|
} else if (det->getDetectorType().squash(defs::GENERIC) != defs::CHIPTESTBOARD) {
|
||||||
|
throw sls::RuntimeError("Dac command can only be used for chip test board. Use daclist to get list of dac commands for current detector.");
|
||||||
} else if (action == defs::GET_ACTION) {
|
} else if (action == defs::GET_ACTION) {
|
||||||
bool mv = false;
|
bool mv = false;
|
||||||
if (args.size() == 2) {
|
if (args.size() == 2) {
|
||||||
@ -707,6 +709,11 @@ std::vector<std::string> CmdProxy::DacCommands() {
|
|||||||
"vth1", "vicin", "vcas", "vpreamp", "vpl", "vipre",
|
"vth1", "vicin", "vcas", "vpreamp", "vpl", "vipre",
|
||||||
"viinsh", "vph", "vtrim", "vdcsh"};
|
"viinsh", "vph", "vtrim", "vdcsh"};
|
||||||
break;
|
break;
|
||||||
|
case defs::MOENCH:
|
||||||
|
return std::vector<std::string>{"vbp_colbuf", "vipre", "vin_cm",
|
||||||
|
"vb_sda", "vcasc_sfp", "vout_cm",
|
||||||
|
"vipre_cds", "ibias_sfp"};
|
||||||
|
break;
|
||||||
case defs::CHIPTESTBOARD:
|
case defs::CHIPTESTBOARD:
|
||||||
return std::vector<std::string>{
|
return std::vector<std::string>{
|
||||||
"dac 0", "dac 1", "dac 2", "dac 3", "dac 4", "dac 5",
|
"dac 0", "dac 1", "dac 2", "dac 3", "dac 4", "dac 5",
|
||||||
@ -1316,26 +1323,29 @@ std::string CmdProxy::Counters(int action) {
|
|||||||
return os.str();
|
return os.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* CTB Specific */
|
/* CTB / Moench Specific */
|
||||||
|
|
||||||
std::string CmdProxy::Samples(int action) {
|
std::string CmdProxy::Samples(int action) {
|
||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
os << cmd << ' ';
|
os << cmd << ' ';
|
||||||
if (action == defs::HELP_ACTION) {
|
if (action == defs::HELP_ACTION) {
|
||||||
os << "[n_samples]\n\t[CTB] Number of samples (both analog and "
|
os << "[n_samples]\n\t[CTB] Number of samples (both analog and "
|
||||||
"digitial) expected."
|
"digitial) expected.\n\t[Moench] Number of samples (analog only)"
|
||||||
<< '\n';
|
<< '\n';
|
||||||
} else if (action == defs::GET_ACTION) {
|
} else if (action == defs::GET_ACTION) {
|
||||||
if (!args.empty()) {
|
if (!args.empty()) {
|
||||||
WrongNumberOfParameters(0);
|
WrongNumberOfParameters(0);
|
||||||
}
|
}
|
||||||
auto a = det->getNumberOfAnalogSamples({det_id});
|
auto a = det->getNumberOfAnalogSamples({det_id});
|
||||||
auto d = det->getNumberOfDigitalSamples({det_id});
|
// get also digital samples for ctb and compare with analog
|
||||||
int as = a.squash(-1);
|
if (det->getDetectorType().squash() == defs::CHIPTESTBOARD) {
|
||||||
int ds = d.squash(-1);
|
auto d = det->getNumberOfDigitalSamples({det_id});
|
||||||
if (as == -1 || ds == -1 || as != ds) { // check if a == d?
|
int as = a.squash(-1);
|
||||||
throw sls::RuntimeError(
|
int ds = d.squash(-1);
|
||||||
|
if (as == -1 || ds == -1 || as != ds) { // check if a == d?
|
||||||
|
throw sls::RuntimeError(
|
||||||
"Different samples. Use asamples or dsamples.");
|
"Different samples. Use asamples or dsamples.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
os << OutString(a) << '\n';
|
os << OutString(a) << '\n';
|
||||||
} else if (action == defs::PUT_ACTION) {
|
} else if (action == defs::PUT_ACTION) {
|
||||||
@ -1343,7 +1353,10 @@ std::string CmdProxy::Samples(int action) {
|
|||||||
WrongNumberOfParameters(1);
|
WrongNumberOfParameters(1);
|
||||||
}
|
}
|
||||||
det->setNumberOfAnalogSamples(std::stoi(args[0]), {det_id});
|
det->setNumberOfAnalogSamples(std::stoi(args[0]), {det_id});
|
||||||
det->setNumberOfDigitalSamples(std::stoi(args[0]), {det_id});
|
// set also digital samples for ctb
|
||||||
|
if (det->getDetectorType().squash() == defs::CHIPTESTBOARD) {
|
||||||
|
det->setNumberOfDigitalSamples(std::stoi(args[0]), {det_id});
|
||||||
|
}
|
||||||
os << args.front() << '\n';
|
os << args.front() << '\n';
|
||||||
} else {
|
} else {
|
||||||
throw sls::RuntimeError("Unknown action");
|
throw sls::RuntimeError("Unknown action");
|
||||||
@ -1351,6 +1364,8 @@ std::string CmdProxy::Samples(int action) {
|
|||||||
return os.str();
|
return os.str();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* CTB Specific */
|
||||||
|
|
||||||
std::string CmdProxy::Dbitphase(int action) {
|
std::string CmdProxy::Dbitphase(int action) {
|
||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
os << cmd << ' ';
|
os << cmd << ' ';
|
||||||
@ -1499,7 +1514,7 @@ std::string CmdProxy::Pattern(int action) {
|
|||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
os << cmd << ' ';
|
os << cmd << ' ';
|
||||||
if (action == defs::HELP_ACTION) {
|
if (action == defs::HELP_ACTION) {
|
||||||
os << "[fname]\n\t[Mythen3][Ctb] Loads binary pattern file with only pattern "
|
os << "[fname]\n\t[Mythen3][Moench][Ctb][Moench] Loads binary pattern file with only pattern "
|
||||||
"words"
|
"words"
|
||||||
<< '\n';
|
<< '\n';
|
||||||
} else if (action == defs::GET_ACTION) {
|
} else if (action == defs::GET_ACTION) {
|
||||||
@ -1520,7 +1535,7 @@ std::string CmdProxy::PatternWord(int action) {
|
|||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
os << cmd << ' ';
|
os << cmd << ' ';
|
||||||
if (action == defs::HELP_ACTION) {
|
if (action == defs::HELP_ACTION) {
|
||||||
os << "[step or address] [64 bit mask]\n\t[Ctb][Mythen3] 64 bit pattern at "
|
os << "[step or address] [64 bit mask]\n\t[Ctb][Moench][Mythen3] 64 bit pattern at "
|
||||||
"address of pattern memory."
|
"address of pattern memory."
|
||||||
<< '\n';
|
<< '\n';
|
||||||
} else if (action == defs::GET_ACTION) {
|
} else if (action == defs::GET_ACTION) {
|
||||||
@ -1546,17 +1561,17 @@ std::string CmdProxy::PatternLoopAddresses(int action) {
|
|||||||
os << cmd << ' ';
|
os << cmd << ' ';
|
||||||
if (action == defs::HELP_ACTION) {
|
if (action == defs::HELP_ACTION) {
|
||||||
if (cmd == "patlimits") {
|
if (cmd == "patlimits") {
|
||||||
os << "[start addr] [stop addr] \n\t[Ctb][Mythen3] Limits of complete "
|
os << "[start addr] [stop addr] \n\t[Ctb][Moench][Mythen3] Limits of complete "
|
||||||
"pattern."
|
"pattern."
|
||||||
<< '\n';
|
<< '\n';
|
||||||
} else if (cmd == "patloop0") {
|
} else if (cmd == "patloop0") {
|
||||||
os << "[start addr] [stop addr] \n\t[Ctb][Mythen3] Limits of loop 0."
|
os << "[start addr] [stop addr] \n\t[Ctb][Moench][Mythen3] Limits of loop 0."
|
||||||
<< '\n';
|
<< '\n';
|
||||||
} else if (cmd == "patloop1") {
|
} else if (cmd == "patloop1") {
|
||||||
os << "[start addr] [stop addr] \n\t[Ctb][Mythen3] Limits of loop 1."
|
os << "[start addr] [stop addr] \n\t[Ctb][Moench][Mythen3] Limits of loop 1."
|
||||||
<< '\n';
|
<< '\n';
|
||||||
} else if (cmd == "patloop2") {
|
} else if (cmd == "patloop2") {
|
||||||
os << "[start addr] [stop addr] \n\t[Ctb][Mythen3] Limits of loop 2."
|
os << "[start addr] [stop addr] \n\t[Ctb][Moench][Mythen3] Limits of loop 2."
|
||||||
<< '\n';
|
<< '\n';
|
||||||
} else {
|
} else {
|
||||||
throw sls::RuntimeError(
|
throw sls::RuntimeError(
|
||||||
@ -1601,11 +1616,11 @@ std::string CmdProxy::PatternLoopCycles(int action) {
|
|||||||
os << cmd << ' ';
|
os << cmd << ' ';
|
||||||
if (action == defs::HELP_ACTION) {
|
if (action == defs::HELP_ACTION) {
|
||||||
if (cmd == "patnloop0") {
|
if (cmd == "patnloop0") {
|
||||||
os << "[n_cycles] \n\t[Ctb][Mythen3] Number of cycles of loop 0." << '\n';
|
os << "[n_cycles] \n\t[Ctb][Moench][Mythen3] Number of cycles of loop 0." << '\n';
|
||||||
} else if (cmd == "patnloop1") {
|
} else if (cmd == "patnloop1") {
|
||||||
os << "[n_cycles] \n\t[Ctb][Mythen3] Number of cycles of loop 1." << '\n';
|
os << "[n_cycles] \n\t[Ctb][Moench][Mythen3] Number of cycles of loop 1." << '\n';
|
||||||
} else if (cmd == "patnloop2") {
|
} else if (cmd == "patnloop2") {
|
||||||
os << "[n_cycles] \n\t[Ctb][Mythen3] Number of cycles of loop 2." << '\n';
|
os << "[n_cycles] \n\t[Ctb][Moench][Mythen3] Number of cycles of loop 2." << '\n';
|
||||||
} else {
|
} else {
|
||||||
throw sls::RuntimeError(
|
throw sls::RuntimeError(
|
||||||
"Unknown command, use list to list all commands");
|
"Unknown command, use list to list all commands");
|
||||||
@ -1646,11 +1661,11 @@ std::string CmdProxy::PatternWaitAddress(int action) {
|
|||||||
os << cmd << ' ';
|
os << cmd << ' ';
|
||||||
if (action == defs::HELP_ACTION) {
|
if (action == defs::HELP_ACTION) {
|
||||||
if (cmd == "patwait0") {
|
if (cmd == "patwait0") {
|
||||||
os << "[addr] \n\t[Ctb][Mythen3] Wait 0 address." << '\n';
|
os << "[addr] \n\t[Ctb][Moench][Mythen3] Wait 0 address." << '\n';
|
||||||
} else if (cmd == "patwait1") {
|
} else if (cmd == "patwait1") {
|
||||||
os << "[addr] \n\t[Ctb][Mythen3] Wait 1 address." << '\n';
|
os << "[addr] \n\t[Ctb][Moench][Mythen3] Wait 1 address." << '\n';
|
||||||
} else if (cmd == "patwait2") {
|
} else if (cmd == "patwait2") {
|
||||||
os << "[addr] \n\t[Ctb][Mythen3] Wait 2 address." << '\n';
|
os << "[addr] \n\t[Ctb][Moench][Mythen3] Wait 2 address." << '\n';
|
||||||
} else {
|
} else {
|
||||||
throw sls::RuntimeError(
|
throw sls::RuntimeError(
|
||||||
"Unknown command, use list to list all commands");
|
"Unknown command, use list to list all commands");
|
||||||
@ -1691,11 +1706,11 @@ std::string CmdProxy::PatternWaitTime(int action) {
|
|||||||
os << cmd << ' ';
|
os << cmd << ' ';
|
||||||
if (action == defs::HELP_ACTION) {
|
if (action == defs::HELP_ACTION) {
|
||||||
if (cmd == "patwaittime0") {
|
if (cmd == "patwaittime0") {
|
||||||
os << "[n_clk] \n\t[Ctb][Mythen3] Wait 0 time in clock cycles." << '\n';
|
os << "[n_clk] \n\t[Ctb][Moench][Mythen3] Wait 0 time in clock cycles." << '\n';
|
||||||
} else if (cmd == "patwaittime1") {
|
} else if (cmd == "patwaittime1") {
|
||||||
os << "[n_clk] \n\t[Ctb][Mythen3] Wait 1 time in clock cycles." << '\n';
|
os << "[n_clk] \n\t[Ctb][Moench][Mythen3] Wait 1 time in clock cycles." << '\n';
|
||||||
} else if (cmd == "patwaittime2") {
|
} else if (cmd == "patwaittime2") {
|
||||||
os << "[n_clk] \n\t[Ctb][Mythen3] Wait 2 time in clock cycles." << '\n';
|
os << "[n_clk] \n\t[Ctb][Moench][Mythen3] Wait 2 time in clock cycles." << '\n';
|
||||||
} else {
|
} else {
|
||||||
throw sls::RuntimeError(
|
throw sls::RuntimeError(
|
||||||
"Unknown command, use list to list all commands");
|
"Unknown command, use list to list all commands");
|
||||||
@ -1811,7 +1826,7 @@ std::string CmdProxy::ProgramFpga(int action) {
|
|||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
os << cmd << ' ';
|
os << cmd << ' ';
|
||||||
if (action == defs::HELP_ACTION) {
|
if (action == defs::HELP_ACTION) {
|
||||||
os << "[fname.pof | fname.rbf]\n\t[Jungfrau][Ctb] Programs FPGA from pof file."
|
os << "[fname.pof | fname.rbf]\n\t[Jungfrau][Ctb][Moench] Programs FPGA from pof file."
|
||||||
<< "\n\t[Mythen3][Gotthard2] Programs FPGA from rbf file."
|
<< "\n\t[Mythen3][Gotthard2] Programs FPGA from rbf file."
|
||||||
<< '\n';
|
<< '\n';
|
||||||
} else if (action == defs::GET_ACTION) {
|
} else if (action == defs::GET_ACTION) {
|
||||||
@ -1832,7 +1847,7 @@ std::string CmdProxy::CopyDetectorServer(int action) {
|
|||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
os << cmd << ' ';
|
os << cmd << ' ';
|
||||||
if (action == defs::HELP_ACTION) {
|
if (action == defs::HELP_ACTION) {
|
||||||
os << "[server_name] [pc_host_name]\n\t[Jungfrau][Ctb] Copies detector "
|
os << "[server_name] [pc_host_name]\n\t[Jungfrau][Ctb][Moench] Copies detector "
|
||||||
"server via tftp from pc and changes respawn server name in "
|
"server via tftp from pc and changes respawn server name in "
|
||||||
"/etc/inittab of detector."
|
"/etc/inittab of detector."
|
||||||
<< '\n';
|
<< '\n';
|
||||||
@ -1854,7 +1869,7 @@ std::string CmdProxy::UpdateFirmwareAndDetectorServer(int action) {
|
|||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
os << cmd << ' ';
|
os << cmd << ' ';
|
||||||
if (action == defs::HELP_ACTION) {
|
if (action == defs::HELP_ACTION) {
|
||||||
os << "[server_name] [pc_host_name] [fname.pof]\n\t[Jungfrau][Ctb] "
|
os << "[server_name] [pc_host_name] [fname.pof]\n\t[Jungfrau][Ctb][Moench] "
|
||||||
"Updates detector server via tftp from pc, updates firmware to "
|
"Updates detector server via tftp from pc, updates firmware to "
|
||||||
"pof file and then reboots controller (blackfin)."
|
"pof file and then reboots controller (blackfin)."
|
||||||
<< '\n';
|
<< '\n';
|
||||||
@ -1904,7 +1919,7 @@ std::string CmdProxy::AdcRegister(int action) {
|
|||||||
std::ostringstream os;
|
std::ostringstream os;
|
||||||
os << cmd << ' ';
|
os << cmd << ' ';
|
||||||
if (action == defs::HELP_ACTION) {
|
if (action == defs::HELP_ACTION) {
|
||||||
os << "[address] [value]\n\t[Jungfrau][Ctb][Gotthard] Writes to an adc "
|
os << "[address] [value]\n\t[Jungfrau][Ctb][Moench][Gotthard] Writes to an adc "
|
||||||
"register in hex."
|
"register in hex."
|
||||||
<< '\n';
|
<< '\n';
|
||||||
} else if (action == defs::GET_ACTION) {
|
} else if (action == defs::GET_ACTION) {
|
||||||
|
@ -666,6 +666,12 @@ class CmdProxy {
|
|||||||
{"vb_pixbuf", &CmdProxy::vb_pixbuf},
|
{"vb_pixbuf", &CmdProxy::vb_pixbuf},
|
||||||
{"vin_com", &CmdProxy::vin_com},
|
{"vin_com", &CmdProxy::vin_com},
|
||||||
{"vdd_prot", &CmdProxy::vdd_prot},
|
{"vdd_prot", &CmdProxy::vdd_prot},
|
||||||
|
{"vbp_colbuf", &CmdProxy::vbp_colbuf},
|
||||||
|
{"vb_sda", &CmdProxy::vb_sda},
|
||||||
|
{"vcasc_sfp", &CmdProxy::vcasc_sfp},
|
||||||
|
{"vipre_cds", &CmdProxy::vipre_cds},
|
||||||
|
{"ibias_sfp", &CmdProxy::ibias_sfp},
|
||||||
|
|
||||||
|
|
||||||
{"dac", &CmdProxy::Dac},
|
{"dac", &CmdProxy::Dac},
|
||||||
{"daclist", &CmdProxy::DacList},
|
{"daclist", &CmdProxy::DacList},
|
||||||
@ -796,20 +802,24 @@ class CmdProxy {
|
|||||||
/* Mythen3 Specific */
|
/* Mythen3 Specific */
|
||||||
{"counters", &CmdProxy::Counters},
|
{"counters", &CmdProxy::Counters},
|
||||||
|
|
||||||
/* CTB Specific */
|
/* CTB/ Moench Specific */
|
||||||
{"samples", &CmdProxy::Samples},
|
{"samples", &CmdProxy::Samples},
|
||||||
{"asamples", &CmdProxy::asamples},
|
{"asamples", &CmdProxy::asamples},
|
||||||
{"dsamples", &CmdProxy::dsamples},
|
|
||||||
{"romode", &CmdProxy::romode},
|
|
||||||
{"dbitphase", &CmdProxy::Dbitphase},
|
|
||||||
{"maxdbitphaseshift", &CmdProxy::maxdbitphaseshift},
|
|
||||||
{"adcclk", &CmdProxy::adcclk},
|
{"adcclk", &CmdProxy::adcclk},
|
||||||
{"dbitclk", &CmdProxy::dbitclk},
|
|
||||||
{"runclk", &CmdProxy::runclk},
|
{"runclk", &CmdProxy::runclk},
|
||||||
{"syncclk", &CmdProxy::syncclk},
|
{"syncclk", &CmdProxy::syncclk},
|
||||||
{"adcpipeline", &CmdProxy::adcpipeline},
|
{"adcpipeline", &CmdProxy::adcpipeline},
|
||||||
{"dbitpipeline", &CmdProxy::dbitpipeline},
|
|
||||||
{"v_limit", &CmdProxy::v_limit},
|
{"v_limit", &CmdProxy::v_limit},
|
||||||
|
{"adcenable", &CmdProxy::adcenable},
|
||||||
|
{"adcenable10g", &CmdProxy::adcenable10g},
|
||||||
|
|
||||||
|
/* CTB Specific */
|
||||||
|
{"dsamples", &CmdProxy::dsamples},
|
||||||
|
{"romode", &CmdProxy::romode},
|
||||||
|
{"dbitclk", &CmdProxy::dbitclk},
|
||||||
|
{"dbitphase", &CmdProxy::Dbitphase},
|
||||||
|
{"maxdbitphaseshift", &CmdProxy::maxdbitphaseshift},
|
||||||
|
{"dbitpipeline", &CmdProxy::dbitpipeline},
|
||||||
{"v_a", &CmdProxy::v_a},
|
{"v_a", &CmdProxy::v_a},
|
||||||
{"v_b", &CmdProxy::v_b},
|
{"v_b", &CmdProxy::v_b},
|
||||||
{"v_c", &CmdProxy::v_c},
|
{"v_c", &CmdProxy::v_c},
|
||||||
@ -827,9 +837,6 @@ class CmdProxy {
|
|||||||
{"im_d", &CmdProxy::im_d},
|
{"im_d", &CmdProxy::im_d},
|
||||||
{"im_io", &CmdProxy::im_io},
|
{"im_io", &CmdProxy::im_io},
|
||||||
{"adc", &CmdProxy::SlowAdc},
|
{"adc", &CmdProxy::SlowAdc},
|
||||||
{"adcenable", &CmdProxy::adcenable},
|
|
||||||
{"adcenable10g", &CmdProxy::adcenable10g},
|
|
||||||
{"adcinvert", &CmdProxy::adcinvert},
|
|
||||||
{"extsampling", &CmdProxy::extsampling},
|
{"extsampling", &CmdProxy::extsampling},
|
||||||
{"extsamplingsrc", &CmdProxy::extsamplingsrc},
|
{"extsamplingsrc", &CmdProxy::extsamplingsrc},
|
||||||
{"rx_dbitlist", &CmdProxy::ReceiverDbitList},
|
{"rx_dbitlist", &CmdProxy::ReceiverDbitList},
|
||||||
@ -881,6 +888,7 @@ class CmdProxy {
|
|||||||
{"firmwaretest", &CmdProxy::firmwaretest},
|
{"firmwaretest", &CmdProxy::firmwaretest},
|
||||||
{"bustest", &CmdProxy::bustest},
|
{"bustest", &CmdProxy::bustest},
|
||||||
{"initialchecks", &CmdProxy::InitialChecks},
|
{"initialchecks", &CmdProxy::InitialChecks},
|
||||||
|
{"adcinvert", &CmdProxy::adcinvert},
|
||||||
|
|
||||||
/* Insignificant */
|
/* Insignificant */
|
||||||
{"port", &CmdProxy::port},
|
{"port", &CmdProxy::port},
|
||||||
@ -955,8 +963,9 @@ class CmdProxy {
|
|||||||
std::string BurstMode(int action);
|
std::string BurstMode(int action);
|
||||||
/* Mythen3 Specific */
|
/* Mythen3 Specific */
|
||||||
std::string Counters(int action);
|
std::string Counters(int action);
|
||||||
/* CTB Specific */
|
/* CTB/ Moench Specific */
|
||||||
std::string Samples(int action);
|
std::string Samples(int action);
|
||||||
|
/* CTB Specific */
|
||||||
std::string Dbitphase(int action);
|
std::string Dbitphase(int action);
|
||||||
std::string SlowAdc(int action);
|
std::string SlowAdc(int action);
|
||||||
std::string ReceiverDbitList(int action);
|
std::string ReceiverDbitList(int action);
|
||||||
@ -1034,38 +1043,38 @@ class CmdProxy {
|
|||||||
"\n\t[Gotthard2] Uploaded to detector just before acquisition starts");
|
"\n\t[Gotthard2] Uploaded to detector just before acquisition starts");
|
||||||
|
|
||||||
TIME_COMMAND(delay, getDelayAfterTrigger, setDelayAfterTrigger,
|
TIME_COMMAND(delay, getDelayAfterTrigger, setDelayAfterTrigger,
|
||||||
"[duration] [(optional unit) ns|us|ms|s]\n\t[Jungfrau][Gotthard][Mythen3][Gotthard2][Ctb] Delay after trigger");
|
"[duration] [(optional unit) ns|us|ms|s]\n\t[Jungfrau][Gotthard][Mythen3][Gotthard2][Ctb][Moench] Delay after trigger");
|
||||||
|
|
||||||
TIME_COMMAND(burstperiod, getBurstPeriod, setBurstPeriod,
|
TIME_COMMAND(burstperiod, getBurstPeriod, setBurstPeriod,
|
||||||
"[duration] [(optional unit) ns|us|ms|s]\n\t[Gotthard2] Burst period. Only in burst mode and auto timing mode.");
|
"[duration] [(optional unit) ns|us|ms|s]\n\t[Gotthard2] Burst period. Only in burst mode and auto timing mode.");
|
||||||
|
|
||||||
GET_COMMAND(framesl, getNumberOfFramesLeft,
|
GET_COMMAND(framesl, getNumberOfFramesLeft,
|
||||||
"\n\t[Gotthard][Jungfrau][Mythen3][Gotthard2][CTB] Number of frames left in acquisition."
|
"\n\t[Gotthard][Jungfrau][Mythen3][Gotthard2][CTB][Moench] Number of frames left in acquisition."
|
||||||
"\n\t[Gotthard2] only in continuous mode.");
|
"\n\t[Gotthard2] only in continuous mode.");
|
||||||
|
|
||||||
GET_COMMAND(triggersl, getNumberOfTriggersLeft,
|
GET_COMMAND(triggersl, getNumberOfTriggersLeft,
|
||||||
"\n\t[Gotthard][Jungfrau][Mythen3][Gotthard2][CTB] Number of triggers left in acquisition."
|
"\n\t[Gotthard][Jungfrau][Mythen3][Gotthard2][CTB][Moench] Number of triggers left in acquisition."
|
||||||
"\n\t[Gotthard2] only in continuous mode.");
|
"\n\t[Gotthard2] only in continuous mode.");
|
||||||
|
|
||||||
TIME_GET_COMMAND(delayl, getDelayAfterTriggerLeft,
|
TIME_GET_COMMAND(delayl, getDelayAfterTriggerLeft,
|
||||||
"\n\t[Gotthard][Jungfrau][Mythen3][Gotthard2][CTB] DelayLeft Delay Left in Acquisition."
|
"\n\t[Gotthard][Jungfrau][Mythen3][Gotthard2][CTB][Moench] DelayLeft Delay Left in Acquisition."
|
||||||
"\n\t[Gotthard2] only in continuous mode.");
|
"\n\t[Gotthard2] only in continuous mode.");
|
||||||
|
|
||||||
TIME_GET_COMMAND(periodl, getPeriodLeft,
|
TIME_GET_COMMAND(periodl, getPeriodLeft,
|
||||||
"\n\t[Gotthard][Jungfrau][Mythen3][Gotthard2][CTB] Period left for current frame."
|
"\n\t[Gotthard][Jungfrau][Mythen3][Gotthard2][CTB][Moench] Period left for current frame."
|
||||||
"\n\t[Gotthard2] only in continuous mode.");
|
"\n\t[Gotthard2] only in continuous mode.");
|
||||||
|
|
||||||
INTEGER_COMMAND(timing, getTimingMode, setTimingMode, sls::StringTo<slsDetectorDefs::timingMode>,
|
INTEGER_COMMAND(timing, getTimingMode, setTimingMode, sls::StringTo<slsDetectorDefs::timingMode>,
|
||||||
"[auto|trigger|gating|burst_trigger]\n\tTiming Mode of detector.\n\t[Jungfrau][Gotthard][Mythen3][Gotthard2][Ctb] [auto|trigger]\n\t[Eiger] [auto|trigger|gating|burst_trigger]");
|
"[auto|trigger|gating|burst_trigger]\n\tTiming Mode of detector.\n\t[Jungfrau][Gotthard][Mythen3][Gotthard2][Ctb][Moench] [auto|trigger]\n\t[Eiger] [auto|trigger|gating|burst_trigger]");
|
||||||
|
|
||||||
GET_COMMAND(maxadcphaseshift, getMaxADCPhaseShift,
|
GET_COMMAND(maxadcphaseshift, getMaxADCPhaseShift,
|
||||||
"\n\t[Jungfrau][CTB] Absolute maximum Phase shift of ADC clock.");
|
"\n\t[Jungfrau][CTB][Moench] Absolute maximum Phase shift of ADC clock.");
|
||||||
|
|
||||||
INTEGER_COMMAND(vhighvoltage, getHighVoltage, setHighVoltage, std::stoi,
|
INTEGER_COMMAND(vhighvoltage, getHighVoltage, setHighVoltage, std::stoi,
|
||||||
"[n_value]\n\tHigh voltage to the sensor in Voltage."
|
"[n_value]\n\tHigh voltage to the sensor in Voltage."
|
||||||
"\n\t[Gotthard] [0|90|110|120|150|180|200]"
|
"\n\t[Gotthard] [0|90|110|120|150|180|200]"
|
||||||
"\n\t[Eiger][Mythen3][Gotthard2] 0-200"
|
"\n\t[Eiger][Mythen3][Gotthard2] 0-200"
|
||||||
"\n\t[Jungfrau][Ctb] [0|60-200]");
|
"\n\t[Jungfrau][Ctb][Moench] [0|60-200]");
|
||||||
|
|
||||||
INTEGER_COMMAND(powerchip, getPowerChip, setPowerChip, std::stoi,
|
INTEGER_COMMAND(powerchip, getPowerChip, setPowerChip, std::stoi,
|
||||||
"[0, 1]\n\t[Jungfrau][Mythen3][Gotthard2] Power the chip. Default 0."
|
"[0, 1]\n\t[Jungfrau][Mythen3][Gotthard2] Power the chip. Default 0."
|
||||||
@ -1169,13 +1178,13 @@ class CmdProxy {
|
|||||||
"[dac or mv value][(optional unit) mv] \n\t[Gotthard] Dac for ?? "); //TODO
|
"[dac or mv value][(optional unit) mv] \n\t[Gotthard] Dac for ?? "); //TODO
|
||||||
|
|
||||||
DAC_COMMAND(vout_cm, getDAC, setDAC, defs::VOUT_CM,
|
DAC_COMMAND(vout_cm, getDAC, setDAC, defs::VOUT_CM,
|
||||||
"[dac or mv value][(optional unit) mv] \n\t[Gotthard] Dac for ?? "); //TODO
|
"[dac or mv value][(optional unit) mv] \n\t[Gotthard] Dac for ?? \n\t[Moench] Dac for 5"); //TODO
|
||||||
|
|
||||||
DAC_COMMAND(vcasc_out, getDAC, setDAC, defs::VCASC_OUT,
|
DAC_COMMAND(vcasc_out, getDAC, setDAC, defs::VCASC_OUT,
|
||||||
"[dac or mv value][(optional unit) mv] \n\t[Gotthard] Dac for ?? "); //TODO
|
"[dac or mv value][(optional unit) mv] \n\t[Gotthard] Dac for ?? "); //TODO
|
||||||
|
|
||||||
DAC_COMMAND(vin_cm, getDAC, setDAC, defs::VIN_CM,
|
DAC_COMMAND(vin_cm, getDAC, setDAC, defs::VIN_CM,
|
||||||
"[dac or mv value][(optional unit) mv] \n\t[Gotthard] Dac for ?? "); //TODO
|
"[dac or mv value][(optional unit) mv] \n\t[Gotthard] Dac for ?? \n\t[Moench] Dac for 2"); //TODO
|
||||||
|
|
||||||
DAC_COMMAND(vref_comp, getDAC, setDAC, defs::VREF_COMP,
|
DAC_COMMAND(vref_comp, getDAC, setDAC, defs::VREF_COMP,
|
||||||
"[dac or mv value][(optional unit) mv] \n\t[Gotthard][Jungfrau] Dac for ?? "); //TODO
|
"[dac or mv value][(optional unit) mv] \n\t[Gotthard][Jungfrau] Dac for ?? "); //TODO
|
||||||
@ -1193,7 +1202,7 @@ class CmdProxy {
|
|||||||
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] voltage to define feedback resistance of the second shaper.");
|
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] voltage to define feedback resistance of the second shaper.");
|
||||||
|
|
||||||
DAC_COMMAND(vipre, getDAC, setDAC, defs::VIPRE,
|
DAC_COMMAND(vipre, getDAC, setDAC, defs::VIPRE,
|
||||||
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for the preamplifier's input transistor current.");
|
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for the preamplifier's input transistor current.\n\t[Moench] Dac for 1");
|
||||||
|
|
||||||
DAC_COMMAND(viinsh, getDAC, setDAC, defs::VIINSH,
|
DAC_COMMAND(viinsh, getDAC, setDAC, defs::VIINSH,
|
||||||
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for the bias current for the shaper.");
|
"[dac or mv value][(optional unit) mv] \n\t[Mythen3] Dac for the bias current for the shaper.");
|
||||||
@ -1274,7 +1283,7 @@ class CmdProxy {
|
|||||||
"[dac or mv value][(optional unit) mv] \n\t[Gotthard2] Dac for common mode voltage of ADC DAC bank 2.");
|
"[dac or mv value][(optional unit) mv] \n\t[Gotthard2] Dac for common mode voltage of ADC DAC bank 2.");
|
||||||
|
|
||||||
DAC_COMMAND(adcvpp, getDAC, setDAC, defs::ADC_VPP,
|
DAC_COMMAND(adcvpp, getDAC, setDAC, defs::ADC_VPP,
|
||||||
"[dac or mv value][(optional unit) mv] \n\t[Ctb] Vpp of ADC.\n\t 0 -> 1V ; 1 -> 1.14V ; 2 -> 1.33V ; 3 -> 1.6V ; 4 -> 2V.");
|
"[dac or mv value][(optional unit) mv] \n\t[Ctb][Moench] Vpp of ADC.\n\t 0 -> 1V ; 1 -> 1.14V ; 2 -> 1.33V ; 3 -> 1.6V ; 4 -> 2V.");
|
||||||
|
|
||||||
DAC_COMMAND(vb_ds, getDAC, setDAC, defs::VB_DS,
|
DAC_COMMAND(vb_ds, getDAC, setDAC, defs::VB_DS,
|
||||||
"[dac or mv value][(optional unit) mv] \n\t[Jungfrau] Dac for ??"); //TODO
|
"[dac or mv value][(optional unit) mv] \n\t[Jungfrau] Dac for ??"); //TODO
|
||||||
@ -1291,6 +1300,21 @@ class CmdProxy {
|
|||||||
DAC_COMMAND(vdd_prot, getDAC, setDAC, defs::VDD_PROT,
|
DAC_COMMAND(vdd_prot, getDAC, setDAC, defs::VDD_PROT,
|
||||||
"[dac or mv value][(optional unit) mv] \n\t[Jungfrau] Dac for ??"); //TODO
|
"[dac or mv value][(optional unit) mv] \n\t[Jungfrau] Dac for ??"); //TODO
|
||||||
|
|
||||||
|
DAC_COMMAND(vbp_colbuf, getDAC, setDAC, defs::VBP_COLBUF,
|
||||||
|
"[dac or mv value][(optional unit) mv] \n\t[Moench] Dac for 0");
|
||||||
|
|
||||||
|
DAC_COMMAND(vb_sda, getDAC, setDAC, defs::VB_SDA,
|
||||||
|
"[dac or mv value][(optional unit) mv] \n\t[Moench] Dac for 3");
|
||||||
|
|
||||||
|
DAC_COMMAND(vcasc_sfp, getDAC, setDAC, defs::VCASC_SFP,
|
||||||
|
"[dac or mv value][(optional unit) mv] \n\t[Moench] Dac for 4");
|
||||||
|
|
||||||
|
DAC_COMMAND(vipre_cds, getDAC, setDAC, defs::VIPRE_CDS,
|
||||||
|
"[dac or mv value][(optional unit) mv] \n\t[Moench] Dac for 6");
|
||||||
|
|
||||||
|
DAC_COMMAND(ibias_sfp, getDAC, setDAC, defs::IBIAS_SFP,
|
||||||
|
"[dac or mv value][(optional unit) mv] \n\t[Moench] Dac for 7");
|
||||||
|
|
||||||
|
|
||||||
/* on chip dacs */
|
/* on chip dacs */
|
||||||
INTEGER_USER_IND_COMMAND(vchip_comp_fe, getOnChipDAC, setOnChipDAC, stoiHex, defs::VB_COMP_FE,
|
INTEGER_USER_IND_COMMAND(vchip_comp_fe, getOnChipDAC, setOnChipDAC, stoiHex, defs::VB_COMP_FE,
|
||||||
@ -1391,7 +1415,7 @@ class CmdProxy {
|
|||||||
"\n\tPrints the receiver configuration.");
|
"\n\tPrints the receiver configuration.");
|
||||||
|
|
||||||
INTEGER_COMMAND(tengiga, getTenGiga, setTenGiga, std::stoi,
|
INTEGER_COMMAND(tengiga, getTenGiga, setTenGiga, std::stoi,
|
||||||
"[0, 1]\n\t[Eiger][Ctb] 10GbE Enable.");
|
"[0, 1]\n\t[Eiger][Ctb][Moench] 10GbE Enable.");
|
||||||
|
|
||||||
INTEGER_COMMAND(flowcontrol10g, getTenGigaFlowControl, setTenGigaFlowControl, std::stoi,
|
INTEGER_COMMAND(flowcontrol10g, getTenGigaFlowControl, setTenGigaFlowControl, std::stoi,
|
||||||
"[0, 1]\n\t[Eiger][Jungfrau] 10GbE Flow Control.");
|
"[0, 1]\n\t[Eiger][Jungfrau] 10GbE Flow Control.");
|
||||||
@ -1574,10 +1598,34 @@ class CmdProxy {
|
|||||||
|
|
||||||
/* Mythen3 Specific */
|
/* Mythen3 Specific */
|
||||||
|
|
||||||
/* CTB Specific */
|
/* CTB/ Moench Specific */
|
||||||
|
|
||||||
INTEGER_COMMAND(asamples, getNumberOfAnalogSamples, setNumberOfAnalogSamples, std::stoi,
|
INTEGER_COMMAND(asamples, getNumberOfAnalogSamples, setNumberOfAnalogSamples, std::stoi,
|
||||||
"[0, 1]\n\t[CTB] Number of analog samples expected.");
|
"[0, 1]\n\t[CTB][Moench] Number of analog samples expected.");
|
||||||
|
|
||||||
|
INTEGER_COMMAND(adcclk, getADCClock, setADCClock, std::stoi,
|
||||||
|
"[n_clk in MHz]\n\t[Ctb][Moench] ADC clock frequency in MHz.");
|
||||||
|
|
||||||
|
INTEGER_COMMAND(runclk, getRUNClock, setRUNClock, std::stoi,
|
||||||
|
"[n_clk in MHz]\n\t[Ctb][Moench] Run clock in MHz.");
|
||||||
|
|
||||||
|
GET_COMMAND(syncclk, getSYNCClock,
|
||||||
|
"[n_clk in MHz]\n\t[Ctb][Moench] Sync clock in MHz.");
|
||||||
|
|
||||||
|
INTEGER_COMMAND(adcpipeline, getADCPipeline, setADCPipeline, std::stoi,
|
||||||
|
"[n_value]\n\t[Ctb][Moench] Pipeline for ADC clock.");
|
||||||
|
|
||||||
|
INTEGER_IND_COMMAND(v_limit, getVoltage, setVoltage, std::stoi, defs::V_LIMIT,
|
||||||
|
"[n_value]\n\t[Ctb][Moench] Soft limit for power supplies(ctb only) and DACS in mV.");
|
||||||
|
|
||||||
|
INTEGER_COMMAND_HEX(adcenable, getADCEnableMask, setADCEnableMask, stoiHex,
|
||||||
|
"[bitmask]\n\t[Ctb][Moench] ADC Enable Mask for 1Gb Mode for each 32 ADC channel.");
|
||||||
|
|
||||||
|
INTEGER_COMMAND_HEX(adcenable10g, getTenGigaADCEnableMask, setTenGigaADCEnableMask, stoiHex,
|
||||||
|
"[bitmask]\n\t[Ctb][Moench] ADC Enable Mask for 10Gb mode for each 32 ADC channel. However, if any of consecutive 4 bits are enabled, the complete 4 bits are enabled.");
|
||||||
|
|
||||||
|
/* CTB Specific */
|
||||||
|
|
||||||
|
|
||||||
INTEGER_COMMAND(dsamples, getNumberOfDigitalSamples, setNumberOfDigitalSamples, std::stoi,
|
INTEGER_COMMAND(dsamples, getNumberOfDigitalSamples, setNumberOfDigitalSamples, std::stoi,
|
||||||
"[0, 1]\n\t[CTB] Number of digital samples expected.");
|
"[0, 1]\n\t[CTB] Number of digital samples expected.");
|
||||||
@ -1585,30 +1633,15 @@ class CmdProxy {
|
|||||||
INTEGER_COMMAND(romode, getReadoutMode, setReadoutMode, sls::StringTo<slsDetectorDefs::readoutMode>,
|
INTEGER_COMMAND(romode, getReadoutMode, setReadoutMode, sls::StringTo<slsDetectorDefs::readoutMode>,
|
||||||
"[analog|digital|analog_digital]\n\t[CTB] Readout mode. Default is analog.");
|
"[analog|digital|analog_digital]\n\t[CTB] Readout mode. Default is analog.");
|
||||||
|
|
||||||
GET_COMMAND(maxdbitphaseshift, getMaxDBITPhaseShift,
|
|
||||||
"\n\t[CTB] Absolute maximum Phase shift of of the clock to latch digital bits.");
|
|
||||||
|
|
||||||
INTEGER_COMMAND(adcclk, getADCClock, setADCClock, std::stoi,
|
|
||||||
"[n_clk in MHz]\n\t[Ctb] ADC clock frequency in MHz.");
|
|
||||||
|
|
||||||
INTEGER_COMMAND(dbitclk, getDBITClock, setDBITClock, std::stoi,
|
INTEGER_COMMAND(dbitclk, getDBITClock, setDBITClock, std::stoi,
|
||||||
"[n_clk in MHz]\n\t[Ctb] Clock for latching the digital bits in MHz.");
|
"[n_clk in MHz]\n\t[Ctb] Clock for latching the digital bits in MHz.");
|
||||||
|
|
||||||
INTEGER_COMMAND(runclk, getRUNClock, setRUNClock, std::stoi,
|
GET_COMMAND(maxdbitphaseshift, getMaxDBITPhaseShift,
|
||||||
"[n_clk in MHz]\n\t[Ctb] Run clock in MHz.");
|
"\n\t[CTB] Absolute maximum Phase shift of of the clock to latch digital bits.");
|
||||||
|
|
||||||
GET_COMMAND(syncclk, getSYNCClock,
|
|
||||||
"[n_clk in MHz]\n\t[Ctb] Synch clock in MHz.");
|
|
||||||
|
|
||||||
INTEGER_COMMAND(adcpipeline, getADCPipeline, setADCPipeline, std::stoi,
|
|
||||||
"[n_value]\n\t[Ctb] Pipeline for ADC clock.");
|
|
||||||
|
|
||||||
INTEGER_COMMAND(dbitpipeline, getDBITPipeline, setDBITPipeline, std::stoi,
|
INTEGER_COMMAND(dbitpipeline, getDBITPipeline, setDBITPipeline, std::stoi,
|
||||||
"[n_value]\n\t[Ctb] Pipeline of the clock for latching digital bits.");
|
"[n_value]\n\t[Ctb] Pipeline of the clock for latching digital bits.");
|
||||||
|
|
||||||
INTEGER_IND_COMMAND(v_limit, getVoltage, setVoltage, std::stoi, defs::V_LIMIT,
|
|
||||||
"[n_value]\n\t[Ctb] Soft limit for power supplies and DACS in mV.");
|
|
||||||
|
|
||||||
INTEGER_IND_COMMAND(v_a, getVoltage, setVoltage, std::stoi, defs::V_POWER_A,
|
INTEGER_IND_COMMAND(v_a, getVoltage, setVoltage, std::stoi, defs::V_POWER_A,
|
||||||
"[n_value]\n\t[Ctb] Voltage supply a in mV.");
|
"[n_value]\n\t[Ctb] Voltage supply a in mV.");
|
||||||
|
|
||||||
@ -1657,15 +1690,6 @@ class CmdProxy {
|
|||||||
GET_IND_COMMAND(im_io, getMeasuredCurrent, defs::I_POWER_IO, "",
|
GET_IND_COMMAND(im_io, getMeasuredCurrent, defs::I_POWER_IO, "",
|
||||||
"\n\t[Ctb] Measured current of power supply io in mA.");
|
"\n\t[Ctb] Measured current of power supply io in mA.");
|
||||||
|
|
||||||
INTEGER_COMMAND_HEX(adcenable, getADCEnableMask, setADCEnableMask, stoiHex,
|
|
||||||
"[bitmask]\n\t[Ctb] ADC Enable Mask for 1Gb Mode for each 32 ADC channel.");
|
|
||||||
|
|
||||||
INTEGER_COMMAND_HEX(adcenable10g, getTenGigaADCEnableMask, setTenGigaADCEnableMask, stoiHex,
|
|
||||||
"[bitmask]\n\t[Ctb] ADC Enable Mask for 10Gb mode for each 32 ADC channel. However, if any of consecutive 4 bits are enabled, the complete 4 bits are enabled.");
|
|
||||||
|
|
||||||
INTEGER_COMMAND_HEX(adcinvert, getADCInvert, setADCInvert, stoiHex,
|
|
||||||
"[bitmask]\n\t[Ctb][Jungfrau] ADC Inversion Mask.\n\t[Jungfrau] Inversions on top of the default mask.");
|
|
||||||
|
|
||||||
INTEGER_COMMAND(extsampling, getExternalSampling, setExternalSampling, std::stoi,
|
INTEGER_COMMAND(extsampling, getExternalSampling, setExternalSampling, std::stoi,
|
||||||
"[0, 1]\n\t[Ctb] Enable for external sampling signal to extsamplingsrc signal for digital data. For advanced users only.");
|
"[0, 1]\n\t[Ctb] Enable for external sampling signal to extsamplingsrc signal for digital data. For advanced users only.");
|
||||||
|
|
||||||
@ -1682,19 +1706,19 @@ class CmdProxy {
|
|||||||
/* Pattern */
|
/* Pattern */
|
||||||
|
|
||||||
EXECUTE_SET_COMMAND_NOID_1ARG(savepattern, savePattern,
|
EXECUTE_SET_COMMAND_NOID_1ARG(savepattern, savePattern,
|
||||||
"[fname]\n\t[Ctb] Saves pattern to file (ascii). Also executes pattern.");
|
"[fname]\n\t[Ctb][Moench][Mythen3] Saves pattern to file (ascii). Also executes pattern.");
|
||||||
|
|
||||||
INTEGER_COMMAND_HEX(patioctrl, getPatternIOControl, setPatternIOControl, stoulHex,
|
INTEGER_COMMAND_HEX(patioctrl, getPatternIOControl, setPatternIOControl, stoulHex,
|
||||||
"[64 bit mask]\n\t[Ctb] 64 bit mask defining input (0) and output (1) signals.");
|
"[64 bit mask]\n\t[Ctb][Moench][Mythen3] 64 bit mask defining input (0) and output (1) signals.");
|
||||||
|
|
||||||
INTEGER_COMMAND_HEX(patclkctrl, getPatternClockControl, setPatternClockControl, stoulHex,
|
INTEGER_COMMAND_HEX(patclkctrl, getPatternClockControl, setPatternClockControl, stoulHex,
|
||||||
"[64 bit mask]\n\t[Ctb] 64 bit mask defining output clock enable.");
|
"[64 bit mask]\n\t[Ctb][Moench][Mythen3] 64 bit mask defining output clock enable.");
|
||||||
|
|
||||||
INTEGER_COMMAND_HEX(patmask, getPatternMask, setPatternMask, stoulHex,
|
INTEGER_COMMAND_HEX(patmask, getPatternMask, setPatternMask, stoulHex,
|
||||||
"[64 bit mask]\n\t[Ctb][Mythen3] 64 bit mask applied to every pattern. Only these bits for each pattern will be masked against.");
|
"[64 bit mask]\n\t[Ctb][Moench][Mythen3] 64 bit mask applied to every pattern. Only these bits for each pattern will be masked against.");
|
||||||
|
|
||||||
INTEGER_COMMAND_HEX(patsetbit, getPatternBitMask, setPatternBitMask, stoulHex,
|
INTEGER_COMMAND_HEX(patsetbit, getPatternBitMask, setPatternBitMask, stoulHex,
|
||||||
"[64 bit mask]\n\t[Ctb][Mythen3] 64 bit values applied to the selected patmask for every pattern.");
|
"[64 bit mask]\n\t[Ctb][Moench][Mythen3] 64 bit values applied to the selected patmask for every pattern.");
|
||||||
|
|
||||||
/* Moench */
|
/* Moench */
|
||||||
|
|
||||||
@ -1711,17 +1735,19 @@ class CmdProxy {
|
|||||||
/* Advanced */
|
/* Advanced */
|
||||||
|
|
||||||
EXECUTE_SET_COMMAND(resetfpga, resetFPGA,
|
EXECUTE_SET_COMMAND(resetfpga, resetFPGA,
|
||||||
"\n\t[Jungfrau][Ctb] Reset FPGA.");
|
"\n\t[Jungfrau][Ctb][Moench] Reset FPGA.");
|
||||||
|
|
||||||
EXECUTE_SET_COMMAND(rebootcontroller, rebootController,
|
EXECUTE_SET_COMMAND(rebootcontroller, rebootController,
|
||||||
"\n\t[Jungfrau][Ctb][Gotthard][Mythen3][Gotthard2] Reboot controler (blackfin) of detector.");
|
"\n\t[Jungfrau][Ctb][Moench][Gotthard][Mythen3][Gotthard2] Reboot controler (blackfin) of detector.");
|
||||||
|
|
||||||
EXECUTE_SET_COMMAND(firmwaretest, executeFirmwareTest,
|
EXECUTE_SET_COMMAND(firmwaretest, executeFirmwareTest,
|
||||||
"\n\t[Jungfrau][Gotthard][Mythen3][Gotthard2][Ctb] Firmware test, ie. reads a read fixed pattern from a register.");
|
"\n\t[Jungfrau][Gotthard][Mythen3][Gotthard2][Ctb][Moench] Firmware test, ie. reads a read fixed pattern from a register.");
|
||||||
|
|
||||||
EXECUTE_SET_COMMAND(bustest, executeBusTest,
|
EXECUTE_SET_COMMAND(bustest, executeBusTest,
|
||||||
"\n\t[Jungfrau][Gotthard][Mythen3][Gotthard2][Ctb] Bus test, ie. keeps writing and reading back different values in R/W register.");
|
"\n\t[Jungfrau][Gotthard][Mythen3][Gotthard2][Ctb][Moench] Bus test, ie. keeps writing and reading back different values in R/W register.");
|
||||||
|
|
||||||
|
INTEGER_COMMAND_HEX(adcinvert, getADCInvert, setADCInvert, stoiHex,
|
||||||
|
"[bitmask]\n\t[Ctb][Moench][Jungfrau][Moench] ADC Inversion Mask.\n\t[Jungfrau][Moench] Inversions on top of the default mask.");
|
||||||
|
|
||||||
/* Insignificant */
|
/* Insignificant */
|
||||||
|
|
||||||
@ -1738,7 +1764,7 @@ class CmdProxy {
|
|||||||
"\n\tClient IP Address that last communicated with the detector.");
|
"\n\tClient IP Address that last communicated with the detector.");
|
||||||
|
|
||||||
GET_COMMAND(nframes, getNumberOfFramesFromStart,
|
GET_COMMAND(nframes, getNumberOfFramesFromStart,
|
||||||
"\n\t[Jungfrau][Mythen3][Gotthard2][Moench][CTB] Number of frames from start run control."
|
"\n\t[Jungfrau][Mythen3][Gotthard2][Moench][CTB][Moench] Number of frames from start run control."
|
||||||
"\n\t[Gotthard2] only in continuous mode.");
|
"\n\t[Gotthard2] only in continuous mode.");
|
||||||
|
|
||||||
TIME_GET_COMMAND(now, getActualTime,
|
TIME_GET_COMMAND(now, getActualTime,
|
||||||
|
@ -1230,7 +1230,7 @@ void Detector::setCounterMask(uint32_t countermask, Positions pos) {
|
|||||||
pimpl->Parallel(&slsDetector::setCounterMask, pos, countermask);
|
pimpl->Parallel(&slsDetector::setCounterMask, pos, countermask);
|
||||||
}
|
}
|
||||||
|
|
||||||
// CTB Specific
|
// CTB/ Moench Specific
|
||||||
|
|
||||||
Result<int> Detector::getNumberOfAnalogSamples(Positions pos) const {
|
Result<int> Detector::getNumberOfAnalogSamples(Positions pos) const {
|
||||||
return pimpl->Parallel(&slsDetector::getNumberOfAnalogSamples, pos);
|
return pimpl->Parallel(&slsDetector::getNumberOfAnalogSamples, pos);
|
||||||
@ -1240,46 +1240,6 @@ void Detector::setNumberOfAnalogSamples(int value, Positions pos) {
|
|||||||
pimpl->Parallel(&slsDetector::setNumberOfAnalogSamples, pos, value);
|
pimpl->Parallel(&slsDetector::setNumberOfAnalogSamples, pos, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<int> Detector::getNumberOfDigitalSamples(Positions pos) const {
|
|
||||||
return pimpl->Parallel(&slsDetector::getNumberOfDigitalSamples, pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Detector::setNumberOfDigitalSamples(int value, Positions pos) {
|
|
||||||
pimpl->Parallel(&slsDetector::setNumberOfDigitalSamples, pos, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
Result<defs::readoutMode> Detector::getReadoutMode(Positions pos) const {
|
|
||||||
return pimpl->Parallel(&slsDetector::getReadoutMode, pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Detector::setReadoutMode(defs::readoutMode value, Positions pos) {
|
|
||||||
pimpl->Parallel(&slsDetector::setReadoutMode, pos, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
Result<int> Detector::getDBITPhase(Positions pos) const {
|
|
||||||
return pimpl->Parallel(&slsDetector::getClockPhase, pos, defs::DBIT_CLOCK,
|
|
||||||
false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Detector::setDBITPhase(int value, Positions pos) {
|
|
||||||
pimpl->Parallel(&slsDetector::setClockPhase, pos, defs::DBIT_CLOCK, value,
|
|
||||||
false);
|
|
||||||
}
|
|
||||||
|
|
||||||
Result<int> Detector::getMaxDBITPhaseShift(Positions pos) const {
|
|
||||||
return pimpl->Parallel(&slsDetector::getMaxClockPhaseShift, pos,
|
|
||||||
defs::DBIT_CLOCK);
|
|
||||||
}
|
|
||||||
|
|
||||||
Result<int> Detector::getDBITPhaseInDegrees(Positions pos) const {
|
|
||||||
return pimpl->Parallel(&slsDetector::getClockPhase, pos, defs::DBIT_CLOCK,
|
|
||||||
true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Detector::setDBITPhaseInDegrees(int value, Positions pos) {
|
|
||||||
pimpl->Parallel(&slsDetector::setClockPhase, pos, defs::DBIT_CLOCK, value,
|
|
||||||
true);
|
|
||||||
}
|
|
||||||
|
|
||||||
Result<int> Detector::getADCClock(Positions pos) const {
|
Result<int> Detector::getADCClock(Positions pos) const {
|
||||||
return pimpl->Parallel(&slsDetector::getClockFrequency, pos,
|
return pimpl->Parallel(&slsDetector::getClockFrequency, pos,
|
||||||
@ -1291,16 +1251,6 @@ void Detector::setADCClock(int value_in_MHz, Positions pos) {
|
|||||||
value_in_MHz);
|
value_in_MHz);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<int> Detector::getDBITClock(Positions pos) const {
|
|
||||||
return pimpl->Parallel(&slsDetector::getClockFrequency, pos,
|
|
||||||
defs::DBIT_CLOCK);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Detector::setDBITClock(int value_in_MHz, Positions pos) {
|
|
||||||
pimpl->Parallel(&slsDetector::setClockFrequency, pos, defs::DBIT_CLOCK,
|
|
||||||
value_in_MHz);
|
|
||||||
}
|
|
||||||
|
|
||||||
Result<int> Detector::getRUNClock(Positions pos) const {
|
Result<int> Detector::getRUNClock(Positions pos) const {
|
||||||
return pimpl->Parallel(&slsDetector::getClockFrequency, pos,
|
return pimpl->Parallel(&slsDetector::getClockFrequency, pos,
|
||||||
defs::RUN_CLOCK);
|
defs::RUN_CLOCK);
|
||||||
@ -1328,10 +1278,6 @@ Result<int> Detector::getDBITPipeline(Positions pos) const {
|
|||||||
return pimpl->Parallel(&slsDetector::getPipeline, pos, defs::DBIT_CLOCK);
|
return pimpl->Parallel(&slsDetector::getPipeline, pos, defs::DBIT_CLOCK);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Detector::setDBITPipeline(int value, Positions pos) {
|
|
||||||
pimpl->Parallel(&slsDetector::setPipeline, pos, defs::DBIT_CLOCK, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
Result<int> Detector::getVoltage(defs::dacIndex index, Positions pos) const {
|
Result<int> Detector::getVoltage(defs::dacIndex index, Positions pos) const {
|
||||||
switch (index) {
|
switch (index) {
|
||||||
case defs::V_LIMIT:
|
case defs::V_LIMIT:
|
||||||
@ -1364,6 +1310,81 @@ void Detector::setVoltage(defs::dacIndex index, int value, Positions pos) {
|
|||||||
pimpl->Parallel(&slsDetector::setDAC, pos, value, index, 1);
|
pimpl->Parallel(&slsDetector::setDAC, pos, value, index, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Result<uint32_t> Detector::getADCEnableMask(Positions pos) const {
|
||||||
|
return pimpl->Parallel(&slsDetector::getADCEnableMask, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Detector::setADCEnableMask(uint32_t mask, Positions pos) {
|
||||||
|
pimpl->Parallel(&slsDetector::setADCEnableMask, pos, mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
Result<uint32_t> Detector::getTenGigaADCEnableMask(Positions pos) const {
|
||||||
|
return pimpl->Parallel(&slsDetector::getTenGigaADCEnableMask, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Detector::setTenGigaADCEnableMask(uint32_t mask, Positions pos) {
|
||||||
|
pimpl->Parallel(&slsDetector::setTenGigaADCEnableMask, pos, mask);
|
||||||
|
}
|
||||||
|
|
||||||
|
// CTB Specific
|
||||||
|
|
||||||
|
|
||||||
|
Result<int> Detector::getNumberOfDigitalSamples(Positions pos) const {
|
||||||
|
return pimpl->Parallel(&slsDetector::getNumberOfDigitalSamples, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Detector::setNumberOfDigitalSamples(int value, Positions pos) {
|
||||||
|
pimpl->Parallel(&slsDetector::setNumberOfDigitalSamples, pos, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
Result<defs::readoutMode> Detector::getReadoutMode(Positions pos) const {
|
||||||
|
return pimpl->Parallel(&slsDetector::getReadoutMode, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Detector::setReadoutMode(defs::readoutMode value, Positions pos) {
|
||||||
|
pimpl->Parallel(&slsDetector::setReadoutMode, pos, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
Result<int> Detector::getDBITClock(Positions pos) const {
|
||||||
|
return pimpl->Parallel(&slsDetector::getClockFrequency, pos,
|
||||||
|
defs::DBIT_CLOCK);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Detector::setDBITClock(int value_in_MHz, Positions pos) {
|
||||||
|
pimpl->Parallel(&slsDetector::setClockFrequency, pos, defs::DBIT_CLOCK,
|
||||||
|
value_in_MHz);
|
||||||
|
}
|
||||||
|
|
||||||
|
Result<int> Detector::getDBITPhase(Positions pos) const {
|
||||||
|
return pimpl->Parallel(&slsDetector::getClockPhase, pos, defs::DBIT_CLOCK,
|
||||||
|
false);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Detector::setDBITPhase(int value, Positions pos) {
|
||||||
|
pimpl->Parallel(&slsDetector::setClockPhase, pos, defs::DBIT_CLOCK, value,
|
||||||
|
false);
|
||||||
|
}
|
||||||
|
|
||||||
|
Result<int> Detector::getMaxDBITPhaseShift(Positions pos) const {
|
||||||
|
return pimpl->Parallel(&slsDetector::getMaxClockPhaseShift, pos,
|
||||||
|
defs::DBIT_CLOCK);
|
||||||
|
}
|
||||||
|
|
||||||
|
Result<int> Detector::getDBITPhaseInDegrees(Positions pos) const {
|
||||||
|
return pimpl->Parallel(&slsDetector::getClockPhase, pos, defs::DBIT_CLOCK,
|
||||||
|
true);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Detector::setDBITPhaseInDegrees(int value, Positions pos) {
|
||||||
|
pimpl->Parallel(&slsDetector::setClockPhase, pos, defs::DBIT_CLOCK, value,
|
||||||
|
true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Detector::setDBITPipeline(int value, Positions pos) {
|
||||||
|
pimpl->Parallel(&slsDetector::setPipeline, pos, defs::DBIT_CLOCK, value);
|
||||||
|
}
|
||||||
|
|
||||||
Result<int> Detector::getMeasuredVoltage(defs::dacIndex index,
|
Result<int> Detector::getMeasuredVoltage(defs::dacIndex index,
|
||||||
Positions pos) const {
|
Positions pos) const {
|
||||||
switch (index) {
|
switch (index) {
|
||||||
@ -1402,30 +1423,6 @@ Result<int> Detector::getSlowADC(defs::dacIndex index, Positions pos) const {
|
|||||||
return pimpl->Parallel(&slsDetector::getADC, pos, index);
|
return pimpl->Parallel(&slsDetector::getADC, pos, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<uint32_t> Detector::getADCEnableMask(Positions pos) const {
|
|
||||||
return pimpl->Parallel(&slsDetector::getADCEnableMask, pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Detector::setADCEnableMask(uint32_t mask, Positions pos) {
|
|
||||||
pimpl->Parallel(&slsDetector::setADCEnableMask, pos, mask);
|
|
||||||
}
|
|
||||||
|
|
||||||
Result<uint32_t> Detector::getTenGigaADCEnableMask(Positions pos) const {
|
|
||||||
return pimpl->Parallel(&slsDetector::getTenGigaADCEnableMask, pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Detector::setTenGigaADCEnableMask(uint32_t mask, Positions pos) {
|
|
||||||
pimpl->Parallel(&slsDetector::setTenGigaADCEnableMask, pos, mask);
|
|
||||||
}
|
|
||||||
|
|
||||||
Result<uint32_t> Detector::getADCInvert(Positions pos) const {
|
|
||||||
return pimpl->Parallel(&slsDetector::getADCInvert, pos);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Detector::setADCInvert(uint32_t value, Positions pos) {
|
|
||||||
pimpl->Parallel(&slsDetector::setADCInvert, pos, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
Result<int> Detector::getExternalSamplingSource(Positions pos) const {
|
Result<int> Detector::getExternalSamplingSource(Positions pos) const {
|
||||||
return pimpl->Parallel(&slsDetector::getExternalSamplingSource, pos);
|
return pimpl->Parallel(&slsDetector::getExternalSamplingSource, pos);
|
||||||
}
|
}
|
||||||
@ -1747,6 +1744,14 @@ void Detector::setInitialChecks(const bool value) {
|
|||||||
pimpl->setInitialChecks(value);
|
pimpl->setInitialChecks(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Result<uint32_t> Detector::getADCInvert(Positions pos) const {
|
||||||
|
return pimpl->Parallel(&slsDetector::getADCInvert, pos);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Detector::setADCInvert(uint32_t value, Positions pos) {
|
||||||
|
pimpl->Parallel(&slsDetector::setADCInvert, pos, value);
|
||||||
|
}
|
||||||
|
|
||||||
// Insignificant
|
// Insignificant
|
||||||
|
|
||||||
Result<int> Detector::getControlPort(Positions pos) const {
|
Result<int> Detector::getControlPort(Positions pos) const {
|
||||||
|
@ -557,7 +557,7 @@ void DetectorImpl::readFrameFromReceiver() {
|
|||||||
uint32_t yoffset = coordY * nPixelsY;
|
uint32_t yoffset = coordY * nPixelsY;
|
||||||
uint32_t singledetrowoffset = nPixelsX * bytesPerPixel;
|
uint32_t singledetrowoffset = nPixelsX * bytesPerPixel;
|
||||||
uint32_t rowoffset = nX * singledetrowoffset;
|
uint32_t rowoffset = nX * singledetrowoffset;
|
||||||
if (multi_shm()->multiDetectorType == CHIPTESTBOARD) {
|
if (multi_shm()->multiDetectorType == MOENCH) {
|
||||||
singledetrowoffset = size;
|
singledetrowoffset = size;
|
||||||
nPixelsY = 1; // TODO: nDetPixelsY is not updated.
|
nPixelsY = 1; // TODO: nDetPixelsY is not updated.
|
||||||
}
|
}
|
||||||
@ -1070,6 +1070,7 @@ std::vector<char> DetectorImpl::readProgrammingFile(const std::string &fname) {
|
|||||||
switch (multi_shm()->multiDetectorType) {
|
switch (multi_shm()->multiDetectorType) {
|
||||||
case JUNGFRAU:
|
case JUNGFRAU:
|
||||||
case CHIPTESTBOARD:
|
case CHIPTESTBOARD:
|
||||||
|
case MOENCH:
|
||||||
if (fname.find(".pof") == std::string::npos) {
|
if (fname.find(".pof") == std::string::npos) {
|
||||||
throw RuntimeError("Programming file must be a pof file.");
|
throw RuntimeError("Programming file must be a pof file.");
|
||||||
}
|
}
|
||||||
|
@ -336,6 +336,7 @@ void slsDetector::initializeDetectorStructure(detectorType type) {
|
|||||||
shm()->roMode = ANALOG_ONLY;
|
shm()->roMode = ANALOG_ONLY;
|
||||||
shm()->currentSettings = UNINITIALIZED;
|
shm()->currentSettings = UNINITIALIZED;
|
||||||
shm()->currentThresholdEV = -1;
|
shm()->currentThresholdEV = -1;
|
||||||
|
shm()->nASamples = 1;
|
||||||
shm()->nFrames = 1;
|
shm()->nFrames = 1;
|
||||||
shm()->nTriggers = 1;
|
shm()->nTriggers = 1;
|
||||||
shm()->nBursts = 1;
|
shm()->nBursts = 1;
|
||||||
@ -557,8 +558,8 @@ slsDetectorDefs::detectorType slsDetector::getDetectorType() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void slsDetector::updateNumberOfChannels() {
|
void slsDetector::updateNumberOfChannels() {
|
||||||
if (shm()->myDetectorType == CHIPTESTBOARD ||
|
|
||||||
shm()->myDetectorType == MOENCH) {
|
if (shm()->myDetectorType == CHIPTESTBOARD) {
|
||||||
|
|
||||||
int nachans = 0, ndchans = 0;
|
int nachans = 0, ndchans = 0;
|
||||||
// analog channels (normal, analog/digital readout)
|
// analog channels (normal, analog/digital readout)
|
||||||
@ -577,15 +578,29 @@ void slsDetector::updateNumberOfChannels() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// digital channels (ctb only, digital, analog/digital readout)
|
// digital channels (ctb only, digital, analog/digital readout)
|
||||||
if (shm()->myDetectorType == CHIPTESTBOARD &&
|
if (shm()->roMode == DIGITAL_ONLY ||
|
||||||
(shm()->roMode == DIGITAL_ONLY ||
|
shm()->roMode == ANALOG_AND_DIGITAL) {
|
||||||
shm()->roMode == ANALOG_AND_DIGITAL)) {
|
|
||||||
ndchans = 64;
|
ndchans = 64;
|
||||||
FILE_LOG(logDEBUG1) << "#Digital Channels:" << ndchans;
|
FILE_LOG(logDEBUG1) << "#Digital Channels:" << ndchans;
|
||||||
}
|
}
|
||||||
shm()->nChan.x = nachans + ndchans;
|
shm()->nChan.x = nachans + ndchans;
|
||||||
FILE_LOG(logDEBUG1) << "# Total #Channels:" << shm()->nChan.x;
|
FILE_LOG(logDEBUG1) << "# Total #Channels:" << shm()->nChan.x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
else if (shm()->myDetectorType == MOENCH) {
|
||||||
|
uint32_t mask = shm()->tenGigaEnable ? shm()->adcEnableMaskTenGiga : shm()->adcEnableMaskOneGiga;
|
||||||
|
// count number of channels in x, each adc has 25 channels each
|
||||||
|
int nchanTop = __builtin_popcount(mask & 0xF0F0F0F0) * 25;
|
||||||
|
int nchanBot = __builtin_popcount(mask & 0x0F0F0F0F) * 25;
|
||||||
|
shm()->nChan.x = nchanTop > 0 ? nchanTop : nchanBot;
|
||||||
|
// if both top and bottom adcs enabled, rows = 2
|
||||||
|
int nrows = 1;
|
||||||
|
if (nchanTop > 0 && nchanBot > 0) {
|
||||||
|
nrows = 2;
|
||||||
|
}
|
||||||
|
shm()->nChan.y = shm()->nASamples / 25 * nrows;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
slsDetectorDefs::xy slsDetector::getNumberOfChannels() const {
|
slsDetectorDefs::xy slsDetector::getNumberOfChannels() const {
|
||||||
@ -807,11 +822,18 @@ void slsDetector::updateCachedDetectorVariables() {
|
|||||||
shm()->tenGigaEnable = static_cast<bool>(i32);
|
shm()->tenGigaEnable = static_cast<bool>(i32);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// analog samples and adc enable masks
|
||||||
if (shm()->myDetectorType == CHIPTESTBOARD ||
|
if (shm()->myDetectorType == CHIPTESTBOARD ||
|
||||||
shm()->myDetectorType == MOENCH) {
|
shm()->myDetectorType == MOENCH) {
|
||||||
// 1gb adcmask
|
|
||||||
|
// analog samples
|
||||||
uint32_t u32 = 0;
|
uint32_t u32 = 0;
|
||||||
n += client.Receive(&u32, sizeof(u32));
|
n += client.Receive(&u32, sizeof(u32));
|
||||||
|
shm()->nASamples = u32;
|
||||||
|
|
||||||
|
// 1gb adcmask
|
||||||
|
u32 = 0;
|
||||||
|
n += client.Receive(&u32, sizeof(u32));
|
||||||
shm()->adcEnableMaskOneGiga = u32;
|
shm()->adcEnableMaskOneGiga = u32;
|
||||||
|
|
||||||
// 10gb adcmask
|
// 10gb adcmask
|
||||||
@ -1321,6 +1343,7 @@ int slsDetector::getNumberOfAnalogSamples() {
|
|||||||
void slsDetector::setNumberOfAnalogSamples(int value) {
|
void slsDetector::setNumberOfAnalogSamples(int value) {
|
||||||
FILE_LOG(logDEBUG1) << "Setting number of analog samples to " << value;
|
FILE_LOG(logDEBUG1) << "Setting number of analog samples to " << value;
|
||||||
sendToDetector(F_SET_NUM_ANALOG_SAMPLES, value, nullptr);
|
sendToDetector(F_SET_NUM_ANALOG_SAMPLES, value, nullptr);
|
||||||
|
shm()->nASamples = value;
|
||||||
// update #nchan, as it depends on #samples, adcmask
|
// update #nchan, as it depends on #samples, adcmask
|
||||||
updateNumberOfChannels();
|
updateNumberOfChannels();
|
||||||
if (shm()->useReceiverFlag) {
|
if (shm()->useReceiverFlag) {
|
||||||
@ -1836,7 +1859,6 @@ std::string slsDetector::setReceiverHostname(const std::string &receiverIP) {
|
|||||||
|
|
||||||
case MOENCH:
|
case MOENCH:
|
||||||
setNumberOfAnalogSamples(getNumberOfAnalogSamples());
|
setNumberOfAnalogSamples(getNumberOfAnalogSamples());
|
||||||
setNumberOfDigitalSamples(getNumberOfDigitalSamples());
|
|
||||||
enableTenGigabitEthernet(static_cast<int>(shm()->tenGigaEnable));
|
enableTenGigabitEthernet(static_cast<int>(shm()->tenGigaEnable));
|
||||||
setADCEnableMask(shm()->adcEnableMaskOneGiga);
|
setADCEnableMask(shm()->adcEnableMaskOneGiga);
|
||||||
setTenGigaADCEnableMask(shm()->adcEnableMaskTenGiga);
|
setTenGigaADCEnableMask(shm()->adcEnableMaskTenGiga);
|
||||||
@ -2974,6 +2996,7 @@ void slsDetector::programFPGA(std::vector<char> buffer) {
|
|||||||
switch (shm()->myDetectorType) {
|
switch (shm()->myDetectorType) {
|
||||||
case JUNGFRAU:
|
case JUNGFRAU:
|
||||||
case CHIPTESTBOARD:
|
case CHIPTESTBOARD:
|
||||||
|
case MOENCH:
|
||||||
programFPGAviaBlackfin(buffer);
|
programFPGAviaBlackfin(buffer);
|
||||||
break;
|
break;
|
||||||
case MYTHEN3:
|
case MYTHEN3:
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
class ServerInterface;
|
class ServerInterface;
|
||||||
|
|
||||||
#define SLS_SHMAPIVERSION 0x190726
|
#define SLS_SHMAPIVERSION 0x190726
|
||||||
#define SLS_SHMVERSION 0x200225
|
#define SLS_SHMVERSION 0x200302
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @short structure allocated in shared memory to store detector settings for
|
* @short structure allocated in shared memory to store detector settings for
|
||||||
@ -80,6 +80,9 @@ struct sharedSlsDetector {
|
|||||||
/** detector threshold (eV) */
|
/** detector threshold (eV) */
|
||||||
int currentThresholdEV;
|
int currentThresholdEV;
|
||||||
|
|
||||||
|
/** number of analog samples */
|
||||||
|
int nASamples;
|
||||||
|
|
||||||
/** number of frames */
|
/** number of frames */
|
||||||
int64_t nFrames;
|
int64_t nFrames;
|
||||||
|
|
||||||
@ -295,7 +298,7 @@ class slsDetector : public virtual slsDetectorDefs {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Update total number of channels (chiptestboard or moench)
|
* Update total number of channels (chiptestboard or moench)
|
||||||
* depending on the number of samples, adenablemask, readout flags(ctb)
|
* depending on the number of samples, adcenablemask, readout flags(ctb)
|
||||||
*/
|
*/
|
||||||
void updateNumberOfChannels();
|
void updateNumberOfChannels();
|
||||||
|
|
||||||
@ -554,10 +557,10 @@ class slsDetector : public virtual slsDetectorDefs {
|
|||||||
/** [Jungfrau] Advanced */
|
/** [Jungfrau] Advanced */
|
||||||
void setNumberOfAdditionalStorageCells(int value);
|
void setNumberOfAdditionalStorageCells(int value);
|
||||||
|
|
||||||
/** [CTB] */
|
/** [CTB][Moench] */
|
||||||
int getNumberOfAnalogSamples();
|
int getNumberOfAnalogSamples();
|
||||||
|
|
||||||
/** [CTB] */
|
/** [CTB][Moench] */
|
||||||
void setNumberOfAnalogSamples(int value);
|
void setNumberOfAnalogSamples(int value);
|
||||||
|
|
||||||
/** [CTB] */
|
/** [CTB] */
|
||||||
@ -574,10 +577,10 @@ class slsDetector : public virtual slsDetectorDefs {
|
|||||||
|
|
||||||
void setPeriod(int64_t value);
|
void setPeriod(int64_t value);
|
||||||
|
|
||||||
/** [Gotthard][Jungfrau][CTB][Mythen3][Gotthard2] */
|
/** [Gotthard][Jungfrau][CTB][Moench][Mythen3][Gotthard2] */
|
||||||
int64_t getDelayAfterTrigger();
|
int64_t getDelayAfterTrigger();
|
||||||
|
|
||||||
/** [Gotthard][Jungfrau][CTB][Mythen3][Gotthard2] */
|
/** [Gotthard][Jungfrau][CTB][Moench][Mythen3][Gotthard2] */
|
||||||
void setDelayAfterTrigger(int64_t value);
|
void setDelayAfterTrigger(int64_t value);
|
||||||
|
|
||||||
/** [Gotthard2] only in burst mode and in auto timing mode */
|
/** [Gotthard2] only in burst mode and in auto timing mode */
|
||||||
@ -605,22 +608,22 @@ class slsDetector : public virtual slsDetectorDefs {
|
|||||||
* Options: (0-1638375 ns (resolution of 25ns) */
|
* Options: (0-1638375 ns (resolution of 25ns) */
|
||||||
void setStorageCellDelay(int64_t value);
|
void setStorageCellDelay(int64_t value);
|
||||||
|
|
||||||
/** [Gotthard][Jungfrau][CTB][Mythen3]
|
/** [Gotthard][Jungfrau][CTB][Moench][Mythen3]
|
||||||
* [Gotthard2] only in continuous mode */
|
* [Gotthard2] only in continuous mode */
|
||||||
int64_t getNumberOfFramesLeft() const;
|
int64_t getNumberOfFramesLeft() const;
|
||||||
|
|
||||||
/** [Gotthard][Jungfrau][CTB][Mythen3]
|
/** [Gotthard][Jungfrau][CTB][Moench][Mythen3]
|
||||||
* [Gotthard2] only in continuous mode */
|
* [Gotthard2] only in continuous mode */
|
||||||
int64_t getNumberOfTriggersLeft() const;
|
int64_t getNumberOfTriggersLeft() const;
|
||||||
|
|
||||||
/** [Gotthard][Jungfrau][CTB]
|
/** [Gotthard][Jungfrau][CTB][Moench]
|
||||||
* [Gotthard2] only in continuous mode */
|
* [Gotthard2] only in continuous mode */
|
||||||
int64_t getDelayAfterTriggerLeft() const;
|
int64_t getDelayAfterTriggerLeft() const;
|
||||||
|
|
||||||
/** [Gotthard] */
|
/** [Gotthard] */
|
||||||
int64_t getExptimeLeft() const;
|
int64_t getExptimeLeft() const;
|
||||||
|
|
||||||
/** [Gotthard][Jungfrau][CTB][Mythen3][Gotthard2] */
|
/** [Gotthard][Jungfrau][CTB][Moench][Mythen3][Gotthard2] */
|
||||||
int64_t getPeriodLeft() const;
|
int64_t getPeriodLeft() const;
|
||||||
|
|
||||||
/** [Eiger] minimum two frames */
|
/** [Eiger] minimum two frames */
|
||||||
@ -629,15 +632,15 @@ class slsDetector : public virtual slsDetectorDefs {
|
|||||||
/** [Eiger] */
|
/** [Eiger] */
|
||||||
int64_t getMeasuredSubFramePeriod() const;
|
int64_t getMeasuredSubFramePeriod() const;
|
||||||
|
|
||||||
/** [Jungfrau][CTB][Mythen3]
|
/** [Jungfrau][CTB][Moench][Mythen3]
|
||||||
* [Gotthard2] only in continuous mode */
|
* [Gotthard2] only in continuous mode */
|
||||||
int64_t getNumberOfFramesFromStart() const;
|
int64_t getNumberOfFramesFromStart() const;
|
||||||
|
|
||||||
/** [Jungfrau][CTB][Mythen3] Get time from detector start
|
/** [Jungfrau][CTB][Moench][Mythen3] Get time from detector start
|
||||||
* [Gotthard2] only in continuous mode */
|
* [Gotthard2] only in continuous mode */
|
||||||
int64_t getActualTime() const;
|
int64_t getActualTime() const;
|
||||||
|
|
||||||
/** [Jungfrau][CTB][Mythen3] Get timestamp at a frame start
|
/** [Jungfrau][CTB][Moench][Mythen3] Get timestamp at a frame start
|
||||||
* [Gotthard2] only in continuous mode */
|
* [Gotthard2] only in continuous mode */
|
||||||
int64_t getMeasurementTime() const;
|
int64_t getMeasurementTime() const;
|
||||||
|
|
||||||
@ -727,13 +730,13 @@ class slsDetector : public virtual slsDetectorDefs {
|
|||||||
bool getStoreInRamMode();
|
bool getStoreInRamMode();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set readout mode (Only for CTB and Moench)
|
* [Ctb]
|
||||||
* @param mode readout mode Options: ANALOG_ONLY, DIGITAL_ONLY, ANALOG_AND_DIGITAL
|
* @param mode readout mode Options: ANALOG_ONLY, DIGITAL_ONLY, ANALOG_AND_DIGITAL
|
||||||
*/
|
*/
|
||||||
void setReadoutMode(const readoutMode mode);
|
void setReadoutMode(const readoutMode mode);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get readout mode(Only for CTB and Moench)
|
* [Ctb]
|
||||||
* @returns readout mode
|
* @returns readout mode
|
||||||
*/
|
*/
|
||||||
readoutMode getReadoutMode();
|
readoutMode getReadoutMode();
|
||||||
@ -1117,10 +1120,10 @@ class slsDetector : public virtual slsDetectorDefs {
|
|||||||
*/
|
*/
|
||||||
int64_t getReceiverRealUDPSocketBufferSize() const;
|
int64_t getReceiverRealUDPSocketBufferSize() const;
|
||||||
|
|
||||||
/** [Gotthard][Jungfrau][CTB] */
|
/** [Gotthard][Jungfrau][CTB][Moench] */
|
||||||
void executeFirmwareTest();
|
void executeFirmwareTest();
|
||||||
|
|
||||||
/** [Gotthard][Jungfrau][CTB] */
|
/** [Gotthard][Jungfrau][CTB][Moench] */
|
||||||
void executeBusTest();
|
void executeBusTest();
|
||||||
|
|
||||||
/** [Gotthard] */
|
/** [Gotthard] */
|
||||||
@ -1222,14 +1225,14 @@ class slsDetector : public virtual slsDetectorDefs {
|
|||||||
uint32_t getTenGigaADCEnableMask();
|
uint32_t getTenGigaADCEnableMask();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set ADC invert register (CTB, Moench)
|
* Set ADC invert register (CTB, Moench, Jungfrau)
|
||||||
* @param value ADC invert value
|
* @param value ADC invert value
|
||||||
* @param detPos -1 for all detectors in list or specific detector position
|
* @param detPos -1 for all detectors in list or specific detector position
|
||||||
*/
|
*/
|
||||||
void setADCInvert(uint32_t value);
|
void setADCInvert(uint32_t value);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get ADC invert register (CTB, Moench)
|
* Get ADC invert register (CTB, Moench, Jungfrau)
|
||||||
* @param detPos -1 for all detectors in list or specific detector position
|
* @param detPos -1 for all detectors in list or specific detector position
|
||||||
* @returns ADC invert value
|
* @returns ADC invert value
|
||||||
*/
|
*/
|
||||||
|
@ -529,7 +529,7 @@ int ClientInterface::set_num_analog_samples(Interface &socket) {
|
|||||||
int ClientInterface::set_num_digital_samples(Interface &socket) {
|
int ClientInterface::set_num_digital_samples(Interface &socket) {
|
||||||
auto value = socket.Receive<int>();
|
auto value = socket.Receive<int>();
|
||||||
FILE_LOG(logDEBUG1) << "Setting num digital samples to " << value;
|
FILE_LOG(logDEBUG1) << "Setting num digital samples to " << value;
|
||||||
if (myDetectorType != CHIPTESTBOARD && myDetectorType != MOENCH) {
|
if (myDetectorType != CHIPTESTBOARD) {
|
||||||
functionNotImplemented();
|
functionNotImplemented();
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
@ -447,6 +447,7 @@ void DataProcessor::PadMissingPackets(char* buf) {
|
|||||||
memset(buf + fifohsize + (pnum * dsize), 0xFF, dsize+2);
|
memset(buf + fifohsize + (pnum * dsize), 0xFF, dsize+2);
|
||||||
break;
|
break;
|
||||||
case CHIPTESTBOARD:
|
case CHIPTESTBOARD:
|
||||||
|
case MOENCH:
|
||||||
if (pnum == (pperFrame-1))
|
if (pnum == (pperFrame-1))
|
||||||
memset(buf + fifohsize + (pnum * dsize), 0xFF, corrected_dsize);
|
memset(buf + fifohsize + (pnum * dsize), 0xFF, corrected_dsize);
|
||||||
else
|
else
|
||||||
|
@ -629,13 +629,6 @@ private:
|
|||||||
/** Number of bytes per analog channel */
|
/** Number of bytes per analog channel */
|
||||||
const int NUM_BYTES_PER_ANALOG_CHANNEL = 2;
|
const int NUM_BYTES_PER_ANALOG_CHANNEL = 2;
|
||||||
|
|
||||||
struct ctb_10g_packet_header {
|
|
||||||
unsigned char emptyHeader[6];
|
|
||||||
unsigned char reserved[4];
|
|
||||||
uint32_t packetFrameNumber;
|
|
||||||
uint64_t bunchid;
|
|
||||||
} __attribute__((packed));
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
||||||
@ -660,7 +653,7 @@ public:
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set databytes (ctb, moench)
|
* Set databytes
|
||||||
* @param a adc enable mask
|
* @param a adc enable mask
|
||||||
* @param as analog number of samples
|
* @param as analog number of samples
|
||||||
* @param ds digital number of samples
|
* @param ds digital number of samples
|
||||||
@ -700,50 +693,21 @@ public:
|
|||||||
|
|
||||||
nPixelsX = nachans + ndchans;
|
nPixelsX = nachans + ndchans;
|
||||||
nPixelsY = 1;
|
nPixelsY = 1;
|
||||||
|
|
||||||
// 10G
|
// 10G
|
||||||
if (t) {
|
if (t) {
|
||||||
headerSizeinPacket = sizeof(slsDetectorDefs::sls_detector_header);
|
|
||||||
dataSize = 8144;
|
dataSize = 8144;
|
||||||
packetSize = headerSizeinPacket + dataSize;
|
|
||||||
imageSize = adatabytes + ddatabytes;
|
|
||||||
packetsPerFrame = ceil((double)imageSize / (double)dataSize);
|
|
||||||
standardheader = true;
|
|
||||||
|
|
||||||
/*
|
|
||||||
headerSizeinPacket = 22;
|
|
||||||
dataSize = 8192;
|
|
||||||
packetSize = headerSizeinPacket + dataSize;
|
|
||||||
imageSize = adatabytes + ddatabytes;
|
|
||||||
packetsPerFrame = ceil((double)imageSize / (double)dataSize);
|
|
||||||
standardheader = false;
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
// 1g udp (via fifo readout)
|
// 1g udp (via fifo readout)
|
||||||
else {
|
else {
|
||||||
headerSizeinPacket = sizeof(slsDetectorDefs::sls_detector_header);
|
|
||||||
dataSize = UDP_PACKET_DATA_BYTES;
|
dataSize = UDP_PACKET_DATA_BYTES;
|
||||||
packetSize = headerSizeinPacket + dataSize;
|
|
||||||
imageSize = adatabytes + ddatabytes;
|
|
||||||
packetsPerFrame = ceil((double)imageSize / (double)dataSize);
|
|
||||||
standardheader = true;
|
|
||||||
}
|
}
|
||||||
return adatabytes;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
packetSize = headerSizeinPacket + dataSize;
|
||||||
* Get Header Infomation (frame number, packet number)
|
imageSize = adatabytes + ddatabytes;
|
||||||
* @param index thread index for debugging purposes
|
packetsPerFrame = ceil((double)imageSize / (double)dataSize);
|
||||||
* @param packetData pointer to data
|
|
||||||
* @param oddStartingPacket odd starting packet (gotthard)
|
return adatabytes;
|
||||||
* @param frameNumber frame number
|
|
||||||
* @param packetNumber packet number
|
|
||||||
*/
|
|
||||||
void GetHeaderInfo(int index, char* packetData, bool oddStartingPacket,
|
|
||||||
uint64_t& frameNumber, uint32_t& packetNumber) const
|
|
||||||
{
|
|
||||||
auto header = reinterpret_cast<ctb_10g_packet_header*>(packetData);
|
|
||||||
frameNumber = (header->packetFrameNumber >> frameIndexOffset) & frameIndexMask;
|
|
||||||
packetNumber = header->packetFrameNumber & packetIndexMask;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
@ -769,14 +733,14 @@ public:
|
|||||||
imageSize = nPixelsX * nPixelsY * 2;
|
imageSize = nPixelsX * nPixelsY * 2;
|
||||||
packetsPerFrame = ceil((double)imageSize / (double)UDP_PACKET_DATA_BYTES);
|
packetsPerFrame = ceil((double)imageSize / (double)UDP_PACKET_DATA_BYTES);
|
||||||
frameIndexMask = 0xFFFFFF;
|
frameIndexMask = 0xFFFFFF;
|
||||||
maxFramesPerFile = CTB_MAX_FRAMES_PER_FILE;
|
maxFramesPerFile = MOENCH_MAX_FRAMES_PER_FILE;
|
||||||
fifoBufferHeaderSize = FIFO_HEADER_NUMBYTES + sizeof(slsDetectorDefs::sls_receiver_header);
|
fifoBufferHeaderSize = FIFO_HEADER_NUMBYTES + sizeof(slsDetectorDefs::sls_receiver_header);
|
||||||
defaultFifoDepth = 2500;
|
defaultFifoDepth = 2500;
|
||||||
standardheader = true;
|
standardheader = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set databytes (ctb, moench)
|
* Set databytes
|
||||||
* @param a adc enable mask
|
* @param a adc enable mask
|
||||||
* @param as analog number of samples
|
* @param as analog number of samples
|
||||||
* @param ds digital number of samples
|
* @param ds digital number of samples
|
||||||
@ -785,41 +749,37 @@ public:
|
|||||||
* @returns analog data bytes
|
* @returns analog data bytes
|
||||||
*/
|
*/
|
||||||
int setImageSize(uint32_t a, uint32_t as, uint32_t ds, bool t, slsDetectorDefs::readoutMode) {
|
int setImageSize(uint32_t a, uint32_t as, uint32_t ds, bool t, slsDetectorDefs::readoutMode) {
|
||||||
int nachans = 0;
|
|
||||||
int adatabytes = 0;
|
|
||||||
|
|
||||||
// analog channels (normal, analog/digital readout)
|
// count number of channels in x, each adc has 25 channels each
|
||||||
if (a == BIT32_MASK) {
|
int nchanTop = __builtin_popcount(a & 0xF0F0F0F0) * 25;
|
||||||
nachans = 32;
|
int nchanBot = __builtin_popcount(a & 0x0F0F0F0F) * 25;
|
||||||
} else {
|
nPixelsX = nchanTop > 0 ? nchanTop : nchanBot;
|
||||||
for (int ich = 0; ich < 32; ++ich) {
|
|
||||||
if (a & (1 << ich))
|
// if both top and bottom adcs enabled, rows = 2
|
||||||
++nachans;
|
int nrows = 1;
|
||||||
}
|
if (nchanTop > 0 && nchanBot > 0) {
|
||||||
}
|
nrows = 2;
|
||||||
adatabytes = nachans * NUM_BYTES_PER_ANALOG_CHANNEL * as;
|
}
|
||||||
FILE_LOG(logDEBUG1) << "Total Number of Channels:" << nachans
|
nPixelsY = as / 25 * nrows;
|
||||||
<< " Databytes: " << adatabytes;
|
FILE_LOG(logINFO) << "Number of Pixels: [" << nPixelsX << ", " << nPixelsY << "]";
|
||||||
|
|
||||||
|
|
||||||
nPixelsX = nachans;
|
|
||||||
nPixelsY = 1;
|
|
||||||
// 10G
|
// 10G
|
||||||
if (t) {
|
if (t) {
|
||||||
headerSizeinPacket = sizeof(slsDetectorDefs::sls_detector_header);
|
dataSize = 8144;
|
||||||
dataSize = UDP_PACKET_DATA_BYTES;
|
|
||||||
packetSize = headerSizeinPacket + dataSize;
|
|
||||||
imageSize = adatabytes;
|
|
||||||
packetsPerFrame = ceil((double)imageSize / (double)dataSize);
|
|
||||||
}
|
}
|
||||||
// 1g udp (via fifo readout)
|
// 1g udp (via fifo readout)
|
||||||
else {
|
else {
|
||||||
headerSizeinPacket = sizeof(slsDetectorDefs::sls_detector_header);
|
dataSize = UDP_PACKET_DATA_BYTES;
|
||||||
dataSize = UDP_PACKET_DATA_BYTES;
|
|
||||||
packetSize = headerSizeinPacket + dataSize;
|
|
||||||
imageSize = adatabytes;
|
|
||||||
packetsPerFrame = ceil((double)imageSize / (double)dataSize);
|
|
||||||
}
|
}
|
||||||
return adatabytes;
|
|
||||||
|
imageSize = nPixelsX * nPixelsY * NUM_BYTES_PER_ANALOG_CHANNEL;
|
||||||
|
packetSize = headerSizeinPacket + dataSize;
|
||||||
|
packetsPerFrame = ceil((double)imageSize / (double)dataSize);
|
||||||
|
|
||||||
|
FILE_LOG(logDEBUG) << "Databytes: " << imageSize;
|
||||||
|
|
||||||
|
return imageSize;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -332,6 +332,11 @@ class slsDetectorDefs {
|
|||||||
VB_PIXBUF,
|
VB_PIXBUF,
|
||||||
VIN_COM,
|
VIN_COM,
|
||||||
VDD_PROT,
|
VDD_PROT,
|
||||||
|
VBP_COLBUF,
|
||||||
|
VB_SDA,
|
||||||
|
VCASC_SFP,
|
||||||
|
VIPRE_CDS,
|
||||||
|
IBIAS_SFP,
|
||||||
V_POWER_A = 100,
|
V_POWER_A = 100,
|
||||||
V_POWER_B = 101,
|
V_POWER_B = 101,
|
||||||
V_POWER_C = 102,
|
V_POWER_C = 102,
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
/** API versions */
|
/** API versions */
|
||||||
#define GITBRANCH "developer"
|
#define GITBRANCH "developer"
|
||||||
#define APIMOENCH 0x200131
|
|
||||||
#define APIMYTHEN3 0x200226
|
#define APIMYTHEN3 0x200226
|
||||||
#define APIJUNGFRAU 0x200226
|
#define APIJUNGFRAU 0x200226
|
||||||
#define APIEIGER 0x200226
|
#define APIEIGER 0x200226
|
||||||
@ -10,3 +9,4 @@
|
|||||||
#define APIGUI 0x200227
|
#define APIGUI 0x200227
|
||||||
#define APICTB 0x200227
|
#define APICTB 0x200227
|
||||||
#define APIGOTTHARD2 0x200228
|
#define APIGOTTHARD2 0x200228
|
||||||
|
#define APIMOENCH 0x200302
|
||||||
|
Loading…
x
Reference in New Issue
Block a user