mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2026-05-22 20:54:19 +02:00
review fixes, simpler validation of timers in ctb and xilinx ctb
This commit is contained in:
Binary file not shown.
@@ -1144,15 +1144,26 @@ int getNumTransceiverSamples() { return ntSamples; }
|
||||
int setExpTime(int64_t val, char *mess) {
|
||||
setPatternWaitInterval(0, val);
|
||||
|
||||
// validate for tolerance
|
||||
int64_t retval = 0;
|
||||
if (getExpTime(&retval, mess) == FAIL) {
|
||||
// validate
|
||||
uint64_t arg_clocks = ns_to_clocks(val, clkFrequency[RUN_CLK]);
|
||||
uint64_t retval_clocks = getPatternWaitClocks(0);
|
||||
if (arg_clocks != retval_clocks) {
|
||||
sprintf(mess,
|
||||
"Failed to set exposure time. Could not set number of clocks "
|
||||
"to %lld, read %lld\n",
|
||||
(long long int)arg_clocks, (long long int)retval_clocks);
|
||||
LOG(logERROR, (mess));
|
||||
return FAIL;
|
||||
}
|
||||
int ret = OK;
|
||||
validate64_timer(&ret, mess, val, retval, clkFrequency[RUN_CLK],
|
||||
"exposure time");
|
||||
return ret;
|
||||
|
||||
// log rounding if any
|
||||
int64_t retval = getPatternWaitInterval(0);
|
||||
if (val != retval) {
|
||||
LOG(logWARNING, ("Rounding to %lld ns due to clock frequency\n",
|
||||
(long long int)retval));
|
||||
}
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
int getExpTime(int64_t *retval, char *mess) {
|
||||
@@ -1172,17 +1183,31 @@ int setPeriod(int64_t val, char *mess) {
|
||||
return FAIL;
|
||||
}
|
||||
LOG(logINFO, ("Setting period %lld ns\n", (long long int)val));
|
||||
uint64_t numClocks = ns_to_clocks(val, clkFrequency[SYNC_CLK]);
|
||||
set64BitReg(numClocks, PERIOD_LSB_REG, PERIOD_MSB_REG);
|
||||
uint64_t arg_clocks = ns_to_clocks(val, clkFrequency[SYNC_CLK]);
|
||||
set64BitReg(arg_clocks, PERIOD_LSB_REG, PERIOD_MSB_REG);
|
||||
|
||||
// validate for tolerance
|
||||
int64_t retval = 0;
|
||||
int ret = getPeriod(&retval, mess);
|
||||
if (ret == FAIL) {
|
||||
// validate
|
||||
uint64_t retval_clocks = get64BitReg(PERIOD_LSB_REG, PERIOD_MSB_REG);
|
||||
if (arg_clocks != retval_clocks) {
|
||||
sprintf(mess,
|
||||
"Failed to set period. Could not set number of clocks "
|
||||
"to %lld, red %lld\n",
|
||||
(long long int)arg_clocks, (long long int)retval_clocks);
|
||||
LOG(logERROR, (mess));
|
||||
return FAIL;
|
||||
}
|
||||
validate64_timer(&ret, mess, val, retval, clkFrequency[SYNC_CLK], "period");
|
||||
return ret;
|
||||
|
||||
// log rounding if any
|
||||
int64_t retval = 0;
|
||||
if (getPeriod(&retval, mess) == FAIL) {
|
||||
return FAIL;
|
||||
}
|
||||
if (val != retval) {
|
||||
LOG(logWARNING, ("Rounding to %lld ns due to clock frequency\n",
|
||||
(long long int)retval));
|
||||
}
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
int getPeriod(int64_t *retval, char *mess) {
|
||||
@@ -1204,18 +1229,32 @@ int setDelayAfterTrigger(int64_t val, char *mess) {
|
||||
return FAIL;
|
||||
}
|
||||
LOG(logINFO, ("Setting delay after trigger %lld ns\n", (long long int)val));
|
||||
uint64_t numClocks = ns_to_clocks(val, clkFrequency[SYNC_CLK]);
|
||||
set64BitReg(numClocks, DELAY_LSB_REG, DELAY_MSB_REG);
|
||||
uint64_t arg_clocks = ns_to_clocks(val, clkFrequency[SYNC_CLK]);
|
||||
set64BitReg(arg_clocks, DELAY_LSB_REG, DELAY_MSB_REG);
|
||||
|
||||
// validate for tolerance
|
||||
int64_t retval = 0;
|
||||
int ret = getDelayAfterTrigger(&retval, mess);
|
||||
if (ret == FAIL) {
|
||||
// validate
|
||||
uint64_t retval_clocks = get64BitReg(DELAY_LSB_REG, DELAY_MSB_REG);
|
||||
if (arg_clocks != retval_clocks) {
|
||||
sprintf(
|
||||
mess,
|
||||
"Failed to set delay after trigger. Could not set number of clocks "
|
||||
"to %lld, read %lld\n",
|
||||
(long long int)arg_clocks, (long long int)retval_clocks);
|
||||
LOG(logERROR, (mess));
|
||||
return FAIL;
|
||||
}
|
||||
validate64_timer(&ret, mess, val, retval, clkFrequency[SYNC_CLK],
|
||||
"delay after trigger");
|
||||
return ret;
|
||||
|
||||
// log rounding if any
|
||||
int64_t retval = 0;
|
||||
if (getDelayAfterTrigger(&retval, mess) == FAIL) {
|
||||
return FAIL;
|
||||
}
|
||||
if (val != retval) {
|
||||
LOG(logWARNING, ("Rounding to %lld ns due to clock frequency\n",
|
||||
(long long int)retval));
|
||||
}
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
int getDelayAfterTrigger(int64_t *retval, char *mess) {
|
||||
|
||||
@@ -62,9 +62,6 @@ void validate(int *ret, char *mess, int arg, int retval, char *modename,
|
||||
void validate64(int *ret, char *mess, int64_t arg, int64_t retval,
|
||||
char *modename, enum numberMode nummode);
|
||||
|
||||
void validate64_timer(int *ret, char *message, uint64_t arg, uint64_t retval,
|
||||
uint32_t runclk_hz, char *modename);
|
||||
|
||||
int getModuleIdInFile(int *ret, char *mess, char *fileName);
|
||||
int verifyChecksumFromBuffer(char *mess, char *functionType,
|
||||
char *clientChecksum, char *buffer, ssize_t bytes);
|
||||
|
||||
@@ -230,20 +230,6 @@ void validate64(int *ret, char *mess, int64_t arg, int64_t retval,
|
||||
}
|
||||
}
|
||||
|
||||
void validate64_timer(int *ret, char *message, uint64_t arg, uint64_t retval,
|
||||
uint32_t clk_hz, char *modename) {
|
||||
uint64_t arg_clks = ns_to_clocks(arg, clk_hz);
|
||||
uint64_t retval_clks = ns_to_clocks(retval, clk_hz);
|
||||
int64_t diff = (int64_t)retval_clks - (int64_t)arg_clks;
|
||||
if (diff < 0) {
|
||||
diff = -diff;
|
||||
}
|
||||
// tolerance = 1 clock
|
||||
if (diff > 1) {
|
||||
validate64(ret, message, arg, retval, modename, DEC);
|
||||
}
|
||||
}
|
||||
|
||||
int getModuleIdInFile(int *ret, char *mess, char *fileName) {
|
||||
const int fileNameSize = 128;
|
||||
char fname[fileNameSize];
|
||||
|
||||
@@ -329,43 +329,50 @@ int validate_setPatternWaitClocksAndInterval(char *message, int level,
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
uint64_t retval = 0;
|
||||
if (clocks) {
|
||||
setPatternWaitClocks(level, waittime);
|
||||
// validate result
|
||||
retval = getPatternWaitClocks(level);
|
||||
uint64_t retval = getPatternWaitClocks(level);
|
||||
LOG(logDEBUG1, ("Pattern wait time in clocks (level:%d) retval: %d\n",
|
||||
level, (long long int)retval));
|
||||
} else {
|
||||
setPatternWaitInterval(level, waittime);
|
||||
// validate result
|
||||
retval = getPatternWaitInterval(level);
|
||||
LOG(logDEBUG1, ("Pattern wait time (level:%d) retval: %d\n", level,
|
||||
(long long int)retval));
|
||||
}
|
||||
|
||||
int ret = OK;
|
||||
char mode[128];
|
||||
memset(mode, 0, sizeof(mode));
|
||||
sprintf(mode, "set pattern Loop %d wait time", level);
|
||||
|
||||
if (clocks) {
|
||||
int ret = OK;
|
||||
char mode[128];
|
||||
memset(mode, 0, sizeof(mode));
|
||||
sprintf(mode, "set pattern Loop %d wait time (clocks)", level);
|
||||
validate64(&ret, message, waittime, retval, mode, DEC);
|
||||
} else {
|
||||
uint32_t runclk = 0;
|
||||
#if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD)
|
||||
runclk = clkFrequency[RUN_CLK];
|
||||
#elif MYTHEN3D
|
||||
runclk = getFrequency(SYSTEM_C0);
|
||||
#endif
|
||||
if (retval == (uint64_t)-1) {
|
||||
sprintf(message, "runclk is 0. Cannot divide by 0 for patttern "
|
||||
"wait interval.\n");
|
||||
return FAIL;
|
||||
}
|
||||
validate64_timer(&ret, message, waittime, retval, runclk, mode);
|
||||
return ret;
|
||||
}
|
||||
return ret;
|
||||
|
||||
// interval
|
||||
setPatternWaitInterval(level, waittime);
|
||||
|
||||
// validate
|
||||
uint32_t runclk = 0;
|
||||
#if defined(CHIPTESTBOARDD) || defined(XILINX_CHIPTESTBOARDD)
|
||||
runclk = clkFrequency[RUN_CLK];
|
||||
#elif MYTHEN3D
|
||||
runclk = getFrequency(SYSTEM_C0);
|
||||
#endif
|
||||
uint64_t arg_clocks = ns_to_clocks(waittime, runclk);
|
||||
uint64_t retval_clocks = getPatternWaitClocks(0);
|
||||
if (arg_clocks != retval_clocks) {
|
||||
sprintf(message,
|
||||
"Failed to set exposure time. Could not set number of clocks "
|
||||
"to %lld, read %lld\n",
|
||||
(long long int)arg_clocks, (long long int)retval_clocks);
|
||||
LOG(logERROR, (message));
|
||||
return FAIL;
|
||||
}
|
||||
|
||||
// log rounding if any
|
||||
int64_t retval = getPatternWaitInterval(0);
|
||||
if (waittime != retval) {
|
||||
LOG(logWARNING, ("Rounding to %lld ns due to clock frequency\n",
|
||||
(long long int)retval));
|
||||
}
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
void setPatternWaitClocks(int level, uint64_t t) {
|
||||
|
||||
Binary file not shown.
@@ -779,15 +779,26 @@ int getNumTransceiverSamples() {
|
||||
int setExpTime(int64_t val, char *mess) {
|
||||
setPatternWaitInterval(0, val);
|
||||
|
||||
// validate for tolerance
|
||||
int64_t retval = 0;
|
||||
if (getExpTime(&retval, mess) == FAIL) {
|
||||
// validate
|
||||
uint64_t arg_clocks = ns_to_clocks(val, clkFrequency[RUN_CLK]);
|
||||
uint64_t retval_clocks = getPatternWaitClocks(0);
|
||||
if (arg_clocks != retval_clocks) {
|
||||
sprintf(mess,
|
||||
"Failed to set exposure time. Could not set number of clocks "
|
||||
"to %lld, read %lld\n",
|
||||
(long long int)arg_clocks, (long long int)retval_clocks);
|
||||
LOG(logERROR, (mess));
|
||||
return FAIL;
|
||||
}
|
||||
int ret = OK;
|
||||
validate64_timer(&ret, mess, val, retval, clkFrequency[RUN_CLK],
|
||||
"exposure time");
|
||||
return ret;
|
||||
|
||||
// log rounding if any
|
||||
int64_t retval = getPatternWaitInterval(0);
|
||||
if (val != retval) {
|
||||
LOG(logWARNING, ("Rounding to %lld ns due to clock frequency\n",
|
||||
(long long int)retval));
|
||||
}
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
int getExpTime(int64_t *retval, char *mess) {
|
||||
@@ -807,17 +818,31 @@ int setPeriod(int64_t val, char *mess) {
|
||||
return FAIL;
|
||||
}
|
||||
LOG(logINFO, ("Setting period %lld ns\n", (long long int)val));
|
||||
uint64_t numClocks = ns_to_clocks(val, clkFrequency[RUN_CLK]);
|
||||
setU64BitReg(numClocks, PERIOD_IN_REG_1, PERIOD_IN_REG_2);
|
||||
uint64_t arg_clocks = ns_to_clocks(val, clkFrequency[SYNC_CLK]);
|
||||
setU64BitReg(arg_clocks, PERIOD_IN_REG_1, PERIOD_IN_REG_2);
|
||||
|
||||
// validate for tolerance
|
||||
int64_t retval = 0;
|
||||
int ret = getPeriod(&retval, mess);
|
||||
if (ret == FAIL) {
|
||||
// validate
|
||||
uint64_t retval_clocks = getU64BitReg(PERIOD_IN_REG_1, PERIOD_IN_REG_2);
|
||||
if (arg_clocks != retval_clocks) {
|
||||
sprintf(mess,
|
||||
"Failed to set period. Could not set number of clocks "
|
||||
"to %lld, red %lld\n",
|
||||
(long long int)arg_clocks, (long long int)retval_clocks);
|
||||
LOG(logERROR, (mess));
|
||||
return FAIL;
|
||||
}
|
||||
validate64_timer(&ret, mess, val, retval, clkFrequency[RUN_CLK], "period");
|
||||
return ret;
|
||||
|
||||
// log rounding if any
|
||||
int64_t retval = 0;
|
||||
if (getPeriod(&retval, mess) == FAIL) {
|
||||
return FAIL;
|
||||
}
|
||||
if (val != retval) {
|
||||
LOG(logWARNING, ("Rounding to %lld ns due to clock frequency\n",
|
||||
(long long int)retval));
|
||||
}
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
int getPeriod(int64_t *retval, char *mess) {
|
||||
@@ -839,18 +864,32 @@ int setDelayAfterTrigger(int64_t val, char *mess) {
|
||||
return FAIL;
|
||||
}
|
||||
LOG(logINFO, ("Setting delay after trigger %lld ns\n", (long long int)val));
|
||||
uint64_t numClocks = ns_to_clocks(val, clkFrequency[RUN_CLK]);
|
||||
setU64BitReg(numClocks, DELAY_IN_REG_1, DELAY_IN_REG_2);
|
||||
uint64_t arg_clocks = ns_to_clocks(val, clkFrequency[SYNC_CLK]);
|
||||
setU64BitReg(arg_clocks, DELAY_IN_REG_1, DELAY_IN_REG_2);
|
||||
|
||||
// validate for tolerance
|
||||
int64_t retval = 0;
|
||||
int ret = getDelayAfterTrigger(&retval, mess);
|
||||
if (ret == FAIL) {
|
||||
// validate
|
||||
uint64_t retval_clocks = getU64BitReg(DELAY_IN_REG_1, DELAY_IN_REG_2);
|
||||
if (arg_clocks != retval_clocks) {
|
||||
sprintf(
|
||||
mess,
|
||||
"Failed to set delay after trigger. Could not set number of clocks "
|
||||
"to %lld, read %lld\n",
|
||||
(long long int)arg_clocks, (long long int)retval_clocks);
|
||||
LOG(logERROR, (mess));
|
||||
return FAIL;
|
||||
}
|
||||
validate64_timer(&ret, mess, val, retval, clkFrequency[RUN_CLK],
|
||||
"delay after trigger");
|
||||
return ret;
|
||||
|
||||
// log rounding if any
|
||||
int64_t retval = 0;
|
||||
if (getDelayAfterTrigger(&retval, mess) == FAIL) {
|
||||
return FAIL;
|
||||
}
|
||||
if (val != retval) {
|
||||
LOG(logWARNING, ("Rounding to %lld ns due to clock frequency\n",
|
||||
(long long int)retval));
|
||||
}
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
int getDelayAfterTrigger(int64_t *retval, char *mess) {
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
/** API versions */
|
||||
#define APILIB "0.0.0 0x250909"
|
||||
#define APIRECEIVER "0.0.0 0x250822"
|
||||
#define APICTB "0.0.0 0x260501"
|
||||
#define APICTB "0.0.0 0x260505"
|
||||
#define APIGOTTHARD2 "0.0.0 0x260427"
|
||||
#define APIMOENCH "0.0.0 0x260424"
|
||||
#define APIEIGER "0.0.0 0x260424"
|
||||
#define APIXILINXCTB "0.0.0 0x260501"
|
||||
#define APIXILINXCTB "0.0.0 0x260505"
|
||||
#define APIJUNGFRAU "0.0.0 0x260424"
|
||||
#define APIMYTHEN3 "0.0.0 0x260501"
|
||||
|
||||
Reference in New Issue
Block a user