Dev/xilinx defaults and pattern (#888)

* implemented testbus, testfpga, set/get #frames, triggers, allowed that and for connection to client, also allowed, getnumchannels, configuremac, getrunstatus, setdetectorposition with dummy values

* connected kernelversion, hardwareversion, versions, framesl, triggersl, dr, timingmode, pattern (except patioctrl) thats there for altera ctb

* replaced set/get64Bit to set/getU64bit in all loadpattern.c for (ctb and m3 also)
This commit is contained in:
2024-01-11 18:01:08 +01:00
committed by GitHub
parent 9a08ecc5a5
commit c8bb70f876
26 changed files with 1433 additions and 465 deletions

View File

@@ -8,7 +8,8 @@ det_list=("ctbDetectorServer
gotthard2DetectorServer
jungfrauDetectorServer
mythen3DetectorServer
moenchDetectorServer"
moenchDetectorServer
xilinx_ctbDetectorServer"
)
usage="\nUsage: compileAllServers.sh [server|all(opt)] [branch(opt)]. \n\tNo arguments mean all servers with 'developer' branch. \n\tNo 'branch' input means 'developer branch'"

View File

@@ -9,6 +9,7 @@ det_list=("ctbDetectorServer"
"jungfrauDetectorServer"
"mythen3DetectorServer"
"moenchDetectorServer"
"xilinx_ctbDetectorServer"
)
usage="\nUsage: compileAllServers.sh [server|all(opt)] [branch(opt)]. \n\tNo arguments mean all servers with 'developer' branch. \n\tNo 'branch' input means 'developer branch'"

View File

@@ -6,10 +6,12 @@
#include "clogger.h"
void initializePatternAddresses();
#ifdef CHIPTESTBOARDD
#if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD)
#ifdef VIRTUAL
void initializePatternWord();
#endif
#endif
#if defined(CHIPTESTBOARDD) // TODO || defined(XILINX_CHIPTESTBOARDD)
uint64_t validate_readPatternIOControl();
int validate_writePatternIOControl(char *message, uint64_t arg);
void writePatternIOControl(uint64_t word);

View File

@@ -86,8 +86,8 @@ uint64_t getFrontEndFirmwareVersion(enum fpgaPosition fpgaPosition);
#endif
#ifndef XILINX_CHIPTESTBOARDD
u_int64_t getFirmwareAPIVersion();
void getHardwareVersion(char *version);
#endif
void getHardwareVersion(char *version);
#ifdef EIGERD
int getHardwareVersionNumber();
#else
@@ -197,10 +197,8 @@ void setMasterSlaveConfiguration();
#endif
// parameters - dr, roi
#ifndef XILINX_CHIPTESTBOARDD
int setDynamicRange(int dr);
int getDynamicRange(int *retval);
#endif
#ifdef GOTTHARDD
int setROI(ROI arg);
ROI getROI();
@@ -309,12 +307,15 @@ uint32_t getCounterMask();
void updatePacketizing();
#endif
#ifndef EIGERD
int64_t getNumFramesLeft();
int64_t getNumTriggersLeft();
#endif
#if defined(JUNGFRAUD) || defined(MOENCHD) || defined(GOTTHARDD) || \
defined(CHIPTESTBOARDD) || defined(MYTHEN3D) || defined(GOTTHARD2D)
int setDelayAfterTrigger(int64_t val);
int64_t getDelayAfterTrigger();
int64_t getNumFramesLeft();
int64_t getNumTriggersLeft();
int64_t getDelayAfterTriggerLeft();
int64_t getPeriodLeft();
#endif
@@ -445,10 +446,8 @@ void setSynchronization(int enable);
void updatingRegisters();
int updateClockDivs();
#endif
#ifndef XILINX_CHIPTESTBOARDD
void setTiming(enum timingMode arg);
enum timingMode getTiming();
#endif
#ifdef MYTHEN3D
void setInitialExtSignals();
int setChipStatusRegister(int csr);

View File

@@ -12,7 +12,7 @@
/* global variables */
#define CSP0 (0xB0010000)/// 0xB008_0000
#define CSP0 (0xB0010000)
#define MEM_SIZE 0x100000
u_int32_t *csp0base = 0;

View File

@@ -13,7 +13,7 @@
extern enum TLogLevel trimmingPrint;
#endif
#ifdef CHIPTESTBOARDD
#if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD)
#ifdef VIRTUAL
uint64_t virtual_pattern[MAX_PATTERN_LENGTH];
#endif
@@ -21,8 +21,8 @@ uint64_t virtual_pattern[MAX_PATTERN_LENGTH];
extern void bus_w(u_int32_t offset, u_int32_t data);
extern u_int32_t bus_r(u_int32_t offset);
extern int64_t get64BitReg(int aLSB, int aMSB);
extern int64_t set64BitReg(int64_t value, int aLSB, int aMSB);
//extern int64_t get64BitReg(int aLSB, int aMSB);
//extern int64_t set64BitReg(int64_t value, int aLSB, int aMSB);
extern uint64_t getU64BitReg(int aLSB, int aMSB);
extern void setU64BitReg(uint64_t value, int aLSB, int aMSB);
@@ -44,13 +44,15 @@ void initializePatternAddresses() {
}
}
#ifdef CHIPTESTBOARDD
#if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD)
#ifdef VIRTUAL
void initializePatternWord() {
memset(virtual_pattern, 0, sizeof(virtual_pattern));
}
#endif
#endif
#if defined(CHIPTESTBOARDD) // TODO || defined(XILINX_CHIPTESTBOARDD)
uint64_t validate_readPatternIOControl() {
return getU64BitReg(PATTERN_IO_CNTRL_LSB_REG, PATTERN_IO_CNTRL_MSB_REG);
}
@@ -101,7 +103,7 @@ uint64_t readPatternWord(int addr) {
// the first word in RAM as base plus the offset of the word to write (addr)
uint32_t reg_lsb = PATTERN_STEP0_LSB_REG + addr * REG_OFFSET * 2;
uint32_t reg_msb = PATTERN_STEP0_MSB_REG + addr * REG_OFFSET * 2;
return get64BitReg(reg_lsb, reg_msb);
return getU64BitReg(reg_lsb, reg_msb);
#else
LOG(logDEBUG1, (" Reading (Executing) Pattern Word (addr:0x%x)\n", addr));
uint32_t reg = PATTERN_CNTRL_REG;
@@ -118,7 +120,7 @@ uint64_t readPatternWord(int addr) {
// read value
#ifndef VIRTUAL
return get64BitReg(PATTERN_OUT_LSB_REG, PATTERN_OUT_MSB_REG);
return getU64BitReg(PATTERN_OUT_LSB_REG, PATTERN_OUT_MSB_REG);
#else
return virtual_pattern[addr];
#endif
@@ -160,7 +162,7 @@ void writePatternWord(int addr, uint64_t word) {
uint32_t reg = PATTERN_CNTRL_REG;
// write word
set64BitReg(word, PATTERN_IN_LSB_REG, PATTERN_IN_MSB_REG);
setU64BitReg(word, PATTERN_IN_LSB_REG, PATTERN_IN_MSB_REG);
// overwrite with only addr
bus_w(reg, ((addr << PATTERN_CNTRL_ADDR_OFST) & PATTERN_CNTRL_ADDR_MSK));
@@ -178,7 +180,7 @@ void writePatternWord(int addr, uint64_t word) {
// the first word in RAM as base plus the offset of the word to write (addr)
uint32_t reg_lsb = PATTERN_STEP0_LSB_REG + addr * REG_OFFSET * 2;
uint32_t reg_msb = PATTERN_STEP0_MSB_REG + addr * REG_OFFSET * 2;
set64BitReg(word, reg_lsb, reg_msb);
setU64BitReg(word, reg_lsb, reg_msb);
#endif
}
@@ -311,23 +313,23 @@ int validate_getPatternWaitTime(char *message, int level, uint64_t *waittime) {
uint64_t getPatternWaitTime(int level) {
switch (level) {
case 0:
return get64BitReg(PATTERN_WAIT_TIMER_0_LSB_REG,
return getU64BitReg(PATTERN_WAIT_TIMER_0_LSB_REG,
PATTERN_WAIT_TIMER_0_MSB_REG);
case 1:
return get64BitReg(PATTERN_WAIT_TIMER_1_LSB_REG,
return getU64BitReg(PATTERN_WAIT_TIMER_1_LSB_REG,
PATTERN_WAIT_TIMER_1_MSB_REG);
case 2:
return get64BitReg(PATTERN_WAIT_TIMER_2_LSB_REG,
return getU64BitReg(PATTERN_WAIT_TIMER_2_LSB_REG,
PATTERN_WAIT_TIMER_2_MSB_REG);
#ifndef MYTHEN3D
case 3:
return get64BitReg(PATTERN_WAIT_TIMER_3_LSB_REG,
return getU64BitReg(PATTERN_WAIT_TIMER_3_LSB_REG,
PATTERN_WAIT_TIMER_3_MSB_REG);
case 4:
return get64BitReg(PATTERN_WAIT_TIMER_4_LSB_REG,
return getU64BitReg(PATTERN_WAIT_TIMER_4_LSB_REG,
PATTERN_WAIT_TIMER_4_MSB_REG);
case 5:
return get64BitReg(PATTERN_WAIT_TIMER_5_LSB_REG,
return getU64BitReg(PATTERN_WAIT_TIMER_5_LSB_REG,
PATTERN_WAIT_TIMER_5_MSB_REG);
#endif
default:
@@ -369,28 +371,28 @@ void setPatternWaitTime(int level, uint64_t t) {
(long long int)t));
switch (level) {
case 0:
set64BitReg(t, PATTERN_WAIT_TIMER_0_LSB_REG,
setU64BitReg(t, PATTERN_WAIT_TIMER_0_LSB_REG,
PATTERN_WAIT_TIMER_0_MSB_REG);
break;
case 1:
set64BitReg(t, PATTERN_WAIT_TIMER_1_LSB_REG,
setU64BitReg(t, PATTERN_WAIT_TIMER_1_LSB_REG,
PATTERN_WAIT_TIMER_1_MSB_REG);
break;
case 2:
set64BitReg(t, PATTERN_WAIT_TIMER_2_LSB_REG,
setU64BitReg(t, PATTERN_WAIT_TIMER_2_LSB_REG,
PATTERN_WAIT_TIMER_2_MSB_REG);
break;
#ifndef MYTHEN3D
case 3:
set64BitReg(t, PATTERN_WAIT_TIMER_3_LSB_REG,
setU64BitReg(t, PATTERN_WAIT_TIMER_3_LSB_REG,
PATTERN_WAIT_TIMER_3_MSB_REG);
break;
case 4:
set64BitReg(t, PATTERN_WAIT_TIMER_4_LSB_REG,
setU64BitReg(t, PATTERN_WAIT_TIMER_4_LSB_REG,
PATTERN_WAIT_TIMER_4_MSB_REG);
break;
case 5:
set64BitReg(t, PATTERN_WAIT_TIMER_5_LSB_REG,
setU64BitReg(t, PATTERN_WAIT_TIMER_5_LSB_REG,
PATTERN_WAIT_TIMER_5_MSB_REG);
break;
#endif
@@ -775,7 +777,7 @@ int loadPattern(char *message, enum TLogLevel printLevel,
}
}
// iocontrol
#ifndef MYTHEN3D
#if !defined(MYTHEN3D) && !defined(XILINX_CHIPTESTBOARDD) //TODO
if (ret == OK) {
ret = validate_writePatternIOControl(message, pat->ioctrl);
}
@@ -835,7 +837,7 @@ int getPattern(char *message, patternParameters *pat) {
pat->word[i] = retval64;
}
// iocontrol
#ifndef MYTHEN3D
#if !defined(MYTHEN3D) && !defined(XILINX_CHIPTESTBOARDD) //TODO
if (ret == OK) {
validate_readPatternIOControl();
}
@@ -956,7 +958,7 @@ int loadPatternFile(char *patFname, char *errMessage) {
uint64_t word = 0;
// cannot scan values
#ifdef VIRTUAL
#if defined(VIRTUAL) || defined(XILINX_CHIPTESTBOARDD)
if (sscanf(line, "%s 0x%x 0x%lx", command, &addr, &word) != 3) {
#else
if (sscanf(line, "%s 0x%x 0x%llx", command, &addr, &word) != 3) {
@@ -971,7 +973,7 @@ int loadPatternFile(char *patFname, char *errMessage) {
}
// patioctrl
#ifndef MYTHEN3D
#if !defined(MYTHEN3D) && !defined(XILINX_CHIPTESTBOARDD) //TODO
if (!strncmp(line, "patioctrl", strlen("patioctrl"))) {
uint64_t arg = 0;
@@ -1063,7 +1065,7 @@ int loadPatternFile(char *patFname, char *errMessage) {
uint64_t waittime = 0;
// cannot scan values
#ifdef VIRTUAL
#if defined(VIRTUAL) || defined(XILINX_CHIPTESTBOARDD)
if (sscanf(line, "%s %d %ld", command, &level, &waittime) != 3) {
#else
if (sscanf(line, "%s %d %lld", command, &level, &waittime) != 3) {

View File

@@ -7,7 +7,7 @@
#include "sls/sls_detector_funcs.h"
#include "slsDetectorFunctionList.h"
#if defined(CHIPTESTBOARDD) || defined(MYTHEN3D)
#if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD) || defined(MYTHEN3D)
#include "Pattern.h"
#include "loadPattern.h"
#endif
@@ -719,9 +719,6 @@ int set_timing_mode(int file_des) {
return printSocketReadError();
LOG(logDEBUG1, ("Setting external communication mode to %d\n", arg));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// set
if (((int)arg != GET_FLAG) && (Server_VerifyLock() == OK)) {
switch (arg) {
@@ -758,7 +755,7 @@ int set_timing_mode(int file_des) {
validate(&ret, mess, (int)arg, (int)retval, "set timing mode", DEC);
#endif
LOG(logDEBUG1, ("Timing Mode: %d\n", retval));
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
}
@@ -2880,7 +2877,7 @@ int get_frames_left(int file_des) {
int64_t retval = -1;
#if !defined(JUNGFRAUD) && !defined(MOENCHD) && !defined(GOTTHARDD) && \
!defined(CHIPTESTBOARDD) && !defined(MYTHEN3D) && !defined(GOTTHARD2D)
!defined(CHIPTESTBOARDD) && !defined(MYTHEN3D) && !defined(GOTTHARD2D) && !defined(XILINX_CHIPTESTBOARDD)
functionNotImplemented();
#else
// get only
@@ -2896,7 +2893,7 @@ int get_triggers_left(int file_des) {
int64_t retval = -1;
#if !defined(JUNGFRAUD) && !defined(MOENCHD) && !defined(GOTTHARDD) && \
!defined(CHIPTESTBOARDD) && !defined(MYTHEN3D) && !defined(GOTTHARD2D)
!defined(CHIPTESTBOARDD) && !defined(MYTHEN3D) && !defined(GOTTHARD2D) && !defined(XILINX_CHIPTESTBOARDD)
functionNotImplemented();
#else
// get only
@@ -3046,9 +3043,6 @@ int set_dynamic_range(int file_des) {
return printSocketReadError();
LOG(logDEBUG1, ("Setting dr to %d\n", dr));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// set & get
if ((dr == GET_FLAG) || (Server_VerifyLock() == OK)) {
// check dr
@@ -3069,7 +3063,7 @@ int set_dynamic_range(int file_des) {
case 32:
#endif
#if defined(GOTTHARDD) || defined(JUNGFRAUD) || defined(MOENCHD) || \
defined(CHIPTESTBOARDD) || defined(GOTTHARD2D)
defined(CHIPTESTBOARDD) || defined(GOTTHARD2D) || defined(XILINX_CHIPTESTBOARDD)
case 16:
#endif
if (dr >= 0) {
@@ -3097,7 +3091,6 @@ int set_dynamic_range(int file_des) {
break;
}
}
#endif
return Server_SendResult(file_des, INT32, &retval, sizeof(retval));
}
@@ -3343,7 +3336,7 @@ int set_pattern_word(int file_des) {
if (receiveData(file_des, args, sizeof(args), INT64) < 0)
return printSocketReadError();
#if !defined(CHIPTESTBOARDD) && !defined(MYTHEN3D)
#if !defined(CHIPTESTBOARDD) && !defined(XILINX_CHIPTESTBOARDD) && !defined(MYTHEN3D)
functionNotImplemented();
#else
int addr = (int)args[0];
@@ -3371,7 +3364,7 @@ int set_pattern_loop_addresses(int file_des) {
if (receiveData(file_des, args, sizeof(args), INT32) < 0)
return printSocketReadError();
#if !defined(CHIPTESTBOARDD) && !defined(MYTHEN3D)
#if !defined(CHIPTESTBOARDD) && !defined(XILINX_CHIPTESTBOARDD) && !defined(MYTHEN3D)
functionNotImplemented();
#else
int loopLevel = args[0];
@@ -3417,7 +3410,7 @@ int set_pattern_loop_cycles(int file_des) {
if (receiveData(file_des, args, sizeof(args), INT32) < 0)
return printSocketReadError();
#if !defined(CHIPTESTBOARDD) && !defined(MYTHEN3D)
#if !defined(CHIPTESTBOARDD) && !defined(XILINX_CHIPTESTBOARDD) && !defined(MYTHEN3D)
functionNotImplemented();
#else
int loopLevel = args[0];
@@ -3446,7 +3439,7 @@ int set_pattern_wait_addr(int file_des) {
if (receiveData(file_des, args, sizeof(args), INT32) < 0)
return printSocketReadError();
#if !defined(CHIPTESTBOARDD) && !defined(MYTHEN3D)
#if !defined(CHIPTESTBOARDD) && !defined(XILINX_CHIPTESTBOARDD) && !defined(MYTHEN3D)
functionNotImplemented();
#else
int loopLevel = args[0];
@@ -3475,7 +3468,7 @@ int set_pattern_wait_time(int file_des) {
if (receiveData(file_des, args, sizeof(args), INT32) < 0)
return printSocketReadError();
#if !defined(CHIPTESTBOARDD) && !defined(MYTHEN3D)
#if !defined(CHIPTESTBOARDD) && !defined(XILINX_CHIPTESTBOARDD) && !defined(MYTHEN3D)
functionNotImplemented();
#else
int loopLevel = (int)args[0];
@@ -3505,7 +3498,7 @@ int set_pattern_mask(int file_des) {
return printSocketReadError();
LOG(logDEBUG1, ("Set Pattern Mask to %d\n", arg));
#if !defined(CHIPTESTBOARDD) && !defined(MYTHEN3D)
#if !defined(CHIPTESTBOARDD) && !defined(XILINX_CHIPTESTBOARDD) && !defined(MYTHEN3D)
functionNotImplemented();
#else
// only set
@@ -3533,7 +3526,7 @@ int get_pattern_mask(int file_des) {
LOG(logDEBUG1, ("Get Pattern Mask\n"));
#if !defined(CHIPTESTBOARDD) && !defined(MYTHEN3D)
#if !defined(CHIPTESTBOARDD) && !defined(XILINX_CHIPTESTBOARDD) && !defined(MYTHEN3D)
functionNotImplemented();
#else
// only get
@@ -3554,7 +3547,7 @@ int set_pattern_bit_mask(int file_des) {
return printSocketReadError();
LOG(logDEBUG1, ("Set Pattern Bit Mask to %d\n", arg));
#if !defined(CHIPTESTBOARDD) && !defined(MYTHEN3D)
#if !defined(CHIPTESTBOARDD) && !defined(XILINX_CHIPTESTBOARDD) && !defined(MYTHEN3D)
functionNotImplemented();
#else
// only set
@@ -3583,7 +3576,7 @@ int get_pattern_bit_mask(int file_des) {
LOG(logDEBUG1, ("Get Pattern Bit Mask\n"));
#if !defined(CHIPTESTBOARDD) && !defined(MYTHEN3D)
#if !defined(CHIPTESTBOARDD) && !defined(XILINX_CHIPTESTBOARDD) && !defined(MYTHEN3D)
functionNotImplemented();
#else
// only get
@@ -7801,7 +7794,7 @@ int set_pattern(int file_des) {
char args[MAX_STR_LENGTH];
memset(args, 0, MAX_STR_LENGTH);
#if !defined(CHIPTESTBOARDD) && !defined(MYTHEN3D)
#if !defined(CHIPTESTBOARDD) && !defined(XILINX_CHIPTESTBOARDD) && !defined(MYTHEN3D)
functionNotImplemented();
#else
@@ -7838,7 +7831,7 @@ int get_pattern_file(int file_des) {
LOG(logDEBUG1, ("Getting pattern file name\n"));
#if !defined(CHIPTESTBOARDD) && !defined(MYTHEN3D)
#if !defined(CHIPTESTBOARDD) && !defined(XILINX_CHIPTESTBOARDD) && !defined(MYTHEN3D)
functionNotImplemented();
#else
// get only
@@ -7852,7 +7845,7 @@ int get_pattern(int file_des) {
ret = OK;
memset(mess, 0, sizeof(mess));
#if !defined(CHIPTESTBOARDD) && !defined(MYTHEN3D)
#if !defined(CHIPTESTBOARDD) && !defined(XILINX_CHIPTESTBOARDD) && !defined(MYTHEN3D)
functionNotImplemented();
return Server_SendResult(file_des, INT32, NULL, 0);
#else
@@ -9727,9 +9720,7 @@ int get_kernel_version(int file_des) {
memset(retvals, 0, MAX_STR_LENGTH);
LOG(logDEBUG1, ("Getting kernel version\n"));
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
// get only
ret = getKernelVersion(retvals);
if (ret == FAIL) {
@@ -9742,7 +9733,6 @@ int get_kernel_version(int file_des) {
} else {
LOG(logDEBUG1, ("kernel version: [%s]\n", retvals));
}
#endif
return Server_SendResult(file_des, OTHER, retvals, sizeof(retvals));
}
@@ -10504,12 +10494,10 @@ int get_hardware_version(int file_des) {
memset(mess, 0, sizeof(mess));
char retvals[MAX_STR_LENGTH];
memset(retvals, 0, MAX_STR_LENGTH);
#ifdef XILINX_CHIPTESTBOARDD
functionNotImplemented();
#else
getHardwareVersion(retvals);
LOG(logDEBUG1, ("hardware version retval: %s\n", retvals));
#endif
return Server_SendResult(file_des, OTHER, retvals, sizeof(retvals));
}

View File

@@ -8,6 +8,7 @@ add_executable(xilinx_ctbDetectorServer_virtual
../slsDetectorServer/src/arm64.c
../slsDetectorServer/src/common.c
../slsDetectorServer/src/sharedMemory.c
../slsDetectorServer/src/loadPattern.c
../../slsSupportLib/src/md5.c
)

View File

@@ -18,7 +18,7 @@ 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
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 $(main_src)/loadPattern.c $(md5_dir)md5.c
OBJS = $(SRCS:.c=.o)

File diff suppressed because it is too large Load Diff

View File

@@ -7,6 +7,9 @@
#include "sharedMemory.h"
#include "sls/versionAPI.h"
#include "loadPattern.h"
#include <string.h>
#include <unistd.h> // usleep
#include <arpa/inet.h> // INET_ADDRSTRLEN
@@ -227,6 +230,10 @@ uint64_t getFirmwareVersion() {
return ((bus_r(FPGAVERSIONREG) & COMPDATE_MSK) >> COMPDATE_OFST);
}
void getHardwareVersion(char *version) {
strcpy(version, "Not applicable");
}
u_int64_t getDetectorMAC() {
#ifdef VIRTUAL
return 0;
@@ -310,12 +317,29 @@ void setupDetector() {
LOG(logINFO, ("Setting up Server for 1 Xilinx Chip Test Board\n"));
#ifdef VIRTUAL
sharedMemory_setStatus(IDLE);
initializePatternWord();
#endif
LOG(logINFOBLUE, ("Setting Default parameters\n"));
initializePatternAddresses();
setNumFrames(DEFAULT_NUM_FRAMES);
setNumTriggers(DEFAULT_NUM_CYCLES);
setTiming(DEFAULT_TIMING_MODE);
}
/* set parameters - dr */
int setDynamicRange(int dr) {
if (dr == 16)
return OK;
return FAIL;
}
int getDynamicRange(int *retval) {
*retval = DYNAMIC_RANGE;
return OK;
}
/* parameters - timer */
@@ -338,6 +362,37 @@ void setNumTriggers(int64_t val) {
int64_t getNumTriggers() { return getU64BitReg(CYCLESINREG1, CYCLESINREG2); }
int64_t getNumFramesLeft() {
return getU64BitReg(FRAMESOUTREG1, FRAMESOUTREG2);
}
int64_t getNumTriggersLeft() {
return getU64BitReg(CYCLESOUTREG1, CYCLESOUTREG2);
}
/* parameters - timing, extsig */
void setTiming(enum timingMode arg) {
switch (arg) {
case AUTO_TIMING:
LOG(logINFO, ("Set Timing: Auto\n"));
bus_w(FLOWCONTROLREG, bus_r(FLOWCONTROLREG) & ~TRIGGERENABLE_MSK);
break;
case TRIGGER_EXPOSURE:
LOG(logINFO, ("Set Timing: Trigger\n"));
bus_w(FLOWCONTROLREG, bus_r(FLOWCONTROLREG) | TRIGGERENABLE_MSK);
break;
default:
LOG(logERROR, ("Unknown timing mode %d\n", arg));
}
}
enum timingMode getTiming() {
if (bus_r(FLOWCONTROLREG) == TRIGGERENABLE_MSK)
return TRIGGER_EXPOSURE;
return AUTO_TIMING;
}
int setDetectorPosition(int pos[]) {
memcpy(detPos, pos, sizeof(detPos));
// TODO

View File

@@ -19,5 +19,10 @@ enum DACINDEX { D0 };
/** Default Parameters */
#define DEFAULT_NUM_FRAMES (1)
#define DEFAULT_NUM_CYCLES (1)
#define DEFAULT_NUM_FRAMES (1)
#define DEFAULT_NUM_CYCLES (1)
#define DYNAMIC_RANGE (16)
#define DEFAULT_TIMING_MODE (AUTO_TIMING)
/* Defines in the Firmware */
#define WAIT_TIME_PATTERN_READ (10) // TODO?