Xilinx ctb (#884)

* updated registers, arm64

* compiler set to aarch64 for xilinx server

* updated RegisterDefs.h

* merge into generate branch and resolving conflicts and adding the xilinx changes to callerspecial and commands.yaml

* compiles and can print firmware version (using a different csp0 address)

* fixing other servers (gotthard, jungfrau, moench, mythen3) that it returns in case of mapping failure, xilinxctb: added that it checks type, prints proper fw version, checks kernel date, added armprocessor define to use in common places, added specifiers to supress overflow and truncation warnings

* added detector ip and mac adddress to the printout

* fixed tests and recompiled servers
This commit is contained in:
maliakal_d 2024-01-04 17:10:16 +01:00 committed by GitHub
parent 4f4125a3b2
commit 9738cb7d74
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
35 changed files with 1602 additions and 316 deletions

View File

@ -11,6 +11,7 @@ install(TARGETS slsProjectCSettings
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
) )
add_subdirectory(ctbDetectorServer) add_subdirectory(ctbDetectorServer)
add_subdirectory(xilinx_ctbDetectorServer)
add_subdirectory(eigerDetectorServer) add_subdirectory(eigerDetectorServer)
add_subdirectory(gotthardDetectorServer) add_subdirectory(gotthardDetectorServer)
add_subdirectory(jungfrauDetectorServer) add_subdirectory(jungfrauDetectorServer)

View File

@ -90,6 +90,7 @@ void basictests() {
"Could not map to memory. Cannot proceed. Check Firmware.\n"); "Could not map to memory. Cannot proceed. Check Firmware.\n");
LOG(logERROR, (initErrorMessage)); LOG(logERROR, (initErrorMessage));
initError = FAIL; initError = FAIL;
return;
} }
#ifndef VIRTUAL #ifndef VIRTUAL
// does check only if flag is 0 (by default), set by command line // does check only if flag is 0 (by default), set by command line

View File

@ -88,6 +88,7 @@ void basictests() {
"Could not map to memory. Cannot proceed. Check Firmware.\n"); "Could not map to memory. Cannot proceed. Check Firmware.\n");
LOG(logERROR, (initErrorMessage)); LOG(logERROR, (initErrorMessage));
initError = FAIL; initError = FAIL;
return;
} }
#ifndef VIRTUAL #ifndef VIRTUAL
// does check only if flag is 0 (by default), set by command line // does check only if flag is 0 (by default), set by command line

View File

@ -82,6 +82,7 @@ void basictests() {
"Could not map to memory. Cannot proceed. Check Firmware.\n"); "Could not map to memory. Cannot proceed. Check Firmware.\n");
LOG(logERROR, ("%s\n\n", initErrorMessage)); LOG(logERROR, ("%s\n\n", initErrorMessage));
initError = FAIL; initError = FAIL;
return;
} }
#ifndef VIRTUAL #ifndef VIRTUAL
// does check only if flag is 0 (by default), set by command line // does check only if flag is 0 (by default), set by command line

View File

@ -92,6 +92,7 @@ void basictests() {
"Could not map to memory. Cannot proceed. Check Firmware.\n"); "Could not map to memory. Cannot proceed. Check Firmware.\n");
LOG(logERROR, (initErrorMessage)); LOG(logERROR, (initErrorMessage));
initError = FAIL; initError = FAIL;
return;
} }
#ifndef VIRTUAL #ifndef VIRTUAL
// does check only if flag is 0 (by default), set by command line // does check only if flag is 0 (by default), set by command line

View File

@ -0,0 +1,10 @@
// SPDX-License-Identifier: LGPL-3.0-or-other
// Copyright (C) 2021 Contributors to the SLS Detector Package
#pragma once
#include <inttypes.h>
#include <sys/types.h>
int mapCSP0(void);
void bus_w(u_int32_t offset, u_int32_t data);
u_int32_t bus_r(u_int32_t offset);

View File

@ -25,6 +25,10 @@
#include "blackfin.h" #include "blackfin.h"
#endif #endif
#ifdef ARMPROCESSOR
#include "arm64.h"
#endif
#ifdef MYTHEN3D #ifdef MYTHEN3D
#include "mythen3.h" #include "mythen3.h"
#endif #endif
@ -61,9 +65,10 @@ typedef struct udpStruct_s {
int isInitCheckDone(); int isInitCheckDone();
int getInitResult(char **mess); int getInitResult(char **mess);
void basictests(); void basictests();
int checkType();
#if defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(MOENCHD) || \ #if defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(MOENCHD) || \
defined(CHIPTESTBOARDD) || defined(MYTHEN3D) || defined(GOTTHARD2D) defined(CHIPTESTBOARDD) || defined(MYTHEN3D) || defined(GOTTHARD2D)
int checkType();
int testFpga(); int testFpga();
int testBus(); int testBus();
#endif #endif
@ -81,13 +86,17 @@ u_int64_t getFirmwareVersion();
#ifdef EIGERD #ifdef EIGERD
uint64_t getFrontEndFirmwareVersion(enum fpgaPosition fpgaPosition); uint64_t getFrontEndFirmwareVersion(enum fpgaPosition fpgaPosition);
#endif #endif
#ifndef XILINX_CHIPTESTBOARDD
u_int64_t getFirmwareAPIVersion(); u_int64_t getFirmwareAPIVersion();
void getHardwareVersion(char *version); void getHardwareVersion(char *version);
#endif
#ifdef EIGERD #ifdef EIGERD
int getHardwareVersionNumber(); int getHardwareVersionNumber();
#else #else
#ifndef XILINX_CHIPTESTBOARDD
u_int16_t getHardwareVersionNumber(); u_int16_t getHardwareVersionNumber();
#endif #endif
#endif
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(CHIPTESTBOARDD) #if defined(JUNGFRAUD) || defined(MOENCHD) || defined(CHIPTESTBOARDD)
u_int16_t getHardwareSerialNumber(); u_int16_t getHardwareSerialNumber();
#endif #endif
@ -111,7 +120,6 @@ int updateModuleId();
void setModuleId(int modid); void setModuleId(int modid);
#endif #endif
#endif #endif
u_int64_t getDetectorMAC(); u_int64_t getDetectorMAC();
u_int32_t getDetectorIP(); u_int32_t getDetectorIP();
@ -136,7 +144,7 @@ int updateDatabytesandAllocateRAM();
void updateDataBytes(); void updateDataBytes();
#endif #endif
#ifndef CHIPTESTBOARDD #if !defined(CHIPTESTBOARDD) && !defined(XILINX_CHIPTESTBOARDD)
int resetToDefaultDacs(int hardReset); int resetToDefaultDacs(int hardReset);
int getDefaultDac(enum DACINDEX index, enum detectorSettings sett, int *retval); int getDefaultDac(enum DACINDEX index, enum detectorSettings sett, int *retval);
int setDefaultDac(enum DACINDEX index, enum detectorSettings sett, int value); int setDefaultDac(enum DACINDEX index, enum detectorSettings sett, int value);
@ -191,8 +199,10 @@ void setMasterSlaveConfiguration();
#endif #endif
// parameters - dr, roi // parameters - dr, roi
#ifndef XILINX_CHIPTESTBOARDD
int setDynamicRange(int dr); int setDynamicRange(int dr);
int getDynamicRange(int *retval); int getDynamicRange(int *retval);
#endif
#ifdef GOTTHARDD #ifdef GOTTHARDD
int setROI(ROI arg); int setROI(ROI arg);
ROI getROI(); ROI getROI();
@ -241,6 +251,7 @@ int getMaxStoragecellStart();
int setNextFrameNumber(uint64_t value); int setNextFrameNumber(uint64_t value);
int getNextFrameNumber(uint64_t *value); int getNextFrameNumber(uint64_t *value);
#endif #endif
#ifndef XILINX_CHIPTESTBOARDD
void setNumFrames(int64_t val); void setNumFrames(int64_t val);
int64_t getNumFrames(); int64_t getNumFrames();
void setNumTriggers(int64_t val); void setNumTriggers(int64_t val);
@ -251,6 +262,7 @@ int64_t getExpTime();
#endif #endif
int setPeriod(int64_t val); int setPeriod(int64_t val);
int64_t getPeriod(); int64_t getPeriod();
#endif
#ifdef MYTHEN3D #ifdef MYTHEN3D
void setNumIntGates(int val); void setNumIntGates(int val);
void setNumGates(int val); void setNumGates(int val);
@ -337,10 +349,12 @@ int setTrimbits(int *trimbits);
int setAllTrimbits(int val); int setAllTrimbits(int val);
int getAllTrimbits(); int getAllTrimbits();
#endif #endif
#ifndef XILINX_CHIPTESTBOARDD
#ifndef CHIPTESTBOARDD #ifndef CHIPTESTBOARDD
enum detectorSettings setSettings(enum detectorSettings sett); enum detectorSettings setSettings(enum detectorSettings sett);
#endif #endif
enum detectorSettings getSettings(); enum detectorSettings getSettings();
#endif
#if defined(JUNGFRAUD) #if defined(JUNGFRAUD)
enum gainMode getGainMode(); enum gainMode getGainMode();
void setGainMode(enum gainMode mode); void setGainMode(enum gainMode mode);
@ -366,10 +380,14 @@ void setDAC(enum DACINDEX ind, int val, int mV, int counterEnableCheck);
void setGeneralDAC(enum DACINDEX ind, int val, int mV); void setGeneralDAC(enum DACINDEX ind, int val, int mV);
void setVthDac(int index, int enable); void setVthDac(int index, int enable);
#else #else
#ifndef XILINX_CHIPTESTBOARDD
void setDAC(enum DACINDEX ind, int val, int mV); void setDAC(enum DACINDEX ind, int val, int mV);
#endif #endif
#endif
#ifndef XILINX_CHIPTESTBOARDD
int getDAC(enum DACINDEX ind, int mV); int getDAC(enum DACINDEX ind, int mV);
int getMaxDacSteps(); int getMaxDacSteps();
#endif
#if defined(CHIPTESTBOARDD) #if defined(CHIPTESTBOARDD)
int dacToVoltage(int dac); int dacToVoltage(int dac);
int checkVLimitCompliant(int mV); int checkVLimitCompliant(int mV);
@ -394,14 +412,17 @@ void powerOff();
#if defined(MYTHEN3D) || defined(GOTTHARD2D) #if defined(MYTHEN3D) || defined(GOTTHARD2D)
int getADC(enum ADCINDEX ind, int *value); int getADC(enum ADCINDEX ind, int *value);
#else #else
#ifndef XILINX_CHIPTESTBOARDD
int getADC(enum ADCINDEX ind); int getADC(enum ADCINDEX ind);
#endif #endif
#endif
#ifdef CHIPTESTBOARDD #ifdef CHIPTESTBOARDD
int getSlowADC(int ichan); int getSlowADC(int ichan);
int getSlowADCTemperature(); int getSlowADCTemperature();
#endif #endif
#ifndef XILINX_CHIPTESTBOARDD
int setHighVoltage(int val); int setHighVoltage(int val);
#endif
// parameters - timing, extsig // parameters - timing, extsig
#if defined(EIGERD) || defined(GOTTHARD2D) || defined(JUNGFRAUD) || \ #if defined(EIGERD) || defined(GOTTHARD2D) || defined(JUNGFRAUD) || \
@ -426,8 +447,10 @@ void setSynchronization(int enable);
void updatingRegisters(); void updatingRegisters();
int updateClockDivs(); int updateClockDivs();
#endif #endif
#ifndef XILINX_CHIPTESTBOARDD
void setTiming(enum timingMode arg); void setTiming(enum timingMode arg);
enum timingMode getTiming(); enum timingMode getTiming();
#endif
#ifdef MYTHEN3D #ifdef MYTHEN3D
void setInitialExtSignals(); void setInitialExtSignals();
int setChipStatusRegister(int csr); int setChipStatusRegister(int csr);
@ -478,7 +501,9 @@ void calcChecksum(udp_header *udp);
int getAdcConfigured(); int getAdcConfigured();
#endif #endif
#ifndef XILINX_CHIPTESTBOARDD
int configureMAC(); int configureMAC();
#endif
int setDetectorPosition(int pos[]); int setDetectorPosition(int pos[]);
int *getDetectorPosition(); int *getDetectorPosition();
@ -674,11 +699,13 @@ int setTransmissionDelayRight(int value);
#endif #endif
// aquisition // aquisition
#ifndef XILINX_CHIPTESTBOARDD
int startStateMachine(); int startStateMachine();
#ifdef VIRTUAL #ifdef VIRTUAL
void *start_timer(void *arg); void *start_timer(void *arg);
#endif #endif
int stopStateMachine(); int stopStateMachine();
#endif
#ifdef MYTHEN3D #ifdef MYTHEN3D
int softwareTrigger(); int softwareTrigger();
#endif #endif
@ -688,12 +715,16 @@ int softwareTrigger(int block);
#if defined(EIGERD) || defined(MYTHEN3D) || defined(CHIPTESTBOARDD) #if defined(EIGERD) || defined(MYTHEN3D) || defined(CHIPTESTBOARDD)
int startReadOut(); int startReadOut();
#endif #endif
#ifndef XILINX_CHIPTESTBOARDD
enum runStatus getRunStatus(); enum runStatus getRunStatus();
#endif
#ifdef EIGERD #ifdef EIGERD
void waitForAcquisitionEnd(int *ret, char *mess); void waitForAcquisitionEnd(int *ret, char *mess);
#else #else
#ifndef XILINX_CHIPTESTBOARDD
void waitForAcquisitionEnd(); void waitForAcquisitionEnd();
#endif #endif
#endif
#if defined(CHIPTESTBOARDD) #if defined(CHIPTESTBOARDD)
int validateUDPSocket(); int validateUDPSocket();
void readandSendUDPFrames(); void readandSendUDPFrames();
@ -714,6 +745,7 @@ u_int32_t runState(enum TLogLevel lev);
#endif #endif
// common // common
#ifndef XILINX_CHIPTESTBOARDD
int calculateDataBytes(); int calculateDataBytes();
int getTotalNumberOfChannels(); int getTotalNumberOfChannels();
#if defined(CHIPTESTBOARDD) #if defined(CHIPTESTBOARDD)
@ -722,3 +754,4 @@ void getNumberOfChannels(int *nchanx, int *nchany);
int getNumberOfChips(); int getNumberOfChips();
int getNumberOfDACs(); int getNumberOfDACs();
int getNumberOfChannelsPerChip(); int getNumberOfChannelsPerChip();
#endif

View File

@ -0,0 +1,75 @@
// SPDX-License-Identifier: LGPL-3.0-or-other
// Copyright (C) 2021 Contributors to the SLS Detector Package
#include "arm64.h"
#include "RegisterDefs.h"
#include "clogger.h"
#include "common.h"
#include "sls/ansi.h"
#include "sls/sls_detector_defs.h"
#include <fcntl.h> // open
#include <sys/mman.h> // mmap
/* global variables */
#define CSP0 (0xB0010000)/// 0xB008_0000
#define MEM_SIZE 0x100000
u_int32_t *csp0base = 0;
void bus_w(u_int32_t offset, u_int32_t data) {
volatile u_int32_t *ptr1;
ptr1 = (u_int32_t *)(csp0base + offset / (sizeof(u_int32_t)));
*ptr1 = data;
}
u_int32_t bus_r(u_int32_t offset) {
volatile u_int32_t *ptr1;
ptr1 = (u_int32_t *)(csp0base + offset / (sizeof(u_int32_t)));
return *ptr1;
}
uint64_t getU64BitReg(int aLSB, int aMSB) {
uint64_t retval = bus_r(aMSB);
retval = (retval << 32) | bus_r(aLSB);
return retval;
}
void setU64BitReg(uint64_t value, int aLSB, int aMSB) {
bus_w(aLSB, value & (0xffffffff));
bus_w(aMSB, (value >> 32) & (0xffffffff));
}
int mapCSP0(void) {
// if not mapped
if (csp0base == 0) {
LOG(logINFO, ("Mapping memory\n"));
#ifdef VIRTUAL
csp0base = malloc(MEM_SIZE);
if (csp0base == NULL) {
LOG(logERROR, ("Could not allocate virtual memory.\n"));
return FAIL;
}
LOG(logINFO, ("memory allocated\n"));
#else
int fd;
fd = open("/dev/mem", O_RDWR | O_SYNC, 0);
if (fd == -1) {
LOG(logERROR, ("Can't find /dev/mem\n"));
return FAIL;
}
LOG(logDEBUG1, ("/dev/mem opened\n"));
csp0base = (u_int32_t*)mmap(0, MEM_SIZE, PROT_READ | PROT_WRITE,
MAP_FILE | MAP_SHARED, fd, CSP0);
if (csp0base == MAP_FAILED) {
LOG(logERROR, ("Can't map memmory area\n"));
return FAIL;
}
#endif
LOG(logINFO, ("csp0base mapped from %p to %p\n", csp0base,
(csp0base + MEM_SIZE)));
} else
LOG(logINFO, ("Memory already mapped before\n"));
return OK;
}

View File

@ -114,6 +114,10 @@ int getTimeFromString(char *buf, time_t *result) {
t.tm_mday, t.tm_mon, t.tm_year + 1900, t.tm_hour, t.tm_min, t.tm_sec)); t.tm_mday, t.tm_mon, t.tm_year + 1900, t.tm_hour, t.tm_min, t.tm_sec));
*result = mktime(&t); *result = mktime(&t);
if (*result == -1) {
LOG(logERROR, ("Could not convert time structure to time_t\n"));
return FAIL;
}
return OK; return OK;
} }
@ -130,6 +134,7 @@ int getKernelVersion(char *retvals) {
return OK; return OK;
} }
int validateKernelVersion(char *expectedVersion) { int validateKernelVersion(char *expectedVersion) {
// extract kernel date string // extract kernel date string
char version[255] = {0}; char version[255] = {0};
@ -143,15 +148,26 @@ int validateKernelVersion(char *expectedVersion) {
#ifdef VIRTUAL #ifdef VIRTUAL
strcpy(currentVersion, expectedVersion); strcpy(currentVersion, expectedVersion);
#else #else
#ifndef ARMPROCESSOR
// remove first word (#version number) // remove first word (#version number)
const char *ptr = strchr(version, ' '); const char *ptr = strstr(version, " ");
if (ptr == NULL) { if (ptr == NULL) {
LOG(logERROR, ("Could not parse kernel version\n")); LOG(logERROR, ("Could not parse kernel version\n"));
return FAIL; return FAIL;
} }
strcpy(currentVersion, version + (ptr - version + 1)); strcpy(currentVersion, ptr + 1);
#else
// remove first two words (#version number and SMP)
const char *ptr = strstr(version, "SMP ");
if (ptr == NULL) {
LOG(logERROR, ("Could not parse kernel version\n"));
return FAIL;
}
strcpy(currentVersion, ptr + 4);
#endif #endif
#endif
currentVersion[sizeof(currentVersion) - 1] = '\0';
// convert kernel date string into time // convert kernel date string into time
time_t kernelDate; time_t kernelDate;
if (getTimeFromString(currentVersion, &kernelDate) == FAIL) { if (getTimeFromString(currentVersion, &kernelDate) == FAIL) {
@ -159,6 +175,7 @@ int validateKernelVersion(char *expectedVersion) {
("Could not parse retrieved kernel date, %s\n", currentVersion)); ("Could not parse retrieved kernel date, %s\n", currentVersion));
return FAIL; return FAIL;
} }
LOG(logDEBUG, ("Kernel Date: [%s]\n", ctime(&kernelDate)));
// convert expected date into time // convert expected date into time
time_t expDate; time_t expDate;
@ -167,11 +184,12 @@ int validateKernelVersion(char *expectedVersion) {
("Could not parse expected kernel date, %s\n", expectedVersion)); ("Could not parse expected kernel date, %s\n", expectedVersion));
return FAIL; return FAIL;
} }
LOG(logDEBUG, ("Expected Date: [%s]\n", ctime(&expDate)));
// compare if kernel time is older than expected time // compare if kernel time is older than expected time
if (kernelDate < expDate) { if (kernelDate < expDate) {
LOG(logERROR, ("Kernel Version Incompatible (too old)! Expected: [%s], " LOG(logERROR, ("Kernel Version Incompatible (too old)!\nExpected: '%s'"
"Got [%s]\n", "\nGot : '%s'\n",
expectedVersion, currentVersion)); expectedVersion, currentVersion));
return FAIL; return FAIL;
} }

View File

@ -33,6 +33,8 @@ const enum detectorType myDetectorType = MOENCH;
const enum detectorType myDetectorType = MYTHEN3; const enum detectorType myDetectorType = MYTHEN3;
#elif GOTTHARD2D #elif GOTTHARD2D
const enum detectorType myDetectorType = GOTTHARD2; const enum detectorType myDetectorType = GOTTHARD2;
#elif XILINX_CHIPTESTBOARDD
const enum detectorType myDetectorType = XILINX_CHIPTESTBOARD;
#else #else
const enum detectorType myDetectorType = GENERIC; const enum detectorType myDetectorType = GENERIC;
#endif #endif
@ -717,6 +719,9 @@ int set_timing_mode(int file_des) {
return printSocketReadError(); return printSocketReadError();
LOG(logDEBUG1, ("Setting external communication mode to %d\n", arg)); LOG(logDEBUG1, ("Setting external communication mode to %d\n", arg));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// set // set
if (((int)arg != GET_FLAG) && (Server_VerifyLock() == OK)) { if (((int)arg != GET_FLAG) && (Server_VerifyLock() == OK)) {
switch (arg) { switch (arg) {
@ -753,7 +758,7 @@ int set_timing_mode(int file_des) {
validate(&ret, mess, (int)arg, (int)retval, "set timing mode", DEC); validate(&ret, mess, (int)arg, (int)retval, "set timing mode", DEC);
#endif #endif
LOG(logDEBUG1, ("Timing Mode: %d\n", retval)); LOG(logDEBUG1, ("Timing Mode: %d\n", retval));
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval)); return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
} }
@ -787,7 +792,7 @@ int get_serial_number(int file_des) {
ret = OK; ret = OK;
memset(mess, 0, sizeof(mess)); memset(mess, 0, sizeof(mess));
int64_t retval = -1; int64_t retval = -1;
#ifdef EIGERD #if defined(EIGERD) || defined(XILINX_CHIPTESTBOARDD)
functionNotImplemented(); functionNotImplemented();
#else #else
retval = getDetectorNumber(); retval = getDetectorNumber();
@ -1119,6 +1124,8 @@ enum DACINDEX getDACIndex(enum dacIndex ind) {
case IBIAS_SFP: case IBIAS_SFP:
serverDacIndex = MO_IBIAS_SFP; serverDacIndex = MO_IBIAS_SFP;
break; break;
#elif XILINX_CHIPTESTBOARDD
#endif #endif
default: default:
@ -1137,8 +1144,9 @@ enum DACINDEX getDACIndex(enum dacIndex ind) {
int validateAndSetDac(enum dacIndex ind, int val, int mV) { int validateAndSetDac(enum dacIndex ind, int val, int mV) {
int retval = -1; int retval = -1;
enum DACINDEX serverDacIndex = 0;
#ifndef XILINX_CHIPTESTBOARDD
enum DACINDEX serverDacIndex = 0;
// valid enums // valid enums
switch (ind) { switch (ind) {
case HIGH_VOLTAGE: case HIGH_VOLTAGE:
@ -1389,6 +1397,7 @@ int validateAndSetDac(enum dacIndex ind, int val, int mV) {
#endif #endif
break; break;
} }
#endif
return retval; return retval;
} }
@ -1401,6 +1410,9 @@ int set_dac(int file_des) {
if (receiveData(file_des, args, sizeof(args), INT32) < 0) if (receiveData(file_des, args, sizeof(args), INT32) < 0)
return printSocketReadError(); return printSocketReadError();
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
enum dacIndex ind = args[0]; enum dacIndex ind = args[0];
int mV = args[1]; int mV = args[1];
int val = args[2]; int val = args[2];
@ -1411,6 +1423,7 @@ int set_dac(int file_des) {
if ((val == GET_FLAG) || (Server_VerifyLock() == OK)) { if ((val == GET_FLAG) || (Server_VerifyLock() == OK)) {
retval = validateAndSetDac(ind, val, mV); retval = validateAndSetDac(ind, val, mV);
} }
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval)); return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
} }
@ -1423,6 +1436,9 @@ int get_adc(int file_des) {
if (receiveData(file_des, &ind, sizeof(ind), INT32) < 0) if (receiveData(file_des, &ind, sizeof(ind), INT32) < 0)
return printSocketReadError(); return printSocketReadError();
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
enum ADCINDEX serverAdcIndex = 0; enum ADCINDEX serverAdcIndex = 0;
// get // get
@ -1544,6 +1560,7 @@ int get_adc(int file_des) {
LOG(logDEBUG1, ("ADC(%d): %d\n", serverAdcIndex, retval)); LOG(logDEBUG1, ("ADC(%d): %d\n", serverAdcIndex, retval));
#endif #endif
} }
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval)); return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
} }
@ -1560,6 +1577,9 @@ int write_register(int file_des) {
uint32_t val = args[1]; uint32_t val = args[1];
LOG(logDEBUG1, ("Writing to register 0x%x, data 0x%x\n", addr, val)); LOG(logDEBUG1, ("Writing to register 0x%x, data 0x%x\n", addr, val));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set // only set
if (Server_VerifyLock() == OK) { if (Server_VerifyLock() == OK) {
#ifdef GOTTHARDD #ifdef GOTTHARDD
@ -1594,6 +1614,7 @@ int write_register(int file_des) {
} }
LOG(logDEBUG1, ("Write register (0x%x): 0x%x\n", retval)); LOG(logDEBUG1, ("Write register (0x%x): 0x%x\n", retval));
} }
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval)); return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
} }
@ -1608,6 +1629,10 @@ int read_register(int file_des) {
LOG(logDEBUG1, ("Reading from register 0x%x\n", addr)); LOG(logDEBUG1, ("Reading from register 0x%x\n", addr));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// get // get
#ifdef GOTTHARDD #ifdef GOTTHARDD
retval = readRegister16And32(addr); retval = readRegister16And32(addr);
@ -1624,7 +1649,7 @@ int read_register(int file_des) {
retval = readRegister(addr); retval = readRegister(addr);
#endif #endif
LOG(logINFO, ("Read register (0x%x): 0x%x\n", addr, retval)); LOG(logINFO, ("Read register (0x%x): 0x%x\n", addr, retval));
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval)); return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
} }
@ -1828,7 +1853,7 @@ int set_settings(int file_des) {
if (receiveData(file_des, &isett, sizeof(isett), INT32) < 0) if (receiveData(file_des, &isett, sizeof(isett), INT32) < 0)
return printSocketReadError(); return printSocketReadError();
#ifdef CHIPTESTBOARDD #if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD)
functionNotImplemented(); functionNotImplemented();
#else #else
LOG(logDEBUG1, ("Setting settings %d\n", isett)); LOG(logDEBUG1, ("Setting settings %d\n", isett));
@ -1905,6 +1930,9 @@ int acquire(int blocking, int file_des) {
} else { } else {
LOG(logINFOBLUE, ("Unblocking Acquisition\n")); LOG(logINFOBLUE, ("Unblocking Acquisition\n"));
} }
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set // only set
if (Server_VerifyLock() == OK) { if (Server_VerifyLock() == OK) {
#if defined(JUNGFRAUD) #if defined(JUNGFRAUD)
@ -2003,10 +2031,12 @@ int acquire(int blocking, int file_des) {
} }
} }
} }
#endif
return Server_SendResult(file_des, INT32, NULL, 0); return Server_SendResult(file_des, INT32, NULL, 0);
} }
void *start_state_machine(void *arg) { void *start_state_machine(void *arg) {
#ifndef XILINX_CHIPTESTBOARDD
int *blocking = (int *)arg; int *blocking = (int *)arg;
int times = 1; int times = 1;
// start of scan // start of scan
@ -2132,6 +2162,7 @@ void *start_state_machine(void *arg) {
if (scan && sharedMemory_getScanStatus() != ERROR) { if (scan && sharedMemory_getScanStatus() != ERROR) {
sharedMemory_setScanStatus(IDLE); sharedMemory_setScanStatus(IDLE);
} }
#endif
return NULL; return NULL;
} }
@ -2149,6 +2180,9 @@ int stop_acquisition(int file_des) {
memset(mess, 0, sizeof(mess)); memset(mess, 0, sizeof(mess));
LOG(logDEBUG1, ("Stopping Acquisition\n")); LOG(logDEBUG1, ("Stopping Acquisition\n"));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set // only set
if (Server_VerifyLock() == OK) { if (Server_VerifyLock() == OK) {
ret = stopStateMachine(); ret = stopStateMachine();
@ -2158,6 +2192,7 @@ int stop_acquisition(int file_des) {
} }
LOG(logDEBUG1, ("Stopping Acquisition ret: %d\n", ret)); LOG(logDEBUG1, ("Stopping Acquisition ret: %d\n", ret));
} }
#endif
return Server_SendResult(file_des, INT32, NULL, 0); return Server_SendResult(file_des, INT32, NULL, 0);
} }
@ -2167,9 +2202,13 @@ int get_run_status(int file_des) {
enum runStatus retval = ERROR; enum runStatus retval = ERROR;
LOG(logDEBUG1, ("Getting status\n")); LOG(logDEBUG1, ("Getting status\n"));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only get // only get
retval = getRunStatus(); retval = getRunStatus();
LOG(logDEBUG1, ("Status: %d\n", retval)); LOG(logDEBUG1, ("Status: %d\n", retval));
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval)); return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
} }
@ -2180,6 +2219,9 @@ int get_num_frames(int file_des) {
memset(mess, 0, sizeof(mess)); memset(mess, 0, sizeof(mess));
int64_t retval = -1; int64_t retval = -1;
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// get only // get only
if (!scan) { if (!scan) {
retval = getNumFrames(); retval = getNumFrames();
@ -2189,6 +2231,7 @@ int get_num_frames(int file_des) {
LOG(logDEBUG1, ("retval num frames (num scan steps) %lld\n", LOG(logDEBUG1, ("retval num frames (num scan steps) %lld\n",
(long long int)retval)); (long long int)retval));
} }
#endif
return Server_SendResult(file_des, INT64, &retval, sizeof(retval)); return Server_SendResult(file_des, INT64, &retval, sizeof(retval));
} }
@ -2201,6 +2244,9 @@ int set_num_frames(int file_des) {
return printSocketReadError(); return printSocketReadError();
LOG(logDEBUG1, ("Setting number of frames %lld\n", (long long int)arg)); LOG(logDEBUG1, ("Setting number of frames %lld\n", (long long int)arg));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set // only set
if (Server_VerifyLock() == OK) { if (Server_VerifyLock() == OK) {
// only set number of frames if normal mode (not scan) // only set number of frames if normal mode (not scan)
@ -2246,6 +2292,7 @@ int set_num_frames(int file_des) {
} }
} }
} }
#endif
return Server_SendResult(file_des, INT64, NULL, 0); return Server_SendResult(file_des, INT64, NULL, 0);
} }
@ -2254,9 +2301,13 @@ int get_num_triggers(int file_des) {
memset(mess, 0, sizeof(mess)); memset(mess, 0, sizeof(mess));
int64_t retval = -1; int64_t retval = -1;
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// get only // get only
retval = getNumTriggers(); retval = getNumTriggers();
LOG(logDEBUG1, ("retval num triggers %lld\n", (long long int)retval)); LOG(logDEBUG1, ("retval num triggers %lld\n", (long long int)retval));
#endif
return Server_SendResult(file_des, INT64, &retval, sizeof(retval)); return Server_SendResult(file_des, INT64, &retval, sizeof(retval));
} }
@ -2269,6 +2320,9 @@ int set_num_triggers(int file_des) {
return printSocketReadError(); return printSocketReadError();
LOG(logDEBUG1, ("Setting number of triggers %lld\n", (long long int)arg)); LOG(logDEBUG1, ("Setting number of triggers %lld\n", (long long int)arg));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set // only set
if (Server_VerifyLock() == OK) { if (Server_VerifyLock() == OK) {
#if JUNGFRAUD #if JUNGFRAUD
@ -2288,6 +2342,7 @@ int set_num_triggers(int file_des) {
validate64(&ret, mess, arg, retval, "set number of triggers", DEC); validate64(&ret, mess, arg, retval, "set number of triggers", DEC);
} }
} }
#endif
return Server_SendResult(file_des, INT64, NULL, 0); return Server_SendResult(file_des, INT64, NULL, 0);
} }
@ -2447,6 +2502,9 @@ int get_exptime(int file_des) {
if (receiveData(file_des, &gateIndex, sizeof(gateIndex), INT32) < 0) if (receiveData(file_des, &gateIndex, sizeof(gateIndex), INT32) < 0)
return printSocketReadError(); return printSocketReadError();
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// get only // get only
#ifdef MYTHEN3D #ifdef MYTHEN3D
if (gateIndex < 0 || gateIndex > 2) { if (gateIndex < 0 || gateIndex > 2) {
@ -2470,6 +2528,7 @@ int get_exptime(int file_des) {
retval = getExpTime(); retval = getExpTime();
LOG(logDEBUG1, ("retval exptime %lld ns\n", (long long int)retval)); LOG(logDEBUG1, ("retval exptime %lld ns\n", (long long int)retval));
} }
#endif
#endif #endif
return Server_SendResult(file_des, INT64, &retval, sizeof(retval)); return Server_SendResult(file_des, INT64, &retval, sizeof(retval));
} }
@ -2486,6 +2545,9 @@ int set_exptime(int file_des) {
LOG(logDEBUG1, ("Setting exptime %lld ns (gateIndex:%d)\n", LOG(logDEBUG1, ("Setting exptime %lld ns (gateIndex:%d)\n",
(long long int)val, gateIndex)); (long long int)val, gateIndex));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set // only set
if (Server_VerifyLock() == OK) { if (Server_VerifyLock() == OK) {
#ifdef MYTHEN3D #ifdef MYTHEN3D
@ -2550,6 +2612,7 @@ int set_exptime(int file_des) {
} }
#endif #endif
} }
#endif
return Server_SendResult(file_des, INT64, NULL, 0); return Server_SendResult(file_des, INT64, NULL, 0);
} }
@ -2558,9 +2621,13 @@ int get_period(int file_des) {
memset(mess, 0, sizeof(mess)); memset(mess, 0, sizeof(mess));
int64_t retval = -1; int64_t retval = -1;
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// get only // get only
retval = getPeriod(); retval = getPeriod();
LOG(logDEBUG1, ("retval period %lld ns\n", (long long int)retval)); LOG(logDEBUG1, ("retval period %lld ns\n", (long long int)retval));
#endif
return Server_SendResult(file_des, INT64, &retval, sizeof(retval)); return Server_SendResult(file_des, INT64, &retval, sizeof(retval));
} }
@ -2573,6 +2640,9 @@ int set_period(int file_des) {
return printSocketReadError(); return printSocketReadError();
LOG(logDEBUG1, ("Setting period %lld ns\n", (long long int)arg)); LOG(logDEBUG1, ("Setting period %lld ns\n", (long long int)arg));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set // only set
if (Server_VerifyLock() == OK) { if (Server_VerifyLock() == OK) {
ret = setPeriod(arg); ret = setPeriod(arg);
@ -2584,6 +2654,7 @@ int set_period(int file_des) {
LOG(logERROR, (mess)); LOG(logERROR, (mess));
} }
} }
#endif
return Server_SendResult(file_des, INT64, NULL, 0); return Server_SendResult(file_des, INT64, NULL, 0);
} }
@ -2991,6 +3062,9 @@ int set_dynamic_range(int file_des) {
return printSocketReadError(); return printSocketReadError();
LOG(logDEBUG1, ("Setting dr to %d\n", dr)); LOG(logDEBUG1, ("Setting dr to %d\n", dr));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// set & get // set & get
if ((dr == GET_FLAG) || (Server_VerifyLock() == OK)) { if ((dr == GET_FLAG) || (Server_VerifyLock() == OK)) {
// check dr // check dr
@ -3039,6 +3113,7 @@ int set_dynamic_range(int file_des) {
break; break;
} }
} }
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval)); return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
} }
@ -3153,7 +3228,7 @@ int enable_ten_giga(int file_des) {
LOG(logDEBUG, ("Setting 10GbE: %d\n", arg)); LOG(logDEBUG, ("Setting 10GbE: %d\n", arg));
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(GOTTHARDD) || \ #if defined(JUNGFRAUD) || defined(MOENCHD) || defined(GOTTHARDD) || \
defined(GOTTHARD2D) defined(GOTTHARD2D) || defined(XILINX_CHIPTESTBOARDD)
functionNotImplemented(); functionNotImplemented();
#else #else
// set & get // set & get
@ -4322,7 +4397,7 @@ int reboot_controller(int file_des) {
ret = OK; ret = OK;
memset(mess, 0, sizeof(mess)); memset(mess, 0, sizeof(mess));
#ifdef EIGERD #if defined(EIGERD) || defined(XILINX_CHIPTESTBOARDD)
functionNotImplemented(); functionNotImplemented();
#elif VIRTUAL #elif VIRTUAL
ret = GOODBYE; ret = GOODBYE;
@ -4951,6 +5026,9 @@ int set_detector_position(int file_des) {
LOG(logDEBUG, ("Setting detector positions: [maxy:%u, modIndex:%u]\n", LOG(logDEBUG, ("Setting detector positions: [maxy:%u, modIndex:%u]\n",
args[0], args[1])); args[0], args[1]));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set // only set
if (Server_VerifyLock() == OK) { if (Server_VerifyLock() == OK) {
// if in update mode, there is no need to do this (also detector not set // if in update mode, there is no need to do this (also detector not set
@ -4961,10 +5039,14 @@ int set_detector_position(int file_des) {
calculate_and_set_position(); calculate_and_set_position();
} }
} }
#endif
return Server_SendResult(file_des, INT32, NULL, 0); return Server_SendResult(file_des, INT32, NULL, 0);
} }
int check_detector_idle(const char *s) { int check_detector_idle(const char *s) {
#ifdef XILINX_CHIPTESTBOARDD
return FAIL;
#else
enum runStatus status = getRunStatus(); enum runStatus status = getRunStatus();
if (status != IDLE && status != RUN_FINISHED && status != STOPPED && if (status != IDLE && status != RUN_FINISHED && status != STOPPED &&
status != ERROR) { status != ERROR) {
@ -4976,6 +5058,7 @@ int check_detector_idle(const char *s) {
LOG(logERROR, (mess)); LOG(logERROR, (mess));
} }
return ret; return ret;
#endif
} }
int is_udp_configured() { int is_udp_configured() {
@ -5042,6 +5125,7 @@ int is_udp_configured() {
} }
void configure_mac() { void configure_mac() {
#ifndef XILINX_CHIPTESTBOARDD
if (isControlServer) { if (isControlServer) {
if (is_udp_configured() == OK) { if (is_udp_configured() == OK) {
ret = configureMAC(); ret = configureMAC();
@ -5068,6 +5152,7 @@ void configure_mac() {
} }
configured = FAIL; configured = FAIL;
LOG(logWARNING, ("Configure FAIL, not all parameters configured yet\n")); LOG(logWARNING, ("Configure FAIL, not all parameters configured yet\n"));
#endif
} }
int set_source_udp_ip(int file_des) { int set_source_udp_ip(int file_des) {
@ -5080,6 +5165,9 @@ int set_source_udp_ip(int file_des) {
arg = __builtin_bswap32(arg); arg = __builtin_bswap32(arg);
LOG(logINFO, ("Setting udp source ip: 0x%x\n", arg)); LOG(logINFO, ("Setting udp source ip: 0x%x\n", arg));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set // only set
if (Server_VerifyLock() == OK) { if (Server_VerifyLock() == OK) {
if (check_detector_idle("configure mac") == OK) { if (check_detector_idle("configure mac") == OK) {
@ -5092,6 +5180,7 @@ int set_source_udp_ip(int file_des) {
} }
} }
} }
#endif
return Server_SendResult(file_des, INT32, NULL, 0); return Server_SendResult(file_des, INT32, NULL, 0);
} }
@ -5101,11 +5190,14 @@ int get_source_udp_ip(int file_des) {
uint32_t retval = -1; uint32_t retval = -1;
LOG(logDEBUG1, ("Getting udp source ip\n")); LOG(logDEBUG1, ("Getting udp source ip\n"));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// get only // get only
retval = udpDetails[0].srcip; retval = udpDetails[0].srcip;
retval = __builtin_bswap32(retval); retval = __builtin_bswap32(retval);
LOG(logDEBUG1, ("udp soure ip retval: 0x%x\n", retval)); LOG(logDEBUG1, ("udp soure ip retval: 0x%x\n", retval));
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval)); return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
} }
@ -5165,6 +5257,9 @@ int set_dest_udp_ip(int file_des) {
arg = __builtin_bswap32(arg); arg = __builtin_bswap32(arg);
LOG(logINFO, ("Setting udp destination ip: 0x%x\n", arg)); LOG(logINFO, ("Setting udp destination ip: 0x%x\n", arg));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set // only set
if (Server_VerifyLock() == OK) { if (Server_VerifyLock() == OK) {
if (check_detector_idle("configure mac") == OK) { if (check_detector_idle("configure mac") == OK) {
@ -5174,6 +5269,7 @@ int set_dest_udp_ip(int file_des) {
} }
} }
} }
#endif
return Server_SendResult(file_des, INT32, NULL, 0); return Server_SendResult(file_des, INT32, NULL, 0);
} }
@ -5183,11 +5279,14 @@ int get_dest_udp_ip(int file_des) {
uint32_t retval = -1; uint32_t retval = -1;
LOG(logDEBUG1, ("Getting destination ip\n")); LOG(logDEBUG1, ("Getting destination ip\n"));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// get only // get only
retval = udpDetails[0].dstip; retval = udpDetails[0].dstip;
retval = __builtin_bswap32(retval); retval = __builtin_bswap32(retval);
LOG(logDEBUG1, ("udp destination ip retval: 0x%x\n", retval)); LOG(logDEBUG1, ("udp destination ip retval: 0x%x\n", retval));
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval)); return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
} }
@ -5243,6 +5342,9 @@ int set_source_udp_mac(int file_des) {
return printSocketReadError(); return printSocketReadError();
LOG(logINFO, ("Setting udp source mac: 0x%lx\n", arg)); LOG(logINFO, ("Setting udp source mac: 0x%lx\n", arg));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set // only set
if (Server_VerifyLock() == OK) { if (Server_VerifyLock() == OK) {
if (check_detector_idle("configure mac") == OK) { if (check_detector_idle("configure mac") == OK) {
@ -5264,6 +5366,7 @@ int set_source_udp_mac(int file_des) {
} }
} }
} }
#endif
return Server_SendResult(file_des, INT64, NULL, 0); return Server_SendResult(file_des, INT64, NULL, 0);
} }
@ -5272,11 +5375,13 @@ int get_source_udp_mac(int file_des) {
memset(mess, 0, sizeof(mess)); memset(mess, 0, sizeof(mess));
uint64_t retval = -1; uint64_t retval = -1;
LOG(logDEBUG1, ("Getting udp source mac\n")); LOG(logDEBUG1, ("Getting udp source mac\n"));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// get only // get only
retval = udpDetails[0].srcmac; retval = udpDetails[0].srcmac;
LOG(logDEBUG1, ("udp soure mac retval: 0x%lx\n", retval)); LOG(logDEBUG1, ("udp soure mac retval: 0x%lx\n", retval));
#endif
return Server_SendResult(file_des, INT64, &retval, sizeof(retval)); return Server_SendResult(file_des, INT64, &retval, sizeof(retval));
} }
@ -5333,6 +5438,9 @@ int set_dest_udp_mac(int file_des) {
return printSocketReadError(); return printSocketReadError();
LOG(logINFO, ("Setting udp destination mac: 0x%lx\n", arg)); LOG(logINFO, ("Setting udp destination mac: 0x%lx\n", arg));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set // only set
if (Server_VerifyLock() == OK) { if (Server_VerifyLock() == OK) {
if (check_detector_idle("configure mac") == OK) { if (check_detector_idle("configure mac") == OK) {
@ -5342,6 +5450,7 @@ int set_dest_udp_mac(int file_des) {
} }
} }
} }
#endif
return Server_SendResult(file_des, INT64, NULL, 0); return Server_SendResult(file_des, INT64, NULL, 0);
} }
@ -5350,11 +5459,13 @@ int get_dest_udp_mac(int file_des) {
memset(mess, 0, sizeof(mess)); memset(mess, 0, sizeof(mess));
uint64_t retval = -1; uint64_t retval = -1;
LOG(logDEBUG1, ("Getting udp destination mac\n")); LOG(logDEBUG1, ("Getting udp destination mac\n"));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// get only // get only
retval = udpDetails[0].dstmac; retval = udpDetails[0].dstmac;
LOG(logDEBUG1, ("udp destination mac retval: 0x%lx\n", retval)); LOG(logDEBUG1, ("udp destination mac retval: 0x%lx\n", retval));
#endif
return Server_SendResult(file_des, INT64, &retval, sizeof(retval)); return Server_SendResult(file_des, INT64, &retval, sizeof(retval));
} }
@ -5408,6 +5519,9 @@ int set_dest_udp_port(int file_des) {
return printSocketReadError(); return printSocketReadError();
LOG(logINFO, ("Setting udp destination port: %hu\n", arg)); LOG(logINFO, ("Setting udp destination port: %hu\n", arg));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set // only set
if (Server_VerifyLock() == OK) { if (Server_VerifyLock() == OK) {
if (check_detector_idle("configure mac") == OK) { if (check_detector_idle("configure mac") == OK) {
@ -5417,6 +5531,7 @@ int set_dest_udp_port(int file_des) {
} }
} }
} }
#endif
return Server_SendResult(file_des, INT16, NULL, 0); return Server_SendResult(file_des, INT16, NULL, 0);
} }
@ -5425,11 +5540,13 @@ int get_dest_udp_port(int file_des) {
memset(mess, 0, sizeof(mess)); memset(mess, 0, sizeof(mess));
uint16_t retval = -1; uint16_t retval = -1;
LOG(logDEBUG1, ("Getting destination port")); LOG(logDEBUG1, ("Getting destination port"));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// get only // get only
retval = udpDetails[0].dstport; retval = udpDetails[0].dstport;
LOG(logDEBUG, ("udp destination port retval: %hu\n", retval)); LOG(logDEBUG, ("udp destination port retval: %hu\n", retval));
#endif
return Server_SendResult(file_des, INT16, &retval, sizeof(retval)); return Server_SendResult(file_des, INT16, &retval, sizeof(retval));
} }
@ -5485,7 +5602,8 @@ int set_num_interfaces(int file_des) {
return printSocketReadError(); return printSocketReadError();
LOG(logINFO, ("Setting number of interfaces: %d\n", arg)); LOG(logINFO, ("Setting number of interfaces: %d\n", arg));
#if !defined(JUNGFRAUD) && !defined(MOENCHD) && !defined(GOTTHARD2D) #if !defined(JUNGFRAUD) && !defined(MOENCHD) && !defined(GOTTHARD2D) && \
!defined(XLINX_CHIPTESTBOARDD)
// fixed number of udp interfaces // fixed number of udp interfaces
int num_interfaces = getNumberofUDPInterfaces(); int num_interfaces = getNumberofUDPInterfaces();
if (arg != num_interfaces) { if (arg != num_interfaces) {
@ -5557,7 +5675,6 @@ int get_num_interfaces(int file_des) {
// get only // get only
retval = getNumberofUDPInterfaces(); retval = getNumberofUDPInterfaces();
LOG(logDEBUG1, ("Number of udp interfaces retval: %u\n", retval)); LOG(logDEBUG1, ("Number of udp interfaces retval: %u\n", retval));
return Server_SendResult(file_des, INT32, &retval, sizeof(retval)); return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
} }
@ -7020,6 +7137,10 @@ int get_receiver_parameters(int file_des) {
memset(mess, 0, sizeof(mess)); memset(mess, 0, sizeof(mess));
LOG(logDEBUG1, ("Getting receiver parameters\n")); LOG(logDEBUG1, ("Getting receiver parameters\n"));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
Server_SendResult(file_des, INT32, NULL, 0);
#else
// get only // get only
Server_SendResult(file_des, INT32, NULL, 0); Server_SendResult(file_des, INT32, NULL, 0);
@ -7477,7 +7598,7 @@ int get_receiver_parameters(int file_des) {
return printSocketReadError(); return printSocketReadError();
LOG(logINFO, ("Sent %d bytes for receiver parameters\n", n)); LOG(logINFO, ("Sent %d bytes for receiver parameters\n", n));
#endif
return OK; return OK;
} }
@ -7819,6 +7940,9 @@ int set_scan(int file_des) {
if (receiveData(file_des, &dacTime, sizeof(dacTime), INT64) < 0) if (receiveData(file_des, &dacTime, sizeof(dacTime), INT64) < 0)
return printSocketReadError(); return printSocketReadError();
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set // only set
if (Server_VerifyLock() == OK) { if (Server_VerifyLock() == OK) {
int enable = args[0]; int enable = args[0];
@ -7908,6 +8032,7 @@ int set_scan(int file_des) {
} }
} }
} }
#endif
return Server_SendResult(file_des, INT64, &retval, sizeof(retval)); return Server_SendResult(file_des, INT64, &retval, sizeof(retval));
} }
@ -8265,6 +8390,9 @@ int reconfigure_udp(int file_des) {
ret = OK; ret = OK;
memset(mess, 0, sizeof(mess)); memset(mess, 0, sizeof(mess));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
if (Server_VerifyLock() == OK) { if (Server_VerifyLock() == OK) {
LOG(logINFO, ("Reconfiguring UDP\n")); LOG(logINFO, ("Reconfiguring UDP\n"));
if (check_detector_idle("configure mac") == OK) { if (check_detector_idle("configure mac") == OK) {
@ -8277,6 +8405,7 @@ int reconfigure_udp(int file_des) {
} }
} }
} }
#endif
return Server_SendResult(file_des, INT32, NULL, 0); return Server_SendResult(file_des, INT32, NULL, 0);
} }
@ -8377,7 +8506,7 @@ int reset_to_default_dacs(int file_des) {
return printSocketReadError(); return printSocketReadError();
LOG(logDEBUG1, ("Resetting dacs to defaults (hard reset: %d)\n", arg)); LOG(logDEBUG1, ("Resetting dacs to defaults (hard reset: %d)\n", arg));
#ifdef CHIPTESTBOARDD #if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD)
functionNotImplemented(); functionNotImplemented();
#else #else
if (Server_VerifyLock() == OK) { if (Server_VerifyLock() == OK) {
@ -8792,7 +8921,7 @@ int get_default_dac(int file_des) {
LOG(logDEBUG1, LOG(logDEBUG1,
("Getting default dac [dacindex:%d, settings: %d]\n", dacindex, sett)); ("Getting default dac [dacindex:%d, settings: %d]\n", dacindex, sett));
#ifdef CHIPTESTBOARDD #if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD)
functionNotImplemented(); functionNotImplemented();
#else #else
// get only // get only
@ -8832,7 +8961,7 @@ int set_default_dac(int file_des) {
LOG(logDEBUG1, ("Setting default dac [dacindex: %d, settings: %d] to %d\n", LOG(logDEBUG1, ("Setting default dac [dacindex: %d, settings: %d] to %d\n",
(int)dacindex, (int)sett, value)); (int)dacindex, (int)sett, value));
#ifdef CHIPTESTBOARDD #if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD)
functionNotImplemented(); functionNotImplemented();
#else #else
// only set // only set
@ -9452,6 +9581,11 @@ int clear_all_udp_dst(int file_des) {
memset(mess, 0, sizeof(mess)); memset(mess, 0, sizeof(mess));
LOG(logINFO, ("Clearing all udp destinations\n")); LOG(logINFO, ("Clearing all udp destinations\n"));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
if (Server_VerifyLock() == OK) { if (Server_VerifyLock() == OK) {
if (check_detector_idle("clear all udp destinations") == OK) { if (check_detector_idle("clear all udp destinations") == OK) {
memset(udpDetails, 0, sizeof(udpDetails)); memset(udpDetails, 0, sizeof(udpDetails));
@ -9479,6 +9613,7 @@ int clear_all_udp_dst(int file_des) {
} }
} }
} }
#endif
return Server_SendResult(file_des, INT32, NULL, 0); return Server_SendResult(file_des, INT32, NULL, 0);
} }
@ -9618,7 +9753,9 @@ int get_kernel_version(int file_des) {
memset(retvals, 0, MAX_STR_LENGTH); memset(retvals, 0, MAX_STR_LENGTH);
LOG(logDEBUG1, ("Getting kernel version\n")); LOG(logDEBUG1, ("Getting kernel version\n"));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// get only // get only
ret = getKernelVersion(retvals); ret = getKernelVersion(retvals);
if (ret == FAIL) { if (ret == FAIL) {
@ -9631,13 +9768,14 @@ int get_kernel_version(int file_des) {
} else { } else {
LOG(logDEBUG1, ("kernel version: [%s]\n", retvals)); LOG(logDEBUG1, ("kernel version: [%s]\n", retvals));
} }
#endif
return Server_SendResult(file_des, OTHER, retvals, sizeof(retvals)); return Server_SendResult(file_des, OTHER, retvals, sizeof(retvals));
} }
int update_kernel(int file_des) { int update_kernel(int file_des) {
ret = OK; ret = OK;
memset(mess, 0, sizeof(mess)); memset(mess, 0, sizeof(mess));
#ifdef EIGERD #if defined(EIGERD) || defined(XILINX_CHIPTESTBOARDD)
functionNotImplemented(); functionNotImplemented();
return Server_SendResult(file_des, INT32, NULL, 0); return Server_SendResult(file_des, INT32, NULL, 0);
#else #else
@ -9689,7 +9827,8 @@ int receive_program(int file_des, enum PROGRAM_INDEX index) {
LOG(logINFO, ("\tServer Name: %s\n", serverName)); LOG(logINFO, ("\tServer Name: %s\n", serverName));
} }
#if !defined(GOTTHARD2D) && !defined(MYTHEN3D) && !defined(EIGERD) #if !defined(GOTTHARD2D) && !defined(MYTHEN3D) && !defined(EIGERD) && \
!defined(XILINX_CHIPTESTBOARDD)
int forceDeleteNormalFile = 0; int forceDeleteNormalFile = 0;
if (receiveData(file_des, &forceDeleteNormalFile, if (receiveData(file_des, &forceDeleteNormalFile,
sizeof(forceDeleteNormalFile), INT32) < 0) sizeof(forceDeleteNormalFile), INT32) < 0)
@ -9725,7 +9864,8 @@ int receive_program(int file_des, enum PROGRAM_INDEX index) {
} }
if (ret == OK) { if (ret == OK) {
#if defined(GOTTHARD2D) || defined(MYTHEN3D) || defined(EIGERD) #if defined(GOTTHARD2D) || defined(MYTHEN3D) || defined(EIGERD) || \
defined(XILINX_CHIPTESTBOARDD)
receive_program_default(file_des, index, functionType, filesize, receive_program_default(file_des, index, functionType, filesize,
checksum, serverName); checksum, serverName);
#else #else
@ -9871,7 +10011,8 @@ void receive_program_via_blackfin(int file_des, enum PROGRAM_INDEX index,
void receive_program_default(int file_des, enum PROGRAM_INDEX index, void receive_program_default(int file_des, enum PROGRAM_INDEX index,
char *functionType, uint64_t filesize, char *functionType, uint64_t filesize,
char *checksum, char *serverName) { char *checksum, char *serverName) {
#if !defined(GOTTHARD2D) && !defined(MYTHEN3D) && !defined(EIGERD) #if !defined(GOTTHARD2D) && !defined(MYTHEN3D) && !defined(EIGERD) && \
!defined(XILINX_CHIPTESTBOARDD)
ret = FAIL; ret = FAIL;
sprintf(mess, sprintf(mess,
"Could not %s. program via blackfin not implmented for this " "Could not %s. program via blackfin not implmented for this "
@ -10389,8 +10530,12 @@ int get_hardware_version(int file_des) {
memset(mess, 0, sizeof(mess)); memset(mess, 0, sizeof(mess));
char retvals[MAX_STR_LENGTH]; char retvals[MAX_STR_LENGTH];
memset(retvals, 0, MAX_STR_LENGTH); memset(retvals, 0, MAX_STR_LENGTH);
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
getHardwareVersion(retvals); getHardwareVersion(retvals);
LOG(logDEBUG1, ("hardware version retval: %s\n", retvals)); LOG(logDEBUG1, ("hardware version retval: %s\n", retvals));
#endif
return Server_SendResult(file_des, OTHER, retvals, sizeof(retvals)); return Server_SendResult(file_des, OTHER, retvals, sizeof(retvals));
} }
@ -10443,6 +10588,10 @@ int set_bit(int file_des) {
int nBit = (int)args[1]; int nBit = (int)args[1];
LOG(logDEBUG1, ("Setting bit %d of reg 0x%x\n", nBit, addr)); LOG(logDEBUG1, ("Setting bit %d of reg 0x%x\n", nBit, addr));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set // only set
if (Server_VerifyLock() == OK) { if (Server_VerifyLock() == OK) {
if (nBit < 0 || nBit > 31) { if (nBit < 0 || nBit > 31) {
@ -10473,6 +10622,7 @@ int set_bit(int file_des) {
} }
} }
} }
#endif
return Server_SendResult(file_des, INT32, NULL, 0); return Server_SendResult(file_des, INT32, NULL, 0);
} }
@ -10487,6 +10637,9 @@ int clear_bit(int file_des) {
int nBit = (int)args[1]; int nBit = (int)args[1];
LOG(logDEBUG1, ("Clearing bit %d of reg 0x%x\n", nBit, addr)); LOG(logDEBUG1, ("Clearing bit %d of reg 0x%x\n", nBit, addr));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// only set // only set
if (Server_VerifyLock() == OK) { if (Server_VerifyLock() == OK) {
if (nBit < 0 || nBit > 31) { if (nBit < 0 || nBit > 31) {
@ -10517,6 +10670,7 @@ int clear_bit(int file_des) {
} }
} }
} }
#endif
return Server_SendResult(file_des, INT32, NULL, 0); return Server_SendResult(file_des, INT32, NULL, 0);
} }
@ -10532,6 +10686,9 @@ int get_bit(int file_des) {
int nBit = (int)args[1]; int nBit = (int)args[1];
LOG(logDEBUG1, ("Getting bit %d of reg 0x%x\n", nBit, addr)); LOG(logDEBUG1, ("Getting bit %d of reg 0x%x\n", nBit, addr));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
if (nBit < 0 || nBit > 31) { if (nBit < 0 || nBit > 31) {
ret = FAIL; ret = FAIL;
sprintf(mess, sprintf(mess,
@ -10556,6 +10713,7 @@ int get_bit(int file_des) {
LOG(logDEBUG1, ("regval: 0x%x bit value:0%d\n", regval, retval)); LOG(logDEBUG1, ("regval: 0x%x bit value:0%d\n", regval, retval));
#endif #endif
} }
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval)); return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
} }

View File

@ -0,0 +1,38 @@
# SPDX-License-Identifier: LGPL-3.0-or-other
# Copyright (C) 2021 Contributors to the SLS Detector Package
add_executable(xilinx_ctbDetectorServer_virtual
slsDetectorFunctionList.c
../slsDetectorServer/src/slsDetectorServer.c
../slsDetectorServer/src/slsDetectorServer_funcs.c
../slsDetectorServer/src/communication_funcs.c
../slsDetectorServer/src/arm64.c
../slsDetectorServer/src/common.c
../slsDetectorServer/src/sharedMemory.c
../../slsSupportLib/src/md5.c
)
include_directories(
../slsDetectorServer/include
../../slsSupportLib/include
../../slsDetectorSoftware/include/sls/
)
target_include_directories(xilinx_ctbDetectorServer_virtual
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
)
target_compile_definitions(xilinx_ctbDetectorServer_virtual
PUBLIC XILINX_CHIPTESTBOARDD ARMPROCESSOR VIRTUAL STOP_SERVER
)
target_link_libraries(xilinx_ctbDetectorServer_virtual
PUBLIC pthread rt slsProjectCSettings
)
set_target_properties(xilinx_ctbDetectorServer_virtual PROPERTIES
RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin
)
install(TARGETS xilinx_ctbDetectorServer_virtual
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

View File

@ -0,0 +1,47 @@
# SPDX-License-Identifier: LGPL-3.0-or-other
# Copyright (C) 2021 Contributors to the SLS Detector Package
current_dir = $(shell pwd)
main_inc = ../slsDetectorServer/include/
main_src = ../slsDetectorServer/src/
support_lib = ../../slsSupportLib/include/
det_lib = ../../slsDetectorSoftware/include/sls/
md5_dir = ../../slsSupportLib/src/
CROSS = aarch64-none-linux-gnu-
CC = $(CROSS)gcc
#TODO: allow these warnings and fix code
CFLAGS += -Wall -std=gnu99 -Wno-format-overflow -Wno-format-truncation -DXILINX_CHIPTESTBOARDD -DARMPROCESSOR -DSTOP_SERVER -I$(main_inc) -I$(support_lib) -I$(det_lib) -I$(current_dir) #-DDEBUG1 #-DVERBOSEI #-DVERBOSE
#CFLAGS += -Wall -std=gnu99 -DXILINX_CHIPTESTBOARDD -DARMPROCESSOR -DSTOP_SERVER -I$(main_inc) -I$(support_lib) -I$(det_lib) -I$(current_dir) #-DDEBUG1 #-DVERBOSEI #-DVERBOSE
LDLIBS += -lm -lrt -pthread
PROGS = xilinx_ctbDetectorServer
DESTDIR ?= bin
INSTMODE = 0777
SRCS = slsDetectorFunctionList.c
SRCS += $(main_src)slsDetectorServer.c $(main_src)slsDetectorServer_funcs.c $(main_src)communication_funcs.c $(main_src)arm64.c $(main_src)common.c $(main_src)/sharedMemory.c $(md5_dir)md5.c
OBJS = $(SRCS:.c=.o)
all: clean $(PROGS)
version: clean versioning $(PROGS)
boot: $(OBJS)
version_branch=$(API_BRANCH)
version_name=APIXILINXCTB
version_path=slsDetectorServers/xilinx_ctbDetectorServer
versioning:
cd ../../ && echo $(PWD) && echo `tput setaf 6; ./updateAPIVersion.sh $(version_name) $(version_path) $(version_branch); tput sgr0;`
$(PROGS): $(OBJS)
# echo $(OBJS)
mkdir -p $(DESTDIR)
$(CC) -o $@ $^ $(CFLAGS) $(LDLIBS)
mv $(PROGS) $(DESTDIR)
rm $(main_src)*.o $(md5_dir)*.o
clean:
rm -rf $(DESTDIR)/$(PROGS) *.o *.gdb $(main_src)*.o $(md5_dir)*.o

View File

@ -0,0 +1,416 @@
// SPDX-License-Identifier: LGPL-3.0-or-other
// Copyright (C) 2021 Contributors to the SLS Detector Package
#pragma once
#define CTRLREG1 (0x0)
#define CTR1_OFST (0)
#define CTR1_MSK (0xffffffff << CTR1_OFST)
#define CTRLREG2 (0x4)
#define CTRL2_OFST (0)
#define CTRL2_MSK (0xffffffff << CTRL2_OFST)
#define STATUSREG1 (0x8)
#define STATUS1_OFST (0)
#define STATUS1_MSK (0xffffffff << STATUS1_OFST)
#define STATUSREG2 (0xC)
#define STATUS2_OFST (0)
#define STATUS2_MSK (0xffffffff << STATUS2_OFST)
#define FPGAVERSIONREG (0x10)
#define COMPDATE_OFST (0)
#define COMPDATE_MSK (0x00ffffff << COMPDATE_OFST)
#define DETTYPE_OFST (24)
#define DETTYPE_MSK (0x000000ff << DETTYPE_OFST)
#define PKTPACKETLENGTHREG (0x28)
#define PACKETLENGTH1G_OFST (0)
#define PACKETLENGTH1G_MSK (0x0000ffff << PACKETLENGTH1G_OFST)
#define PACKETLENGTH10G_OFST (16)
#define PACKETLENGTH10G_MSK (0x0000ffff << PACKETLENGTH10G_OFST)
#define PKTNOPACKETSREG (0x30)
#define NOPACKETS1G_OFST (0)
#define NOPACKETS1G_MSK (0x0000003f << NOPACKETS1G_OFST)
#define NOPACKETS10G_OFST (8)
#define NOPACKETS10G_MSK (0x0000003f << NOPACKETS10G_OFST)
#define PKTCTRLREG (0x38)
#define NSERVERS_OFST (0)
#define NSERVERS_MSK (0x0000003f << NSERVERS_OFST)
#define SERVERSTART_OFST (6)
#define SERVERSTART_MSK (0x0000001f << SERVERSTART_OFST)
#define ETHINTERF_OFST (11)
#define ETHINTERF_MSK (0x00000001 << ETHINTERF_OFST)
#define PKTCOORDREG1 (0x40)
#define COORDX_OFST (0)
#define COORDX_MSK (0x0000ffff << COORDX_OFST)
#define COORDY_OFST (16)
#define COORDY_MSK (0x0000ffff << COORDY_OFST)
#define PKTCOORDREG2 (0x48)
#define COORDZ_OFST (0)
#define COORDZ_MSK (0x0000ffff << COORDZ_OFST)
#define FLOWSTATUSREG (0x100)
#define RSMBUSY_OFST (0)
#define RSMBUSY_MSK (0x00000001 << RSMBUSY_OFST)
#define RSMTRGWAIT_OFST (3)
#define RSMTRGWAIT_MSK (0x00000001 << RSMTRGWAIT_OFST)
#define CSMBUSY_OFST (17)
#define CSMBUSY_MSK (0x00000001 << CSMBUSY_OFST)
#define FLOWCONTROLREG (0x108)
#define STARTF_OFST (0)
#define STARTF_MSK (0x00000001 << STARTF_OFST)
#define STOPF_OFST (1)
#define STOPF_MSK (0x00000001 << STOPF_OFST)
#define RSTF_OFST (2)
#define RSTF_MSK (0x00000001 << RSTF_OFST)
#define SWTRIGGERF_OFST (3)
#define SWTRIGGERF_MSK (0x00000001 << SWTRIGGERF_OFST)
#define TRIGGERENABLE_OFST (4)
#define TRIGGERENABLE_MSK (0x00000001 << TRIGGERENABLE_OFST)
#define TIMEFROMSTARTOUTREG1 (0x110)
#define TIMEFROMSTARTOUT1_OFST (0)
#define TIMEFROMSTARTOUT1_MSK (0xffffffff << TIMEFROMSTARTOUT1_OFST)
#define TIMEFROMSTARTOUTREG2 (0x114)
#define TIMEFROMSTARTOUT2_OFST (0)
#define TIMEFROMSTARTOUT2_MSK (0xffffffff << TIMEFROMSTARTOUT2_OFST)
#define FRAMESFROMSTARTOUTREG1 (0x118)
#define FRAMESFROMSTARTOUT1_OFST (0)
#define FRAMESFROMSTARTOUT1_MSK (0xffffffff << FRAMESFROMSTARTOUT1_OFST)
#define FRAMESFROMSTARTOUTREG2 (0x11C)
#define FRAMESFROMSTARTOUT2_OFST (0)
#define FRAMESFROMSTARTOUT2_MSK (0xffffffff << FRAMESFROMSTARTOUT2_OFST)
#define FRAMETIMEOUTREG1 (0x120)
#define FRAMETIMEOUT1_OFST (0)
#define FRAMETIMEOUT1_MSK (0xffffffff << FRAMETIMEOUT1_OFST)
#define FRAMETIMEOUTREG2 (0x124)
#define FRAMETIMEOUT2_OFST (0)
#define FRAMETIMEOUT2_MSK (0xffffffff << FRAMETIMEOUT2_OFST)
#define DELAYOUTREG1 (0x128)
#define DELAYOUT1_OFST (0)
#define DELAYOUT1_MSK (0xffffffff << DELAYOUT1_OFST)
#define DELAYOUTREG2 (0x12C)
#define DELAYOUT2_OFST (0)
#define DELAYOUT2_MSK (0xffffffff << DELAYOUT2_OFST)
#define CYCLESOUTREG1 (0x130)
#define CYCLESOUT1_OFST (0)
#define CYCLESOUT1_MSK (0xffffffff << CYCLESOUT1_OFST)
#define CYCLESOUTREG2 (0x134)
#define CYCLESOUT2_OFST (0)
#define CYCLESOUT2_MSK (0xffffffff << CYCLESOUT2_OFST)
#define FRAMESOUTREG1 (0x138)
#define FRAMESOUT1_OFST (0)
#define FRAMESOUT1_MSK (0xffffffff << FRAMESOUT1_OFST)
#define FRAMESOUTREG2 (0x13C)
#define FRAMESOUT2_OFST (0)
#define FRAMESOUT2_MSK (0xffffffff << FRAMESOUT2_OFST)
#define PERIODOUTREG1 (0x140)
#define PERIODOUT1_OFST (0)
#define PERIODOUT1_MSK (0xffffffff << PERIODOUT1_OFST)
#define PERIODOUTREG2 (0x144)
#define PERIODOUT2_OFST (0)
#define PERIODOUT2_MSK (0xffffffff << PERIODOUT2_OFST)
#define DELAYINREG1 (0x148)
#define DELAYIN1_OFST (0)
#define DELAYIN1_MSK (0xffffffff << DELAYIN1_OFST)
#define DELAYINREG2 (0x14C)
#define DELAYIN2_OFST (0)
#define DELAYIN2_MSK (0xffffffff << DELAYIN2_OFST)
#define CYCLESINREG1 (0x150)
#define CYCLESIN1_OFST (0)
#define CYCLESIN1_MSK (0xffffffff << CYCLESIN1_OFST)
#define CYCLESINREG2 (0x154)
#define CYCLESIN2_OFST (0)
#define CYCLESIN2_MSK (0xffffffff << CYCLESIN2_OFST)
#define FRAMESINREG1 (0x158)
#define FRAMESIN1_OFST (0)
#define FRAMESIN1_MSK (0xffffffff << FRAMESIN1_OFST)
#define FRAMESINREG2 (0x15C)
#define FRAMESIN2_OFST (0)
#define FRAMESIN2_MSK (0xffffffff << FRAMESIN2_OFST)
#define PERIODINREG1 (0x160)
#define PERIODIN1_OFST (0)
#define PERIODIN1_MSK (0xffffffff << PERIODIN1_OFST)
#define PERIODINREG2 (0x164)
#define PERIODIN2_OFST (0)
#define PERIODIN2_MSK (0xffffffff << PERIODIN2_OFST)
#define PATTERNOUTREG0 (0x200)
#define PATTERNOUT0_OFST (0)
#define PATTERNOUT0_MSK (0xffffffff << PATTERNOUT0_OFST)
#define PATTERNOUTREG1 (0x204)
#define PATTERNOUT1_OFST (0)
#define PATTERNOUT1_MSK (0xffffffff << PATTERNOUT1_OFST)
#define PATTERNINREG0 (0x208)
#define PATTERNIN0_OFST (0)
#define PATTERNIN0_MSK (0xffffffff << PATTERNIN0_OFST)
#define PATTERNINREG1 (0x20C)
#define PATTERNIN1_OFST (0)
#define PATTERNIN1_MSK (0xffffffff << PATTERNIN1_OFST)
#define PATTERNIOMASKREG0 (0x210)
#define PATTERNIOMASK0_OFST (0)
#define PATTERNIOMASK0_MSK (0xffffffff << PATTERNIOMASK0_OFST)
#define PATTERNIOMASKREG1 (0x214)
#define PATTERNIOMASK1_OFST (0)
#define PATTERNIOMASK1_MSK (0xffffffff << PATTERNIOMASK1_OFST)
#define PATTERNIOSETREG0 (0x218)
#define PATTERNIOSET0_OFST (0)
#define PATTERNIOSET0_MSK (0xffffffff << PATTERNIOSET0_OFST)
#define PATTERNIOSETREG1 (0x21C)
#define PATTERNIOSET1_OFST (0)
#define PATTERNIOSET1_MSK (0xffffffff << PATTERNIOSET1_OFST)
#define PATTERNCONTROLREG (0x220)
#define PATTERNWRBIT_OFST (0)
#define PATTERNWRBIT_MSK (0x00000001 << PATTERNWRBIT_OFST)
#define PATTERNRDBIT_OFST (1)
#define PATTERNRDBIT_MSK (0x00000001 << PATTERNRDBIT_OFST)
#define PATTERNADDRESSPTR_OFST (16)
#define PATTERNADDRESSPTR_MSK (0x00001fff << PATTERNADDRESSPTR_OFST)
#define PATTERNLIMITADDRESSREG (0x228)
#define PATTERNLIMITADDRESS_OFST (0)
#define PATTERNLIMITADDRESS_MSK (0xffffffff << PATTERNLIMITADDRESS_OFST)
#define PATTERNLOOP1ADDRESSREG (0x230)
#define PATTERNLOOP1ADDRESS_OFST (0)
#define PATTERNLOOP1ADDRESS_MSK (0xffffffff << PATTERNLOOP1ADDRESS_OFST)
#define PATTERNNLOOPS1REG (0x238)
#define PATTERNNLOOPS1_OFST (0)
#define PATTERNNLOOPS1_MSK (0xffffffff << PATTERNNLOOPS1_OFST)
#define PATTERNWAIT1ADDRESSREG (0x240)
#define PATTERNWAIT1ADDRESS_OFST (0)
#define PATTERNWAIT1ADDRESS_MSK (0xffffffff << PATTERNWAIT1ADDRESS_OFST)
#define PATTERNWAIT1TIMEREG1 (0x248)
#define PATTERNWAIT1TIME1_OFST (0)
#define PATTERNWAIT1TIME1_MSK (0xffffffff << PATTERNWAIT1TIME1_OFST)
#define PATTERNWAIT1TIMEREG2 (0x24C)
#define PATTERNWAIT1TIME2_OFST (0)
#define PATTERNWAIT1TIME2_MSK (0xffffffff << PATTERNWAIT1TIME2_OFST)
#define PATTERNLOOP2ADDRESSREG (0x250)
#define PATTERNLOOP2ADDRESS_OFST (0)
#define PATTERNLOOP2ADDRESS_MSK (0xffffffff << PATTERNLOOP2ADDRESS_OFST)
#define PATTERNNLOOPS2REG (0x258)
#define PATTERNNLOOPS2_OFST (0)
#define PATTERNNLOOPS2_MSK (0xffffffff << PATTERNNLOOPS2_OFST)
#define PATTERNWAIT2ADDRESSREG (0x260)
#define PATTERNWAIT2ADDRESS_OFST (0)
#define PATTERNWAIT2ADDRESS_MSK (0xffffffff << PATTERNWAIT2ADDRESS_OFST)
#define PATTERNWAIT2TIMEREG1 (0x268)
#define PATTERNWAIT2TIME1_OFST (0)
#define PATTERNWAIT2TIME1_MSK (0xffffffff << PATTERNWAIT2TIME1_OFST)
#define PATTERNWAIT2TIMEREG2 (0x26C)
#define PATTERNWAIT2TIME2_OFST (0)
#define PATTERNWAIT2TIME2_MSK (0xffffffff << PATTERNWAIT2TIME2_OFST)
#define PATTERNLOOP3ADDRESSREG (0x270)
#define PATTERNLOOP3ADDRESS_OFST (0)
#define PATTERNLOOP3ADDRESS_MSK (0xffffffff << PATTERNLOOP3ADDRESS_OFST)
#define PATTERNNLOOPS3REG (0x278)
#define PATTERNNLOOPS3_OFST (0)
#define PATTERNNLOOPS3_MSK (0xffffffff << PATTERNNLOOPS3_OFST)
#define PATTERNWAIT3ADDRESSREG (0x280)
#define PATTERNWAIT3ADDRESS_OFST (0)
#define PATTERNWAIT3ADDRESS_MSK (0xffffffff << PATTERNWAIT3ADDRESS_OFST)
#define PATTERNWAIT3TIMEREG1 (0x288)
#define PATTERNWAIT3TIME1_OFST (0)
#define PATTERNWAIT3TIME1_MSK (0xffffffff << PATTERNWAIT3TIME1_OFST)
#define PATTERNWAIT3TIMEREG2 (0x28C)
#define PATTERNWAIT3TIME2_OFST (0)
#define PATTERNWAIT3TIME2_MSK (0xffffffff << PATTERNWAIT3TIME2_OFST)
#define PATTERNLOOP4ADDRESSREG (0x290)
#define PATTERNLOOP4ADDRESS_OFST (0)
#define PATTERNLOOP4ADDRESS_MSK (0xffffffff << PATTERNLOOP4ADDRESS_OFST)
#define PATTERNNLOOPS4REG (0x298)
#define PATTERNNLOOPS4_OFST (0)
#define PATTERNNLOOPS4_MSK (0xffffffff << PATTERNNLOOPS4_OFST)
#define PATTERNWAIT4ADDRESSREG (0x300)
#define PATTERNWAIT4ADDRESS_OFST (0)
#define PATTERNWAIT4ADDRESS_MSK (0xffffffff << PATTERNWAIT4ADDRESS_OFST)
#define PATTERNWAIT4TIMEREG1 (0x308)
#define PATTERNWAI4TIME1_OFST (0)
#define PATTERNWAI4TIME1_MSK (0xffffffff << PATTERNWAI4TIME1_OFST)
#define PATTERNWAIT4TIMEREG2 (0x30C)
#define PATTERNWAIT4TIME2_OFST (0)
#define PATTERNWAIT4TIME2_MSK (0xffffffff << PATTERNWAIT4TIME2_OFST)
#define PATTERNLOOP5ADDRESSREG (0x310)
#define PATTERNLOOP5ADDRESS_OFST (0)
#define PATTERNLOOP5ADDRESS_MSK (0xffffffff << PATTERNLOOP5ADDRESS_OFST)
#define PATTERNNLOOPS5REG (0x318)
#define PATTERNNLOOPS5_OFST (0)
#define PATTERNNLOOPS5_MSK (0xffffffff << PATTERNNLOOPS5_OFST)
#define PATTERNWAIT5ADDRESSREG (0x320)
#define PATTERNWAIT5ADDRESS_OFST (0)
#define PATTERNWAIT5ADDRESS_MSK (0xffffffff << PATTERNWAIT5ADDRESS_OFST)
#define PATTERNWAIT5TIMEREG1 (0x328)
#define PATTERNWAIT5TIME1_OFST (0)
#define PATTERNWAIT5TIME1_MSK (0xffffffff << PATTERNWAIT5TIME1_OFST)
#define PATTERNWAIT5TIMEREG2 (0x32C)
#define PATTERNWAIT5TIME2_OFST (0)
#define PATTERNWAIT5TIME2_MSK (0xffffffff << PATTERNWAIT5TIME2_OFST)
#define PATTERNLOOP6ADDRESSREG (0x330)
#define PATTERNLOOP6ADDRESS_OFST (0)
#define PATTERNLOOP6ADDRESS_MSK (0xffffffff << PATTERNLOOP6ADDRESS_OFST)
#define PATTERNNLOOPS6REG (0x338)
#define PATTERNNLOOPS6_OFST (0)
#define PATTERNNLOOPS6_MSK (0xffffffff << PATTERNNLOOPS6_OFST)
#define PATTERNWAIT6ADDRESSREG (0x340)
#define PATTERNWAIT6ADDRESS_OFST (0)
#define PATTERNWAIT6ADDRESS_MSK (0xffffffff << PATTERNWAIT6ADDRESS_OFST)
#define PATTERNWAIT6TIMEREG1 (0x348)
#define PATTERNWAIT6TIME1_OFST (0)
#define PATTERNWAIT6TIME1_MSK (0xffffffff << PATTERNWAIT6TIME1_OFST)
#define PATTERNWAIT6TIMEREG2 (0x34C)
#define PATTERNWAIT6TIME2_OFST (0)
#define PATTERNWAIT6TIME2_MSK (0xffffffff << PATTERNWAIT6TIME2_OFST)
#define EXPCTRLREG (0x400)
#define STARTP_OFST (0)
#define STARTP_MSK (0x00000001 << STARTP_OFST)
#define EXPFRAMESREG (0x408)
#define NOFRAMES_OFST (0)
#define NOFRAMES_MSK (0xffffffff << NOFRAMES_OFST)
#define EXPTIMEREG (0x410)
#define EXPTIME_OFST (0)
#define EXPTIME_MSK (0xffffffff << EXPTIME_OFST)

View File

@ -0,0 +1,211 @@
// SPDX-License-Identifier: LGPL-3.0-or-other
// Copyright (C) 2021 Contributors to the SLS Detector Package
#include "slsDetectorFunctionList.h"
#include "arm64.h"
#include "clogger.h"
#include "common.h"
#include "sharedMemory.h"
#include "sls/versionAPI.h"
#include <string.h>
#include <unistd.h> // usleep
#include <arpa/inet.h> // INET_ADDRSTRLEN
// Global variable from slsDetectorServer_funcs
extern int debugflag;
extern int updateFlag;
extern const enum detectorType myDetectorType;
// Global variable from communication_funcs.c
extern int isControlServer;
int initError = OK;
int initCheckDone = 0;
char initErrorMessage[MAX_STR_LENGTH];
int detPos[2] = {0, 0};
int isInitCheckDone() { return initCheckDone; }
int getInitResult(char **mess) {
*mess = initErrorMessage;
return initError;
}
void basictests() {
initError = OK;
initCheckDone = 0;
memset(initErrorMessage, 0, MAX_STR_LENGTH);
#ifdef VIRTUAL
LOG(logINFOBLUE, ("****** Xilinx Chip Test Board Virtual Server ******\n"));
#else
LOG(logINFOBLUE, ("********** Xilinx Chip Test Board Server **********\n"));
#endif
if (mapCSP0() == FAIL) {
strcpy(initErrorMessage,
"Could not map to memory. Cannot proceed. Check Firmware.\n");
LOG(logERROR, (initErrorMessage));
initError = FAIL;
return;
}
#ifndef VIRTUAL
/*if ((!debugflag) && (!updateFlag) &&
((validateKernelVersion(KERNEL_DATE_VRSN) == FAIL) ||
(checkType() == FAIL) || (testFpga() == FAIL) ||
(testBus() == FAIL))) {*/
if ((!debugflag) && (!updateFlag) &&
((validateKernelVersion(KERNEL_DATE_VRSN) == FAIL) ||
(checkType() == FAIL) /*|| (testFpga() == FAIL) ||
(testBus() == FAIL)*/)) {
sprintf(initErrorMessage,
"Could not pass basic tests of FPGA and bus. Cannot proceed. "
"Check Firmware. (Firmware version:0x%lx) \n",
getFirmwareVersion());
LOG(logERROR, ("%s\n\n", initErrorMessage));
initError = FAIL;
return;
}
#endif
uint32_t ipadd = getDetectorIP();
uint64_t macadd = getDetectorMAC();
int64_t fwversion = getFirmwareVersion();
char swversion[MAX_STR_LENGTH] = {0};
memset(swversion, 0, MAX_STR_LENGTH);
getServerVersion(swversion);
uint32_t requiredFirmwareVersion = REQRD_FRMWRE_VRSN;
LOG(logINFOBLUE,
("**************************************************\n"
"Detector IP Addr:\t\t 0x%x\n"
"Detector MAC Addr:\t\t 0x%lx\n\n"
"Firmware Version:\t\t 0x%lx\n"
"Software Version:\t\t %s\n"
"Required Firmware Version:\t 0x%x\n"
"********************************************************\n",
ipadd, macadd, fwversion, swversion, requiredFirmwareVersion));
}
int checkType() {
#ifdef VIRTUAL
return OK;
#endif
u_int32_t type =
((bus_r(FPGAVERSIONREG) & DETTYPE_MSK) >> DETTYPE_OFST);
if (type != XILINX_CHIPTESTBOARD) {
LOG(logERROR,
("This is not a Xilinx CTB firmware (read %d, expected %d)\n", type,
XILINX_CHIPTESTBOARD));
return FAIL;
}
return OK;
}
/* Ids */
void getServerVersion(char *version) { strcpy(version, APIXILINXCTB); }
uint64_t getFirmwareVersion() {
#ifdef VIRTUAL
return REQRD_FRMWRE_VRSN;
#endif
return ((bus_r(FPGAVERSIONREG) & COMPDATE_MSK) >> COMPDATE_OFST);
}
u_int64_t getDetectorMAC() {
#ifdef VIRTUAL
return 0;
#else
char output[255], mac[255] = "";
u_int64_t res = 0;
FILE *sysFile =
popen("ifconfig eth0 | grep ether | awk '{ print $2 }'", "r");
fgets(output, sizeof(output), sysFile);
pclose(sysFile);
// getting rid of ":"
char *pch;
pch = strtok(output, ":");
while (pch != NULL) {
strcat(mac, pch);
pch = strtok(NULL, ":");
}
sscanf(mac, "%lx", &res);
return res;
#endif
}
u_int32_t getDetectorIP() {
#ifdef VIRTUAL
return 0;
#endif
char temp[INET_ADDRSTRLEN] = "";
u_int32_t res = 0;
// execute and get address
char output[255];
FILE *sysFile = popen(
"ifconfig | grep 'inet '| grep -v '127.0.0.1' | awk '{ print $2 }'",
"r");
fgets(output, sizeof(output), sysFile);
pclose(sysFile);
// converting IPaddress to hex.
char *pcword = strtok(output, ".");
while (pcword != NULL) {
sprintf(output, "%02x", atoi(pcword));
strcat(temp, output);
pcword = strtok(NULL, ".");
}
strcpy(output, temp);
sscanf(output, "%x", &res);
// LOG(logINFO, ("ip:%x\n",res);
return res;
}
/* initialization */
void initControlServer() {
if (!updateFlag && initError == OK) {
setupDetector();
}
initCheckDone = 1;
}
void initStopServer() {
if (!updateFlag && initError == OK) {
usleep(CTRL_SRVR_INIT_TIME_US);
if (mapCSP0() == FAIL) {
initError = FAIL;
strcpy(initErrorMessage,
"Stop Server: Map Fail. Cannot proceed. Check Firmware.\n");
LOG(logERROR, (initErrorMessage));
initCheckDone = 1;
return;
}
#ifdef VIRTUAL
sharedMemory_setStop(0);
#endif
}
initCheckDone = 1;
}
/* set up detector */
void setupDetector() {
LOG(logINFO, ("This Server is for 1 Xilinx Chip Test Board\n"));
#ifdef VIRTUAL
sharedMemory_setStatus(IDLE);
#endif
LOG(logINFO, ("Goodbye...\n"));
}
int setDetectorPosition(int pos[]) {
memcpy(detPos, pos, sizeof(detPos));
return OK;
}
int *getDetectorPosition() { return detPos; }
int getNumberofUDPInterfaces() { return 1; }

View File

@ -0,0 +1,18 @@
// SPDX-License-Identifier: LGPL-3.0-or-other
// Copyright (C) 2021 Contributors to the SLS Detector Package
#pragma once
#include "RegisterDefs.h"
#include "sls/sls_detector_defs.h"
#define REQRD_FRMWRE_VRSN (0x230000)
#define KERNEL_DATE_VRSN "Wed Nov 29 17:32:14 CET 2023"
#define LINKED_SERVER_NAME "xilinx_ctbDetectorServer"
#define CTRL_SRVR_INIT_TIME_US (2 * 1000 * 1000)
/* Hardware Definitions */
#define NCHAN (1)
enum ADCINDEX { V_PWR_IO };
enum DACINDEX { D0 };

View File

@ -311,19 +311,27 @@ CTB_NAMED_LIST:
infer_action: true infer_action: true
actions: actions:
GET: GET:
check_det_id: true extra_variables:
- name: det_type
type: auto
value: det->getDetectorType().squash(defs::GENERIC);
exceptions: exceptions:
- condition: 'cmd != "daclist" && det->getDetectorType().squash() != defs::CHIPTESTBOARD' - condition: 'cmd != "daclist" && det_type != defs::CHIPTESTBOARD && det_type != defs::XILINX_CHIPTESTBOARD'
message: 'cmd + " only allowed for CTB."' message: 'cmd + " only allowed for CTB."'
check_det_id: true
argc: 0 argc: 0
output: [ 'ToString(t)' ] output: [ 'ToString(t)' ]
PUT: PUT:
check_det_id: true extra_variables:
- name: det_type
type: auto
value: det->getDetectorType().squash(defs::GENERIC);
exceptions: exceptions:
- condition: 'cmd != "daclist" && det->getDetectorType().squash() != defs::CHIPTESTBOARD' - condition: 'cmd != "daclist" && det_type != defs::CHIPTESTBOARD && det_type != defs::XILINX_CHIPTESTBOARD'
message: 'cmd + " only allowed for CTB."' message: 'cmd + " only allowed for CTB."'
- condition: 'cmd == "daclist" && det->getDetectorType().squash() != defs::CHIPTESTBOARD' - condition: 'cmd == "daclist" && det_type != defs::CHIPTESTBOARD && det_type != defs::XILINX_CHIPTESTBOARD'
message: '"This detector already has fixed dac names. Cannot change them."' message: '"This detector already has fixed dac names. Cannot change them."'
check_det_id: true
input: [ 'args' ] input: [ 'args' ]
argc: -1 # unknown number of args argc: -1 # unknown number of args
input_types: [ std::string ] input_types: [ std::string ]
@ -337,12 +345,11 @@ CTB_SINGLE_DACNAME:
extra_variables: extra_variables:
- name: index - name: index
type: defs::dacIndex type: defs::dacIndex
value: 0 value: 0
check_det_id: true
exceptions: exceptions:
- condition: 'det->getDetectorType().squash() != defs::CHIPTESTBOARD' - condition: 'det->getDetectorType().squash(defs::GENERIC) != defs::CHIPTESTBOARD && det->getDetectorType().squash(defs::GENERIC) != defs::XILINX_CHIPTESTBOARD'
message: 'cmd + " only allowed for CTB."' message: 'cmd + " only allowed for CTB."'
check_det_id: true
argc: 1 argc: 1
input: [ "static_cast<defs::dacIndex>(StringTo<int>(args[0]) + index)" ] input: [ "static_cast<defs::dacIndex>(StringTo<int>(args[0]) + index)" ]
input_types: [ defs::dacIndex ] input_types: [ defs::dacIndex ]
@ -353,11 +360,10 @@ CTB_SINGLE_DACNAME:
- name: index - name: index
type: defs::dacIndex type: defs::dacIndex
value: 0 value: 0
check_det_id: true
exceptions: exceptions:
- condition: 'det->getDetectorType().squash() != defs::CHIPTESTBOARD' - condition: 'det->getDetectorType().squash(defs::GENERIC) != defs::CHIPTESTBOARD && det->getDetectorType().squash(defs::GENERIC) != defs::XILINX_CHIPTESTBOARD'
message: 'cmd + " only allowed for CTB."' message: 'cmd + " only allowed for CTB."'
check_det_id: true
argc: 2 argc: 2
input: [ "static_cast<defs::dacIndex>(StringTo<int>(args[0]) + index)","args[1]" ] input: [ "static_cast<defs::dacIndex>(StringTo<int>(args[0]) + index)","args[1]" ]
input_types: [ defs::dacIndex , std::string ] input_types: [ defs::dacIndex , std::string ]
@ -375,7 +381,7 @@ CTB_GET_DACINDEX:
check_det_id: true check_det_id: true
exceptions: exceptions:
- condition: 'det->getDetectorType().squash() != defs::CHIPTESTBOARD' - condition: 'det->getDetectorType().squash(defs::GENERIC) != defs::CHIPTESTBOARD && det->getDetectorType().squash(defs::GENERIC) != defs::XILINX_CHIPTESTBOARD'
message: 'cmd + " only allowed for CTB."' message: 'cmd + " only allowed for CTB."'
argc: 1 argc: 1
input: [ 'args[0]' ] input: [ 'args[0]' ]
@ -389,7 +395,7 @@ CTB_SINGLE_NAME:
GET: GET:
check_det_id: true check_det_id: true
exceptions: exceptions:
- condition: 'det->getDetectorType().squash() != defs::CHIPTESTBOARD' - condition: 'det->getDetectorType().squash(defs::GENERIC) != defs::CHIPTESTBOARD && det->getDetectorType().squash(defs::GENERIC) != defs::XILINX_CHIPTESTBOARD'
message: 'cmd + " only allowed for CTB."' message: 'cmd + " only allowed for CTB."'
argc: 1 argc: 1
input: [ "args[0]" ] input: [ "args[0]" ]
@ -399,7 +405,7 @@ CTB_SINGLE_NAME:
PUT: PUT:
check_det_id: true check_det_id: true
exceptions: exceptions:
- condition: 'det->getDetectorType().squash() != defs::CHIPTESTBOARD' - condition: 'det->getDetectorType().squash(defs::GENERIC) != defs::CHIPTESTBOARD && det->getDetectorType().squash(defs::GENERIC) != defs::XILINX_CHIPTESTBOARD'
message: 'cmd + " only allowed for CTB."' message: 'cmd + " only allowed for CTB."'
argc: 2 argc: 2
cast_input: [ true, false ] cast_input: [ true, false ]
@ -414,7 +420,7 @@ CTB_GET_INDEX:
GET: GET:
check_det_id: true check_det_id: true
exceptions: exceptions:
- condition: 'det->getDetectorType().squash() != defs::CHIPTESTBOARD' - condition: 'det->getDetectorType().squash(defs::GENERIC) != defs::CHIPTESTBOARD && det->getDetectorType().squash(defs::GENERIC) != defs::XILINX_CHIPTESTBOARD'
message: 'cmd + " only allowed for CTB."' message: 'cmd + " only allowed for CTB."'
argc: 1 argc: 1
input: [ 'args[0]' ] input: [ 'args[0]' ]
@ -490,14 +496,14 @@ burstperiod:
################# TIME_GET_COMMAND ############# ################# TIME_GET_COMMAND #############
delayl: delayl:
help: "\n\t[Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][CTB] Delay Left in Acquisition. \n\t[Gotthard2] only in continuous mode." help: "\n\t[Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][Ctb] Delay Left in Acquisition. \n\t[Gotthard2] only in continuous mode."
inherit_actions: TIME_GET_COMMAND inherit_actions: TIME_GET_COMMAND
actions: actions:
GET: GET:
function: getDelayAfterTriggerLeft function: getDelayAfterTriggerLeft
periodl: periodl:
help: "\n\t[Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2] Period left for current frame. \n\t[Gotthard2] only in continuous mode." help: "\n\t[Gotthard][Jungfrau][Moench][Ctb][Mythen3][Gotthard2] Period left for current frame. \n\t[Gotthard2] only in continuous mode."
inherit_actions: TIME_GET_COMMAND inherit_actions: TIME_GET_COMMAND
actions: actions:
GET: GET:
@ -525,14 +531,14 @@ exptimel:
function: getExptimeLeft function: getExptimeLeft
runtime: runtime:
help: "[(optional unit) ns|us|ms|s]\n\t[Jungfrau][Moench][Mythen3][Gotthard2][CTB] Time from detector start up.\n\t[Gotthard2] not in burst and auto mode." help: "[(optional unit) ns|us|ms|s]\n\t[Jungfrau][Moench][Mythen3][Gotthard2][Ctb] Time from detector start up.\n\t[Gotthard2] not in burst and auto mode."
inherit_actions: TIME_GET_COMMAND inherit_actions: TIME_GET_COMMAND
actions: actions:
GET: GET:
function: getActualTime function: getActualTime
frametime: frametime:
help: "[(optional unit) ns|us|ms|s]\n\t[Jungfrau][Moench][Mythen3][Gotthard2][CTB] Timestamp at a frame start.\n\t[Gotthard2] not in burst and auto mode." help: "[(optional unit) ns|us|ms|s]\n\t[Jungfrau][Moench][Mythen3][Gotthard2][Ctb] Timestamp at a frame start.\n\t[Gotthard2] not in burst and auto mode."
inherit_actions: TIME_GET_COMMAND inherit_actions: TIME_GET_COMMAND
actions: actions:
GET: GET:
@ -740,7 +746,7 @@ filterresistor:
function: setFilterResistor function: setFilterResistor
dbitpipeline: dbitpipeline:
help: "[n_value]\n\t[Ctb][Gotthard2] Pipeline of the clock for latching digital bits.\n\t[Gotthard2] Options: 0-7\n\t[CTB] Options: 0-255" help: "[n_value]\n\t[Ctb][Gotthard2] Pipeline of the clock for latching digital bits.\n\t[Gotthard2] Options: 0-7\n\t[Ctb] Options: 0-255"
inherit_actions: INTEGER_COMMAND_VEC_ID inherit_actions: INTEGER_COMMAND_VEC_ID
actions: actions:
GET: GET:
@ -758,7 +764,7 @@ readnrows:
function: setReadNRows function: setReadNRows
nextframenumber: nextframenumber:
help: "[n_value]\n\t[Eiger][Jungfrau][Moench][CTB] Next frame number. Stopping acquisition might result in different frame numbers for different modules." help: "[n_value]\n\t[Eiger][Jungfrau][Moench][Ctb] Next frame number. Stopping acquisition might result in different frame numbers for different modules."
inherit_actions: INTEGER_COMMAND_VEC_ID inherit_actions: INTEGER_COMMAND_VEC_ID
actions: actions:
GET: GET:
@ -1256,7 +1262,7 @@ dpulse:
input_types: [ bool ] input_types: [ bool ]
asamples: asamples:
help: "[n_samples]\n\t[CTB] Number of analog samples expected." help: "[n_samples]\n\t[Ctb] Number of analog samples expected."
inherit_actions: INTEGER_COMMAND_VEC_ID inherit_actions: INTEGER_COMMAND_VEC_ID
actions: actions:
GET: GET:
@ -1283,7 +1289,7 @@ runclk:
function: setRUNClock function: setRUNClock
dsamples: dsamples:
help: "[n_value]\n\t[CTB] Number of digital samples expected." help: "[n_value]\n\t[Ctb] Number of digital samples expected."
inherit_actions: INTEGER_COMMAND_VEC_ID inherit_actions: INTEGER_COMMAND_VEC_ID
actions: actions:
GET: GET:
@ -1292,7 +1298,7 @@ dsamples:
function: setNumberOfDigitalSamples function: setNumberOfDigitalSamples
tsamples: tsamples:
help: "[n_value]\n\t[CTB] Number of transceiver samples expected." help: "[n_value]\n\t[Ctb] Number of transceiver samples expected."
inherit_actions: INTEGER_COMMAND_VEC_ID inherit_actions: INTEGER_COMMAND_VEC_ID
actions: actions:
GET: GET:
@ -1301,7 +1307,7 @@ tsamples:
function: setNumberOfTransceiverSamples function: setNumberOfTransceiverSamples
romode: romode:
help: "[analog|digital|analog_digital|transceiver|digital_transceiver]\n\t[CTB] Readout mode. Default is analog." help: "[analog|digital|analog_digital|transceiver|digital_transceiver]\n\t[Ctb] Readout mode. Default is analog."
inherit_actions: INTEGER_COMMAND_VEC_ID inherit_actions: INTEGER_COMMAND_VEC_ID
actions: actions:
GET: GET:
@ -1872,35 +1878,35 @@ moduleid:
type: type:
inherit_actions: GET_COMMAND inherit_actions: GET_COMMAND
help: "\n\tReturns detector type. Can be Eiger, Jungfrau, Gotthard, Moench, Mythen3, Gotthard2, ChipTestBoard" help: "\n\tReturns detector type. Can be Eiger, Jungfrau, Gotthard, Moench, Mythen3, Gotthard2, ChipTestBoard, Xilinx_ChipTestBoard"
actions: actions:
GET: GET:
function: getDetectorType function: getDetectorType
framesl: framesl:
inherit_actions: GET_COMMAND inherit_actions: GET_COMMAND
help: "\n\t[Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][CTB] Number of frames left in acquisition. \n\t[Gotthard2] only in continuous auto mode." help: "\n\t[Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][Ctb] Number of frames left in acquisition. \n\t[Gotthard2] only in continuous auto mode."
actions: actions:
GET: GET:
function: getNumberOfFramesLeft function: getNumberOfFramesLeft
triggersl: triggersl:
inherit_actions: GET_COMMAND inherit_actions: GET_COMMAND
help: "\n\t[Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][CTB] Number of triggers left in acquisition. Only when external trigger used." help: "\n\t[Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][Ctb] Number of triggers left in acquisition. Only when external trigger used."
actions: actions:
GET: GET:
function: getNumberOfTriggersLeft function: getNumberOfTriggersLeft
maxadcphaseshift: maxadcphaseshift:
inherit_actions: GET_COMMAND inherit_actions: GET_COMMAND
help: "\n\t[Jungfrau][Moench][CTB] Absolute maximum Phase shift of ADC clock." help: "\n\t[Jungfrau][Moench][Ctb] Absolute maximum Phase shift of ADC clock."
actions: actions:
GET: GET:
function: getMaxADCPhaseShift function: getMaxADCPhaseShift
maxdbitphaseshift: maxdbitphaseshift:
inherit_actions: GET_COMMAND inherit_actions: GET_COMMAND
help: "\n\t[CTB][Jungfrau] Absolute maximum Phase shift of of the clock to latch digital bits." help: "\n\t[Ctb][Jungfrau] Absolute maximum Phase shift of of the clock to latch digital bits."
actions: actions:
GET: GET:
function: getMaxDBITPhaseShift function: getMaxDBITPhaseShift
@ -2005,7 +2011,7 @@ lastclient:
framecounter: framecounter:
inherit_actions: GET_COMMAND inherit_actions: GET_COMMAND
help: "\n\t[Jungfrau][Moench][Mythen3][Gotthard2][CTB] Number of frames from start run control.\n\t[Gotthard2] only in continuous mode." help: "\n\t[Jungfrau][Moench][Mythen3][Gotthard2][Ctb] Number of frames from start run control.\n\t[Gotthard2] only in continuous mode."
actions: actions:
GET: GET:
function: getNumberOfFramesFromStart function: getNumberOfFramesFromStart
@ -2013,7 +2019,7 @@ framecounter:
################# GET_COMMAND_HEX ############################ ################# GET_COMMAND_HEX ############################
serialnumber: serialnumber:
inherit_actions: GET_COMMAND inherit_actions: GET_COMMAND
help: "\n\t[Jungfrau][Moench][Gotthard][Mythen3][Gotthard2][CTB]\nSerial number of detector." help: "\n\t[Jungfrau][Moench][Gotthard][Mythen3][Gotthard2][Ctb]\nSerial number of detector."
actions: actions:
GET: GET:
function: getSerialNumber function: getSerialNumber
@ -2236,7 +2242,7 @@ im_io:
################# CTB_NAMED_LIST ############################# ################# CTB_NAMED_LIST #############################
daclist: daclist:
inherit_actions: CTB_NAMED_LIST inherit_actions: CTB_NAMED_LIST
help: "[dacname1 dacname2 .. dacname18] \n\t\t[ChipTestBoard] Set the list of dac names for this detector.\n\t\t[All] Gets the list of dac names for every dac for this detector." help: "[dacname1 dacname2 .. dacname18] \n\t\t[Ctb][Xilinx_Ctb] Set the list of dac names for this detector.\n\t\t[All] Gets the list of dac names for every dac for this detector."
actions: actions:
GET: GET:
function: getDacNames function: getDacNames
@ -2245,7 +2251,7 @@ daclist:
adclist: adclist:
inherit_actions: CTB_NAMED_LIST inherit_actions: CTB_NAMED_LIST
help: "[adcname1 adcname2 .. adcname32] \n\t\t[ChipTestBoard] Set the list of adc names for this board." help: "[adcname1 adcname2 .. adcname32] \n\t\t[Ctb][Xilinx_Ctb] Set the list of adc names for this board."
actions: actions:
GET: GET:
function: getAdcNames function: getAdcNames
@ -2254,7 +2260,7 @@ adclist:
signallist: signallist:
inherit_actions: CTB_NAMED_LIST inherit_actions: CTB_NAMED_LIST
help: "[signalname1 signalname2 .. signalname63] \n\t\t[ChipTestBoard] Set the list of signal names for this board." help: "[signalname1 signalname2 .. signalname63] \n\t\t[Ctb][Xilinx_Ctb] Set the list of signal names for this board."
actions: actions:
GET: GET:
function: getSignalNames function: getSignalNames
@ -2263,7 +2269,7 @@ signallist:
powerlist: powerlist:
inherit_actions: CTB_NAMED_LIST inherit_actions: CTB_NAMED_LIST
help: "[powername1 powername2 .. powername4] \n\t\t[ChipTestBoard] Set the list of power names for this board." help: "[powername1 powername2 .. powername4] \n\t\t[Ctb][Xilinx_Ctb] Set the list of power names for this board."
actions: actions:
GET: GET:
function: getPowerNames function: getPowerNames
@ -2272,7 +2278,7 @@ powerlist:
slowadclist: slowadclist:
inherit_actions: CTB_NAMED_LIST inherit_actions: CTB_NAMED_LIST
help: "[slowadcname1 slowadcname2 .. slowadcname7] \n\t\t[ChipTestBoard] Set the list of slowadc names for this board." help: "[slowadcname1 slowadcname2 .. slowadcname7] \n\t\t[Ctb][Xilinx_Ctb] Set the list of slowadc names for this board."
actions: actions:
GET: GET:
function: getSlowADCNames function: getSlowADCNames
@ -2281,7 +2287,7 @@ slowadclist:
################# CTB_VALUES ################################ ################# CTB_VALUES ################################
powervalues: powervalues:
help: "[name] \n\t\t[ChipTestBoard] Get values of all powers." help: "[name] \n\t\t[Ctb][Xilinx_Ctb] Get values of all powers."
actions: actions:
GET: GET:
argc: 0 argc: 0
@ -2293,7 +2299,7 @@ powervalues:
printable_name: "*name_it++" printable_name: "*name_it++"
slowadcvalues: slowadcvalues:
help: "[name] \n\t\t[ChipTestBoard] Get values of all slow adcs." help: "[name] \n\t\t[Ctb][Xilinx_Ctb] Get values of all slow adcs."
actions: actions:
GET: GET:
argc: 0 argc: 0
@ -2319,7 +2325,7 @@ tempvalues:
################# CTB_SINGLE_DACNAME ######################## ################# CTB_SINGLE_DACNAME ########################
dacname: dacname:
inherit_actions: CTB_SINGLE_DACNAME inherit_actions: CTB_SINGLE_DACNAME
help: "[0-17][name] \n\t\t[ChipTestBoard] Set the dac at the given position to the given name." help: "[0-17][name] \n\t\t[Ctb][Xilinx_Ctb] Set the dac at the given position to the given name."
actions: actions:
GET: GET:
function: getDacName function: getDacName
@ -2336,7 +2342,7 @@ dacname:
powername: powername:
inherit_actions: CTB_SINGLE_DACNAME inherit_actions: CTB_SINGLE_DACNAME
help: "[0-4][name] \n\t\t[ChipTestBoard] Set the power at the given position to the given name." help: "[0-4][name] \n\t\t[Ctb][Xilinx_Ctb] Set the power at the given position to the given name."
actions: actions:
GET: GET:
function: getPowerName function: getPowerName
@ -2353,7 +2359,7 @@ powername:
slowadcname: slowadcname:
inherit_actions: CTB_SINGLE_DACNAME inherit_actions: CTB_SINGLE_DACNAME
help: "[0-7][name] \n\t\t[ChipTestBoard] Set the slowadc at the given position to the given name." help: "[0-7][name] \n\t\t[Ctb][Xilinx_Ctb] Set the slowadc at the given position to the given name."
actions: actions:
GET: GET:
function: getSlowADCName function: getSlowADCName
@ -2371,7 +2377,7 @@ slowadcname:
################# CTB_GET_DACINDEX ########################## ################# CTB_GET_DACINDEX ##########################
dacindex: dacindex:
inherit_actions: CTB_GET_DACINDEX inherit_actions: CTB_GET_DACINDEX
help: "[name] \n\t\t[ChipTestBoard] Get the dac index for the given name." help: "[name] \n\t\t[Ctb][Xilinx_Ctb] Get the dac index for the given name."
actions: actions:
GET: GET:
function: getDacIndex function: getDacIndex
@ -2382,7 +2388,7 @@ dacindex:
powerindex: powerindex:
inherit_actions: CTB_GET_DACINDEX inherit_actions: CTB_GET_DACINDEX
help: "[name] \n\t\t[ChipTestBoard] Get the power index for the given name." help: "[name] \n\t\t[Ctb][Xilinx_Ctb] Get the power index for the given name."
actions: actions:
GET: GET:
function: getPowerIndex function: getPowerIndex
@ -2393,7 +2399,7 @@ powerindex:
slowadcindex: slowadcindex:
inherit_actions: CTB_GET_DACINDEX inherit_actions: CTB_GET_DACINDEX
help: "[name] \n\t\t[ChipTestBoard] Get the slowadc index for the given name." help: "[name] \n\t\t[Ctb][Xilinx_Ctb] Get the slowadc index for the given name."
actions: actions:
GET: GET:
function: getSlowADCIndex function: getSlowADCIndex
@ -2405,7 +2411,7 @@ slowadcindex:
################# CTB_SINGLE_NAME ########################### ################# CTB_SINGLE_NAME ###########################
adcname: adcname:
inherit_actions: CTB_SINGLE_NAME inherit_actions: CTB_SINGLE_NAME
help: "[0-31][name] \n\t\t[ChipTestBoard] Set the adc at the given position to the given name." help: "[0-31][name] \n\t\t[Ctb][Xilinx_Ctb] Set the adc at the given position to the given name."
actions: actions:
GET: GET:
function: getAdcName function: getAdcName
@ -2414,7 +2420,7 @@ adcname:
signalname: signalname:
inherit_actions: CTB_SINGLE_NAME inherit_actions: CTB_SINGLE_NAME
help: "[0-63][name] \n\t\t[ChipTestBoard] Set the signal at the given position to the given name." help: "[0-63][name] \n\t\t[Ctb][Xilinx_Ctb] Set the signal at the given position to the given name."
actions: actions:
GET: GET:
function: getSignalName function: getSignalName
@ -2424,14 +2430,14 @@ signalname:
################# CTB_GET_INDEX ############################# ################# CTB_GET_INDEX #############################
adcindex: adcindex:
inherit_actions: CTB_GET_INDEX inherit_actions: CTB_GET_INDEX
help: "[name] \n\t\t[ChipTestBoard] Get the adc index for the given name." help: "[name] \n\t\t[Ctb][Xilinx_Ctb] Get the adc index for the given name."
actions: actions:
GET: GET:
function: getAdcIndex function: getAdcIndex
signalindex: signalindex:
inherit_actions: CTB_GET_INDEX inherit_actions: CTB_GET_INDEX
help: "[name] \n\t\t[ChipTestBoard] Get the signal index for the given name." help: "[name] \n\t\t[Ctb][Xilinx_Ctb] Get the signal index for the given name."
actions: actions:
GET: GET:
function: getSignalIndex function: getSignalIndex
@ -2877,16 +2883,24 @@ readoutspeed:
help: "\n\t[0 or full_speed|1 or half_speed|2 or quarter_speed]\n\t[Eiger][Jungfrau][Moench] Readout speed of chip.\n\t[Eiger][Moench] Default speed is full_speed.\n\t[Jungfrau] Default speed is half_speed. full_speed option only available from v2.0 boards and is recommended to set number of interfaces to 2. Also overwrites adcphase to recommended default.\n\t [144|108]\n\t\t[Gotthard2] Readout speed of chip in MHz. Default is 108." help: "\n\t[0 or full_speed|1 or half_speed|2 or quarter_speed]\n\t[Eiger][Jungfrau][Moench] Readout speed of chip.\n\t[Eiger][Moench] Default speed is full_speed.\n\t[Jungfrau] Default speed is half_speed. full_speed option only available from v2.0 boards and is recommended to set number of interfaces to 2. Also overwrites adcphase to recommended default.\n\t [144|108]\n\t\t[Gotthard2] Readout speed of chip in MHz. Default is 108."
actions: actions:
GET: GET:
extra_variables:
- name: det_type
type: auto
value: det->getDetectorType().squash(defs::GENERIC);
exceptions: exceptions:
- condition: 'det->getDetectorType().squash() == defs::CHIPTESTBOARD' - condition: 'det_type == defs::CHIPTESTBOARD || det_type == defs::XILINX_CHIPTESTBOARD'
message: '"ReadoutSpeed not implemented. Did you mean runclk?"' message: '"ReadoutSpeed not implemented. Did you mean runclk?"'
argc: 0 argc: 0
require_det_id: true require_det_id: true
function: getReadoutSpeed function: getReadoutSpeed
output: [ OutString(t) ] output: [ OutString(t) ]
PUT: PUT:
extra_variables:
- name: det_type
type: auto
value: det->getDetectorType().squash(defs::GENERIC);
exceptions: exceptions:
- condition: 'det->getDetectorType().squash() == defs::CHIPTESTBOARD' - condition: 'det_type == defs::CHIPTESTBOARD || det_type == defs::XILINX_CHIPTESTBOARD'
message: '"ReadoutSpeed not implemented. Did you mean runclk?"' message: '"ReadoutSpeed not implemented. Did you mean runclk?"'
argc: 1 argc: 1
require_det_id: true require_det_id: true
@ -3158,12 +3172,12 @@ dac:
actions: actions:
GET: GET:
exceptions: exceptions:
- condition: "is_int(args[0]) && det->getDetectorType().squash() != defs::CHIPTESTBOARD" - condition: "is_int(args[0]) && det->getDetectorType().squash() != defs::CHIPTESTBOARD && det->getDetectorType().squash() != defs::XILINX_CHIPTESTBOARD"
message: '"Dac indices can only be used for chip test board. Use daclist to get list of dac names for current detector."' message: '"Dac indices can only be used for chip test board. Use daclist to get list of dac names for current detector."'
extra_variables: extra_variables:
- name: dacIndex - name: dacIndex
type: defs::dacIndex type: defs::dacIndex
value: "(det->getDetectorType().squash() == defs::CHIPTESTBOARD && !is_int(args[0])) ? det->getDacIndex(args[0]) : StringTo<defs::dacIndex>(args[0])" value: "((det->getDetectorType().squash() == defs::CHIPTESTBOARD || det->getDetectorType().squash() == defs::XILINX_CHIPTESTBOARD) && !is_int(args[0])) ? det->getDacIndex(args[0]) : StringTo<defs::dacIndex>(args[0])"
function: getDAC function: getDAC
require_det_id: true require_det_id: true
input_types: [ defs::dacIndex, bool ] input_types: [ defs::dacIndex, bool ]
@ -3175,7 +3189,7 @@ dac:
output: [ 'args[0]', "' '", OutString(t) ] output: [ 'args[0]', "' '", OutString(t) ]
- argc: 2 - argc: 2
exceptions: exceptions:
- condition: "is_int(args[0]) && det->getDetectorType().squash() != defs::CHIPTESTBOARD" - condition: "is_int(args[0]) && det->getDetectorType().squash() != defs::CHIPTESTBOARD && det->getDetectorType().squash() != defs::XILINX_CHIPTESTBOARD"
message: '"Dac indices can only be used for chip test board. Use daclist to get list of dac names for current detector."' message: '"Dac indices can only be used for chip test board. Use daclist to get list of dac names for current detector."'
- condition: 'args[1] != "mv" && args[1] != "mV"' - condition: 'args[1] != "mv" && args[1] != "mV"'
message: '"Unknown argument " + args[1] + ". Did you mean mV?"' message: '"Unknown argument " + args[1] + ". Did you mean mV?"'
@ -3184,12 +3198,12 @@ dac:
output: [ 'args[0]', "' '" , OutString(t), '" mV"' ] output: [ 'args[0]', "' '" , OutString(t), '" mV"' ]
PUT: PUT:
exceptions: exceptions:
- condition: "is_int(args[0]) && det->getDetectorType().squash() != defs::CHIPTESTBOARD" - condition: "is_int(args[0]) && det->getDetectorType().squash() != defs::CHIPTESTBOARD && det->getDetectorType().squash() != defs::XILINX_CHIPTESTBOARD"
message: '"Dac indices can only be used for chip test board. Use daclist to get list of dac names for current detector."' message: '"Dac indices can only be used for chip test board. Use daclist to get list of dac names for current detector."'
extra_variables: extra_variables:
- name: dacIndex - name: dacIndex
type: defs::dacIndex type: defs::dacIndex
value: "(det->getDetectorType().squash() == defs::CHIPTESTBOARD && !is_int(args[0])) ? det->getDacIndex(args[0]) : StringTo<defs::dacIndex>(args[0])" value: "((det->getDetectorType().squash() == defs::CHIPTESTBOARD || det->getDetectorType().squash() == defs::XILINX_CHIPTESTBOARD) && !is_int(args[0])) ? det->getDacIndex(args[0]) : StringTo<defs::dacIndex>(args[0])"
function: setDAC function: setDAC
require_det_id: true require_det_id: true
input_types: [ defs::dacIndex, int, bool ] input_types: [ defs::dacIndex, int, bool ]
@ -4141,7 +4155,7 @@ updatekernel:
output: [ '"successful"' ] output: [ '"successful"' ]
update: update:
help: "\n\tWithout tftp: [server_name (incl fullpath)] [fname.pof (incl full path)] This does not use tftp.\n\t\t[Jungfrau][Moench][Gotthard][CTB] Updates the firmware, detector server, deletes old server, creates the symbolic link and then reboots detector controller. \n\t\t[Mythen3][Gotthard2] will require a script to start up the shorter named server link at start up. \n\t\tserver_name is full path name of detector server binary\n\t\tfname is full path of programming file" help: "\n\tWithout tftp: [server_name (incl fullpath)] [fname.pof (incl full path)] This does not use tftp.\n\t\t[Jungfrau][Moench][Gotthard][Ctb] Updates the firmware, detector server, deletes old server, creates the symbolic link and then reboots detector controller. \n\t\t[Mythen3][Gotthard2] will require a script to start up the shorter named server link at start up. \n\t\tserver_name is full path name of detector server binary\n\t\tfname is full path of programming file"
actions: actions:
PUT: PUT:
argc: 2 argc: 2

View File

@ -202,7 +202,8 @@ adcindex:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: det->getDetectorType().squash(defs::GENERIC) != defs::CHIPTESTBOARD
&& det->getDetectorType().squash(defs::GENERIC) != defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
function: getAdcIndex function: getAdcIndex
input: input:
@ -215,7 +216,7 @@ adcindex:
store_result_in_t: true store_result_in_t: true
command_name: adcindex command_name: adcindex
function_alias: adcindex function_alias: adcindex
help: "[name] \n\t\t[ChipTestBoard] Get the adc index for the given name." help: "[name] \n\t\t[Ctb][Xilinx_Ctb] Get the adc index for the given name."
infer_action: true infer_action: true
template: true template: true
adcinvert: adcinvert:
@ -268,8 +269,13 @@ adclist:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: cmd != "daclist" && det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: cmd != "daclist" && det_type != defs::CHIPTESTBOARD && det_type
!= defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
extra_variables:
- name: det_type
type: auto
value: det->getDetectorType().squash(defs::GENERIC);
function: getAdcNames function: getAdcNames
input: [] input: []
input_types: [] input_types: []
@ -287,10 +293,16 @@ adclist:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: cmd != "daclist" && det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: cmd != "daclist" && det_type != defs::CHIPTESTBOARD && det_type
!= defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
- condition: cmd == "daclist" && det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: cmd == "daclist" && det_type != defs::CHIPTESTBOARD && det_type
!= defs::XILINX_CHIPTESTBOARD
message: '"This detector already has fixed dac names. Cannot change them."' message: '"This detector already has fixed dac names. Cannot change them."'
extra_variables:
- name: det_type
type: auto
value: det->getDetectorType().squash(defs::GENERIC);
function: setAdcNames function: setAdcNames
input: input:
- args - args
@ -302,8 +314,8 @@ adclist:
store_result_in_t: false store_result_in_t: false
command_name: adclist command_name: adclist
function_alias: adclist function_alias: adclist
help: "[adcname1 adcname2 .. adcname32] \n\t\t[ChipTestBoard] Set the list of adc\ help: "[adcname1 adcname2 .. adcname32] \n\t\t[Ctb][Xilinx_Ctb] Set the list of\
\ names for this board." \ adc names for this board."
infer_action: true infer_action: true
template: true template: true
adcname: adcname:
@ -318,7 +330,8 @@ adcname:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: det->getDetectorType().squash(defs::GENERIC) != defs::CHIPTESTBOARD
&& det->getDetectorType().squash(defs::GENERIC) != defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
function: getAdcName function: getAdcName
input: input:
@ -343,7 +356,8 @@ adcname:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: det->getDetectorType().squash(defs::GENERIC) != defs::CHIPTESTBOARD
&& det->getDetectorType().squash(defs::GENERIC) != defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
function: setAdcName function: setAdcName
input: input:
@ -358,8 +372,8 @@ adcname:
store_result_in_t: false store_result_in_t: false
command_name: adcname command_name: adcname
function_alias: adcname function_alias: adcname
help: "[0-31][name] \n\t\t[ChipTestBoard] Set the adc at the given position to the\ help: "[0-31][name] \n\t\t[Ctb][Xilinx_Ctb] Set the adc at the given position to\
\ given name." \ the given name."
infer_action: true infer_action: true
template: true template: true
adcphase: adcphase:
@ -708,7 +722,7 @@ asamples:
store_result_in_t: false store_result_in_t: false
command_name: asamples command_name: asamples
function_alias: asamples function_alias: asamples
help: "[n_samples]\n\t[CTB] Number of analog samples expected." help: "[n_samples]\n\t[Ctb] Number of analog samples expected."
infer_action: true infer_action: true
template: true template: true
autocompdisable: autocompdisable:
@ -1711,13 +1725,15 @@ dac:
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: is_int(args[0]) && det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: is_int(args[0]) && det->getDetectorType().squash() != defs::CHIPTESTBOARD
&& det->getDetectorType().squash() != defs::XILINX_CHIPTESTBOARD
message: '"Dac indices can only be used for chip test board. Use daclist message: '"Dac indices can only be used for chip test board. Use daclist
to get list of dac names for current detector."' to get list of dac names for current detector."'
extra_variables: extra_variables:
- name: dacIndex - name: dacIndex
type: defs::dacIndex type: defs::dacIndex
value: '(det->getDetectorType().squash() == defs::CHIPTESTBOARD && !is_int(args[0])) value: '((det->getDetectorType().squash() == defs::CHIPTESTBOARD || det->getDetectorType().squash()
? det->getDacIndex(args[0]) : StringTo<defs::dacIndex>(args[0])' == defs::XILINX_CHIPTESTBOARD) && !is_int(args[0])) ? det->getDacIndex(args[0])
: StringTo<defs::dacIndex>(args[0])'
function: getDAC function: getDAC
input: input:
- dacIndex - dacIndex
@ -1742,6 +1758,7 @@ dac:
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: is_int(args[0]) && det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: is_int(args[0]) && det->getDetectorType().squash() != defs::CHIPTESTBOARD
&& det->getDetectorType().squash() != defs::XILINX_CHIPTESTBOARD
message: '"Dac indices can only be used for chip test board. Use daclist message: '"Dac indices can only be used for chip test board. Use daclist
to get list of dac names for current detector."' to get list of dac names for current detector."'
- condition: args[1] != "mv" && args[1] != "mV" - condition: args[1] != "mv" && args[1] != "mV"
@ -1749,8 +1766,9 @@ dac:
extra_variables: extra_variables:
- name: dacIndex - name: dacIndex
type: defs::dacIndex type: defs::dacIndex
value: '(det->getDetectorType().squash() == defs::CHIPTESTBOARD && !is_int(args[0])) value: '((det->getDetectorType().squash() == defs::CHIPTESTBOARD || det->getDetectorType().squash()
? det->getDacIndex(args[0]) : StringTo<defs::dacIndex>(args[0])' == defs::XILINX_CHIPTESTBOARD) && !is_int(args[0])) ? det->getDacIndex(args[0])
: StringTo<defs::dacIndex>(args[0])'
function: getDAC function: getDAC
input: input:
- dacIndex - dacIndex
@ -1779,13 +1797,15 @@ dac:
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: is_int(args[0]) && det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: is_int(args[0]) && det->getDetectorType().squash() != defs::CHIPTESTBOARD
&& det->getDetectorType().squash() != defs::XILINX_CHIPTESTBOARD
message: '"Dac indices can only be used for chip test board. Use daclist message: '"Dac indices can only be used for chip test board. Use daclist
to get list of dac names for current detector."' to get list of dac names for current detector."'
extra_variables: extra_variables:
- name: dacIndex - name: dacIndex
type: defs::dacIndex type: defs::dacIndex
value: '(det->getDetectorType().squash() == defs::CHIPTESTBOARD && !is_int(args[0])) value: '((det->getDetectorType().squash() == defs::CHIPTESTBOARD || det->getDetectorType().squash()
? det->getDacIndex(args[0]) : StringTo<defs::dacIndex>(args[0])' == defs::XILINX_CHIPTESTBOARD) && !is_int(args[0])) ? det->getDacIndex(args[0])
: StringTo<defs::dacIndex>(args[0])'
function: setDAC function: setDAC
input: input:
- dacIndex - dacIndex
@ -1814,13 +1834,15 @@ dac:
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: is_int(args[0]) && det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: is_int(args[0]) && det->getDetectorType().squash() != defs::CHIPTESTBOARD
&& det->getDetectorType().squash() != defs::XILINX_CHIPTESTBOARD
message: '"Dac indices can only be used for chip test board. Use daclist message: '"Dac indices can only be used for chip test board. Use daclist
to get list of dac names for current detector."' to get list of dac names for current detector."'
extra_variables: extra_variables:
- name: dacIndex - name: dacIndex
type: defs::dacIndex type: defs::dacIndex
value: '(det->getDetectorType().squash() == defs::CHIPTESTBOARD && !is_int(args[0])) value: '((det->getDetectorType().squash() == defs::CHIPTESTBOARD || det->getDetectorType().squash()
? det->getDacIndex(args[0]) : StringTo<defs::dacIndex>(args[0])' == defs::XILINX_CHIPTESTBOARD) && !is_int(args[0])) ? det->getDacIndex(args[0])
: StringTo<defs::dacIndex>(args[0])'
function: setDAC function: setDAC
input: input:
- dacIndex - dacIndex
@ -1855,7 +1877,8 @@ dacindex:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: det->getDetectorType().squash(defs::GENERIC) != defs::CHIPTESTBOARD
&& det->getDetectorType().squash(defs::GENERIC) != defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
extra_variables: extra_variables:
- name: index - name: index
@ -1872,7 +1895,7 @@ dacindex:
store_result_in_t: true store_result_in_t: true
command_name: dacindex command_name: dacindex
function_alias: dacindex function_alias: dacindex
help: "[name] \n\t\t[ChipTestBoard] Get the dac index for the given name." help: "[name] \n\t\t[Ctb][Xilinx_Ctb] Get the dac index for the given name."
infer_action: true infer_action: true
template: true template: true
daclist: daclist:
@ -1885,8 +1908,13 @@ daclist:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: cmd != "daclist" && det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: cmd != "daclist" && det_type != defs::CHIPTESTBOARD && det_type
!= defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
extra_variables:
- name: det_type
type: auto
value: det->getDetectorType().squash(defs::GENERIC);
function: getDacNames function: getDacNames
input: [] input: []
input_types: [] input_types: []
@ -1904,10 +1932,16 @@ daclist:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: cmd != "daclist" && det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: cmd != "daclist" && det_type != defs::CHIPTESTBOARD && det_type
!= defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
- condition: cmd == "daclist" && det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: cmd == "daclist" && det_type != defs::CHIPTESTBOARD && det_type
!= defs::XILINX_CHIPTESTBOARD
message: '"This detector already has fixed dac names. Cannot change them."' message: '"This detector already has fixed dac names. Cannot change them."'
extra_variables:
- name: det_type
type: auto
value: det->getDetectorType().squash(defs::GENERIC);
function: setDacNames function: setDacNames
input: input:
- args - args
@ -1919,9 +1953,9 @@ daclist:
store_result_in_t: false store_result_in_t: false
command_name: daclist command_name: daclist
function_alias: daclist function_alias: daclist
help: "[dacname1 dacname2 .. dacname18] \n\t\t[ChipTestBoard] Set the list of dac\ help: "[dacname1 dacname2 .. dacname18] \n\t\t[Ctb][Xilinx_Ctb] Set the list of\
\ names for this detector.\n\t\t[All] Gets the list of dac names for every dac\ \ dac names for this detector.\n\t\t[All] Gets the list of dac names for every\
\ for this detector." \ dac for this detector."
infer_action: true infer_action: true
template: true template: true
dacname: dacname:
@ -1936,7 +1970,8 @@ dacname:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: det->getDetectorType().squash(defs::GENERIC) != defs::CHIPTESTBOARD
&& det->getDetectorType().squash(defs::GENERIC) != defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
extra_variables: extra_variables:
- name: index - name: index
@ -1965,7 +2000,8 @@ dacname:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: det->getDetectorType().squash(defs::GENERIC) != defs::CHIPTESTBOARD
&& det->getDetectorType().squash(defs::GENERIC) != defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
extra_variables: extra_variables:
- name: index - name: index
@ -1984,8 +2020,8 @@ dacname:
store_result_in_t: false store_result_in_t: false
command_name: dacname command_name: dacname
function_alias: dacname function_alias: dacname
help: "[0-17][name] \n\t\t[ChipTestBoard] Set the dac at the given position to the\ help: "[0-17][name] \n\t\t[Ctb][Xilinx_Ctb] Set the dac at the given position to\
\ given name." \ the given name."
infer_action: true infer_action: true
template: true template: true
dacvalues: dacvalues:
@ -2253,7 +2289,7 @@ dbitpipeline:
command_name: dbitpipeline command_name: dbitpipeline
function_alias: dbitpipeline function_alias: dbitpipeline
help: "[n_value]\n\t[Ctb][Gotthard2] Pipeline of the clock for latching digital\ help: "[n_value]\n\t[Ctb][Gotthard2] Pipeline of the clock for latching digital\
\ bits.\n\t[Gotthard2] Options: 0-7\n\t[CTB] Options: 0-255" \ bits.\n\t[Gotthard2] Options: 0-7\n\t[Ctb] Options: 0-255"
infer_action: true infer_action: true
template: true template: true
defaultdac: defaultdac:
@ -2494,7 +2530,7 @@ delayl:
store_result_in_t: true store_result_in_t: true
command_name: delayl command_name: delayl
function_alias: delayl function_alias: delayl
help: "\n\t[Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][CTB] Delay Left in Acquisition.\ help: "\n\t[Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][Ctb] Delay Left in Acquisition.\
\ \n\t[Gotthard2] only in continuous mode." \ \n\t[Gotthard2] only in continuous mode."
infer_action: true infer_action: true
template: true template: true
@ -2728,7 +2764,7 @@ dsamples:
store_result_in_t: false store_result_in_t: false
command_name: dsamples command_name: dsamples
function_alias: dsamples function_alias: dsamples
help: "[n_value]\n\t[CTB] Number of digital samples expected." help: "[n_value]\n\t[Ctb] Number of digital samples expected."
infer_action: true infer_action: true
template: true template: true
execcommand: execcommand:
@ -3870,7 +3906,7 @@ framecounter:
store_result_in_t: true store_result_in_t: true
command_name: framecounter command_name: framecounter
function_alias: framecounter function_alias: framecounter
help: "\n\t[Jungfrau][Moench][Mythen3][Gotthard2][CTB] Number of frames from start\ help: "\n\t[Jungfrau][Moench][Mythen3][Gotthard2][Ctb] Number of frames from start\
\ run control.\n\t[Gotthard2] only in continuous mode." \ run control.\n\t[Gotthard2] only in continuous mode."
infer_action: true infer_action: true
template: true template: true
@ -3934,7 +3970,7 @@ framesl:
store_result_in_t: true store_result_in_t: true
command_name: framesl command_name: framesl
function_alias: framesl function_alias: framesl
help: "\n\t[Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][CTB] Number of frames\ help: "\n\t[Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][Ctb] Number of frames\
\ left in acquisition. \n\t[Gotthard2] only in continuous auto mode." \ left in acquisition. \n\t[Gotthard2] only in continuous auto mode."
infer_action: true infer_action: true
template: true template: true
@ -3969,7 +4005,7 @@ frametime:
store_result_in_t: true store_result_in_t: true
command_name: frametime command_name: frametime
function_alias: frametime function_alias: frametime
help: "[(optional unit) ns|us|ms|s]\n\t[Jungfrau][Moench][Mythen3][Gotthard2][CTB]\ help: "[(optional unit) ns|us|ms|s]\n\t[Jungfrau][Moench][Mythen3][Gotthard2][Ctb]\
\ Timestamp at a frame start.\n\t[Gotthard2] not in burst and auto mode." \ Timestamp at a frame start.\n\t[Gotthard2] not in burst and auto mode."
infer_action: true infer_action: true
template: true template: true
@ -5252,7 +5288,7 @@ maxadcphaseshift:
store_result_in_t: true store_result_in_t: true
command_name: maxadcphaseshift command_name: maxadcphaseshift
function_alias: maxadcphaseshift function_alias: maxadcphaseshift
help: "\n\t[Jungfrau][Moench][CTB] Absolute maximum Phase shift of ADC clock." help: "\n\t[Jungfrau][Moench][Ctb] Absolute maximum Phase shift of ADC clock."
infer_action: true infer_action: true
template: true template: true
maxclkphaseshift: maxclkphaseshift:
@ -5305,7 +5341,7 @@ maxdbitphaseshift:
store_result_in_t: true store_result_in_t: true
command_name: maxdbitphaseshift command_name: maxdbitphaseshift
function_alias: maxdbitphaseshift function_alias: maxdbitphaseshift
help: "\n\t[CTB][Jungfrau] Absolute maximum Phase shift of of the clock to latch\ help: "\n\t[Ctb][Jungfrau] Absolute maximum Phase shift of of the clock to latch\
\ digital bits." \ digital bits."
infer_action: true infer_action: true
template: true template: true
@ -5438,7 +5474,7 @@ nextframenumber:
store_result_in_t: false store_result_in_t: false
command_name: nextframenumber command_name: nextframenumber
function_alias: nextframenumber function_alias: nextframenumber
help: "[n_value]\n\t[Eiger][Jungfrau][Moench][CTB] Next frame number. Stopping acquisition\ help: "[n_value]\n\t[Eiger][Jungfrau][Moench][Ctb] Next frame number. Stopping acquisition\
\ might result in different frame numbers for different modules." \ might result in different frame numbers for different modules."
infer_action: true infer_action: true
template: true template: true
@ -7142,7 +7178,7 @@ periodl:
store_result_in_t: true store_result_in_t: true
command_name: periodl command_name: periodl
function_alias: periodl function_alias: periodl
help: "\n\t[Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2] Period left for\ help: "\n\t[Gotthard][Jungfrau][Moench][Ctb][Mythen3][Gotthard2] Period left for\
\ current frame. \n\t[Gotthard2] only in continuous mode." \ current frame. \n\t[Gotthard2] only in continuous mode."
infer_action: true infer_action: true
template: true template: true
@ -7281,7 +7317,8 @@ powerindex:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: det->getDetectorType().squash(defs::GENERIC) != defs::CHIPTESTBOARD
&& det->getDetectorType().squash(defs::GENERIC) != defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
extra_variables: extra_variables:
- name: index - name: index
@ -7298,7 +7335,7 @@ powerindex:
store_result_in_t: true store_result_in_t: true
command_name: powerindex command_name: powerindex
function_alias: powerindex function_alias: powerindex
help: "[name] \n\t\t[ChipTestBoard] Get the power index for the given name." help: "[name] \n\t\t[Ctb][Xilinx_Ctb] Get the power index for the given name."
infer_action: true infer_action: true
template: true template: true
powerlist: powerlist:
@ -7311,8 +7348,13 @@ powerlist:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: cmd != "daclist" && det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: cmd != "daclist" && det_type != defs::CHIPTESTBOARD && det_type
!= defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
extra_variables:
- name: det_type
type: auto
value: det->getDetectorType().squash(defs::GENERIC);
function: getPowerNames function: getPowerNames
input: [] input: []
input_types: [] input_types: []
@ -7330,10 +7372,16 @@ powerlist:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: cmd != "daclist" && det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: cmd != "daclist" && det_type != defs::CHIPTESTBOARD && det_type
!= defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
- condition: cmd == "daclist" && det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: cmd == "daclist" && det_type != defs::CHIPTESTBOARD && det_type
!= defs::XILINX_CHIPTESTBOARD
message: '"This detector already has fixed dac names. Cannot change them."' message: '"This detector already has fixed dac names. Cannot change them."'
extra_variables:
- name: det_type
type: auto
value: det->getDetectorType().squash(defs::GENERIC);
function: setPowerNames function: setPowerNames
input: input:
- args - args
@ -7345,7 +7393,7 @@ powerlist:
store_result_in_t: false store_result_in_t: false
command_name: powerlist command_name: powerlist
function_alias: powerlist function_alias: powerlist
help: "[powername1 powername2 .. powername4] \n\t\t[ChipTestBoard] Set the list\ help: "[powername1 powername2 .. powername4] \n\t\t[Ctb][Xilinx_Ctb] Set the list\
\ of power names for this board." \ of power names for this board."
infer_action: true infer_action: true
template: true template: true
@ -7361,7 +7409,8 @@ powername:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: det->getDetectorType().squash(defs::GENERIC) != defs::CHIPTESTBOARD
&& det->getDetectorType().squash(defs::GENERIC) != defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
extra_variables: extra_variables:
- name: index - name: index
@ -7390,7 +7439,8 @@ powername:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: det->getDetectorType().squash(defs::GENERIC) != defs::CHIPTESTBOARD
&& det->getDetectorType().squash(defs::GENERIC) != defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
extra_variables: extra_variables:
- name: index - name: index
@ -7409,7 +7459,7 @@ powername:
store_result_in_t: false store_result_in_t: false
command_name: powername command_name: powername
function_alias: powername function_alias: powername
help: "[0-4][name] \n\t\t[ChipTestBoard] Set the power at the given position to\ help: "[0-4][name] \n\t\t[Ctb][Xilinx_Ctb] Set the power at the given position to\
\ the given name." \ the given name."
infer_action: true infer_action: true
template: true template: true
@ -7436,7 +7486,7 @@ powervalues:
store_result_in_t: true store_result_in_t: true
command_name: powervalues command_name: powervalues
function_alias: powervalues function_alias: powervalues
help: "[name] \n\t\t[ChipTestBoard] Get values of all powers." help: "[name] \n\t\t[Ctb][Xilinx_Ctb] Get values of all powers."
infer_action: true infer_action: true
programfpga: programfpga:
actions: actions:
@ -7778,8 +7828,12 @@ readoutspeed:
check_det_id: false check_det_id: false
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: det->getDetectorType().squash() == defs::CHIPTESTBOARD - condition: det_type == defs::CHIPTESTBOARD || det_type == defs::XILINX_CHIPTESTBOARD
message: '"ReadoutSpeed not implemented. Did you mean runclk?"' message: '"ReadoutSpeed not implemented. Did you mean runclk?"'
extra_variables:
- name: det_type
type: auto
value: det->getDetectorType().squash(defs::GENERIC);
function: getReadoutSpeed function: getReadoutSpeed
input: [] input: []
input_types: [] input_types: []
@ -7797,8 +7851,12 @@ readoutspeed:
check_det_id: false check_det_id: false
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: det->getDetectorType().squash() == defs::CHIPTESTBOARD - condition: det_type == defs::CHIPTESTBOARD || det_type == defs::XILINX_CHIPTESTBOARD
message: '"ReadoutSpeed not implemented. Did you mean runclk?"' message: '"ReadoutSpeed not implemented. Did you mean runclk?"'
extra_variables:
- name: det_type
type: auto
value: det->getDetectorType().squash(defs::GENERIC);
function: setReadoutSpeed function: setReadoutSpeed
input: input:
- args[0] - args[0]
@ -8058,7 +8116,7 @@ romode:
store_result_in_t: false store_result_in_t: false
command_name: romode command_name: romode
function_alias: romode function_alias: romode
help: "[analog|digital|analog_digital|transceiver|digital_transceiver]\n\t[CTB]\ help: "[analog|digital|analog_digital|transceiver|digital_transceiver]\n\t[Ctb]\
\ Readout mode. Default is analog." \ Readout mode. Default is analog."
infer_action: true infer_action: true
template: true template: true
@ -8172,7 +8230,7 @@ runtime:
store_result_in_t: true store_result_in_t: true
command_name: runtime command_name: runtime
function_alias: runtime function_alias: runtime
help: "[(optional unit) ns|us|ms|s]\n\t[Jungfrau][Moench][Mythen3][Gotthard2][CTB]\ help: "[(optional unit) ns|us|ms|s]\n\t[Jungfrau][Moench][Mythen3][Gotthard2][Ctb]\
\ Time from detector start up.\n\t[Gotthard2] not in burst and auto mode." \ Time from detector start up.\n\t[Gotthard2] not in burst and auto mode."
infer_action: true infer_action: true
template: true template: true
@ -9554,7 +9612,7 @@ serialnumber:
store_result_in_t: true store_result_in_t: true
command_name: serialnumber command_name: serialnumber
function_alias: serialnumber function_alias: serialnumber
help: "\n\t[Jungfrau][Moench][Gotthard][Mythen3][Gotthard2][CTB]\nSerial number\ help: "\n\t[Jungfrau][Moench][Gotthard][Mythen3][Gotthard2][Ctb]\nSerial number\
\ of detector." \ of detector."
infer_action: true infer_action: true
template: true template: true
@ -9710,7 +9768,8 @@ signalindex:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: det->getDetectorType().squash(defs::GENERIC) != defs::CHIPTESTBOARD
&& det->getDetectorType().squash(defs::GENERIC) != defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
function: getSignalIndex function: getSignalIndex
input: input:
@ -9723,7 +9782,7 @@ signalindex:
store_result_in_t: true store_result_in_t: true
command_name: signalindex command_name: signalindex
function_alias: signalindex function_alias: signalindex
help: "[name] \n\t\t[ChipTestBoard] Get the signal index for the given name." help: "[name] \n\t\t[Ctb][Xilinx_Ctb] Get the signal index for the given name."
infer_action: true infer_action: true
template: true template: true
signallist: signallist:
@ -9736,8 +9795,13 @@ signallist:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: cmd != "daclist" && det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: cmd != "daclist" && det_type != defs::CHIPTESTBOARD && det_type
!= defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
extra_variables:
- name: det_type
type: auto
value: det->getDetectorType().squash(defs::GENERIC);
function: getSignalNames function: getSignalNames
input: [] input: []
input_types: [] input_types: []
@ -9755,10 +9819,16 @@ signallist:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: cmd != "daclist" && det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: cmd != "daclist" && det_type != defs::CHIPTESTBOARD && det_type
!= defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
- condition: cmd == "daclist" && det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: cmd == "daclist" && det_type != defs::CHIPTESTBOARD && det_type
!= defs::XILINX_CHIPTESTBOARD
message: '"This detector already has fixed dac names. Cannot change them."' message: '"This detector already has fixed dac names. Cannot change them."'
extra_variables:
- name: det_type
type: auto
value: det->getDetectorType().squash(defs::GENERIC);
function: setSignalNames function: setSignalNames
input: input:
- args - args
@ -9770,8 +9840,8 @@ signallist:
store_result_in_t: false store_result_in_t: false
command_name: signallist command_name: signallist
function_alias: signallist function_alias: signallist
help: "[signalname1 signalname2 .. signalname63] \n\t\t[ChipTestBoard] Set the list\ help: "[signalname1 signalname2 .. signalname63] \n\t\t[Ctb][Xilinx_Ctb] Set the\
\ of signal names for this board." \ list of signal names for this board."
infer_action: true infer_action: true
template: true template: true
signalname: signalname:
@ -9786,7 +9856,8 @@ signalname:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: det->getDetectorType().squash(defs::GENERIC) != defs::CHIPTESTBOARD
&& det->getDetectorType().squash(defs::GENERIC) != defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
function: getSignalName function: getSignalName
input: input:
@ -9811,7 +9882,8 @@ signalname:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: det->getDetectorType().squash(defs::GENERIC) != defs::CHIPTESTBOARD
&& det->getDetectorType().squash(defs::GENERIC) != defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
function: setSignalName function: setSignalName
input: input:
@ -9826,8 +9898,8 @@ signalname:
store_result_in_t: false store_result_in_t: false
command_name: signalname command_name: signalname
function_alias: signalname function_alias: signalname
help: "[0-63][name] \n\t\t[ChipTestBoard] Set the signal at the given position to\ help: "[0-63][name] \n\t\t[Ctb][Xilinx_Ctb] Set the signal at the given position\
\ the given name." \ to the given name."
infer_action: true infer_action: true
template: true template: true
slowadc: slowadc:
@ -9863,7 +9935,8 @@ slowadcindex:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: det->getDetectorType().squash(defs::GENERIC) != defs::CHIPTESTBOARD
&& det->getDetectorType().squash(defs::GENERIC) != defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
extra_variables: extra_variables:
- name: index - name: index
@ -9880,7 +9953,7 @@ slowadcindex:
store_result_in_t: true store_result_in_t: true
command_name: slowadcindex command_name: slowadcindex
function_alias: slowadcindex function_alias: slowadcindex
help: "[name] \n\t\t[ChipTestBoard] Get the slowadc index for the given name." help: "[name] \n\t\t[Ctb][Xilinx_Ctb] Get the slowadc index for the given name."
infer_action: true infer_action: true
template: true template: true
slowadclist: slowadclist:
@ -9893,8 +9966,13 @@ slowadclist:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: cmd != "daclist" && det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: cmd != "daclist" && det_type != defs::CHIPTESTBOARD && det_type
!= defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
extra_variables:
- name: det_type
type: auto
value: det->getDetectorType().squash(defs::GENERIC);
function: getSlowADCNames function: getSlowADCNames
input: [] input: []
input_types: [] input_types: []
@ -9912,10 +9990,16 @@ slowadclist:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: cmd != "daclist" && det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: cmd != "daclist" && det_type != defs::CHIPTESTBOARD && det_type
!= defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
- condition: cmd == "daclist" && det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: cmd == "daclist" && det_type != defs::CHIPTESTBOARD && det_type
!= defs::XILINX_CHIPTESTBOARD
message: '"This detector already has fixed dac names. Cannot change them."' message: '"This detector already has fixed dac names. Cannot change them."'
extra_variables:
- name: det_type
type: auto
value: det->getDetectorType().squash(defs::GENERIC);
function: setSlowADCNames function: setSlowADCNames
input: input:
- args - args
@ -9927,7 +10011,7 @@ slowadclist:
store_result_in_t: false store_result_in_t: false
command_name: slowadclist command_name: slowadclist
function_alias: slowadclist function_alias: slowadclist
help: "[slowadcname1 slowadcname2 .. slowadcname7] \n\t\t[ChipTestBoard] Set the\ help: "[slowadcname1 slowadcname2 .. slowadcname7] \n\t\t[Ctb][Xilinx_Ctb] Set the\
\ list of slowadc names for this board." \ list of slowadc names for this board."
infer_action: true infer_action: true
template: true template: true
@ -9943,7 +10027,8 @@ slowadcname:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: det->getDetectorType().squash(defs::GENERIC) != defs::CHIPTESTBOARD
&& det->getDetectorType().squash(defs::GENERIC) != defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
extra_variables: extra_variables:
- name: index - name: index
@ -9972,7 +10057,8 @@ slowadcname:
check_det_id: true check_det_id: true
convert_det_id: true convert_det_id: true
exceptions: exceptions:
- condition: det->getDetectorType().squash() != defs::CHIPTESTBOARD - condition: det->getDetectorType().squash(defs::GENERIC) != defs::CHIPTESTBOARD
&& det->getDetectorType().squash(defs::GENERIC) != defs::XILINX_CHIPTESTBOARD
message: cmd + " only allowed for CTB." message: cmd + " only allowed for CTB."
extra_variables: extra_variables:
- name: index - name: index
@ -9991,8 +10077,8 @@ slowadcname:
store_result_in_t: false store_result_in_t: false
command_name: slowadcname command_name: slowadcname
function_alias: slowadcname function_alias: slowadcname
help: "[0-7][name] \n\t\t[ChipTestBoard] Set the slowadc at the given position to\ help: "[0-7][name] \n\t\t[Ctb][Xilinx_Ctb] Set the slowadc at the given position\
\ the given name." \ to the given name."
infer_action: true infer_action: true
template: true template: true
slowadcvalues: slowadcvalues:
@ -10018,7 +10104,7 @@ slowadcvalues:
store_result_in_t: true store_result_in_t: true
command_name: slowadcvalues command_name: slowadcvalues
function_alias: slowadcvalues function_alias: slowadcvalues
help: "[name] \n\t\t[ChipTestBoard] Get values of all slow adcs." help: "[name] \n\t\t[Ctb][Xilinx_Ctb] Get values of all slow adcs."
infer_action: true infer_action: true
start: start:
actions: actions:
@ -11373,7 +11459,7 @@ triggersl:
store_result_in_t: true store_result_in_t: true
command_name: triggersl command_name: triggersl
function_alias: triggersl function_alias: triggersl
help: "\n\t[Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][CTB] Number of triggers\ help: "\n\t[Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][Ctb] Number of triggers\
\ left in acquisition. Only when external trigger used." \ left in acquisition. Only when external trigger used."
infer_action: true infer_action: true
template: true template: true
@ -11530,7 +11616,7 @@ tsamples:
store_result_in_t: false store_result_in_t: false
command_name: tsamples command_name: tsamples
function_alias: tsamples function_alias: tsamples
help: "[n_value]\n\t[CTB] Number of transceiver samples expected." help: "[n_value]\n\t[Ctb] Number of transceiver samples expected."
infer_action: true infer_action: true
template: true template: true
txdelay: txdelay:
@ -11720,7 +11806,7 @@ type:
command_name: type command_name: type
function_alias: type function_alias: type
help: "\n\tReturns detector type. Can be Eiger, Jungfrau, Gotthard, Moench, Mythen3,\ help: "\n\tReturns detector type. Can be Eiger, Jungfrau, Gotthard, Moench, Mythen3,\
\ Gotthard2, ChipTestBoard" \ Gotthard2, ChipTestBoard, Xilinx_ChipTestBoard"
infer_action: true infer_action: true
template: true template: true
udp_cleardst: udp_cleardst:
@ -12327,7 +12413,7 @@ update:
command_name: update command_name: update
function_alias: update function_alias: update
help: "\n\tWithout tftp: [server_name (incl fullpath)] [fname.pof (incl full path)]\ help: "\n\tWithout tftp: [server_name (incl fullpath)] [fname.pof (incl full path)]\
\ This does not use tftp.\n\t\t[Jungfrau][Moench][Gotthard][CTB] Updates the firmware,\ \ This does not use tftp.\n\t\t[Jungfrau][Moench][Gotthard][Ctb] Updates the firmware,\
\ detector server, deletes old server, creates the symbolic link and then reboots\ \ detector server, deletes old server, creates the symbolic link and then reboots\
\ detector controller. \n\t\t[Mythen3][Gotthard2] will require a script to start\ \ detector controller. \n\t\t[Mythen3][Gotthard2] will require a script to start\
\ up the shorter named server link at start up. \n\t\tserver_name is full path\ \ up the shorter named server link at start up. \n\t\tserver_name is full path\

View File

@ -98,7 +98,7 @@ class Detector {
Result<std::string> getReceiverVersion(Positions pos = {}) const; Result<std::string> getReceiverVersion(Positions pos = {}) const;
/** Options: EIGER, JUNGFRAU, GOTTHARD, MOENCH, MYTHEN3, GOTTHARD2, /** Options: EIGER, JUNGFRAU, GOTTHARD, MOENCH, MYTHEN3, GOTTHARD2,
* CHIPTESTBOARD */ * CHIPTESTBOARD, XILINX_CHIPTESTBOARD */
Result<defs::detectorType> getDetectorType(Positions pos = {}) const; Result<defs::detectorType> getDetectorType(Positions pos = {}) const;
/** Gets the total number of modules in shared memory */ /** Gets the total number of modules in shared memory */

View File

@ -264,7 +264,7 @@ std::string Caller::adcindex(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: adcindex" << std::endl; os << "Command: adcindex" << std::endl;
os << R"V0G0N([name] os << R"V0G0N([name]
[ChipTestBoard] Get the adc index for the given name. )V0G0N" [Ctb][Xilinx_Ctb] Get the adc index for the given name. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -289,7 +289,10 @@ std::string Caller::adcindex(int action) {
// generate code for each action // generate code for each action
if (action == slsDetectorDefs::GET_ACTION) { if (action == slsDetectorDefs::GET_ACTION) {
if (args.size() == 1) { if (args.size() == 1) {
if (det->getDetectorType().squash() != defs::CHIPTESTBOARD) { if (det->getDetectorType().squash(defs::GENERIC) !=
defs::CHIPTESTBOARD &&
det->getDetectorType().squash(defs::GENERIC) !=
defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (det_id != -1) { if (det_id != -1) {
@ -374,7 +377,7 @@ std::string Caller::adclist(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: adclist" << std::endl; os << "Command: adclist" << std::endl;
os << R"V0G0N([adcname1 adcname2 .. adcname32] os << R"V0G0N([adcname1 adcname2 .. adcname32]
[ChipTestBoard] Set the list of adc names for this board. )V0G0N" [Ctb][Xilinx_Ctb] Set the list of adc names for this board. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -386,6 +389,8 @@ std::string Caller::adclist(int action) {
} }
if (args.size() == 0) { if (args.size() == 0) {
auto det_type = det->getDetectorType().squash(defs::GENERIC);
;
} }
} }
@ -406,8 +411,10 @@ std::string Caller::adclist(int action) {
// generate code for each action // generate code for each action
if (action == slsDetectorDefs::GET_ACTION) { if (action == slsDetectorDefs::GET_ACTION) {
if (args.size() == 0) { if (args.size() == 0) {
if (cmd != "daclist" && auto det_type = det->getDetectorType().squash(defs::GENERIC);
det->getDetectorType().squash() != defs::CHIPTESTBOARD) { ;
if (cmd != "daclist" && det_type != defs::CHIPTESTBOARD &&
det_type != defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (det_id != -1) { if (det_id != -1) {
@ -419,12 +426,14 @@ std::string Caller::adclist(int action) {
} }
if (action == slsDetectorDefs::PUT_ACTION) { if (action == slsDetectorDefs::PUT_ACTION) {
if (cmd != "daclist" && auto det_type = det->getDetectorType().squash(defs::GENERIC);
det->getDetectorType().squash() != defs::CHIPTESTBOARD) { ;
if (cmd != "daclist" && det_type != defs::CHIPTESTBOARD &&
det_type != defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (cmd == "daclist" && if (cmd == "daclist" && det_type != defs::CHIPTESTBOARD &&
det->getDetectorType().squash() != defs::CHIPTESTBOARD) { det_type != defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError("This detector already has fixed dac names. " throw RuntimeError("This detector already has fixed dac names. "
"Cannot change them."); "Cannot change them.");
} }
@ -445,7 +454,7 @@ std::string Caller::adcname(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: adcname" << std::endl; os << "Command: adcname" << std::endl;
os << R"V0G0N([0-31][name] os << R"V0G0N([0-31][name]
[ChipTestBoard] Set the adc at the given position to the given name. )V0G0N" [Ctb][Xilinx_Ctb] Set the adc at the given position to the given name. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -490,7 +499,10 @@ std::string Caller::adcname(int action) {
// generate code for each action // generate code for each action
if (action == slsDetectorDefs::GET_ACTION) { if (action == slsDetectorDefs::GET_ACTION) {
if (args.size() == 1) { if (args.size() == 1) {
if (det->getDetectorType().squash() != defs::CHIPTESTBOARD) { if (det->getDetectorType().squash(defs::GENERIC) !=
defs::CHIPTESTBOARD &&
det->getDetectorType().squash(defs::GENERIC) !=
defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (det_id != -1) { if (det_id != -1) {
@ -504,7 +516,10 @@ std::string Caller::adcname(int action) {
if (action == slsDetectorDefs::PUT_ACTION) { if (action == slsDetectorDefs::PUT_ACTION) {
if (args.size() == 2) { if (args.size() == 2) {
if (det->getDetectorType().squash() != defs::CHIPTESTBOARD) { if (det->getDetectorType().squash(defs::GENERIC) !=
defs::CHIPTESTBOARD &&
det->getDetectorType().squash(defs::GENERIC) !=
defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (det_id != -1) { if (det_id != -1) {
@ -955,7 +970,7 @@ std::string Caller::asamples(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: asamples" << std::endl; os << "Command: asamples" << std::endl;
os << R"V0G0N([n_samples] os << R"V0G0N([n_samples]
[CTB] Number of analog samples expected. )V0G0N" [Ctb] Number of analog samples expected. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -2248,7 +2263,9 @@ std::string Caller::dac(int action) {
if (args.size() == 1) { if (args.size() == 1) {
defs::dacIndex dacIndex = defs::dacIndex dacIndex =
(det->getDetectorType().squash() == defs::CHIPTESTBOARD && ((det->getDetectorType().squash() == defs::CHIPTESTBOARD ||
det->getDetectorType().squash() ==
defs::XILINX_CHIPTESTBOARD) &&
!is_int(args[0])) !is_int(args[0]))
? det->getDacIndex(args[0]) ? det->getDacIndex(args[0])
: StringTo<defs::dacIndex>(args[0]); : StringTo<defs::dacIndex>(args[0]);
@ -2261,7 +2278,9 @@ std::string Caller::dac(int action) {
if (args.size() == 2) { if (args.size() == 2) {
defs::dacIndex dacIndex = defs::dacIndex dacIndex =
(det->getDetectorType().squash() == defs::CHIPTESTBOARD && ((det->getDetectorType().squash() == defs::CHIPTESTBOARD ||
det->getDetectorType().squash() ==
defs::XILINX_CHIPTESTBOARD) &&
!is_int(args[0])) !is_int(args[0]))
? det->getDacIndex(args[0]) ? det->getDacIndex(args[0])
: StringTo<defs::dacIndex>(args[0]); : StringTo<defs::dacIndex>(args[0]);
@ -2281,7 +2300,9 @@ std::string Caller::dac(int action) {
if (args.size() == 2) { if (args.size() == 2) {
defs::dacIndex dacIndex = defs::dacIndex dacIndex =
(det->getDetectorType().squash() == defs::CHIPTESTBOARD && ((det->getDetectorType().squash() == defs::CHIPTESTBOARD ||
det->getDetectorType().squash() ==
defs::XILINX_CHIPTESTBOARD) &&
!is_int(args[0])) !is_int(args[0]))
? det->getDacIndex(args[0]) ? det->getDacIndex(args[0])
: StringTo<defs::dacIndex>(args[0]); : StringTo<defs::dacIndex>(args[0]);
@ -2299,7 +2320,9 @@ std::string Caller::dac(int action) {
if (args.size() == 3) { if (args.size() == 3) {
defs::dacIndex dacIndex = defs::dacIndex dacIndex =
(det->getDetectorType().squash() == defs::CHIPTESTBOARD && ((det->getDetectorType().squash() == defs::CHIPTESTBOARD ||
det->getDetectorType().squash() ==
defs::XILINX_CHIPTESTBOARD) &&
!is_int(args[0])) !is_int(args[0]))
? det->getDacIndex(args[0]) ? det->getDacIndex(args[0])
: StringTo<defs::dacIndex>(args[0]); : StringTo<defs::dacIndex>(args[0]);
@ -2327,12 +2350,15 @@ std::string Caller::dac(int action) {
if (action == slsDetectorDefs::GET_ACTION) { if (action == slsDetectorDefs::GET_ACTION) {
if (args.size() == 1) { if (args.size() == 1) {
defs::dacIndex dacIndex = defs::dacIndex dacIndex =
(det->getDetectorType().squash() == defs::CHIPTESTBOARD && ((det->getDetectorType().squash() == defs::CHIPTESTBOARD ||
det->getDetectorType().squash() ==
defs::XILINX_CHIPTESTBOARD) &&
!is_int(args[0])) !is_int(args[0]))
? det->getDacIndex(args[0]) ? det->getDacIndex(args[0])
: StringTo<defs::dacIndex>(args[0]); : StringTo<defs::dacIndex>(args[0]);
if (is_int(args[0]) && if (is_int(args[0]) &&
det->getDetectorType().squash() != defs::CHIPTESTBOARD) { det->getDetectorType().squash() != defs::CHIPTESTBOARD &&
det->getDetectorType().squash() != defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError( throw RuntimeError(
"Dac indices can only be used for chip test board. Use " "Dac indices can only be used for chip test board. Use "
"daclist to get list of dac names for current detector."); "daclist to get list of dac names for current detector.");
@ -2344,12 +2370,15 @@ std::string Caller::dac(int action) {
if (args.size() == 2) { if (args.size() == 2) {
defs::dacIndex dacIndex = defs::dacIndex dacIndex =
(det->getDetectorType().squash() == defs::CHIPTESTBOARD && ((det->getDetectorType().squash() == defs::CHIPTESTBOARD ||
det->getDetectorType().squash() ==
defs::XILINX_CHIPTESTBOARD) &&
!is_int(args[0])) !is_int(args[0]))
? det->getDacIndex(args[0]) ? det->getDacIndex(args[0])
: StringTo<defs::dacIndex>(args[0]); : StringTo<defs::dacIndex>(args[0]);
if (is_int(args[0]) && if (is_int(args[0]) &&
det->getDetectorType().squash() != defs::CHIPTESTBOARD) { det->getDetectorType().squash() != defs::CHIPTESTBOARD &&
det->getDetectorType().squash() != defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError( throw RuntimeError(
"Dac indices can only be used for chip test board. Use " "Dac indices can only be used for chip test board. Use "
"daclist to get list of dac names for current detector."); "daclist to get list of dac names for current detector.");
@ -2367,12 +2396,15 @@ std::string Caller::dac(int action) {
if (action == slsDetectorDefs::PUT_ACTION) { if (action == slsDetectorDefs::PUT_ACTION) {
if (args.size() == 2) { if (args.size() == 2) {
defs::dacIndex dacIndex = defs::dacIndex dacIndex =
(det->getDetectorType().squash() == defs::CHIPTESTBOARD && ((det->getDetectorType().squash() == defs::CHIPTESTBOARD ||
det->getDetectorType().squash() ==
defs::XILINX_CHIPTESTBOARD) &&
!is_int(args[0])) !is_int(args[0]))
? det->getDacIndex(args[0]) ? det->getDacIndex(args[0])
: StringTo<defs::dacIndex>(args[0]); : StringTo<defs::dacIndex>(args[0]);
if (is_int(args[0]) && if (is_int(args[0]) &&
det->getDetectorType().squash() != defs::CHIPTESTBOARD) { det->getDetectorType().squash() != defs::CHIPTESTBOARD &&
det->getDetectorType().squash() != defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError( throw RuntimeError(
"Dac indices can only be used for chip test board. Use " "Dac indices can only be used for chip test board. Use "
"daclist to get list of dac names for current detector."); "daclist to get list of dac names for current detector.");
@ -2385,12 +2417,15 @@ std::string Caller::dac(int action) {
if (args.size() == 3) { if (args.size() == 3) {
defs::dacIndex dacIndex = defs::dacIndex dacIndex =
(det->getDetectorType().squash() == defs::CHIPTESTBOARD && ((det->getDetectorType().squash() == defs::CHIPTESTBOARD ||
det->getDetectorType().squash() ==
defs::XILINX_CHIPTESTBOARD) &&
!is_int(args[0])) !is_int(args[0]))
? det->getDacIndex(args[0]) ? det->getDacIndex(args[0])
: StringTo<defs::dacIndex>(args[0]); : StringTo<defs::dacIndex>(args[0]);
if (is_int(args[0]) && if (is_int(args[0]) &&
det->getDetectorType().squash() != defs::CHIPTESTBOARD) { det->getDetectorType().squash() != defs::CHIPTESTBOARD &&
det->getDetectorType().squash() != defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError( throw RuntimeError(
"Dac indices can only be used for chip test board. Use " "Dac indices can only be used for chip test board. Use "
"daclist to get list of dac names for current detector."); "daclist to get list of dac names for current detector.");
@ -2412,7 +2447,7 @@ std::string Caller::dacindex(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: dacindex" << std::endl; os << "Command: dacindex" << std::endl;
os << R"V0G0N([name] os << R"V0G0N([name]
[ChipTestBoard] Get the dac index for the given name. )V0G0N" [Ctb][Xilinx_Ctb] Get the dac index for the given name. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -2439,7 +2474,10 @@ std::string Caller::dacindex(int action) {
if (action == slsDetectorDefs::GET_ACTION) { if (action == slsDetectorDefs::GET_ACTION) {
if (args.size() == 1) { if (args.size() == 1) {
defs::dacIndex index = defs::DAC_0; defs::dacIndex index = defs::DAC_0;
if (det->getDetectorType().squash() != defs::CHIPTESTBOARD) { if (det->getDetectorType().squash(defs::GENERIC) !=
defs::CHIPTESTBOARD &&
det->getDetectorType().squash(defs::GENERIC) !=
defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (det_id != -1) { if (det_id != -1) {
@ -2460,7 +2498,7 @@ std::string Caller::daclist(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: daclist" << std::endl; os << "Command: daclist" << std::endl;
os << R"V0G0N([dacname1 dacname2 .. dacname18] os << R"V0G0N([dacname1 dacname2 .. dacname18]
[ChipTestBoard] Set the list of dac names for this detector. [Ctb][Xilinx_Ctb] Set the list of dac names for this detector.
[All] Gets the list of dac names for every dac for this detector. )V0G0N" [All] Gets the list of dac names for every dac for this detector. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
@ -2473,6 +2511,8 @@ std::string Caller::daclist(int action) {
} }
if (args.size() == 0) { if (args.size() == 0) {
auto det_type = det->getDetectorType().squash(defs::GENERIC);
;
} }
} }
@ -2493,8 +2533,10 @@ std::string Caller::daclist(int action) {
// generate code for each action // generate code for each action
if (action == slsDetectorDefs::GET_ACTION) { if (action == slsDetectorDefs::GET_ACTION) {
if (args.size() == 0) { if (args.size() == 0) {
if (cmd != "daclist" && auto det_type = det->getDetectorType().squash(defs::GENERIC);
det->getDetectorType().squash() != defs::CHIPTESTBOARD) { ;
if (cmd != "daclist" && det_type != defs::CHIPTESTBOARD &&
det_type != defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (det_id != -1) { if (det_id != -1) {
@ -2506,12 +2548,14 @@ std::string Caller::daclist(int action) {
} }
if (action == slsDetectorDefs::PUT_ACTION) { if (action == slsDetectorDefs::PUT_ACTION) {
if (cmd != "daclist" && auto det_type = det->getDetectorType().squash(defs::GENERIC);
det->getDetectorType().squash() != defs::CHIPTESTBOARD) { ;
if (cmd != "daclist" && det_type != defs::CHIPTESTBOARD &&
det_type != defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (cmd == "daclist" && if (cmd == "daclist" && det_type != defs::CHIPTESTBOARD &&
det->getDetectorType().squash() != defs::CHIPTESTBOARD) { det_type != defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError("This detector already has fixed dac names. " throw RuntimeError("This detector already has fixed dac names. "
"Cannot change them."); "Cannot change them.");
} }
@ -2532,7 +2576,7 @@ std::string Caller::dacname(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: dacname" << std::endl; os << "Command: dacname" << std::endl;
os << R"V0G0N([0-17][name] os << R"V0G0N([0-17][name]
[ChipTestBoard] Set the dac at the given position to the given name. )V0G0N" [Ctb][Xilinx_Ctb] Set the dac at the given position to the given name. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -2570,7 +2614,10 @@ std::string Caller::dacname(int action) {
if (action == slsDetectorDefs::GET_ACTION) { if (action == slsDetectorDefs::GET_ACTION) {
if (args.size() == 1) { if (args.size() == 1) {
defs::dacIndex index = defs::DAC_0; defs::dacIndex index = defs::DAC_0;
if (det->getDetectorType().squash() != defs::CHIPTESTBOARD) { if (det->getDetectorType().squash(defs::GENERIC) !=
defs::CHIPTESTBOARD &&
det->getDetectorType().squash(defs::GENERIC) !=
defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (det_id != -1) { if (det_id != -1) {
@ -2585,7 +2632,10 @@ std::string Caller::dacname(int action) {
if (action == slsDetectorDefs::PUT_ACTION) { if (action == slsDetectorDefs::PUT_ACTION) {
if (args.size() == 2) { if (args.size() == 2) {
defs::dacIndex index = defs::DAC_0; defs::dacIndex index = defs::DAC_0;
if (det->getDetectorType().squash() != defs::CHIPTESTBOARD) { if (det->getDetectorType().squash(defs::GENERIC) !=
defs::CHIPTESTBOARD &&
det->getDetectorType().squash(defs::GENERIC) !=
defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (det_id != -1) { if (det_id != -1) {
@ -2880,7 +2930,7 @@ std::string Caller::dbitpipeline(int action) {
os << R"V0G0N([n_value] os << R"V0G0N([n_value]
[Ctb][Gotthard2] Pipeline of the clock for latching digital bits. [Ctb][Gotthard2] Pipeline of the clock for latching digital bits.
[Gotthard2] Options: 0-7 [Gotthard2] Options: 0-7
[CTB] Options: 0-255 )V0G0N" [Ctb] Options: 0-255 )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -3200,7 +3250,7 @@ std::string Caller::delayl(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: delayl" << std::endl; os << "Command: delayl" << std::endl;
os << R"V0G0N( os << R"V0G0N(
[Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][CTB] Delay Left in Acquisition. [Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][Ctb] Delay Left in Acquisition.
[Gotthard2] only in continuous mode. )V0G0N" [Gotthard2] only in continuous mode. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
@ -3572,7 +3622,7 @@ std::string Caller::dsamples(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: dsamples" << std::endl; os << "Command: dsamples" << std::endl;
os << R"V0G0N([n_value] os << R"V0G0N([n_value]
[CTB] Number of digital samples expected. )V0G0N" [Ctb] Number of digital samples expected. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -5082,7 +5132,7 @@ std::string Caller::framecounter(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: framecounter" << std::endl; os << "Command: framecounter" << std::endl;
os << R"V0G0N( os << R"V0G0N(
[Jungfrau][Moench][Mythen3][Gotthard2][CTB] Number of frames from start run control. [Jungfrau][Moench][Mythen3][Gotthard2][Ctb] Number of frames from start run control.
[Gotthard2] only in continuous mode. )V0G0N" [Gotthard2] only in continuous mode. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
@ -5192,7 +5242,7 @@ std::string Caller::framesl(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: framesl" << std::endl; os << "Command: framesl" << std::endl;
os << R"V0G0N( os << R"V0G0N(
[Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][CTB] Number of frames left in acquisition. [Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][Ctb] Number of frames left in acquisition.
[Gotthard2] only in continuous auto mode. )V0G0N" [Gotthard2] only in continuous auto mode. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
@ -5233,7 +5283,7 @@ std::string Caller::frametime(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: frametime" << std::endl; os << "Command: frametime" << std::endl;
os << R"V0G0N([(optional unit) ns|us|ms|s] os << R"V0G0N([(optional unit) ns|us|ms|s]
[Jungfrau][Moench][Mythen3][Gotthard2][CTB] Timestamp at a frame start. [Jungfrau][Moench][Mythen3][Gotthard2][Ctb] Timestamp at a frame start.
[Gotthard2] not in burst and auto mode. )V0G0N" [Gotthard2] not in burst and auto mode. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
@ -6902,7 +6952,7 @@ std::string Caller::maxadcphaseshift(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: maxadcphaseshift" << std::endl; os << "Command: maxadcphaseshift" << std::endl;
os << R"V0G0N( os << R"V0G0N(
[Jungfrau][Moench][CTB] Absolute maximum Phase shift of ADC clock. )V0G0N" [Jungfrau][Moench][Ctb] Absolute maximum Phase shift of ADC clock. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -6998,7 +7048,7 @@ std::string Caller::maxdbitphaseshift(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: maxdbitphaseshift" << std::endl; os << "Command: maxdbitphaseshift" << std::endl;
os << R"V0G0N( os << R"V0G0N(
[CTB][Jungfrau] Absolute maximum Phase shift of of the clock to latch digital bits. )V0G0N" [Ctb][Jungfrau] Absolute maximum Phase shift of of the clock to latch digital bits. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -7174,7 +7224,7 @@ std::string Caller::nextframenumber(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: nextframenumber" << std::endl; os << "Command: nextframenumber" << std::endl;
os << R"V0G0N([n_value] os << R"V0G0N([n_value]
[Eiger][Jungfrau][Moench][CTB] Next frame number. Stopping acquisition might result in different frame numbers for different modules. )V0G0N" [Eiger][Jungfrau][Moench][Ctb] Next frame number. Stopping acquisition might result in different frame numbers for different modules. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -9091,7 +9141,7 @@ std::string Caller::periodl(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: periodl" << std::endl; os << "Command: periodl" << std::endl;
os << R"V0G0N( os << R"V0G0N(
[Gotthard][Jungfrau][Moench][CTB][Mythen3][Gotthard2] Period left for current frame. [Gotthard][Jungfrau][Moench][Ctb][Mythen3][Gotthard2] Period left for current frame.
[Gotthard2] only in continuous mode. )V0G0N" [Gotthard2] only in continuous mode. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
@ -9332,7 +9382,7 @@ std::string Caller::powerindex(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: powerindex" << std::endl; os << "Command: powerindex" << std::endl;
os << R"V0G0N([name] os << R"V0G0N([name]
[ChipTestBoard] Get the power index for the given name. )V0G0N" [Ctb][Xilinx_Ctb] Get the power index for the given name. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -9359,7 +9409,10 @@ std::string Caller::powerindex(int action) {
if (action == slsDetectorDefs::GET_ACTION) { if (action == slsDetectorDefs::GET_ACTION) {
if (args.size() == 1) { if (args.size() == 1) {
defs::dacIndex index = defs::V_POWER_A; defs::dacIndex index = defs::V_POWER_A;
if (det->getDetectorType().squash() != defs::CHIPTESTBOARD) { if (det->getDetectorType().squash(defs::GENERIC) !=
defs::CHIPTESTBOARD &&
det->getDetectorType().squash(defs::GENERIC) !=
defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (det_id != -1) { if (det_id != -1) {
@ -9380,7 +9433,7 @@ std::string Caller::powerlist(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: powerlist" << std::endl; os << "Command: powerlist" << std::endl;
os << R"V0G0N([powername1 powername2 .. powername4] os << R"V0G0N([powername1 powername2 .. powername4]
[ChipTestBoard] Set the list of power names for this board. )V0G0N" [Ctb][Xilinx_Ctb] Set the list of power names for this board. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -9392,6 +9445,8 @@ std::string Caller::powerlist(int action) {
} }
if (args.size() == 0) { if (args.size() == 0) {
auto det_type = det->getDetectorType().squash(defs::GENERIC);
;
} }
} }
@ -9412,8 +9467,10 @@ std::string Caller::powerlist(int action) {
// generate code for each action // generate code for each action
if (action == slsDetectorDefs::GET_ACTION) { if (action == slsDetectorDefs::GET_ACTION) {
if (args.size() == 0) { if (args.size() == 0) {
if (cmd != "daclist" && auto det_type = det->getDetectorType().squash(defs::GENERIC);
det->getDetectorType().squash() != defs::CHIPTESTBOARD) { ;
if (cmd != "daclist" && det_type != defs::CHIPTESTBOARD &&
det_type != defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (det_id != -1) { if (det_id != -1) {
@ -9425,12 +9482,14 @@ std::string Caller::powerlist(int action) {
} }
if (action == slsDetectorDefs::PUT_ACTION) { if (action == slsDetectorDefs::PUT_ACTION) {
if (cmd != "daclist" && auto det_type = det->getDetectorType().squash(defs::GENERIC);
det->getDetectorType().squash() != defs::CHIPTESTBOARD) { ;
if (cmd != "daclist" && det_type != defs::CHIPTESTBOARD &&
det_type != defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (cmd == "daclist" && if (cmd == "daclist" && det_type != defs::CHIPTESTBOARD &&
det->getDetectorType().squash() != defs::CHIPTESTBOARD) { det_type != defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError("This detector already has fixed dac names. " throw RuntimeError("This detector already has fixed dac names. "
"Cannot change them."); "Cannot change them.");
} }
@ -9451,7 +9510,7 @@ std::string Caller::powername(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: powername" << std::endl; os << "Command: powername" << std::endl;
os << R"V0G0N([0-4][name] os << R"V0G0N([0-4][name]
[ChipTestBoard] Set the power at the given position to the given name. )V0G0N" [Ctb][Xilinx_Ctb] Set the power at the given position to the given name. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -9489,7 +9548,10 @@ std::string Caller::powername(int action) {
if (action == slsDetectorDefs::GET_ACTION) { if (action == slsDetectorDefs::GET_ACTION) {
if (args.size() == 1) { if (args.size() == 1) {
defs::dacIndex index = defs::V_POWER_A; defs::dacIndex index = defs::V_POWER_A;
if (det->getDetectorType().squash() != defs::CHIPTESTBOARD) { if (det->getDetectorType().squash(defs::GENERIC) !=
defs::CHIPTESTBOARD &&
det->getDetectorType().squash(defs::GENERIC) !=
defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (det_id != -1) { if (det_id != -1) {
@ -9504,7 +9566,10 @@ std::string Caller::powername(int action) {
if (action == slsDetectorDefs::PUT_ACTION) { if (action == slsDetectorDefs::PUT_ACTION) {
if (args.size() == 2) { if (args.size() == 2) {
defs::dacIndex index = defs::V_POWER_A; defs::dacIndex index = defs::V_POWER_A;
if (det->getDetectorType().squash() != defs::CHIPTESTBOARD) { if (det->getDetectorType().squash(defs::GENERIC) !=
defs::CHIPTESTBOARD &&
det->getDetectorType().squash(defs::GENERIC) !=
defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (det_id != -1) { if (det_id != -1) {
@ -9527,7 +9592,7 @@ std::string Caller::powervalues(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: powervalues" << std::endl; os << "Command: powervalues" << std::endl;
os << R"V0G0N([name] os << R"V0G0N([name]
[ChipTestBoard] Get values of all powers. )V0G0N" [Ctb][Xilinx_Ctb] Get values of all powers. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -10055,6 +10120,8 @@ std::string Caller::readoutspeed(int action) {
} }
if (args.size() == 0) { if (args.size() == 0) {
auto det_type = det->getDetectorType().squash(defs::GENERIC);
;
} }
} }
@ -10065,6 +10132,8 @@ std::string Caller::readoutspeed(int action) {
} }
if (args.size() == 1) { if (args.size() == 1) {
auto det_type = det->getDetectorType().squash(defs::GENERIC);
;
try { try {
StringTo<defs::speedLevel>(args[0]); StringTo<defs::speedLevel>(args[0]);
} catch (...) { } catch (...) {
@ -10084,7 +10153,10 @@ std::string Caller::readoutspeed(int action) {
// generate code for each action // generate code for each action
if (action == slsDetectorDefs::GET_ACTION) { if (action == slsDetectorDefs::GET_ACTION) {
if (args.size() == 0) { if (args.size() == 0) {
if (det->getDetectorType().squash() == defs::CHIPTESTBOARD) { auto det_type = det->getDetectorType().squash(defs::GENERIC);
;
if (det_type == defs::CHIPTESTBOARD ||
det_type == defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError( throw RuntimeError(
"ReadoutSpeed not implemented. Did you mean runclk?"); "ReadoutSpeed not implemented. Did you mean runclk?");
} }
@ -10095,7 +10167,10 @@ std::string Caller::readoutspeed(int action) {
if (action == slsDetectorDefs::PUT_ACTION) { if (action == slsDetectorDefs::PUT_ACTION) {
if (args.size() == 1) { if (args.size() == 1) {
if (det->getDetectorType().squash() == defs::CHIPTESTBOARD) { auto det_type = det->getDetectorType().squash(defs::GENERIC);
;
if (det_type == defs::CHIPTESTBOARD ||
det_type == defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError( throw RuntimeError(
"ReadoutSpeed not implemented. Did you mean runclk?"); "ReadoutSpeed not implemented. Did you mean runclk?");
} }
@ -10430,7 +10505,7 @@ std::string Caller::romode(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: romode" << std::endl; os << "Command: romode" << std::endl;
os << R"V0G0N([analog|digital|analog_digital|transceiver|digital_transceiver] os << R"V0G0N([analog|digital|analog_digital|transceiver|digital_transceiver]
[CTB] Readout mode. Default is analog. )V0G0N" [Ctb] Readout mode. Default is analog. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -10621,7 +10696,7 @@ std::string Caller::runtime(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: runtime" << std::endl; os << "Command: runtime" << std::endl;
os << R"V0G0N([(optional unit) ns|us|ms|s] os << R"V0G0N([(optional unit) ns|us|ms|s]
[Jungfrau][Moench][Mythen3][Gotthard2][CTB] Time from detector start up. [Jungfrau][Moench][Mythen3][Gotthard2][Ctb] Time from detector start up.
[Gotthard2] not in burst and auto mode. )V0G0N" [Gotthard2] not in burst and auto mode. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
@ -12504,7 +12579,7 @@ std::string Caller::serialnumber(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: serialnumber" << std::endl; os << "Command: serialnumber" << std::endl;
os << R"V0G0N( os << R"V0G0N(
[Jungfrau][Moench][Gotthard][Mythen3][Gotthard2][CTB] [Jungfrau][Moench][Gotthard][Mythen3][Gotthard2][Ctb]
Serial number of detector. )V0G0N" Serial number of detector. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
@ -12769,7 +12844,7 @@ std::string Caller::signalindex(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: signalindex" << std::endl; os << "Command: signalindex" << std::endl;
os << R"V0G0N([name] os << R"V0G0N([name]
[ChipTestBoard] Get the signal index for the given name. )V0G0N" [Ctb][Xilinx_Ctb] Get the signal index for the given name. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -12794,7 +12869,10 @@ std::string Caller::signalindex(int action) {
// generate code for each action // generate code for each action
if (action == slsDetectorDefs::GET_ACTION) { if (action == slsDetectorDefs::GET_ACTION) {
if (args.size() == 1) { if (args.size() == 1) {
if (det->getDetectorType().squash() != defs::CHIPTESTBOARD) { if (det->getDetectorType().squash(defs::GENERIC) !=
defs::CHIPTESTBOARD &&
det->getDetectorType().squash(defs::GENERIC) !=
defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (det_id != -1) { if (det_id != -1) {
@ -12816,7 +12894,7 @@ std::string Caller::signallist(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: signallist" << std::endl; os << "Command: signallist" << std::endl;
os << R"V0G0N([signalname1 signalname2 .. signalname63] os << R"V0G0N([signalname1 signalname2 .. signalname63]
[ChipTestBoard] Set the list of signal names for this board. )V0G0N" [Ctb][Xilinx_Ctb] Set the list of signal names for this board. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -12828,6 +12906,8 @@ std::string Caller::signallist(int action) {
} }
if (args.size() == 0) { if (args.size() == 0) {
auto det_type = det->getDetectorType().squash(defs::GENERIC);
;
} }
} }
@ -12848,8 +12928,10 @@ std::string Caller::signallist(int action) {
// generate code for each action // generate code for each action
if (action == slsDetectorDefs::GET_ACTION) { if (action == slsDetectorDefs::GET_ACTION) {
if (args.size() == 0) { if (args.size() == 0) {
if (cmd != "daclist" && auto det_type = det->getDetectorType().squash(defs::GENERIC);
det->getDetectorType().squash() != defs::CHIPTESTBOARD) { ;
if (cmd != "daclist" && det_type != defs::CHIPTESTBOARD &&
det_type != defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (det_id != -1) { if (det_id != -1) {
@ -12861,12 +12943,14 @@ std::string Caller::signallist(int action) {
} }
if (action == slsDetectorDefs::PUT_ACTION) { if (action == slsDetectorDefs::PUT_ACTION) {
if (cmd != "daclist" && auto det_type = det->getDetectorType().squash(defs::GENERIC);
det->getDetectorType().squash() != defs::CHIPTESTBOARD) { ;
if (cmd != "daclist" && det_type != defs::CHIPTESTBOARD &&
det_type != defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (cmd == "daclist" && if (cmd == "daclist" && det_type != defs::CHIPTESTBOARD &&
det->getDetectorType().squash() != defs::CHIPTESTBOARD) { det_type != defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError("This detector already has fixed dac names. " throw RuntimeError("This detector already has fixed dac names. "
"Cannot change them."); "Cannot change them.");
} }
@ -12887,7 +12971,7 @@ std::string Caller::signalname(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: signalname" << std::endl; os << "Command: signalname" << std::endl;
os << R"V0G0N([0-63][name] os << R"V0G0N([0-63][name]
[ChipTestBoard] Set the signal at the given position to the given name. )V0G0N" [Ctb][Xilinx_Ctb] Set the signal at the given position to the given name. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -12932,7 +13016,10 @@ std::string Caller::signalname(int action) {
// generate code for each action // generate code for each action
if (action == slsDetectorDefs::GET_ACTION) { if (action == slsDetectorDefs::GET_ACTION) {
if (args.size() == 1) { if (args.size() == 1) {
if (det->getDetectorType().squash() != defs::CHIPTESTBOARD) { if (det->getDetectorType().squash(defs::GENERIC) !=
defs::CHIPTESTBOARD &&
det->getDetectorType().squash(defs::GENERIC) !=
defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (det_id != -1) { if (det_id != -1) {
@ -12946,7 +13033,10 @@ std::string Caller::signalname(int action) {
if (action == slsDetectorDefs::PUT_ACTION) { if (action == slsDetectorDefs::PUT_ACTION) {
if (args.size() == 2) { if (args.size() == 2) {
if (det->getDetectorType().squash() != defs::CHIPTESTBOARD) { if (det->getDetectorType().squash(defs::GENERIC) !=
defs::CHIPTESTBOARD &&
det->getDetectorType().squash(defs::GENERIC) !=
defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (det_id != -1) { if (det_id != -1) {
@ -12968,7 +13058,7 @@ std::string Caller::slowadcindex(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: slowadcindex" << std::endl; os << "Command: slowadcindex" << std::endl;
os << R"V0G0N([name] os << R"V0G0N([name]
[ChipTestBoard] Get the slowadc index for the given name. )V0G0N" [Ctb][Xilinx_Ctb] Get the slowadc index for the given name. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -12995,7 +13085,10 @@ std::string Caller::slowadcindex(int action) {
if (action == slsDetectorDefs::GET_ACTION) { if (action == slsDetectorDefs::GET_ACTION) {
if (args.size() == 1) { if (args.size() == 1) {
defs::dacIndex index = defs::SLOW_ADC0; defs::dacIndex index = defs::SLOW_ADC0;
if (det->getDetectorType().squash() != defs::CHIPTESTBOARD) { if (det->getDetectorType().squash(defs::GENERIC) !=
defs::CHIPTESTBOARD &&
det->getDetectorType().squash(defs::GENERIC) !=
defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (det_id != -1) { if (det_id != -1) {
@ -13017,7 +13110,7 @@ std::string Caller::slowadclist(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: slowadclist" << std::endl; os << "Command: slowadclist" << std::endl;
os << R"V0G0N([slowadcname1 slowadcname2 .. slowadcname7] os << R"V0G0N([slowadcname1 slowadcname2 .. slowadcname7]
[ChipTestBoard] Set the list of slowadc names for this board. )V0G0N" [Ctb][Xilinx_Ctb] Set the list of slowadc names for this board. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -13029,6 +13122,8 @@ std::string Caller::slowadclist(int action) {
} }
if (args.size() == 0) { if (args.size() == 0) {
auto det_type = det->getDetectorType().squash(defs::GENERIC);
;
} }
} }
@ -13049,8 +13144,10 @@ std::string Caller::slowadclist(int action) {
// generate code for each action // generate code for each action
if (action == slsDetectorDefs::GET_ACTION) { if (action == slsDetectorDefs::GET_ACTION) {
if (args.size() == 0) { if (args.size() == 0) {
if (cmd != "daclist" && auto det_type = det->getDetectorType().squash(defs::GENERIC);
det->getDetectorType().squash() != defs::CHIPTESTBOARD) { ;
if (cmd != "daclist" && det_type != defs::CHIPTESTBOARD &&
det_type != defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (det_id != -1) { if (det_id != -1) {
@ -13063,12 +13160,14 @@ std::string Caller::slowadclist(int action) {
} }
if (action == slsDetectorDefs::PUT_ACTION) { if (action == slsDetectorDefs::PUT_ACTION) {
if (cmd != "daclist" && auto det_type = det->getDetectorType().squash(defs::GENERIC);
det->getDetectorType().squash() != defs::CHIPTESTBOARD) { ;
if (cmd != "daclist" && det_type != defs::CHIPTESTBOARD &&
det_type != defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (cmd == "daclist" && if (cmd == "daclist" && det_type != defs::CHIPTESTBOARD &&
det->getDetectorType().squash() != defs::CHIPTESTBOARD) { det_type != defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError("This detector already has fixed dac names. " throw RuntimeError("This detector already has fixed dac names. "
"Cannot change them."); "Cannot change them.");
} }
@ -13089,7 +13188,7 @@ std::string Caller::slowadcname(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: slowadcname" << std::endl; os << "Command: slowadcname" << std::endl;
os << R"V0G0N([0-7][name] os << R"V0G0N([0-7][name]
[ChipTestBoard] Set the slowadc at the given position to the given name. )V0G0N" [Ctb][Xilinx_Ctb] Set the slowadc at the given position to the given name. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -13127,7 +13226,10 @@ std::string Caller::slowadcname(int action) {
if (action == slsDetectorDefs::GET_ACTION) { if (action == slsDetectorDefs::GET_ACTION) {
if (args.size() == 1) { if (args.size() == 1) {
defs::dacIndex index = defs::SLOW_ADC0; defs::dacIndex index = defs::SLOW_ADC0;
if (det->getDetectorType().squash() != defs::CHIPTESTBOARD) { if (det->getDetectorType().squash(defs::GENERIC) !=
defs::CHIPTESTBOARD &&
det->getDetectorType().squash(defs::GENERIC) !=
defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (det_id != -1) { if (det_id != -1) {
@ -13143,7 +13245,10 @@ std::string Caller::slowadcname(int action) {
if (action == slsDetectorDefs::PUT_ACTION) { if (action == slsDetectorDefs::PUT_ACTION) {
if (args.size() == 2) { if (args.size() == 2) {
defs::dacIndex index = defs::SLOW_ADC0; defs::dacIndex index = defs::SLOW_ADC0;
if (det->getDetectorType().squash() != defs::CHIPTESTBOARD) { if (det->getDetectorType().squash(defs::GENERIC) !=
defs::CHIPTESTBOARD &&
det->getDetectorType().squash(defs::GENERIC) !=
defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError(cmd + " only allowed for CTB."); throw RuntimeError(cmd + " only allowed for CTB.");
} }
if (det_id != -1) { if (det_id != -1) {
@ -13167,7 +13272,7 @@ std::string Caller::slowadcvalues(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: slowadcvalues" << std::endl; os << "Command: slowadcvalues" << std::endl;
os << R"V0G0N([name] os << R"V0G0N([name]
[ChipTestBoard] Get values of all slow adcs. )V0G0N" [Ctb][Xilinx_Ctb] Get values of all slow adcs. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -15029,7 +15134,7 @@ std::string Caller::triggersl(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: triggersl" << std::endl; os << "Command: triggersl" << std::endl;
os << R"V0G0N( os << R"V0G0N(
[Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][CTB] Number of triggers left in acquisition. Only when external trigger used. )V0G0N" [Gotthard][Jungfrau][Moench][Mythen3][Gotthard2][Ctb] Number of triggers left in acquisition. Only when external trigger used. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -15189,7 +15294,7 @@ std::string Caller::tsamples(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: tsamples" << std::endl; os << "Command: tsamples" << std::endl;
os << R"V0G0N([n_value] os << R"V0G0N([n_value]
[CTB] Number of transceiver samples expected. )V0G0N" [Ctb] Number of transceiver samples expected. )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -15519,7 +15624,7 @@ std::string Caller::type(int action) {
if (action == slsDetectorDefs::HELP_ACTION) { if (action == slsDetectorDefs::HELP_ACTION) {
os << "Command: type" << std::endl; os << "Command: type" << std::endl;
os << R"V0G0N( os << R"V0G0N(
Returns detector type. Can be Eiger, Jungfrau, Gotthard, Moench, Mythen3, Gotthard2, ChipTestBoard )V0G0N" Returns detector type. Can be Eiger, Jungfrau, Gotthard, Moench, Mythen3, Gotthard2, ChipTestBoard, Xilinx_ChipTestBoard )V0G0N"
<< std::endl; << std::endl;
return os.str(); return os.str();
} }
@ -16227,7 +16332,7 @@ std::string Caller::update(int action) {
os << "Command: update" << std::endl; os << "Command: update" << std::endl;
os << R"V0G0N( os << R"V0G0N(
Without tftp: [server_name (incl fullpath)] [fname.pof (incl full path)] This does not use tftp. Without tftp: [server_name (incl fullpath)] [fname.pof (incl full path)] This does not use tftp.
[Jungfrau][Moench][Gotthard][CTB] Updates the firmware, detector server, deletes old server, creates the symbolic link and then reboots detector controller. [Jungfrau][Moench][Gotthard][Ctb] Updates the firmware, detector server, deletes old server, creates the symbolic link and then reboots detector controller.
[Mythen3][Gotthard2] will require a script to start up the shorter named server link at start up. [Mythen3][Gotthard2] will require a script to start up the shorter named server link at start up.
server_name is full path name of detector server binary server_name is full path name of detector server binary
fname is full path of programming file )V0G0N" fname is full path of programming file )V0G0N"

View File

@ -850,7 +850,8 @@ std::string Caller::counters(int action) {
std::string Caller::samples(int action) { std::string Caller::samples(int action) {
std::ostringstream os; std::ostringstream os;
if (action == defs::HELP_ACTION) { if (action == defs::HELP_ACTION) {
os << "[n_samples]\n\t[CTB] Number of samples (analog, digitial and " os << "[n_samples]\n\t[Ctb][Xilinx_Ctb] Number of samples (analog, "
"digitial and "
"transceiver) expected.\n" "transceiver) expected.\n"
<< '\n'; << '\n';
} else if (action == defs::GET_ACTION) { } else if (action == defs::GET_ACTION) {
@ -859,7 +860,9 @@ std::string Caller::samples(int action) {
} }
auto a = det->getNumberOfAnalogSamples(std::vector<int>{det_id}); auto a = det->getNumberOfAnalogSamples(std::vector<int>{det_id});
// get also digital samples for ctb and compare with analog // get also digital samples for ctb and compare with analog
if (det->getDetectorType().squash() == defs::CHIPTESTBOARD) { auto det_type = det->getDetectorType().squash(defs::GENERIC);
if (det_type == defs::CHIPTESTBOARD ||
det_type == defs::XILINX_CHIPTESTBOARD) {
auto d = det->getNumberOfDigitalSamples(std::vector<int>{det_id}); auto d = det->getNumberOfDigitalSamples(std::vector<int>{det_id});
auto t = auto t =
det->getNumberOfTransceiverSamples(std::vector<int>{det_id}); det->getNumberOfTransceiverSamples(std::vector<int>{det_id});
@ -880,7 +883,9 @@ std::string Caller::samples(int action) {
det->setNumberOfAnalogSamples(StringTo<int>(args[0]), det->setNumberOfAnalogSamples(StringTo<int>(args[0]),
std::vector<int>{det_id}); std::vector<int>{det_id});
// set also digital samples for ctb // set also digital samples for ctb
if (det->getDetectorType().squash() == defs::CHIPTESTBOARD) { auto det_type = det->getDetectorType().squash(defs::GENERIC);
if (det_type == defs::CHIPTESTBOARD ||
det_type == defs::XILINX_CHIPTESTBOARD) {
det->setNumberOfDigitalSamples(StringTo<int>(args[0]), det->setNumberOfDigitalSamples(StringTo<int>(args[0]),
std::vector<int>{det_id}); std::vector<int>{det_id});
det->setNumberOfTransceiverSamples(StringTo<int>(args[0]), det->setNumberOfTransceiverSamples(StringTo<int>(args[0]),

View File

@ -208,6 +208,7 @@ std::vector<defs::detectorSettings> Detector::getSettingsList() const {
defs::G2_LOWCAP_HIGHGAIN, defs::G2_LOWCAP_LOWGAIN, defs::G2_LOWCAP_HIGHGAIN, defs::G2_LOWCAP_LOWGAIN,
defs::G4_HIGHGAIN, defs::G4_LOWGAIN}; defs::G4_HIGHGAIN, defs::G4_LOWGAIN};
case defs::CHIPTESTBOARD: case defs::CHIPTESTBOARD:
case defs::XILINX_CHIPTESTBOARD:
throw RuntimeError("Settings not implemented for this detector"); throw RuntimeError("Settings not implemented for this detector");
default: default:
throw RuntimeError("Unknown detector type"); throw RuntimeError("Unknown detector type");
@ -652,6 +653,7 @@ std::vector<defs::dacIndex> Detector::getTemperatureList() const {
std::vector<defs::dacIndex> retval; std::vector<defs::dacIndex> retval;
switch (getDetectorType().squash()) { switch (getDetectorType().squash()) {
case defs::CHIPTESTBOARD: case defs::CHIPTESTBOARD:
case defs::XILINX_CHIPTESTBOARD:
return std::vector<defs::dacIndex>{defs::SLOW_ADC_TEMP}; return std::vector<defs::dacIndex>{defs::SLOW_ADC_TEMP};
case defs::JUNGFRAU: case defs::JUNGFRAU:
case defs::MOENCH: case defs::MOENCH:
@ -743,6 +745,7 @@ std::vector<defs::dacIndex> Detector::getDacList() const {
defs::VBP_COLBUF, defs::VIPRE, defs::VIN_CM, defs::VB_SDA, defs::VBP_COLBUF, defs::VIPRE, defs::VIN_CM, defs::VB_SDA,
defs::VCASC_SFP, defs::VOUT_CM, defs::VIPRE_CDS, defs::IBIAS_SFP}; defs::VCASC_SFP, defs::VOUT_CM, defs::VIPRE_CDS, defs::IBIAS_SFP};
case defs::CHIPTESTBOARD: case defs::CHIPTESTBOARD:
case defs::XILINX_CHIPTESTBOARD:
for (int i = 0; i != 18; ++i) { for (int i = 0; i != 18; ++i) {
retval.push_back(static_cast<defs::dacIndex>(i)); retval.push_back(static_cast<defs::dacIndex>(i));
} }
@ -905,7 +908,8 @@ void Detector::stopDetector(Positions pos) {
case defs::EIGER: case defs::EIGER:
case defs::JUNGFRAU: case defs::JUNGFRAU:
case defs::MOENCH: case defs::MOENCH:
case defs::CHIPTESTBOARD: { case defs::CHIPTESTBOARD:
case defs::XILINX_CHIPTESTBOARD: {
auto res = getNextFrameNumber(pos); auto res = getNextFrameNumber(pos);
if (!res.equal()) { if (!res.equal()) {
uint64_t maxVal = 0; uint64_t maxVal = 0;
@ -2079,7 +2083,9 @@ Result<int> Detector::getSYNCClock(Positions pos) const {
} }
std::vector<defs::dacIndex> Detector::getPowerList() const { std::vector<defs::dacIndex> Detector::getPowerList() const {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) { auto dettype = getDetectorType().squash();
if (dettype != defs::CHIPTESTBOARD &&
dettype != defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError("Power list not implemented for this detector"); throw RuntimeError("Power list not implemented for this detector");
} }
return std::vector<defs::dacIndex>{defs::V_POWER_A, defs::V_POWER_B, return std::vector<defs::dacIndex>{defs::V_POWER_A, defs::V_POWER_B,
@ -2088,7 +2094,9 @@ std::vector<defs::dacIndex> Detector::getPowerList() const {
} }
std::vector<defs::dacIndex> Detector::getSlowADCList() const { std::vector<defs::dacIndex> Detector::getSlowADCList() const {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) { auto dettype = getDetectorType().squash();
if (dettype != defs::CHIPTESTBOARD &&
dettype != defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError("Slow ADC list not implemented for this detector"); throw RuntimeError("Slow ADC list not implemented for this detector");
} }
return std::vector<defs::dacIndex>{ return std::vector<defs::dacIndex>{
@ -2277,7 +2285,8 @@ void Detector::setLEDEnable(bool enable, Positions pos) {
} }
void Detector::setDacNames(const std::vector<std::string> names) { void Detector::setDacNames(const std::vector<std::string> names) {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) auto dettype = getDetectorType().squash();
if (dettype != defs::CHIPTESTBOARD && dettype != defs::XILINX_CHIPTESTBOARD)
throw RuntimeError("Named dacs only for CTB"); throw RuntimeError("Named dacs only for CTB");
pimpl->setCtbDacNames(names); pimpl->setCtbDacNames(names);
} }
@ -2285,7 +2294,7 @@ void Detector::setDacNames(const std::vector<std::string> names) {
std::vector<std::string> Detector::getDacNames() const { std::vector<std::string> Detector::getDacNames() const {
std::vector<std::string> names; std::vector<std::string> names;
auto type = getDetectorType().squash(); auto type = getDetectorType().squash();
if (type == defs::CHIPTESTBOARD) if (type == defs::CHIPTESTBOARD || type == defs::XILINX_CHIPTESTBOARD)
return pimpl->getCtbDacNames(); return pimpl->getCtbDacNames();
for (const auto &index : getDacList()) for (const auto &index : getDacList())
@ -2295,7 +2304,7 @@ std::vector<std::string> Detector::getDacNames() const {
defs::dacIndex Detector::getDacIndex(const std::string &name) const { defs::dacIndex Detector::getDacIndex(const std::string &name) const {
auto type = getDetectorType().squash(); auto type = getDetectorType().squash();
if (type == defs::CHIPTESTBOARD) { if (type == defs::CHIPTESTBOARD || type == defs::XILINX_CHIPTESTBOARD) {
auto names = getDacNames(); auto names = getDacNames();
auto it = std::find(names.begin(), names.end(), name); auto it = std::find(names.begin(), names.end(), name);
if (it == names.end()) if (it == names.end())
@ -2306,32 +2315,36 @@ defs::dacIndex Detector::getDacIndex(const std::string &name) const {
} }
void Detector::setDacName(const defs::dacIndex i, const std::string &name) { void Detector::setDacName(const defs::dacIndex i, const std::string &name) {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) auto dettype = getDetectorType().squash();
if (dettype != defs::CHIPTESTBOARD && dettype != defs::XILINX_CHIPTESTBOARD)
throw RuntimeError("Named dacs only for CTB"); throw RuntimeError("Named dacs only for CTB");
pimpl->setCtbDacName(i, name); pimpl->setCtbDacName(i, name);
} }
std::string Detector::getDacName(const defs::dacIndex i) const { std::string Detector::getDacName(const defs::dacIndex i) const {
auto type = getDetectorType().squash(); auto dettype = getDetectorType().squash();
if (type == defs::CHIPTESTBOARD) if (dettype == defs::CHIPTESTBOARD || dettype == defs::XILINX_CHIPTESTBOARD)
return pimpl->getCtbDacName(i); return pimpl->getCtbDacName(i);
return ToString(i); return ToString(i);
} }
void Detector::setAdcNames(const std::vector<std::string> names) { void Detector::setAdcNames(const std::vector<std::string> names) {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) auto dettype = getDetectorType().squash();
if (dettype != defs::CHIPTESTBOARD && dettype != defs::XILINX_CHIPTESTBOARD)
throw RuntimeError("Named adcs only for CTB"); throw RuntimeError("Named adcs only for CTB");
pimpl->setCtbAdcNames(names); pimpl->setCtbAdcNames(names);
} }
std::vector<std::string> Detector::getAdcNames() const { std::vector<std::string> Detector::getAdcNames() const {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) auto dettype = getDetectorType().squash();
if (dettype != defs::CHIPTESTBOARD && dettype != defs::XILINX_CHIPTESTBOARD)
throw RuntimeError("Named adcs only for CTB"); throw RuntimeError("Named adcs only for CTB");
return pimpl->getCtbAdcNames(); return pimpl->getCtbAdcNames();
} }
int Detector::getAdcIndex(const std::string &name) const { int Detector::getAdcIndex(const std::string &name) const {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) auto dettype = getDetectorType().squash();
if (dettype != defs::CHIPTESTBOARD && dettype != defs::XILINX_CHIPTESTBOARD)
throw RuntimeError("Named adcs only for CTB"); throw RuntimeError("Named adcs only for CTB");
auto names = getAdcNames(); auto names = getAdcNames();
auto it = std::find(names.begin(), names.end(), name); auto it = std::find(names.begin(), names.end(), name);
@ -2341,31 +2354,36 @@ int Detector::getAdcIndex(const std::string &name) const {
} }
void Detector::setAdcName(const int index, const std::string &name) { void Detector::setAdcName(const int index, const std::string &name) {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) auto dettype = getDetectorType().squash();
if (dettype != defs::CHIPTESTBOARD && dettype != defs::XILINX_CHIPTESTBOARD)
throw RuntimeError("Named adcs only for CTB"); throw RuntimeError("Named adcs only for CTB");
pimpl->setCtbAdcName(index, name); pimpl->setCtbAdcName(index, name);
} }
std::string Detector::getAdcName(const int i) const { std::string Detector::getAdcName(const int i) const {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) auto dettype = getDetectorType().squash();
if (dettype != defs::CHIPTESTBOARD && dettype != defs::XILINX_CHIPTESTBOARD)
throw RuntimeError("Named adcs only for CTB"); throw RuntimeError("Named adcs only for CTB");
return pimpl->getCtbAdcName(i); return pimpl->getCtbAdcName(i);
} }
void Detector::setSignalNames(const std::vector<std::string> names) { void Detector::setSignalNames(const std::vector<std::string> names) {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) auto dettype = getDetectorType().squash();
if (dettype != defs::CHIPTESTBOARD && dettype != defs::XILINX_CHIPTESTBOARD)
throw RuntimeError("Named signals only for CTB"); throw RuntimeError("Named signals only for CTB");
pimpl->setCtbSignalNames(names); pimpl->setCtbSignalNames(names);
} }
std::vector<std::string> Detector::getSignalNames() const { std::vector<std::string> Detector::getSignalNames() const {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) auto dettype = getDetectorType().squash();
if (dettype != defs::CHIPTESTBOARD && dettype != defs::XILINX_CHIPTESTBOARD)
throw RuntimeError("Named signals only for CTB"); throw RuntimeError("Named signals only for CTB");
return pimpl->getCtbSignalNames(); return pimpl->getCtbSignalNames();
} }
int Detector::getSignalIndex(const std::string &name) const { int Detector::getSignalIndex(const std::string &name) const {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) auto dettype = getDetectorType().squash();
if (dettype != defs::CHIPTESTBOARD && dettype != defs::XILINX_CHIPTESTBOARD)
throw RuntimeError("Named signals only for CTB"); throw RuntimeError("Named signals only for CTB");
auto names = getSignalNames(); auto names = getSignalNames();
auto it = std::find(names.begin(), names.end(), name); auto it = std::find(names.begin(), names.end(), name);
@ -2375,31 +2393,37 @@ int Detector::getSignalIndex(const std::string &name) const {
} }
void Detector::setSignalName(const int index, const std::string &name) { void Detector::setSignalName(const int index, const std::string &name) {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) auto dettype = getDetectorType().squash();
if (dettype != defs::CHIPTESTBOARD && dettype != defs::XILINX_CHIPTESTBOARD)
throw RuntimeError("Named signals only for CTB"); throw RuntimeError("Named signals only for CTB");
pimpl->setCtbSignalName(index, name); pimpl->setCtbSignalName(index, name);
} }
std::string Detector::getSignalName(const int i) const { std::string Detector::getSignalName(const int i) const {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) auto dettype = getDetectorType().squash();
if (dettype != defs::CHIPTESTBOARD && dettype != defs::XILINX_CHIPTESTBOARD)
throw RuntimeError("Named signals only for CTB"); throw RuntimeError("Named signals only for CTB");
return pimpl->getCtbSignalName(i); return pimpl->getCtbSignalName(i);
} }
void Detector::setPowerNames(const std::vector<std::string> names) { void Detector::setPowerNames(const std::vector<std::string> names) {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) auto dettype = getDetectorType().squash();
if (getDetectorType().squash() != defs::CHIPTESTBOARD &&
dettype != defs::XILINX_CHIPTESTBOARD)
throw RuntimeError("Named powers only for CTB"); throw RuntimeError("Named powers only for CTB");
pimpl->setCtbPowerNames(names); pimpl->setCtbPowerNames(names);
} }
std::vector<std::string> Detector::getPowerNames() const { std::vector<std::string> Detector::getPowerNames() const {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) auto dettype = getDetectorType().squash();
if (dettype != defs::CHIPTESTBOARD && dettype != defs::XILINX_CHIPTESTBOARD)
throw RuntimeError("Named powers only for CTB"); throw RuntimeError("Named powers only for CTB");
return pimpl->getCtbPowerNames(); return pimpl->getCtbPowerNames();
} }
defs::dacIndex Detector::getPowerIndex(const std::string &name) const { defs::dacIndex Detector::getPowerIndex(const std::string &name) const {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) auto dettype = getDetectorType().squash();
if (dettype != defs::CHIPTESTBOARD && dettype != defs::XILINX_CHIPTESTBOARD)
throw RuntimeError("Named powers only for CTB"); throw RuntimeError("Named powers only for CTB");
auto names = getPowerNames(); auto names = getPowerNames();
auto it = std::find(names.begin(), names.end(), name); auto it = std::find(names.begin(), names.end(), name);
@ -2410,31 +2434,36 @@ defs::dacIndex Detector::getPowerIndex(const std::string &name) const {
void Detector::setPowerName(const defs::dacIndex index, void Detector::setPowerName(const defs::dacIndex index,
const std::string &name) { const std::string &name) {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) auto dettype = getDetectorType().squash();
if (dettype != defs::CHIPTESTBOARD && dettype != defs::XILINX_CHIPTESTBOARD)
throw RuntimeError("Named powers only for CTB"); throw RuntimeError("Named powers only for CTB");
pimpl->setCtbPowerName(index, name); pimpl->setCtbPowerName(index, name);
} }
std::string Detector::getPowerName(const defs::dacIndex i) const { std::string Detector::getPowerName(const defs::dacIndex i) const {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) auto dettype = getDetectorType().squash();
if (dettype != defs::CHIPTESTBOARD && dettype != defs::XILINX_CHIPTESTBOARD)
throw RuntimeError("Named powers only for CTB"); throw RuntimeError("Named powers only for CTB");
return pimpl->getCtbPowerName(i); return pimpl->getCtbPowerName(i);
} }
void Detector::setSlowADCNames(const std::vector<std::string> names) { void Detector::setSlowADCNames(const std::vector<std::string> names) {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) auto dettype = getDetectorType().squash();
if (dettype != defs::CHIPTESTBOARD && dettype != defs::XILINX_CHIPTESTBOARD)
throw RuntimeError("Named SlowADCs only for CTB"); throw RuntimeError("Named SlowADCs only for CTB");
pimpl->setCtbSlowADCNames(names); pimpl->setCtbSlowADCNames(names);
} }
std::vector<std::string> Detector::getSlowADCNames() const { std::vector<std::string> Detector::getSlowADCNames() const {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) auto dettype = getDetectorType().squash();
if (dettype != defs::CHIPTESTBOARD && dettype != defs::XILINX_CHIPTESTBOARD)
throw RuntimeError("Named SlowADCs only for CTB"); throw RuntimeError("Named SlowADCs only for CTB");
return pimpl->getCtbSlowADCNames(); return pimpl->getCtbSlowADCNames();
} }
defs::dacIndex Detector::getSlowADCIndex(const std::string &name) const { defs::dacIndex Detector::getSlowADCIndex(const std::string &name) const {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) auto dettype = getDetectorType().squash();
if (dettype != defs::CHIPTESTBOARD && dettype != defs::XILINX_CHIPTESTBOARD)
throw RuntimeError("Named SlowADCs only for CTB"); throw RuntimeError("Named SlowADCs only for CTB");
auto names = getSlowADCNames(); auto names = getSlowADCNames();
auto it = std::find(names.begin(), names.end(), name); auto it = std::find(names.begin(), names.end(), name);
@ -2445,13 +2474,15 @@ defs::dacIndex Detector::getSlowADCIndex(const std::string &name) const {
void Detector::setSlowADCName(const defs::dacIndex index, void Detector::setSlowADCName(const defs::dacIndex index,
const std::string &name) { const std::string &name) {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) auto dettype = getDetectorType().squash();
if (dettype != defs::CHIPTESTBOARD && dettype != defs::XILINX_CHIPTESTBOARD)
throw RuntimeError("Named SlowADCs only for CTB"); throw RuntimeError("Named SlowADCs only for CTB");
pimpl->setCtbSlowADCName(index, name); pimpl->setCtbSlowADCName(index, name);
} }
std::string Detector::getSlowADCName(const defs::dacIndex i) const { std::string Detector::getSlowADCName(const defs::dacIndex i) const {
if (getDetectorType().squash() != defs::CHIPTESTBOARD) auto dettype = getDetectorType().squash();
if (dettype != defs::CHIPTESTBOARD && dettype != defs::XILINX_CHIPTESTBOARD)
throw RuntimeError("Named SlowADCs only for CTB"); throw RuntimeError("Named SlowADCs only for CTB");
return pimpl->getCtbSlowADCName(i); return pimpl->getCtbSlowADCName(i);
} }

View File

@ -272,7 +272,8 @@ void DetectorImpl::setHostname(const std::vector<std::string> &name) {
// Here we know the detector type and can add ctb shared memory // Here we know the detector type and can add ctb shared memory
// if needed, CTB dac names are only on detector level // if needed, CTB dac names are only on detector level
if (shm()->detType == defs::CHIPTESTBOARD) { if (shm()->detType == defs::CHIPTESTBOARD ||
shm()->detType == defs::XILINX_CHIPTESTBOARD) {
if (ctb_shm.exists()) if (ctb_shm.exists())
ctb_shm.openSharedMemory(true); ctb_shm.openSharedMemory(true);
else else
@ -711,7 +712,8 @@ 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 (shm()->detType == CHIPTESTBOARD) { if (shm()->detType == CHIPTESTBOARD ||
shm()->detType == defs::XILINX_CHIPTESTBOARD) {
singledetrowoffset = size; singledetrowoffset = size;
} }
LOG(logDEBUG1) LOG(logDEBUG1)
@ -1735,7 +1737,8 @@ void DetectorImpl::verifyUniqueHost(
} }
defs::ROI DetectorImpl::getRxROI() const { defs::ROI DetectorImpl::getRxROI() const {
if (shm()->detType == CHIPTESTBOARD) { if (shm()->detType == CHIPTESTBOARD ||
shm()->detType == defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError("RxRoi not implemented for this Detector"); throw RuntimeError("RxRoi not implemented for this Detector");
} }
if (modules.size() == 0) { if (modules.size() == 0) {
@ -1810,7 +1813,8 @@ defs::ROI DetectorImpl::getRxROI() const {
} }
void DetectorImpl::setRxROI(const defs::ROI arg) { void DetectorImpl::setRxROI(const defs::ROI arg) {
if (shm()->detType == CHIPTESTBOARD) { if (shm()->detType == CHIPTESTBOARD ||
shm()->detType == defs::XILINX_CHIPTESTBOARD) {
throw RuntimeError("RxRoi not implemented for this Detector"); throw RuntimeError("RxRoi not implemented for this Detector");
} }
if (modules.size() == 0) { if (modules.size() == 0) {

View File

@ -184,7 +184,8 @@ slsDetectorDefs::detectorType Module::getDetectorType() const {
} }
void Module::updateNumberOfChannels() { void Module::updateNumberOfChannels() {
if (shm()->detType == CHIPTESTBOARD) { if (shm()->detType == CHIPTESTBOARD ||
shm()->detType == XILINX_CHIPTESTBOARD) {
std::array<int, 2> retvals{}; std::array<int, 2> retvals{};
sendToDetector(F_GET_NUM_CHANNELS, nullptr, retvals); sendToDetector(F_GET_NUM_CHANNELS, nullptr, retvals);
shm()->nChan.x = retvals[0]; shm()->nChan.x = retvals[0];
@ -2461,7 +2462,8 @@ void Module::setReadoutMode(const slsDetectorDefs::readoutMode mode) {
sendToDetector(F_SET_READOUT_MODE, arg, nullptr); sendToDetector(F_SET_READOUT_MODE, arg, nullptr);
sendToDetectorStop(F_SET_READOUT_MODE, arg, nullptr); sendToDetectorStop(F_SET_READOUT_MODE, arg, nullptr);
// update #nchan, as it depends on #samples, adcmask, // update #nchan, as it depends on #samples, adcmask,
if (shm()->detType == CHIPTESTBOARD) { if (shm()->detType == CHIPTESTBOARD ||
shm()->detType == XILINX_CHIPTESTBOARD) {
updateNumberOfChannels(); updateNumberOfChannels();
} }
if (shm()->useReceiverFlag) { if (shm()->useReceiverFlag) {
@ -3407,6 +3409,8 @@ const std::string Module::getDetectorAPI() const {
return APIMYTHEN3; return APIMYTHEN3;
case GOTTHARD2: case GOTTHARD2:
return APIGOTTHARD2; return APIGOTTHARD2;
case XILINX_CHIPTESTBOARD:
return APIXILINXCTB;
default: default:
throw NotImplementedError( throw NotImplementedError(
"Detector type not implemented to get Detector API"); "Detector type not implemented to get Detector API");

View File

@ -96,6 +96,7 @@ class slsDetectorDefs {
MOENCH, MOENCH,
MYTHEN3, MYTHEN3,
GOTTHARD2, GOTTHARD2,
XILINX_CHIPTESTBOARD
}; };
/** return values */ /** return values */
@ -683,6 +684,7 @@ struct detParameters {
nChipY = 2; nChipY = 2;
nDacs = 8; nDacs = 8;
break; break;
case slsDetectorDefs::detectorType::XILINX_CHIPTESTBOARD:
case slsDetectorDefs::detectorType::CHIPTESTBOARD: case slsDetectorDefs::detectorType::CHIPTESTBOARD:
nChanX = 36; nChanX = 36;
nChanY = 1; nChanY = 1;

View File

@ -4,10 +4,11 @@
#define RELEASE "developer" #define RELEASE "developer"
#define APILIB "developer 0x230224" #define APILIB "developer 0x230224"
#define APIRECEIVER "developer 0x230224" #define APIRECEIVER "developer 0x230224"
#define APICTB "developer 0x231109" #define APIXILINXCTB "developer 0x240104"
#define APIGOTTHARD "developer 0x231109" #define APICTB "developer 0x240104"
#define APIGOTTHARD2 "developer 0x231109" #define APIGOTTHARD "developer 0x240104"
#define APIJUNGFRAU "developer 0x231109" #define APIGOTTHARD2 "developer 0x240104"
#define APIMYTHEN3 "developer 0x231109" #define APIJUNGFRAU "developer 0x240104"
#define APIEIGER "developer 0x231109" #define APIMYTHEN3 "developer 0x240104"
#define APIMOENCH "developer 0x231127" #define APIMOENCH "developer 0x240104"
#define APIEIGER "developer 0x240104"

View File

@ -207,6 +207,8 @@ std::string ToString(const defs::detectorType s) {
return std::string("Mythen3"); return std::string("Mythen3");
case defs::GOTTHARD2: case defs::GOTTHARD2:
return std::string("Gotthard2"); return std::string("Gotthard2");
case defs::XILINX_CHIPTESTBOARD:
return std::string("Xilinx_ChipTestBoard");
default: default:
return std::string("Unknown"); return std::string("Unknown");
} }
@ -694,6 +696,8 @@ template <> defs::detectorType StringTo(const std::string &s) {
return defs::MYTHEN3; return defs::MYTHEN3;
if (s == "Gotthard2") if (s == "Gotthard2")
return defs::GOTTHARD2; return defs::GOTTHARD2;
if (s == "Xilinx_ChipTestBoard")
return defs::XILINX_CHIPTESTBOARD;
throw RuntimeError("Unknown detector type " + s); throw RuntimeError("Unknown detector type " + s);
} }

View File

@ -136,6 +136,7 @@ TEST_CASE("string to detectorType") {
REQUIRE(StringTo<dt>("Moench") == dt::MOENCH); REQUIRE(StringTo<dt>("Moench") == dt::MOENCH);
REQUIRE(StringTo<dt>("Mythen3") == dt::MYTHEN3); REQUIRE(StringTo<dt>("Mythen3") == dt::MYTHEN3);
REQUIRE(StringTo<dt>("Gotthard2") == dt::GOTTHARD2); REQUIRE(StringTo<dt>("Gotthard2") == dt::GOTTHARD2);
REQUIRE(StringTo<dt>("Xilinx_ChipTestBoard") == dt::XILINX_CHIPTESTBOARD);
} }
TEST_CASE("vec") { TEST_CASE("vec") {