Readoutflags (#61)

* WIP

* eiger binary back wih versioning

* fixed readout flag in ctbgui, added speedLevel enum

* ctbgui: fixed a print out error

* ctb readout bug fix

* WIP

* WIP

* WIP
This commit is contained in:
Dhanya Thattil
2019-09-02 19:27:27 +02:00
committed by GitHub
parent 221bb65c0e
commit 5bcde789ac
39 changed files with 819 additions and 684 deletions

View File

@ -563,7 +563,7 @@ void setupDetector() {
setTimer(FRAME_PERIOD, DEFAULT_PERIOD);
setTimer(DELAY_AFTER_TRIGGER, DEFAULT_DELAY);
setTiming(DEFAULT_TIMING_MODE);
setReadOutFlags(NORMAL_READOUT);
setReadoutMode(ANALOG_ONLY);
// enable all ADC channels
setADCEnableMask(BIT_32_MSK);
@ -814,61 +814,51 @@ int getSpeed(enum speedVariable ind, int mode) {
}
}
enum readOutFlags setReadOutFlags(enum readOutFlags val) {
enum readOutFlags retval = GET_READOUT_FLAGS;
int setReadoutMode(enum readoutMode mode) {
uint32_t addr = CONFIG_REG;
// set
if (val != GET_READOUT_FLAGS) {
switch(val) {
case NORMAL_READOUT:
FILE_LOG(logINFO, ("Setting Normal Readout\n"));
bus_w(addr, bus_r(addr) & (~CONFIG_DSBL_ANLG_OTPT_MSK) & (~CONFIG_ENBLE_DGTL_OTPT_MSK));
break;
case DIGITAL_ONLY:
FILE_LOG(logINFO, ("Setting Digital Only Readout\n"));
bus_w(addr, bus_r(addr) | CONFIG_DSBL_ANLG_OTPT_MSK | CONFIG_ENBLE_DGTL_OTPT_MSK);
break;
case ANALOG_AND_DIGITAL:
FILE_LOG(logINFO, ("Setting Analog & Digital Readout\n"));
bus_w(addr, (bus_r(addr) & (~CONFIG_DSBL_ANLG_OTPT_MSK)) | CONFIG_ENBLE_DGTL_OTPT_MSK);
break;
default:
FILE_LOG(logERROR, ("Cannot set unknown readout flag. 0x%x\n", val));
return retval;
}
switch(mode) {
case ANALOG_ONLY:
FILE_LOG(logINFO, ("Setting Analog Only Readout\n"));
bus_w(addr, bus_r(addr) & (~CONFIG_DSBL_ANLG_OTPT_MSK) & (~CONFIG_ENBLE_DGTL_OTPT_MSK));
break;
case DIGITAL_ONLY:
FILE_LOG(logINFO, ("Setting Digital Only Readout\n"));
bus_w(addr, bus_r(addr) | CONFIG_DSBL_ANLG_OTPT_MSK | CONFIG_ENBLE_DGTL_OTPT_MSK);
break;
case ANALOG_AND_DIGITAL:
FILE_LOG(logINFO, ("Setting Analog & Digital Readout\n"));
bus_w(addr, (bus_r(addr) & (~CONFIG_DSBL_ANLG_OTPT_MSK)) | CONFIG_ENBLE_DGTL_OTPT_MSK);
break;
default:
FILE_LOG(logERROR, ("Cannot set unknown readout flag. 0x%x\n", mode));
return FAIL;
}
// get
uint32_t regval = bus_r(addr);
FILE_LOG(logDEBUG1, ("Config Reg: 0x%08x\n", regval));
// this bit reads analog disable, so inverse
analogEnable = (((regval & CONFIG_DSBL_ANLG_OTPT_MSK) >> CONFIG_DSBL_ANLG_OTPT_OFST) ? 0 : 1);
digitalEnable = ((regval & CONFIG_ENBLE_DGTL_OTPT_MSK) >> CONFIG_ENBLE_DGTL_OTPT_OFST);
if (analogEnable && digitalEnable) {
retval = ANALOG_AND_DIGITAL;
FILE_LOG(logDEBUG1, ("Getting readout: Analog & Digital 0x%x\n", retval));
} else if (analogEnable && !digitalEnable) {
retval = NORMAL_READOUT;
FILE_LOG(logDEBUG1, ("Getting readout: Normal 0x%x\n", retval));
} else if (!analogEnable && digitalEnable) {
retval = DIGITAL_ONLY;
FILE_LOG(logDEBUG1, ("Getting readout: Digital Only 0x%x\n", retval));
} else {
FILE_LOG(logERROR, ("Read unknown readout (Both digital and analog are disabled). "
"Config reg: 0x%x\n", regval));
return retval;
}
// update databytes and allocate ram
if (allocateRAM() == FAIL) {
return -2;
return FAIL;
}
return retval;
return OK;
}
int getReadoutMode() {
if (analogEnable && digitalEnable) {
FILE_LOG(logDEBUG1, ("Getting readout: Analog & Digita\n"));
return ANALOG_AND_DIGITAL;
} else if (analogEnable && !digitalEnable) {
FILE_LOG(logDEBUG1, ("Getting readout: Analog Only\n"));
return ANALOG_ONLY;
} else if (!analogEnable && digitalEnable) {
FILE_LOG(logDEBUG1, ("Getting readout: Digital Only\n"));
return DIGITAL_ONLY;
} else {
FILE_LOG(logERROR, ("Read unknown readout (Both digital and analog are disabled)\n"));
return -1;
}
}
/* parameters - timer */
@ -1520,6 +1510,7 @@ int configureMAC(uint32_t destip, uint64_t destmac, uint64_t sourcemac, uint32_t
FILE_LOG(logINFOBLUE, ("Configuring MAC\n"));
// 1 giga udp
if (!enableTenGigabitEthernet(-1)) {
FILE_LOG(logINFOBLUE, ("Configuring 1G MAC\n"));
// if it was in 10G mode, it was not allocating RAM
if (allocateRAM() == FAIL)
return -1;
@ -1535,67 +1526,67 @@ int configureMAC(uint32_t destip, uint64_t destmac, uint64_t sourcemac, uint32_t
}
// 10 G
else {
uint32_t sourceport = DEFAULT_TX_UDP_PORT;
FILE_LOG(logINFOBLUE, ("Configuring 10G MAC\n"));
uint32_t sourceport = DEFAULT_TX_UDP_PORT;
FILE_LOG(logINFO, ("\tSource IP : %d.%d.%d.%d \t\t(0x%08x)\n",
(sourceip>>24)&0xff,(sourceip>>16)&0xff,(sourceip>>8)&0xff,(sourceip)&0xff, sourceip));
FILE_LOG(logINFO, ("\tSource MAC : %02x:%02x:%02x:%02x:%02x:%02x \t(0x%010llx)\n",
(unsigned int)((sourcemac>>40)&0xFF),
(unsigned int)((sourcemac>>32)&0xFF),
(unsigned int)((sourcemac>>24)&0xFF),
(unsigned int)((sourcemac>>16)&0xFF),
(unsigned int)((sourcemac>>8)&0xFF),
(unsigned int)((sourcemac>>0)&0xFF),
(long long unsigned int)sourcemac));
FILE_LOG(logINFO, ("\tSource Port : %d \t\t\t(0x%08x)\n",sourceport, sourceport));
FILE_LOG(logINFO, ("\tSource IP : %d.%d.%d.%d \t\t(0x%08x)\n",
(sourceip>>24)&0xff,(sourceip>>16)&0xff,(sourceip>>8)&0xff,(sourceip)&0xff, sourceip));
FILE_LOG(logINFO, ("\tSource MAC : %02x:%02x:%02x:%02x:%02x:%02x \t(0x%010llx)\n",
(unsigned int)((sourcemac>>40)&0xFF),
(unsigned int)((sourcemac>>32)&0xFF),
(unsigned int)((sourcemac>>24)&0xFF),
(unsigned int)((sourcemac>>16)&0xFF),
(unsigned int)((sourcemac>>8)&0xFF),
(unsigned int)((sourcemac>>0)&0xFF),
(long long unsigned int)sourcemac));
FILE_LOG(logINFO, ("\tSource Port : %d \t\t\t(0x%08x)\n",sourceport, sourceport));
FILE_LOG(logINFO, ("\tDest. IP : %d.%d.%d.%d \t\t(0x%08x)\n",
(destip>>24)&0xff,(destip>>16)&0xff,(destip>>8)&0xff,(destip)&0xff, destip));
FILE_LOG(logINFO, ("\tDest. MAC : %02x:%02x:%02x:%02x:%02x:%02x \t(0x%010llx)\n",
(unsigned int)((destmac>>40)&0xFF),
(unsigned int)((destmac>>32)&0xFF),
(unsigned int)((destmac>>24)&0xFF),
(unsigned int)((destmac>>16)&0xFF),
(unsigned int)((destmac>>8)&0xFF),
(unsigned int)((destmac>>0)&0xFF),
(long long unsigned int)destmac));
FILE_LOG(logINFO, ("\tDest. Port : %d \t\t\t(0x%08x)\n",udpport, udpport));
FILE_LOG(logINFO, ("\tDest. IP : %d.%d.%d.%d \t\t(0x%08x)\n",
(destip>>24)&0xff,(destip>>16)&0xff,(destip>>8)&0xff,(destip)&0xff, destip));
FILE_LOG(logINFO, ("\tDest. MAC : %02x:%02x:%02x:%02x:%02x:%02x \t(0x%010llx)\n",
(unsigned int)((destmac>>40)&0xFF),
(unsigned int)((destmac>>32)&0xFF),
(unsigned int)((destmac>>24)&0xFF),
(unsigned int)((destmac>>16)&0xFF),
(unsigned int)((destmac>>8)&0xFF),
(unsigned int)((destmac>>0)&0xFF),
(long long unsigned int)destmac));
FILE_LOG(logINFO, ("\tDest. Port : %d \t\t\t(0x%08x)\n",udpport, udpport));
long int checksum=calcChecksum(sourceip, destip);
bus_w(TX_IP_REG, sourceip);
bus_w(RX_IP_REG, destip);
long int checksum=calcChecksum(sourceip, destip);
bus_w(TX_IP_REG, sourceip);
bus_w(RX_IP_REG, destip);
uint32_t val = 0;
uint32_t val = 0;
val = ((sourcemac >> LSB_OF_64_BIT_REG_OFST) & BIT_32_MSK);
bus_w(TX_MAC_LSB_REG, val);
FILE_LOG(logDEBUG1, ("Read from TX_MAC_LSB_REG: 0x%08x\n", bus_r(TX_MAC_LSB_REG)));
val = ((sourcemac >> LSB_OF_64_BIT_REG_OFST) & BIT_32_MSK);
bus_w(TX_MAC_LSB_REG, val);
FILE_LOG(logDEBUG1, ("Read from TX_MAC_LSB_REG: 0x%08x\n", bus_r(TX_MAC_LSB_REG)));
val = ((sourcemac >> MSB_OF_64_BIT_REG_OFST) & BIT_32_MSK);
bus_w(TX_MAC_MSB_REG,val);
FILE_LOG(logDEBUG1, ("Read from TX_MAC_MSB_REG: 0x%08x\n", bus_r(TX_MAC_MSB_REG)));
val = ((sourcemac >> MSB_OF_64_BIT_REG_OFST) & BIT_32_MSK);
bus_w(TX_MAC_MSB_REG,val);
FILE_LOG(logDEBUG1, ("Read from TX_MAC_MSB_REG: 0x%08x\n", bus_r(TX_MAC_MSB_REG)));
val = ((destmac >> LSB_OF_64_BIT_REG_OFST) & BIT_32_MSK);
bus_w(RX_MAC_LSB_REG, val);
FILE_LOG(logDEBUG1, ("Read from RX_MAC_LSB_REG: 0x%08x\n", bus_r(RX_MAC_LSB_REG)));
val = ((destmac >> LSB_OF_64_BIT_REG_OFST) & BIT_32_MSK);
bus_w(RX_MAC_LSB_REG, val);
FILE_LOG(logDEBUG1, ("Read from RX_MAC_LSB_REG: 0x%08x\n", bus_r(RX_MAC_LSB_REG)));
val = ((destmac >> MSB_OF_64_BIT_REG_OFST) & BIT_32_MSK);
bus_w(RX_MAC_MSB_REG, val);
FILE_LOG(logDEBUG1, ("Read from RX_MAC_MSB_REG: 0x%08x\n", bus_r(RX_MAC_MSB_REG)));
val = ((destmac >> MSB_OF_64_BIT_REG_OFST) & BIT_32_MSK);
bus_w(RX_MAC_MSB_REG, val);
FILE_LOG(logDEBUG1, ("Read from RX_MAC_MSB_REG: 0x%08x\n", bus_r(RX_MAC_MSB_REG)));
val = (((sourceport << UDP_PORT_TX_OFST) & UDP_PORT_TX_MSK) |
((udpport << UDP_PORT_RX_OFST) & UDP_PORT_RX_MSK));
bus_w(UDP_PORT_REG, val);
FILE_LOG(logDEBUG1, ("Read from UDP_PORT_REG: 0x%08x\n", bus_r(UDP_PORT_REG)));
val = (((sourceport << UDP_PORT_TX_OFST) & UDP_PORT_TX_MSK) |
((udpport << UDP_PORT_RX_OFST) & UDP_PORT_RX_MSK));
bus_w(UDP_PORT_REG, val);
FILE_LOG(logDEBUG1, ("Read from UDP_PORT_REG: 0x%08x\n", bus_r(UDP_PORT_REG)));
bus_w(TX_IP_CHECKSUM_REG,(checksum << TX_IP_CHECKSUM_OFST) & TX_IP_CHECKSUM_MSK);
FILE_LOG(logDEBUG1, ("Read from TX_IP_CHECKSUM_REG: 0x%08x\n", bus_r(TX_IP_CHECKSUM_REG)));
bus_w(TX_IP_CHECKSUM_REG,(checksum << TX_IP_CHECKSUM_OFST) & TX_IP_CHECKSUM_MSK);
FILE_LOG(logDEBUG1, ("Read from TX_IP_CHECKSUM_REG: 0x%08x\n", bus_r(TX_IP_CHECKSUM_REG)));
cleanFifos();//FIXME: resetPerpheral() for ctb?
resetPeripheral();
usleep(WAIT_TIME_CONFIGURE_MAC); // todo maybe without
}
cleanFifos();//FIXME: resetPerpheral() for ctb?
resetPeripheral();
FILE_LOG(logINFO, ("Waiting for %d s for mac to be up\n", WAIT_TIME_CONFIGURE_MAC / (1000 * 1000)));
usleep(WAIT_TIME_CONFIGURE_MAC); // todo maybe without
return OK;
}

View File

@ -83,7 +83,7 @@ enum DACINDEX {D0, D1, D2, D3, D4, D5, D6, D7, D8, D9,
#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_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_1US_FOR_LOOP_CNT (50) // around 30 is 1 us in blackfin

View File

@ -3,13 +3,13 @@ main_inc = ../slsDetectorServer/include/
main_src = ../slsDetectorServer/src/
support_lib = ../../slsSupportLib/include/
CROSS = powerpc-4xx-softfloat-
BLACKFIN_CC = bfin-uclinux-gcc
CROSS = powerpc-4xx-softfloat-
CC = $(CROSS)gcc
CFLAGS += -Wall -DEIGERD -DSTOP_SERVER -I$(main_inc) -I$(support_lib) -I$(current_dir)#-DVERBOSEI #-DVERBOSE
LDLIBS += -lm
PROGS = eigerDetectorServer
DESTDIR ?= bin
DESTDIR = bin
INSTMODE = 0777
SRCS = slsDetectorFunctionList.c HardwareIO.c LocalLinkInterface.c FebInterface.c FebControl.c Beb.c
@ -17,7 +17,7 @@ SRCS += $(main_src)communication_funcs.c $(main_src)slsDetectorServer.c $(main_
OBJS = $(SRCS:.c=.o)
all: clean versioning $(PROGS) #hv9m_blackfin_server
all: clean versioning $(PROGS) #hv9m_blackfin_server
boot: $(OBJS)

View File

@ -56,7 +56,7 @@ int eiger_theo_highvoltage = 0;
int eiger_iodelay = 0;
int eiger_photonenergy = 0;
int eiger_dynamicrange = 0;
int eiger_readoutmode = 0;
int eiger_parallelmode = 0;
int eiger_storeinmem = 0;
int eiger_overflow32 = 0;
int eiger_readoutspeed = 0;
@ -439,9 +439,9 @@ void setupDetector() {
setTimer(CYCLES_NUMBER, DEFAULT_NUM_CYCLES);
setDynamicRange(DEFAULT_DYNAMIC_RANGE);
eiger_photonenergy = DEFAULT_PHOTON_ENERGY;
setReadOutFlags(DEFAULT_READOUT_MODE);
setReadOutFlags(DEFAULT_READOUT_STOREINRAM_MODE);
setReadOutFlags(DEFAULT_READOUT_OVERFLOW32_MODE);
setParallelMode(DEFAULT_PARALLEL_MODE);
setOverFlowMode(DEFAULT_READOUT_STOREINRAM_MODE);
setStoreInRamMode(DEFAULT_READOUT_OVERFLOW32_MODE);
setSpeed(CLOCK_DIVIDER, DEFAULT_CLK_SPEED);//clk_devider,half speed
setIODelay(DEFAULT_IO_DELAY);
setTiming(DEFAULT_TIMING_MODE);
@ -543,118 +543,45 @@ int getSpeed(enum speedVariable ind) {
return eiger_readoutspeed;
}
enum readOutFlags setReadOutFlags(enum readOutFlags val) {
enum readOutFlags retval = GET_READOUT_FLAGS;
if (val!=GET_READOUT_FLAGS) {
if (val&0xF0000) {
switch(val) {
case PARALLEL:
val=E_PARALLEL;
FILE_LOG(logDEBUG1, ("Setting Read out Flag: Parallel\n"));
break;
case NONPARALLEL:
val=E_NON_PARALLEL;
FILE_LOG(logDEBUG1, ("Setting Read out Flag: Non Parallel\n"));
break;
default:
FILE_LOG(logERROR, ("Cannot set unknown readout flag. 0x%x\n", val));
return -1;
}
int setParallelMode(int mode) {
mode = (mode == 0 ? E_NON_PARALLEL : E_PARALLEL);
#ifndef VIRTUAL
if (Feb_Control_SetReadoutMode(val))
#endif
eiger_readoutmode = val;
#ifndef VIRTUAL
else return -1;
#endif
}
else if (val&0xF00000) {
switch(val) {
case SHOW_OVERFLOW:
val=1;
FILE_LOG(logDEBUG1, ("Setting Read out Flag: Overflow in 32 bit mode\n"));
break;
case NOOVERFLOW:
val=0;
FILE_LOG(logDEBUG1, ("Setting Read out Flag: No overflow in 32 bit mode\n"));
break;
default:
FILE_LOG(logERROR, ("Cannot set unknown readout flag. 0x%x\n", val));
return -1;
}
#ifndef VIRTUAL
if (Beb_Set32bitOverflow(val) != -1)
#endif
eiger_overflow32 = val;
#ifndef VIRTUAL
else return -1;
#endif
}
else {
switch(val) {
case STORE_IN_RAM:
val=1;
FILE_LOG(logDEBUG1, ("Setting Read out Flag: Store in Ram\n"));
break;
case CONTINOUS_RO:
val=0;
FILE_LOG(logDEBUG1, ("Setting Read out Flag: Continuous Readout\n"));
break;
default:
FILE_LOG(logERROR, ("Cannot set unknown readout flag. 0x%x\n", val));
return -1;
}
eiger_storeinmem = val;
}
if (!Feb_Control_SetReadoutMode(mode)) {
return FAIL;
}
switch(eiger_readoutmode) {
case E_PARALLEL:
retval=PARALLEL;
break;
case E_NON_PARALLEL:
retval=NONPARALLEL;
break;
}
switch(eiger_overflow32) {
case 1:
retval|=SHOW_OVERFLOW;
break;
case 0:
retval|=NOOVERFLOW;
break;
}
switch(eiger_storeinmem) {
case 0:
retval|=CONTINOUS_RO;
break;
case 1:
retval|=STORE_IN_RAM;
break;
}
FILE_LOG(logDEBUG1, ("Read out Flag: 0x%x\n", retval));
return retval;
#endif
eiger_parallelmode = mode;
return OK;
}
int getParallelMode() {
return (eiger_parallelmode == E_PARALLEL ? 1 : 0);
}
int setOverFlowMode(int mode) {
mode = (mode == 0 ? 0 : 1);
#ifndef VIRTUAL
if (Beb_Set32bitOverflow(mode == 0 ? 0 : 1) == -1) {
return FAIL;
}
#endif
eiger_overflow32 = mode;
return OK;
}
int getOverFlowMode() {
return eiger_overflow32;
}
void setStoreInRamMode(int mode) {
mode = (mode == 0 ? 0 : 1);
FILE_LOG(logINFO, ("Setting Store in Ram mode to %d\n", mode));
eiger_storeinmem = mode;
}
int getStoreInRamMode() {
return eiger_storeinmem;
}
/* parameters - timer */

View File

@ -9,7 +9,6 @@
#define STATUS_ERROR 2
/* Enums */
enum CLK_SPEED_INDEX {FULL_SPEED, HALF_SPEED, QUARTER_SPEED};
enum DACINDEX {SVP,VTR,VRF,VRS,SVN,VTGSTV,VCMP_LL,VCMP_LR,CAL,VCMP_RL,RXB_RB,RXB_LB,VCMP_RR,VCP,VCN,VIS,VTHRESHOLD};
#define DEFAULT_DAC_VALS { \
0, /* SvP */ \
@ -31,7 +30,7 @@ enum DACINDEX {SVP,VTR,VRF,VRS,SVN,VTGSTV,VCMP_LL,VCMP_LR,CAL,VCMP_RL,RX
};
enum ADCINDEX {TEMP_FPGAEXT, TEMP_10GE, TEMP_DCDC, TEMP_SODL, TEMP_SODR, TEMP_FPGA, TEMP_FPGAFEBL, TEMP_FPGAFEBR};
enum NETWORKINDEX {TXN_LEFT, TXN_RIGHT, TXN_FRAME,FLOWCTRL_10G};
enum {E_PARALLEL, E_NON_PARALLEL, E_SAFE};
enum {E_PARALLEL, E_NON_PARALLEL};
/* Hardware Definitions */
#define NCHAN (256 * 256)
@ -62,9 +61,9 @@ enum {E_PARALLEL, E_NON_PARALLEL, E_SAFE};
#define DEFAULT_SUBFRAME_DEADTIME (0)
#define DEFAULT_DYNAMIC_RANGE (16)
#define DEFAULT_READOUT_MODE (NONPARALLEL)
#define DEFAULT_READOUT_STOREINRAM_MODE (CONTINOUS_RO)
#define DEFAULT_READOUT_OVERFLOW32_MODE (NOOVERFLOW)
#define DEFAULT_PARALLEL_MODE (0)
#define DEFAULT_READOUT_STOREINRAM_MODE (0)
#define DEFAULT_READOUT_OVERFLOW32_MODE (0)
#define DEFAULT_CLK_SPEED (HALF_SPEED)
#define DEFAULT_IO_DELAY (650)
#define DEFAULT_TIMING_MODE (AUTO_TIMING)

View File

@ -37,7 +37,6 @@ typedef struct udp_header_struct {
/* Enums */
enum CLK_SPEED_INDEX {FULL_SPEED, HALF_SPEED, QUARTER_SPEED};
enum ADCINDEX {TEMP_FPGA, TEMP_ADC};
enum DACINDEX {VB_COMP, VDD_PROT, VIN_COM, VREF_PRECH, VB_PIXBUF, VB_DS, VREF_DS, VREF_COMP };
#define DEFAULT_DAC_VALS { 1220, /* VB_COMP */ \

View File

@ -47,6 +47,7 @@ static inline void FILELOG_PrintLog(enum TLogLevel level, char* m) {
case logDEBUG4: cprintf(MAGENTA, "DEBUG4: %s", m); break;
case logDEBUG5: cprintf(MAGENTA, "DEBUG5: %s", m); break;
}
fflush(stdout);
}
static inline char* FILELOG_BuildLog(const char* fmt, ...) {

View File

@ -138,9 +138,20 @@ int getSpeed(enum speedVariable ind);
#endif
#endif
#if defined(EIGERD) || defined(CHIPTESTBOARDD)
enum readOutFlags setReadOutFlags(enum readOutFlags val);
#ifdef EIGERD
int setParallelMode(int mode);
int getParallelMode();
int setOverFlowMode(int mode);
int getOverFlowMode();
void setStoreInRamMode(int mode);
int getStoreInRamMode();
#endif
#ifdef CHIPTESTBOARDD
int setReadoutMode(enum readoutMode mode);
int getReadoutMode();
#endif
// parameters - timer
#ifdef JUNGFRAUD

View File

@ -47,7 +47,6 @@ int read_all(int);
int set_timer(int);
int get_time_left(int);
int set_dynamic_range(int);
int set_readout_flags(int);
int set_roi(int);
int get_roi(int);
int set_speed(int);
@ -109,3 +108,11 @@ int set_interrupt_subframe(int);
int get_interrupt_subframe(int);
int set_read_n_lines(int);
int get_read_n_lines(int);
int set_parallel_mode(int);
int get_parallel_mode(int);
int set_overflow_mode(int);
int get_overflow_mode(int);
int set_storeinram(int);
int get_storeinram(int);
int set_readout_mode(int);
int get_readout_mode(int);

View File

@ -191,7 +191,6 @@ const char* getFunctionName(enum detFuncs func) {
case F_SET_TIMER: return "F_SET_TIMER";
case F_GET_TIME_LEFT: return "F_GET_TIME_LEFT";
case F_SET_DYNAMIC_RANGE: return "F_SET_DYNAMIC_RANGE";
case F_SET_READOUT_FLAGS: return "F_SET_READOUT_FLAGS";
case F_SET_ROI: return "F_SET_ROI";
case F_GET_ROI: return "F_GET_ROI";
case F_SET_SPEED: return "F_SET_SPEED";
@ -251,6 +250,14 @@ const char* getFunctionName(enum detFuncs func) {
case F_GET_INTERRUPT_SUBFRAME: return "F_GET_INTERRUPT_SUBFRAME";
case F_SET_READ_N_LINES: return "F_SET_READ_N_LINES";
case F_GET_READ_N_LINES: return "F_GET_READ_N_LINES";
case F_SET_PARALLEL_MODE: return "F_SET_PARALLEL_MODE";
case F_GET_PARALLEL_MODE: return "F_GET_PARALLEL_MODE";
case F_SET_OVERFLOW_MODE: return "F_SET_OVERFLOW_MODE";
case F_GET_OVERFLOW_MODE: return "F_GET_OVERFLOW_MODE";
case F_SET_STOREINRAM_MODE: return "F_SET_STOREINRAM_MODE";
case F_GET_STOREINRAM_MODE: return "F_GET_STOREINRAM_MODE";
case F_SET_READOUT_MODE: return "F_SET_READOUT_MODE";
case F_GET_READOUT_MODE: return "F_GET_READOUT_MODE";
default: return "Unknown Function";
}
}
@ -279,7 +286,6 @@ void function_table() {
flist[F_SET_TIMER] = &set_timer;
flist[F_GET_TIME_LEFT] = &get_time_left;
flist[F_SET_DYNAMIC_RANGE] = &set_dynamic_range;
flist[F_SET_READOUT_FLAGS] = &set_readout_flags;
flist[F_SET_ROI] = &set_roi;
flist[F_GET_ROI] = &get_roi;
flist[F_SET_SPEED] = &set_speed;
@ -339,6 +345,14 @@ void function_table() {
flist[F_GET_INTERRUPT_SUBFRAME] = &get_interrupt_subframe;
flist[F_SET_READ_N_LINES] = &set_read_n_lines;
flist[F_GET_READ_N_LINES] = &get_read_n_lines;
flist[F_SET_PARALLEL_MODE] = &set_parallel_mode;
flist[F_GET_PARALLEL_MODE] = &get_parallel_mode;
flist[F_SET_OVERFLOW_MODE] = &set_overflow_mode;
flist[F_GET_OVERFLOW_MODE] = &get_overflow_mode;
flist[F_SET_STOREINRAM_MODE] = &set_storeinram;
flist[F_GET_STOREINRAM_MODE] = &get_storeinram;
flist[F_SET_READOUT_MODE] = &set_readout_mode;
flist[F_GET_READOUT_MODE] = &get_readout_mode;
// check
if (NUM_DET_FUNCTIONS >= RECEIVER_ENUM_START) {
@ -1863,60 +1877,6 @@ int set_dynamic_range(int file_des) {
int set_readout_flags(int file_des) {
ret = OK;
memset(mess, 0, sizeof(mess));
enum readOutFlags arg = GET_READOUT_FLAGS;
enum readOutFlags retval = GET_READOUT_FLAGS;
if (receiveData(file_des, &arg, sizeof(arg), INT32) < 0)
return printSocketReadError();
FILE_LOG(logDEBUG1, ("Setting readout flags to %d\n", arg));
#if defined(JUNGFRAUD) || defined(GOTTHARDD) || defined(MOENCHD) || defined(MYTHEN3D) || defined(GOTTHARD2D)
functionNotImplemented();
#else
// set & get
if ((arg == GET_READOUT_FLAGS) || (Server_VerifyLock() == OK)) {
switch(arg) {
case GET_READOUT_FLAGS:
#ifdef EIGERD
case STORE_IN_RAM:
case CONTINOUS_RO:
case PARALLEL:
case NONPARALLEL:
case SHOW_OVERFLOW:
case NOOVERFLOW:
#elif CHIPTESTBOARDD
case NORMAL_READOUT:
case DIGITAL_ONLY:
case ANALOG_AND_DIGITAL:
#endif
retval = setReadOutFlags(arg);
FILE_LOG(logDEBUG1, ("Read out flags: 0x%x\n", retval));
validate((int)arg, (int)(retval & arg), "set readout flag", HEX);
#if defined(CHIPTESTBOARDD) || defined(MOENCHD)
if (retval == -2) {
ret = FAIL;
sprintf(mess, "Readout Flags failed. Cannot allocate RAM\n");
FILE_LOG(logERROR,(mess));
}
#endif
break;
default:
modeNotImplemented("Read out flag index", (int)arg);
break;
}
}
#endif
return Server_SendResult(file_des, INT32, UPDATE, &retval, sizeof(retval));
}
int set_roi(int file_des) {
ret = OK;
@ -2273,8 +2233,8 @@ int send_update(int file_des) {
if (n < 0) return printSocketReadError();
// readout flags
#if defined(EIGERD) || defined(CHIPTESTBOARDD)
i32 = setReadOutFlags(GET_READOUT_FLAGS);
#ifdef CHIPTESTBOARDD
i32 = getReadoutMode();
n = sendData(file_des,&i32,sizeof(i32),INT32);
if (n < 0) return printSocketReadError();
#endif
@ -4151,3 +4111,211 @@ int get_read_n_lines(int file_des) {
return Server_SendResult(file_des, INT32, UPDATE, &retval, sizeof(retval));
}
int set_parallel_mode(int file_des) {
ret = OK;
memset(mess, 0, sizeof(mess));
int arg = 0;
if (receiveData(file_des, &arg, sizeof(arg), INT32) < 0)
return printSocketReadError();
FILE_LOG(logINFO, ("Setting parallel mode: %u\n", arg));
#ifndef EIGERD
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
if(setParallelMode(arg) == FAIL) {
ret = FAIL;
sprintf(mess, "Could not set parallel mode\n");
FILE_LOG(logERROR,(mess));
} else {
int retval = getParallelMode();
if (arg != retval) {
ret = FAIL;
sprintf(mess, "Could not set parallel mode. Set %d, but read %d\n", retval, arg);
FILE_LOG(logERROR,(mess));
}
}
}
#endif
return Server_SendResult(file_des, INT32, UPDATE, NULL, 0);
}
int get_parallel_mode(int file_des) {
ret = OK;
memset(mess, 0, sizeof(mess));
int retval = -1;
FILE_LOG(logDEBUG1, ("Getting parallel mode\n"));
#ifndef EIGERD
functionNotImplemented();
#else
// get only
retval = getParallelMode();
FILE_LOG(logDEBUG1, ("parallel mode retval: %u\n", retval));
#endif
return Server_SendResult(file_des, INT32, UPDATE, &retval, sizeof(retval));
}
int set_overflow_mode(int file_des) {
ret = OK;
memset(mess, 0, sizeof(mess));
int arg = 0;
if (receiveData(file_des, &arg, sizeof(arg), INT32) < 0)
return printSocketReadError();
FILE_LOG(logINFO, ("Setting overflow mode: %u\n", arg));
#ifndef EIGERD
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
if(setOverFlowMode(arg) == FAIL) {
ret = FAIL;
sprintf(mess, "Could not set overflow mode\n");
FILE_LOG(logERROR,(mess));
} else {
int retval = getOverFlowMode();
if (arg != retval) {
ret = FAIL;
sprintf(mess, "Could not set overflow mode. Set %d, but read %d\n", retval, arg);
FILE_LOG(logERROR,(mess));
}
}
}
#endif
return Server_SendResult(file_des, INT32, UPDATE, NULL, 0);
}
int get_overflow_mode(int file_des) {
ret = OK;
memset(mess, 0, sizeof(mess));
int retval = -1;
FILE_LOG(logDEBUG1, ("Getting overflow mode\n"));
#ifndef EIGERD
functionNotImplemented();
#else
// get only
retval = getOverFlowMode();
FILE_LOG(logDEBUG1, ("overflow mode retval: %u\n", retval));
#endif
return Server_SendResult(file_des, INT32, UPDATE, &retval, sizeof(retval));
}
int set_storeinram(int file_des) {
ret = OK;
memset(mess, 0, sizeof(mess));
int arg = 0;
if (receiveData(file_des, &arg, sizeof(arg), INT32) < 0)
return printSocketReadError();
FILE_LOG(logINFO, ("Setting store in ram mode: %u\n", arg));
#ifndef EIGERD
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
setStoreInRamMode(arg);
}
#endif
return Server_SendResult(file_des, INT32, UPDATE, NULL, 0);
}
int get_storeinram(int file_des) {
ret = OK;
memset(mess, 0, sizeof(mess));
int retval = -1;
FILE_LOG(logDEBUG1, ("Getting store in ram mode\n"));
#ifndef EIGERD
functionNotImplemented();
#else
// get only
retval = getStoreInRamMode();
FILE_LOG(logDEBUG1, ("store in ram mode retval: %u\n", retval));
#endif
return Server_SendResult(file_des, INT32, UPDATE, &retval, sizeof(retval));
}
int set_readout_mode(int file_des) {
ret = OK;
memset(mess, 0, sizeof(mess));
int arg = 0;
if (receiveData(file_des, &arg, sizeof(arg), INT32) < 0)
return printSocketReadError();
FILE_LOG(logINFO, ("Setting readout mode: %u\n", arg));
#ifndef CHIPTESTBOARDD
functionNotImplemented();
#else
// only set
if (Server_VerifyLock() == OK) {
switch(arg){
case ANALOG_ONLY:
case DIGITAL_ONLY:
case ANALOG_AND_DIGITAL:
break;
default:
modeNotImplemented("Readout mode", (int)arg);
break;
}
if (ret == OK) {
if (setReadoutMode(arg) == FAIL) {
ret = FAIL;
sprintf(mess, "Could not set allocate RAM to set readout mode\n");
FILE_LOG(logERROR,(mess));
} else {
int retval = getReadoutMode();
if (retval == -1) {
ret = FAIL;
sprintf(mess, "Could not get readout mode\n");
FILE_LOG(logERROR,(mess));
} else {
FILE_LOG(logDEBUG1, ("readout mode retval: %u\n", retval));
}
validate(arg, retval, "set readout mode", DEC);
}
}
}
#endif
return Server_SendResult(file_des, INT32, UPDATE, NULL, 0);
}
int get_readout_mode(int file_des) {
ret = OK;
memset(mess, 0, sizeof(mess));
int retval = -1;
FILE_LOG(logDEBUG1, ("Getting readout mode\n"));
#ifndef CHIPTESTBOARDD
functionNotImplemented();
#else
// get only
retval = getReadoutMode();
if (retval == -1) {
ret = FAIL;
sprintf(mess, "Could not get readout mode\n");
FILE_LOG(logERROR,(mess));
} else {
FILE_LOG(logDEBUG1, ("readout mode retval: %u\n", retval));
}
#endif
return Server_SendResult(file_des, INT32, UPDATE, &retval, sizeof(retval));
}