gotthard works, data to be authenticated when personnel available

This commit is contained in:
maliakal_d 2018-11-09 15:25:26 +01:00
parent 89fa30ee4b
commit 8942098a90
12 changed files with 276 additions and 101 deletions

View File

@ -1,7 +1,7 @@
#pragma once #pragma once
/* Definitions for FPGA*/ /* Definitions for FPGA*/
#define MEM_MAP_SHIFT 11 #define MEM_MAP_SHIFT (11)
/** Gain register */ /** Gain register */
#define GAIN_REG (0x10 << MEM_MAP_SHIFT) #define GAIN_REG (0x10 << MEM_MAP_SHIFT)

View File

@ -1,9 +1,9 @@
Path: slsDetectorPackage/slsDetectorServers/gotthardDetectorServer Path: slsDetectorPackage/slsDetectorServers/gotthardDetectorServer
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
Repsitory UUID: 91dd176a0fb314f583ca6e29140053f1eb742896 Repsitory UUID: 89fa30ee4b815dd208c5e2ca0c401707eacbcef7
Revision: 5 Revision: 7
Branch: refactor Branch: refactor
Last Changed Author: Dhanya_Thattil Last Changed Author: Dhanya_Thattil
Last Changed Rev: 4166 Last Changed Rev: 4170
Last Changed Date: 2018-11-08 17:15:25.000000002 +0100 ./RegisterDefs.h Last Changed Date: 2018-11-09 11:03:24.000000002 +0100 ./RegisterDefs.h

View File

@ -1,6 +1,6 @@
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git" #define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
#define GITREPUUID "91dd176a0fb314f583ca6e29140053f1eb742896" #define GITREPUUID "89fa30ee4b815dd208c5e2ca0c401707eacbcef7"
#define GITAUTH "Dhanya_Thattil" #define GITAUTH "Dhanya_Thattil"
#define GITREV 0x4166 #define GITREV 0x4170
#define GITDATE 0x20181108 #define GITDATE 0x20181109
#define GITBRANCH "refactor" #define GITBRANCH "refactor"

View File

@ -150,7 +150,7 @@ u_int32_t testFpga(void) {
int ret = OK; int ret = OK;
u_int32_t val = bus_r(FIX_PATT_REG); u_int32_t val = bus_r(FIX_PATT_REG);
if (val == FIX_PATT_VAL) { if (val == FIX_PATT_VAL) {
FILE_LOG(logINFO, ("Fixed pattern: successful match 0x%08x\n",val)); FILE_LOG(logINFO, ("Fixed pattern: successful match (0x%08x)\n",val));
} else { } else {
FILE_LOG(logERROR, ("Fixed pattern does not match! Read 0x%08x, expected 0x%08x\n", val, FIX_PATT_VAL)); FILE_LOG(logERROR, ("Fixed pattern does not match! Read 0x%08x, expected 0x%08x\n", val, FIX_PATT_VAL));
ret = FAIL; ret = FAIL;
@ -168,7 +168,7 @@ u_int32_t testFpga(void) {
bus_w(addr, val); bus_w(addr, val);
readval = bus_r(addr); readval = bus_r(addr);
if (readval != val) { if (readval != val) {
FILE_LOG(logERROR, ("Mismatch! Loop(%d): Wrote 0x%x, read 0x%x\n", FILE_LOG(logERROR, ("1:Mismatch! Loop(%d): Wrote 0x%x, read 0x%x\n",
i, val, readval)); i, val, readval));
ret = FAIL; ret = FAIL;
break; break;
@ -177,7 +177,7 @@ u_int32_t testFpga(void) {
bus_w(addr, val); bus_w(addr, val);
readval = bus_r(addr); readval = bus_r(addr);
if (readval != val) { if (readval != val) {
FILE_LOG(logERROR, ("Mismatch! Loop(%d): Wrote 0x%x, read 0x%x\n", FILE_LOG(logERROR, ("2:Mismatch! Loop(%d): Wrote 0x%x, read 0x%x\n",
i, val, readval)); i, val, readval));
ret = FAIL; ret = FAIL;
break; break;
@ -186,15 +186,16 @@ u_int32_t testFpga(void) {
bus_w(addr, val); bus_w(addr, val);
readval = bus_r(addr); readval = bus_r(addr);
if (readval != val) { if (readval != val) {
FILE_LOG(logERROR, ("Mismatch! Loop(%d): Wrote 0x%x, read 0x%x\n", FILE_LOG(logERROR, ("3:Mismatch! Loop(%d): Wrote 0x%x, read 0x%x\n",
i, val, readval)); i, val, readval));
ret = FAIL; ret = FAIL;
break; break;
} }
val = 0xF0F0F0F0; val = 0xF0F0F0F0;
bus_w(addr, val); bus_w(addr, val);
readval = bus_r(addr);
if (readval != val) { if (readval != val) {
FILE_LOG(logERROR, ("Mismatch! Loop(%d): Wrote 0x%x, read 0x%x\n", FILE_LOG(logERROR, ("4:Mismatch! Loop(%d): Wrote 0x%x, read 0x%x\n",
i, val, readval)); i, val, readval));
ret = FAIL; ret = FAIL;
break; break;
@ -370,7 +371,8 @@ void setupDetector() {
// Initialization // Initialization
setPhaseShiftOnce(); setPhaseShiftOnce();
prepareADC(); /* TODO: check if need to replace with configureADC from firmwarE_funcs.c? */ //prepareADC(); /* TODO: check if need to replace with configureADC from firmwarE_funcs.c? */
configureADC();
setROIADC(-1); // set adcsyncreg, daqreg, chipofinterestreg, cleanfifos, setROIADC(-1); // set adcsyncreg, daqreg, chipofinterestreg, cleanfifos,
setGbitReadout(); setGbitReadout();
//initDac(0); /*FIXME: if it doesnt work, switch to the old dac*/ //initDac(0); /*FIXME: if it doesnt work, switch to the old dac*/
@ -414,19 +416,18 @@ int setDefaultDacs() {
} }
uint32_t writeRegister16And32(uint32_t offset, uint32_t data) { uint32_t writeRegister16And32(uint32_t offset, uint32_t data) {
u_int32_t addr = offset << MEM_MAP_SHIFT; if (((offset << MEM_MAP_SHIFT) == CONTROL_REG) ||
if ((addr == CONTROL_REG) || (addr == FIFO_DATA_REG)) { ((offset << MEM_MAP_SHIFT) == FIFO_DATA_REG)) {
bus_w16(addr, (u_int16_t)data); return writeRegister16(offset, data);
return (u_int32_t)bus_r16(addr);
} else } else
return writeRegister(offset, data); return writeRegister(offset, data);
} }
uint32_t readRegister16And32(uint32_t offset) { uint32_t readRegister16And32(uint32_t offset) {
u_int32_t addr = offset << MEM_MAP_SHIFT; if (((offset << MEM_MAP_SHIFT) == CONTROL_REG) ||
if ((addr == CONTROL_REG) || (addr == FIFO_DATA_REG)) { ((offset << MEM_MAP_SHIFT) == FIFO_DATA_REG)) {
return (u_int32_t)bus_r16(addr); return readRegister16(offset);
} else } else
return readRegister(offset); return readRegister(offset);
} }
@ -466,6 +467,65 @@ void setPhaseShift(int numphaseshift) {
FILE_LOG(logDEBUG1, ("Multipurpose reg: 0x%x\n", val)); FILE_LOG(logDEBUG1, ("Multipurpose reg: 0x%x\n", val));
} }
void configureADC() {
printf("Preparing ADC\n");
u_int32_t valw,codata,csmask;
int i,j,cdx,ddx;
cdx=0; ddx=1;
csmask=0x7c; // 1111100
for(j=0;j<3;j++){
//command and value;
codata = 0;
if(j==0)
codata=(0x08<<8)+(0x3);//Power modes(global) //reset
else if(j==1)
codata=(0x08<<8)+(0x0);//Power modes(global) //chip run
else
codata = (0x14<<8)+(0x0);//Output mode //offset binary
// start point
valw=0xffffffff;
bus_w(ADC_SPI_REG,(valw));
//chip sel bar down
valw=((0xffffffff&(~csmask)));
bus_w(ADC_SPI_REG,valw);
for (i=0;i<24;i++) {
//cldwn
valw=valw&(~(0x1<<cdx));
bus_w(ADC_SPI_REG,valw);
//usleep(0);
//write data (i)
valw=(valw&(~(0x1<<ddx)))+(((codata>>(23-i))&0x1)<<ddx);
bus_w(ADC_SPI_REG,valw);
//usleep(0);
//clkup
valw=valw+(0x1<<cdx);
bus_w(ADC_SPI_REG,valw);
//usleep(0);
}
valw |= csmask;
bus_w(ADC_SPI_REG,valw);
//usleep(0);
// stop point =start point
valw=valw&(~(0x1<<cdx));
bus_w(ADC_SPI_REG,(valw));
valw = 0xffffffff;
bus_w(ADC_SPI_REG,(valw));
//usleep in between
usleep(50000);
}
}
void cleanFifos() { void cleanFifos() {
FILE_LOG(logINFO, ("Cleaning FIFOs\n")); FILE_LOG(logINFO, ("Cleaning FIFOs\n"));
bus_w(ADC_SYNC_REG, bus_r(ADC_SYNC_REG) | ADC_SYNC_CLEAN_FIFOS_MSK); bus_w(ADC_SYNC_REG, bus_r(ADC_SYNC_REG) | ADC_SYNC_CLEAN_FIFOS_MSK);
@ -516,7 +576,8 @@ void setChipOfInterestRegister(int adc) {
(((1 << adc) << CHIP_OF_INTRST_ADC_SEL_OFST) & CHIP_OF_INTRST_ADC_SEL_MSK)); (((1 << adc) << CHIP_OF_INTRST_ADC_SEL_OFST) & CHIP_OF_INTRST_ADC_SEL_MSK));
// 0x0500(no roi), 0x0100(roi) // 0x0500(no roi), 0x0100(roi)
u_int32_t numChannels = ((adcConfigured == -1) ? NCHIP : NCHIPS_PER_ADC) * NCHAN; u_int32_t numChannels = (adcConfigured == -1) ? (NCHIP * NCHAN) : (NCHIPS_PER_ADC * NCHAN);
numChannels = ((numChannels << CHIP_OF_INTRST_NUM_CHNNLS_OFST) & CHIP_OF_INTRST_NUM_CHNNLS_MSK);
// 0x500001f(no roi), 0x10000xx(roi) MSB:num channels, LSB: selected ADC // 0x500001f(no roi), 0x10000xx(roi) MSB:num channels, LSB: selected ADC
u_int32_t val = (numChannels | adcSelect); u_int32_t val = (numChannels | adcSelect);
@ -781,16 +842,16 @@ ROI* setROI(int n, ROI arg[], int *retvalsize, int *ret) {
//set adc of interest //set adc of interest
setROIADC(adc); setROIADC(adc);
} } else FILE_LOG(logINFO, ("Getting ROI:\n"));
// print // print
if (!nROI) { if (!nROI) {
FILE_LOG(logINFO, ("\tROI: None\n\n")); FILE_LOG(logINFO, ("\tROI: None\n"));
} else { } else {
FILE_LOG(logINFO, ("ROI:\n")); FILE_LOG(logINFO, ("ROI:\n"));
int i = 0; int i = 0;
for (i = 0; i < nROI; ++i) { for (i = 0; i < nROI; ++i) {
FILE_LOG(logINFO, ("\t(%d, %d)\n\n", rois[i].xmin, rois[i].xmax)); FILE_LOG(logINFO, ("\t(%d, %d)\n", rois[i].xmin, rois[i].xmax));
} }
} }
@ -809,56 +870,56 @@ int64_t setTimer(enum timerIndex ind, int64_t val) {
case FRAME_NUMBER: case FRAME_NUMBER:
if(val >= 0) { if(val >= 0) {
FILE_LOG(logINFO, ("Setting #frames: %lld\n",(long long int)val)); FILE_LOG(logINFO, ("Setting Frames: %lld\n",(long long int)val));
} }
retval = set64BitReg(val, SET_FRAMES_LSB_REG, SET_FRAMES_MSB_REG); retval = set64BitReg(val, SET_FRAMES_LSB_REG, SET_FRAMES_MSB_REG);
FILE_LOG(logDEBUG1, ("\tGetting #frames: %lld\n", (long long int)retval)); FILE_LOG(logDEBUG1, ("\tGetting Frames: %lld\n", (long long int)retval));
break; break;
case ACQUISITION_TIME: case ACQUISITION_TIME:
if(val >= 0){ if(val >= 0){
FILE_LOG(logINFO, ("Setting exptime: %lldns\n", (long long int)val)); FILE_LOG(logINFO, ("Setting Exptime: %lld ns\n", (long long int)val));
val = (val * 1E-3 * CLK_FREQ) + 0.5; val = (val * 1E-3 * CLK_FREQ) + 0.5;
} }
retval = (set64BitReg(val, SET_EXPTIME_LSB_REG, SET_EXPTIME_MSB_REG) / retval = (set64BitReg(val, SET_EXPTIME_LSB_REG, SET_EXPTIME_MSB_REG) /
(1E-3 * CLK_FREQ)) + 0.5; (1E-3 * CLK_FREQ)) + 0.5;
FILE_LOG(logDEBUG1, ("\tGetting exptime: %lldns\n", (long long int)retval)); FILE_LOG(logINFO, ("\tGetting Exptime: %lld ns\n", (long long int)retval));
break; break;
case FRAME_PERIOD: case FRAME_PERIOD:
if(val >= 0){ if(val >= 0){
FILE_LOG(logINFO, ("Setting period: %lldns\n",(long long int)val)); FILE_LOG(logINFO, ("Setting Period: %lld ns\n",(long long int)val));
val = (val * 1E-3 * CLK_FREQ) + 0.5; val = (val * 1E-3 * CLK_FREQ) + 0.5;
} }
retval = (set64BitReg(val, SET_PERIOD_LSB_REG, SET_PERIOD_MSB_REG) / retval = (set64BitReg(val, SET_PERIOD_LSB_REG, SET_PERIOD_MSB_REG) /
(1E-3 * CLK_FREQ)) + 0.5; (1E-3 * CLK_FREQ)) + 0.5;
FILE_LOG(logDEBUG1, ("\tGetting period: %lldns\n", (long long int)retval)); FILE_LOG(logINFO, ("\tGetting Period: %lld ns\n", (long long int)retval));
break; break;
case DELAY_AFTER_TRIGGER: case DELAY_AFTER_TRIGGER:
if(val >= 0){ if(val >= 0){
FILE_LOG(logINFO, ("Setting delay: %lldns\n", (long long int)val)); FILE_LOG(logINFO, ("Setting Delay: %lld ns\n", (long long int)val));
if (masterflags == IS_MASTER) { if (masterflags == IS_MASTER) {
val += masterdefaultdelay; val += masterdefaultdelay;
FILE_LOG(logINFO, ("\tActual delay (master): %lld\n", (long long int) val)); FILE_LOG(logINFO, ("\tActual Delay (master): %lld\n", (long long int) val));
} }
val = (val * 1E-3 * CLK_FREQ) + 0.5; val = (val * 1E-3 * CLK_FREQ) + 0.5;
} }
retval = (set64BitReg(val, SET_DELAY_LSB_REG, SET_DELAY_MSB_REG) / retval = (set64BitReg(val, SET_DELAY_LSB_REG, SET_DELAY_MSB_REG) /
(1E-3 * CLK_FREQ)) + 0.5; (1E-3 * CLK_FREQ)) + 0.5;
FILE_LOG(logDEBUG1, ("\tGetting delay: %lldns\n", (long long int)retval)); FILE_LOG(logINFO, ("\tGetting Delay: %lld ns\n", (long long int)retval));
if (masterflags == IS_MASTER) { if (masterflags == IS_MASTER) {
FILE_LOG(logDEBUG1, ("\tActual delay read (master): %lld\n", (long long int) retval)); FILE_LOG(logDEBUG1, ("\tActual Delay read (master): %lld\n", (long long int) retval));
retval -= masterdefaultdelay; retval -= masterdefaultdelay;
} }
break; break;
case CYCLES_NUMBER: case CYCLES_NUMBER:
if(val >= 0) { if(val >= 0) {
FILE_LOG(logINFO, ("Setting #cycles: %lld\n", (long long int)val)); FILE_LOG(logINFO, ("Setting Cycles: %lld\n", (long long int)val));
} }
retval = set64BitReg(val, SET_TRAINS_LSB_REG, SET_TRAINS_MSB_REG); retval = set64BitReg(val, SET_TRAINS_LSB_REG, SET_TRAINS_MSB_REG);
FILE_LOG(logDEBUG1, ("\tGetting #cycles: %lld\n", (long long int)retval)); FILE_LOG(logDEBUG1, ("\tGetting Cycles: %lld\n", (long long int)retval));
break; break;
default: default:
@ -919,6 +980,33 @@ int64_t getTimeLeft(enum timerIndex ind){
return retval; return retval;
} }
int validateTimer(enum timerIndex ind, int64_t val, int64_t retval) {
if (val < 0)
return OK;
switch(ind) {
case ACQUISITION_TIME:
case FRAME_PERIOD:
val = (val * 1E-3 * CLK_FREQ) + 0.5; // convert to freq
val = (val / (1E-3 * CLK_FREQ)) + 0.5; // convert back to timer
if (val != retval)
return FAIL;
case DELAY_AFTER_TRIGGER:
if (masterflags == IS_MASTER) {
val += masterdefaultdelay;
}
val = (val * 1E-3 * CLK_FREQ) + 0.5; // convert to freq
val = (val / (1E-3 * CLK_FREQ)) + 0.5; // convert back to timer
if (masterflags == IS_MASTER) {
val -= masterdefaultdelay;
}
if (val != retval)
return FAIL;
default:
break;
}
return OK;
}
/* parameters - channel, chip, module, settings */ /* parameters - channel, chip, module, settings */
@ -1005,23 +1093,23 @@ enum detectorSettings getSettings(){
uint32_t val = regval & GAIN_CONFGAIN_MSK; uint32_t val = regval & GAIN_CONFGAIN_MSK;
switch(val) { switch(val) {
case GAIN_CONFGAIN_DYNMC_GAIN_VAL: case GAIN_CONFGAIN_DYNMC_GAIN_VAL:
FILE_LOG(logINFO, ("Settings read: Dyanmic Gain. Gain Reg: 0x%x\n", regval)); FILE_LOG(logDEBUG1, ("Settings read: Dynamic Gain. Gain Reg: 0x%x\n", regval));
thisSettings = DYNAMICGAIN; thisSettings = DYNAMICGAIN;
break; break;
case GAIN_CONFGAIN_HGH_GAIN_VAL: case GAIN_CONFGAIN_HGH_GAIN_VAL:
FILE_LOG(logINFO, ("Settings read: High Gain. Gain Reg: 0x%x\n", regval)); FILE_LOG(logDEBUG1, ("Settings read: High Gain. Gain Reg: 0x%x\n", regval));
thisSettings = HIGHGAIN; thisSettings = HIGHGAIN;
break; break;
case GAIN_CONFGAIN_LW_GAIN_VAL: case GAIN_CONFGAIN_LW_GAIN_VAL:
FILE_LOG(logINFO, ("Settings read: Low Gain. Gain Reg: 0x%x\n", regval)); FILE_LOG(logDEBUG1, ("Settings read: Low Gain. Gain Reg: 0x%x\n", regval));
thisSettings = LOWGAIN; thisSettings = LOWGAIN;
break; break;
case GAIN_CONFGAIN_MDM_GAIN_VAL: case GAIN_CONFGAIN_MDM_GAIN_VAL:
FILE_LOG(logINFO, ("Settings read: Medium Gain. Gain Reg: 0x%x\n", regval)); FILE_LOG(logDEBUG1, ("Settings read: Medium Gain. Gain Reg: 0x%x\n", regval));
thisSettings = MEDIUMGAIN; thisSettings = MEDIUMGAIN;
break; break;
case GAIN_CONFGAIN_VRY_HGH_GAIN_VAL: case GAIN_CONFGAIN_VRY_HGH_GAIN_VAL:
FILE_LOG(logINFO, ("Settings read: Very High Gain. Gain Reg: 0x%x\n", regval)); FILE_LOG(logDEBUG1, ("Settings read: Very High Gain. Gain Reg: 0x%x\n", regval));
thisSettings = VERYHIGHGAIN; thisSettings = VERYHIGHGAIN;
break; break;
default: default:
@ -1070,7 +1158,7 @@ void setDAC(enum DACINDEX ind, int val, int mV, int retval[]){
} }
if (val >= 0) { if (val >= 0) {
FILE_LOG(logINFO, ("Setting DAC %d: %d dac (%d mV)\n",ind, val, mV)); FILE_LOG(logINFO, ("Setting DAC %d: %d dac (%d mV)\n",ind, val, dacmV));
#ifndef VIRTUAL #ifndef VIRTUAL
initDAC(ind,val); initDAC(ind,val);
clearDACSregister(); clearDACSregister();
@ -1322,14 +1410,17 @@ enum externalCommunicationMode getTiming() {
void setExtSignal(enum externalSignalFlag mode) { void setExtSignal(enum externalSignalFlag mode) {
switch (mode) { switch (mode) {
case TRIGGER_IN_RISING_EDGE: case TRIGGER_IN_RISING_EDGE:
FILE_LOG(logINFO, ("Setting External Signal flag: Trigger in Rising Edge\n"));
break;
case TRIGGER_IN_FALLING_EDGE: case TRIGGER_IN_FALLING_EDGE:
signalMode = mode; FILE_LOG(logINFO, ("Setting External Signal flag: Trigger in Falling Edge\n"));
setTiming(getTiming());
break; break;
default: default:
FILE_LOG(logERROR, ("Extsig (signal mode) %d not defined for this detector\n", mode)); FILE_LOG(logERROR, ("Extsig (signal mode) %d not defined for this detector\n", mode));
break; return;
} }
signalMode = mode;
setTiming(getTiming());
} }
int getExtSignal() { int getExtSignal() {
@ -1368,7 +1459,7 @@ void calcChecksum(mac_conf* mac, int sourceip, int destip) {
while (sum>>16) while (sum>>16)
sum = (sum & 0xffff) + (sum >> 16);// Fold 32-bit sum to 16 bits sum = (sum & 0xffff) + (sum >> 16);// Fold 32-bit sum to 16 bits
long int checksum = (~sum) & 0xffff; long int checksum = (~sum) & 0xffff;
FILE_LOG(logINFO, ("\tIP checksum is 0x%lx\n", checksum)); FILE_LOG(logINFO, ("\tIP checksum : 0x%lx\n", checksum));
mac->ip.ip_chksum = checksum; mac->ip.ip_chksum = checksum;
} }
@ -1383,9 +1474,9 @@ int configureMAC(uint32_t destip, uint64_t destmac, uint64_t sourcemac, uint32_t
adcConfigured, ipPacketSize, udpPacketSize)); adcConfigured, ipPacketSize, udpPacketSize));
uint32_t sourceport = DEFAULT_TX_UDP_PORT; uint32_t sourceport = DEFAULT_TX_UDP_PORT;
FILE_LOG(logINFO, ("\tSource IP : %d.%d.%d.%d \t\t(0x%08x)\n", FILE_LOG(logINFO, ("\tSource IP : %d.%d.%d.%d (0x%08x)\n",
(sourceip>>24)&0xff,(sourceip>>16)&0xff,(sourceip>>8)&0xff,(sourceip)&0xff, sourceip)); (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", FILE_LOG(logINFO, ("\tSource MAC : %02x:%02x:%02x:%02x:%02x:%02x (0x%010llx)\n",
(unsigned int)((sourcemac>>40)&0xFF), (unsigned int)((sourcemac>>40)&0xFF),
(unsigned int)((sourcemac>>32)&0xFF), (unsigned int)((sourcemac>>32)&0xFF),
(unsigned int)((sourcemac>>24)&0xFF), (unsigned int)((sourcemac>>24)&0xFF),
@ -1393,10 +1484,10 @@ int configureMAC(uint32_t destip, uint64_t destmac, uint64_t sourcemac, uint32_t
(unsigned int)((sourcemac>>8)&0xFF), (unsigned int)((sourcemac>>8)&0xFF),
(unsigned int)((sourcemac>>0)&0xFF), (unsigned int)((sourcemac>>0)&0xFF),
(long long unsigned int)sourcemac)); (long long unsigned int)sourcemac));
FILE_LOG(logINFO, ("\tSource Port : %d \t\t\t(0x%08x)\n",sourceport, sourceport)); FILE_LOG(logINFO, ("\tSource Port : %d (0x%08x)\n",sourceport, sourceport));
FILE_LOG(logINFO, ("\tDest. IP : %d.%d.%d.%d \t\t(0x%08x)\n", FILE_LOG(logINFO, ("\tDest. IP : %d.%d.%d.%d (0x%08x)\n",
(destip>>24)&0xff,(destip>>16)&0xff,(destip>>8)&0xff,(destip)&0xff, destip)); (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", FILE_LOG(logINFO, ("\tDest. MAC : %02x:%02x:%02x:%02x:%02x:%02x (0x%010llx)\n",
(unsigned int)((destmac>>40)&0xFF), (unsigned int)((destmac>>40)&0xFF),
(unsigned int)((destmac>>32)&0xFF), (unsigned int)((destmac>>32)&0xFF),
(unsigned int)((destmac>>24)&0xFF), (unsigned int)((destmac>>24)&0xFF),
@ -1404,7 +1495,7 @@ int configureMAC(uint32_t destip, uint64_t destmac, uint64_t sourcemac, uint32_t
(unsigned int)((destmac>>8)&0xFF), (unsigned int)((destmac>>8)&0xFF),
(unsigned int)((destmac>>0)&0xFF), (unsigned int)((destmac>>0)&0xFF),
(long long unsigned int)destmac)); (long long unsigned int)destmac));
FILE_LOG(logINFO, ("\tDest. Port : %d \t\t\t(0x%08x)\n",udpport, udpport)); FILE_LOG(logINFO, ("\tDest. Port : %d (0x%08x)\n",udpport, udpport));
// set/ unset the digital test bit // set/ unset the digital test bit
if (digitalTestBit) if (digitalTestBit)
@ -1492,8 +1583,6 @@ int configureMAC(uint32_t destip, uint64_t destmac, uint64_t sourcemac, uint32_t
tse_conf_regs->tx_almost_full = 0x3; tse_conf_regs->tx_almost_full = 0x3;
tse_conf_regs->mdio_addr0 = 0x12; tse_conf_regs->mdio_addr0 = 0x12;
tse_conf_regs->mdio_addr1 = 0x0; tse_conf_regs->mdio_addr1 = 0x0;
FILE_LOG(logDEBUG1, ("\tConfigure Mac Done"));
mac_conf_regs->cdone = 0xFFFFFFFF; mac_conf_regs->cdone = 0xFFFFFFFF;
// write shadow regs /* FIXME: Only INT_RSTN_MSK | WRT_BCK_MSK */ // write shadow regs /* FIXME: Only INT_RSTN_MSK | WRT_BCK_MSK */
@ -1511,6 +1600,7 @@ int configureMAC(uint32_t destip, uint64_t destmac, uint64_t sourcemac, uint32_t
FILE_LOG(logDEBUG1, ("\tSw1. MultiPurpose reg: 0x%x\n", bus_r(addr))); FILE_LOG(logDEBUG1, ("\tSw1. MultiPurpose reg: 0x%x\n", bus_r(addr)));
usleep(1000 * 1000); usleep(1000 * 1000);
FILE_LOG(logDEBUG1, ("\tConfigure Mac Done\n"));
return OK; return OK;
} }
@ -1639,9 +1729,9 @@ int startStateMachine(){
cleanFifos(); cleanFifos();
//start state machine //start state machine
bus_w16(CONTROL_REG, CONTROL_STRT_ACQ_MSK); bus_w16(CONTROL_REG, CONTROL_STRT_ACQ_MSK | CONTROL_STRT_EXPSR_MSK);
bus_w16(CONTROL_REG, 0x0); bus_w16(CONTROL_REG, 0x0);
FILE_LOG(logINFO, ("Status Register: %08x\n", runState())); runState(logINFO);
return OK; return OK;
} }
@ -1670,17 +1760,18 @@ int stopStateMachine(){
#endif #endif
//stop state machine //stop state machine
bus_w16(CONTROL_REG, CONTROL_STP_ACQ_MSK); bus_w16(CONTROL_REG, CONTROL_STP_ACQ_MSK);
usleep(100);/**FIXME:Needed? not there earlier*/ //usleep(100);/**FIXME:Needed? not there earlier*/
bus_w16(CONTROL_REG, 0x0); bus_w16(CONTROL_REG, 0x0);
// check // check
usleep(500); usleep(500);
if ((runState() & STATUS_RN_MSHN_BSY_MSK)) { if ((runState(logDEBUG1) & STATUS_RN_MSHN_BSY_MSK)) {
FILE_LOG(logERROR, ("\tFailed to stop state machine\n")); FILE_LOG(logERROR, ("\tFailed to stop state machine.\n"));
runState(logINFORED);
return FAIL; return FAIL;
} }
FILE_LOG(logINFO, ("Status Register: %08x\n", runState())); runState(logINFO);
return OK; return OK;
} }
@ -1697,8 +1788,7 @@ enum runStatus getRunStatus(){
FILE_LOG(logDEBUG1, ("Getting status\n")); FILE_LOG(logDEBUG1, ("Getting status\n"));
enum runStatus s = IDLE; enum runStatus s = IDLE;
u_int32_t retval = runState(); u_int32_t retval = runState(logINFO);
FILE_LOG(logINFO, ("Status Register: %08x\n",retval));
// finished (external stop or fifo full) // finished (external stop or fifo full)
if (retval & STATUS_RN_FNSHD_MSK) { if (retval & STATUS_RN_FNSHD_MSK) {
@ -1706,10 +1796,11 @@ enum runStatus getRunStatus(){
s = STOPPED; s = STOPPED;
FILE_LOG(logINFO, ("\t Reading status reg again\n")); FILE_LOG(logINFO, ("\t Reading status reg again\n"));
retval = runState(); retval = runState(logINFO);
// fifo full // fifo full
if (runState() & STATUS_RN_FNSHD_MSK) { if (runState(logDEBUG1) & STATUS_RN_FNSHD_MSK) {
FILE_LOG(logINFORED, ("Status: Error\n")); FILE_LOG(logINFORED, ("Status: Error\n"));
runState(logINFORED);
s = ERROR; s = ERROR;
} }
} }
@ -1721,7 +1812,7 @@ enum runStatus getRunStatus(){
} }
// not running // not running
else if (!(retval & STATUS_RN_MSHN_BSY_MSK)) { else if (!(retval & STATUS_RN_BSY_MSK)) {
// read last frames // read last frames
if (retval & STATUS_RD_MSHN_BSY_MSK) { if (retval & STATUS_RD_MSHN_BSY_MSK) {
FILE_LOG(logINFOBLUE, ("Status: Read Machine Busy\n")); FILE_LOG(logINFOBLUE, ("Status: Read Machine Busy\n"));
@ -1737,8 +1828,14 @@ enum runStatus getRunStatus(){
FILE_LOG(logINFOBLUE, ("Status: IDLE\n")); FILE_LOG(logINFOBLUE, ("Status: IDLE\n"));
s = IDLE; s = IDLE;
} else { } else {
FILE_LOG(logINFORED, ("Status: Unknown Status: 0x%x\n", retval)); FILE_LOG(logINFORED, ("Status: Unknown Status: 0x%x. Trying again.\n", retval));
s = ERROR; int iloop = 0;
for (iloop = 0; iloop < 10; ++iloop) {
usleep(1000 * 1000);
if (runState(logDEBUG1) != retval)
return getRunStatus();
}
s = ERROR;
} }
} }
@ -1786,15 +1883,15 @@ u_int32_t runBusy() {
#ifdef VIRTUAL #ifdef VIRTUAL
return virtual_status; return virtual_status;
#endif #endif
return runState() & STATUS_RN_BSY_MSK; return runState(logDEBUG1) & STATUS_RN_BSY_MSK;
} }
u_int32_t runState() { u_int32_t runState(enum TLogLevel lev) {
#ifdef VIRTUAL #ifdef VIRTUAL
return virtual_status; return virtual_status;
#endif #endif
u_int32_t s = bus_r(STATUS_REG); u_int32_t s = bus_r(STATUS_REG);
FILE_LOG(logDEBUG1, ("Status Register: %08x\n", s)); FILE_LOG(lev, ("Status Register: 0x%08x\n", s));
return s; return s;
} }

View File

@ -790,7 +790,32 @@ int64_t getTimeLeft(enum timerIndex ind){
} }
int validateTimer(enum timerIndex ind, int64_t val, int64_t retval) {
if (val < 0)
return OK;
switch(ind) {
case ACQUISITION_TIME:
// convert to freq
val *= (1E-3 * CLK_RUN);
val -= ACQ_TIME_MIN_CLOCK;
if(val < 0) val = 0;
// convert back to timer
val = (val + ACQ_TIME_MIN_CLOCK) / (1E-3 * CLK_RUN);
if (val != retval)
return FAIL;
case FRAME_PERIOD:
case DELAY_AFTER_TRIGGER:
// convert to freq
val *= (1E-3 * CLK_SYNC);
// convert back to timer
val = (val) / (1E-3 * CLK_SYNC);
if (val != retval)
return FAIL;
default:
break;
}
return OK;
}

View File

@ -114,6 +114,25 @@ u_int32_t writeRegister(u_int32_t offset, u_int32_t data) {
return readRegister(offset); return readRegister(offset);
} }
/**
* Read from a 16 bit register (literal register value provided by client)
* @param offset address offset
* @retuns 16 bit data read
*/
u_int32_t readRegister16(u_int32_t offset) {
return (u_int32_t)bus_r16(offset << MEM_MAP_SHIFT);
}
/**
* Write into a 16 bit register (literal register value provided by client)
* @param offset address offset
* @param data 16 bit data
*/
u_int32_t writeRegister16(u_int32_t offset, u_int32_t data) {
bus_w16(offset << MEM_MAP_SHIFT, (u_int16_t)data);
return readRegister16(offset);
}
/** /**
* Map FPGA * Map FPGA

View File

@ -132,7 +132,7 @@ int acceptConnection(int socketDescriptor) {
// timeout // timeout
if (result == 0) { if (result == 0) {
FILE_LOG(logDEBUG1, ("%s socket select() timed out!\n", FILE_LOG(logDEBUG3, ("%s socket select() timed out!\n",
(isControlServer ? "control":"stop"), myport)); (isControlServer ? "control":"stop"), myport));
} }
@ -144,14 +144,14 @@ int acceptConnection(int socketDescriptor) {
// activity in descriptor set // activity in descriptor set
else if (result > 0) { else if (result > 0) {
FILE_LOG(logDEBUG1, ("%s select returned!\n", (isControlServer ? "control":"stop"))); FILE_LOG(logDEBUG3, ("%s select returned!\n", (isControlServer ? "control":"stop")));
// loop through the file descriptor set // loop through the file descriptor set
for (j = 0; j < maxfd + 1; ++j) { for (j = 0; j < maxfd + 1; ++j) {
// checks if file descriptor part of set // checks if file descriptor part of set
if (FD_ISSET(j, &tempset)) { if (FD_ISSET(j, &tempset)) {
FILE_LOG(logDEBUG1, ("fd %d is set\n",j)); FILE_LOG(logDEBUG3, ("fd %d is set\n",j));
// clear the temporary set // clear the temporary set
FD_CLR(j, &tempset); FD_CLR(j, &tempset);
@ -212,7 +212,7 @@ int acceptConnection(int socketDescriptor) {
// accept success // accept success
else { else {
inet_ntop(AF_INET, &(addressC.sin_addr), dummyClientIP, INET_ADDRSTRLEN); inet_ntop(AF_INET, &(addressC.sin_addr), dummyClientIP, INET_ADDRSTRLEN);
FILE_LOG(logDEBUG1, ("%s socket accepted connection, fd= %d\n", FILE_LOG(logDEBUG3, ("%s socket accepted connection, fd= %d\n",
(isControlServer ? "control":"stop"), file_des)); (isControlServer ? "control":"stop"), file_des));
// add the file descriptor from accept // add the file descriptor from accept
FD_SET(file_des, &readset); FD_SET(file_des, &readset);
@ -240,7 +240,7 @@ void closeConnection(int file_des) {
void exitServer(int socketDescriptor) { void exitServer(int socketDescriptor) {
if (socketDescriptor >= 0) if (socketDescriptor >= 0)
close(socketDescriptor); close(socketDescriptor);
FILE_LOG(logDEBUG1, ("Closing %s server\n", (isControlServer ? "control":"stop"))); FILE_LOG(logDEBUG3, ("Closing %s server\n", (isControlServer ? "control":"stop")));
FD_CLR(socketDescriptor, &readset); FD_CLR(socketDescriptor, &readset);
isock--; isock--;
} }
@ -316,7 +316,7 @@ int receiveDataOnly(int file_des, void* buf,int length) {
int nreceiving; int nreceiving;
int nreceived; int nreceived;
if (file_des<0) return -1; if (file_des<0) return -1;
FILE_LOG(logDEBUG1, ("want to receive %d Bytes to %s server\n", FILE_LOG(logDEBUG3, ("want to receive %d Bytes to %s server\n",
length, (isControlServer ? "control":"stop"))); length, (isControlServer ? "control":"stop")));
while(length > 0) { while(length > 0) {
@ -335,8 +335,9 @@ int receiveDataOnly(int file_des, void* buf,int length) {
if (total_received>0) if (total_received>0)
strcpy(thisClientIP,dummyClientIP); strcpy(thisClientIP,dummyClientIP);
if (strcmp(lastClientIP,thisClientIP)) if (strcmp(lastClientIP,thisClientIP)) {
differentClients = 1; differentClients = 1;
}
else else
differentClients = 0; differentClients = 0;
@ -379,7 +380,7 @@ int sendModule(int file_des, sls_detector_module *myMod) {
int receiveModule(int file_des, sls_detector_module* myMod) { int receiveModule(int file_des, sls_detector_module* myMod) {
TLogLevel level = logDEBUG1; enum TLogLevel level = logDEBUG1;
FILE_LOG(level, ("Receiving Module\n")); FILE_LOG(level, ("Receiving Module\n"));
int ts = 0, n = 0; int ts = 0, n = 0;
int nDacs = myMod->ndac; int nDacs = myMod->ndac;
@ -454,7 +455,7 @@ int Server_VerifyLock() {
int Server_SendResult(int fileDes, intType itype, int update, void* retval, int retvalSize) { int Server_SendResult(int fileDes, intType itype, int update, void* retval, int retvalSize) {
// update if different clients (ret can be ok or acquisition finished), not fail to not overwrite e message // update if different clients (ret can be ok or acquisition finished), not fail to not overwrite e message
if (update && ret != FAIL && differentClients) if (update && isControlServer && ret != FAIL && differentClients)
ret = FORCE_UPDATE; ret = FORCE_UPDATE;
// send success of operation // send success of operation

View File

@ -19,10 +19,10 @@
#define FILELOG_MAX_LEVEL logINFO #define FILELOG_MAX_LEVEL logINFO
#endif #endif
typedef enum { enum TLogLevel{
logERROR, logWARNING, logINFOBLUE, logINFOGREEN, logINFORED, logINFO, logERROR, logWARNING, logINFOBLUE, logINFOGREEN, logINFORED, logINFO,
logDEBUG, logDEBUG1, logDEBUG2, logDEBUG3, logDEBUG4, logDEBUG5 logDEBUG, logDEBUG1, logDEBUG2, logDEBUG3, logDEBUG4, logDEBUG5
}TLogLevel; };
#define ERROR_MSG_LENGTH 1000 #define ERROR_MSG_LENGTH 1000
@ -30,7 +30,7 @@ logDEBUG, logDEBUG1, logDEBUG2, logDEBUG3, logDEBUG4, logDEBUG5
if (lvl > FILELOG_MAX_LEVEL); \ if (lvl > FILELOG_MAX_LEVEL); \
else {char* temp = FILELOG_BuildLog fmt; FILELOG_PrintLog(lvl, temp);free(temp);} else {char* temp = FILELOG_BuildLog fmt; FILELOG_PrintLog(lvl, temp);free(temp);}
static inline void FILELOG_PrintLog(TLogLevel level, char* m) { static inline void FILELOG_PrintLog(enum TLogLevel level, char* m) {
switch(level) { switch(level) {
case logERROR: cprintf(RED BOLD, "ERROR: %s", m); break; case logERROR: cprintf(RED BOLD, "ERROR: %s", m); break;
case logWARNING: cprintf(YELLOW BOLD, "WARNING: %s", m); break; case logWARNING: cprintf(YELLOW BOLD, "WARNING: %s", m); break;

View File

@ -1,6 +1,8 @@
#include "sls_detector_defs.h" #include "sls_detector_defs.h"
#include "slsDetectorServer_defs.h" // DAC_INDEX, ADC_INDEX, also include RegisterDefs.h #include "slsDetectorServer_defs.h" // DAC_INDEX, ADC_INDEX, also include RegisterDefs.h
#ifdef GOTTHARDD
#include "logger.h" // runState(enum TLogLevel)
#endif
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h> // FILE #include <stdio.h> // FILE
@ -89,6 +91,7 @@ void configureASICTimer();
#elif GOTTHARDD #elif GOTTHARDD
void setPhaseShiftOnce(); void setPhaseShiftOnce();
void setPhaseShift(int numphaseshift); void setPhaseShift(int numphaseshift);
void configureADC();
void cleanFifos(); void cleanFifos();
void setADCSyncRegister(); void setADCSyncRegister();
void setDAQRegister(); void setDAQRegister();
@ -119,7 +122,9 @@ int selectStoragecellStart(int pos);
#endif #endif
int64_t setTimer(enum timerIndex ind, int64_t val); int64_t setTimer(enum timerIndex ind, int64_t val);
int64_t getTimeLeft(enum timerIndex ind); int64_t getTimeLeft(enum timerIndex ind);
#if defined(JUNGFRAUD) || (GOTTHARDD)
int validateTimer(enum timerIndex ind, int64_t val, int64_t retval);
#endif
// parameters - module, settings // parameters - module, settings
int setModule(sls_detector_module myMod, char* mess); int setModule(sls_detector_module myMod, char* mess);
@ -250,7 +255,7 @@ void readFrame(int *ret, char *mess);
u_int32_t runBusy(); u_int32_t runBusy();
#endif #endif
#ifdef GOTTHARDD #ifdef GOTTHARDD
u_int32_t runState(); u_int32_t runState(enum TLogLevel lev);
#endif #endif

View File

@ -104,8 +104,8 @@ int decode_function(int file_des) {
if (ret == FAIL) { if (ret == FAIL) {
FILE_LOG(logDEBUG1, ("Error executing the function = %d (%s)\n", FILE_LOG(logDEBUG1, ("Error executing the function = %d (%s)\n",
fnum, getFunctionName((enum detFuncs)fnum))); fnum, getFunctionName((enum detFuncs)fnum)));
} else FILE_LOG(logDEBUG1, ("Function (%s) executed ok\n", } else FILE_LOG(logDEBUG1, ("Function (%s) executed %s\n",
getFunctionName((enum detFuncs)fnum))); getFunctionName((enum detFuncs)fnum), (ret == OK)?"OK":"FORCE_UPDATE"));
} }
return ret; return ret;
} }
@ -366,7 +366,7 @@ int get_detector_type(int file_des) {
memset(mess, 0, sizeof(mess)); memset(mess, 0, sizeof(mess));
enum detectorType retval = myDetectorType; enum detectorType retval = myDetectorType;
FILE_LOG(logDEBUG1,("Returning detector type %d\n", retval)); FILE_LOG(logDEBUG1,("Returning detector type %d\n", retval));
return Server_SendResult(file_des, INT32, UPDATE, &retval, sizeof(retval)); return Server_SendResult(file_des, INT32, NO_UPDATE, &retval, sizeof(retval));
} }
@ -849,7 +849,7 @@ int read_register(int file_des) {
#else #else
retval = readRegister(addr); retval = readRegister(addr);
#endif #endif
FILE_LOG(logDEBUG1, ("Read register (0x%x): 0x%x\n", retval)); FILE_LOG(logINFO, ("Read register (0x%x): 0x%x\n", addr, retval));
return Server_SendResult(file_des, INT32, UPDATE, &retval, sizeof(retval)); return Server_SendResult(file_des, INT32, UPDATE, &retval, sizeof(retval));
} }
@ -1308,8 +1308,34 @@ int set_timer(int file_des) {
modeNotImplemented("Timer index", (int)ind); modeNotImplemented("Timer index", (int)ind);
break; break;
} }
// validate // validate
validate64(tns, retval, "set timer", DEC); #ifdef EIGERD
validate64(tns, retval, "set timer", DEC); // copied to server, not read from detector register
#else
switch(ind) {
case FRAME_NUMBER:
case CYCLES_NUMBER:
case STORAGE_CELL_NUMBER:
validate64(tns, retval, "set timer", DEC); // no conversion, so all good
break;
case ACQUISITION_TIME:
case FRAME_PERIOD:
case DELAY_AFTER_TRIGGER:
case SUBFRAME_ACQUISITION_TIME:
case SUBFRAME_DEADTIME:
// losing precision due to conversion to clock (also gotthard master delay is different)
if (validateTimer(ind, tns, retval) == FAIL) {
ret = FAIL;
sprintf(mess, "Could not set timer. Set %lld, but read %lld\n",
(long long unsigned int)tns, (long long unsigned int)retval);
FILE_LOG(logERROR,(mess));
}
break;
default:
break;
}
#endif
} }
if (ret != FAIL) { if (ret != FAIL) {
FILE_LOG(logDEBUG1, ("Timer index %d: %lld\n", ind, retval)); FILE_LOG(logDEBUG1, ("Timer index %d: %lld\n", ind, retval));
@ -1608,7 +1634,7 @@ int set_speed(int file_des) {
int exit_server(int file_des) { int exit_server(int file_des) {
cprintf(BG_RED, "Closing Server\n"); FILE_LOG(logINFORED, ("Closing Server\n"));
ret = OK; ret = OK;
memset(mess, 0, sizeof(mess)); memset(mess, 0, sizeof(mess));
Server_SendResult(file_des, INT32, NO_UPDATE, NULL, 0); Server_SendResult(file_des, INT32, NO_UPDATE, NULL, 0);
@ -1791,7 +1817,7 @@ int configure_mac(int file_des) {
if (receiveData(file_des, args, sizeof(args), OTHER) < 0) if (receiveData(file_des, args, sizeof(args), OTHER) < 0)
return printSocketReadError(); return printSocketReadError();
FILE_LOG(logDEBUG1, ("\n Configuring UDP Destination\n")); FILE_LOG(logDEBUG1, ("\n Configuring MAC\n"));
uint32_t dstIp = 0; uint32_t dstIp = 0;
sscanf(args[0], "%x", &dstIp); sscanf(args[0], "%x", &dstIp);
FILE_LOG(logDEBUG1, ("Dst Ip Addr: %d.%d.%d.%d = 0x%x \n", FILE_LOG(logDEBUG1, ("Dst Ip Addr: %d.%d.%d.%d = 0x%x \n",
@ -1890,10 +1916,11 @@ int configure_mac(int file_des) {
if (ret == FAIL) { if (ret == FAIL) {
sprintf(mess,"Configure Mac failed\n"); sprintf(mess,"Configure Mac failed\n");
FILE_LOG(logERROR,(mess)); FILE_LOG(logERROR,(mess));
} else {
FILE_LOG(logINFO, ("\tConfigure MAC successful\n"));
} }
#if defined(EIGERD) || defined (JUNGFRAUD) #if defined(EIGERD) || defined (JUNGFRAUD)
else { if (ret != FAIL) {
FILE_LOG(logINFO, ("Configure MAC successful: %d\n", ret));
ret = setDetectorPosition(pos); ret = setDetectorPosition(pos);
if (ret == FAIL) { if (ret == FAIL) {
sprintf(mess, "Could not set detector position\n"); sprintf(mess, "Could not set detector position\n");
@ -2463,7 +2490,7 @@ int program_fpga(int file_des) {
if (ret == FAIL) { if (ret == FAIL) {
cprintf(RED,"Failure: Breaking out of program receiving\n"); FILE_LOG(logERROR, ("Failure: Breaking out of program receiving\n"));
} else { } else {
//print progress //print progress
FILE_LOG(logINFO, ("Writing to Flash:%d%%\r", FILE_LOG(logINFO, ("Writing to Flash:%d%%\r",
@ -2787,7 +2814,7 @@ int check_version(int file_des) {
} }
if (ret == OK) { if (ret == OK) {
FILE_LOG(logDEBUG1, ("Checking versioning compatibility with value %d\n",arg)); FILE_LOG(logDEBUG1, ("Checking versioning compatibility with value 0x%llx\n",arg));
int64_t client_requiredVersion = arg; int64_t client_requiredVersion = arg;
int64_t det_apiVersion = getDetectorId(CLIENT_SOFTWARE_API_VERSION); int64_t det_apiVersion = getDetectorId(CLIENT_SOFTWARE_API_VERSION);
@ -2813,7 +2840,7 @@ int check_version(int file_des) {
FILE_LOG(logERROR,(mess)); FILE_LOG(logERROR,(mess));
} }
} }
return Server_SendResult(file_des, INT32, UPDATE, NULL, 0); return Server_SendResult(file_des, INT32, NO_UPDATE, NULL, 0);
} }

View File

@ -2637,7 +2637,7 @@ uint32_t slsDetector::writeRegister(uint32_t addr, uint32_t val) {
uint32_t slsDetector::readRegister(uint32_t addr) { uint32_t slsDetector::readRegister(uint32_t addr) {
int fnum = F_READ_REGISTER; int fnum = F_READ_REGISTER;
int ret = FAIL; int ret = FAIL;
uint32_t arg = -1; uint32_t arg = addr;
uint32_t retval = -1; uint32_t retval = -1;
FILE_LOG(logDEBUG1) << "Reading register 0x" << std::hex << addr << std::dec; FILE_LOG(logDEBUG1) << "Reading register 0x" << std::hex << addr << std::dec;

View File

@ -1038,7 +1038,8 @@ void slsReceiverImplementation::stopReceiver() {
tot += dataProcessor[i]->GetNumFramesCaught(); tot += dataProcessor[i]->GetNumFramesCaught();
uint64_t missingpackets = numberOfFrames*generalData->packetsPerFrame-listener[i]->GetPacketsCaught(); uint64_t missingpackets = numberOfFrames*generalData->packetsPerFrame-listener[i]->GetPacketsCaught();
FILE_LOG(((int)missingpackets > 0) ? logINFORED : logINFOGREEN) << TLogLevel lev = ((int)missingpackets > 0) ? logINFORED : logINFOGREEN;
FILE_LOG(lev) <<
"Summary of Port " << udpPortNum[i] << "Summary of Port " << udpPortNum[i] <<
"\n\tMissing Packets\t\t: " << missingpackets << "\n\tMissing Packets\t\t: " << missingpackets <<
"\n\tComplete Frames\t\t: " << dataProcessor[i]->GetNumFramesCaught() << "\n\tComplete Frames\t\t: " << dataProcessor[i]->GetNumFramesCaught() <<