mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-23 10:07:59 +02:00
dr
This commit is contained in:
@ -112,7 +112,7 @@
|
||||
#define CONFIG_DYNAMIC_RANGE_OFST (4)
|
||||
#define CONFIG_DYNAMIC_RANGE_MSK (0x00000003 << CONFIG_DYNAMIC_RANGE_OFST)
|
||||
#define CONFIG_DYNAMIC_RANGE_1_VAL ((0x0 << CONFIG_DYNAMIC_RANGE_OFST) & CONFIG_DYNAMIC_RANGE_MSK)
|
||||
#define CONFIG_DYNAMIC_RANGE_4_VAL ((0x1 << CONFIG_DYNAMIC_RANGE_OFST) & CONFIG_DYNAMIC_RANGE_MSK)
|
||||
#define CONFIG_DYNAMIC_RANGE_8_VAL ((0x1 << CONFIG_DYNAMIC_RANGE_OFST) & CONFIG_DYNAMIC_RANGE_MSK)
|
||||
#define CONFIG_DYNAMIC_RANGE_16_VAL ((0x2 << CONFIG_DYNAMIC_RANGE_OFST) & CONFIG_DYNAMIC_RANGE_MSK)
|
||||
#define CONFIG_DYNAMIC_RANGE_24_VAL ((0x3 << CONFIG_DYNAMIC_RANGE_OFST) & CONFIG_DYNAMIC_RANGE_MSK)
|
||||
|
||||
@ -149,6 +149,8 @@
|
||||
#define PKT_CONFIG_NRXR_MAX_MSK (0x0000003F << PKT_CONFIG_NRXR_MAX_OFST)
|
||||
#define PKT_CONFIG_RXR_START_ID_OFST (8)
|
||||
#define PKT_CONFIG_RXR_START_ID_MSK (0x0000003F << PKT_CONFIG_RXR_START_ID_OFST)
|
||||
#define PKT_CONFIG_1G_INTERFACE_OFST (16)
|
||||
#define PKT_CONFIG_1G_INTERFACE_MSK (0x00000001 << PKT_CONFIG_1G_INTERFACE_OFST)
|
||||
|
||||
/* Module Coordinates Register */
|
||||
#define COORD_0_REG (0x02 * REG_OFFSET + BASE_PKT)
|
||||
|
@ -531,16 +531,15 @@ int setDynamicRange(int dr) {
|
||||
if (dr > 0) {
|
||||
uint32_t regval = 0;
|
||||
switch (dr) {
|
||||
case 1:
|
||||
/*case 1: TODO:Not implemented in firmware yet
|
||||
regval = CONFIG_DYNAMIC_RANGE_1_VAL;
|
||||
break;
|
||||
case 4:
|
||||
regval = CONFIG_DYNAMIC_RANGE_4_VAL;
|
||||
break;*/
|
||||
case 8:
|
||||
regval = CONFIG_DYNAMIC_RANGE_8_VAL;
|
||||
break;
|
||||
case 16:
|
||||
regval = CONFIG_DYNAMIC_RANGE_16_VAL;
|
||||
break;
|
||||
case 24:
|
||||
case 32:
|
||||
regval = CONFIG_DYNAMIC_RANGE_24_VAL;
|
||||
break;
|
||||
@ -555,10 +554,10 @@ int setDynamicRange(int dr) {
|
||||
|
||||
uint32_t regval = bus_r(CONFIG_REG) & CONFIG_DYNAMIC_RANGE_MSK;
|
||||
switch (regval) {
|
||||
case CONFIG_DYNAMIC_RANGE_1_VAL:
|
||||
return 1;
|
||||
case CONFIG_DYNAMIC_RANGE_4_VAL:
|
||||
return 4;
|
||||
/*case CONFIG_DYNAMIC_RANGE_1_VAL: TODO:Not implemented in firmware yet
|
||||
return 1;*/
|
||||
case CONFIG_DYNAMIC_RANGE_8_VAL:
|
||||
return 8;
|
||||
case CONFIG_DYNAMIC_RANGE_16_VAL:
|
||||
return 16;
|
||||
case CONFIG_DYNAMIC_RANGE_24_VAL:
|
||||
@ -2038,7 +2037,6 @@ void *start_timer(void *arg) {
|
||||
int numFrames = (getNumFrames() * getNumTriggers());
|
||||
int64_t expUs = getGatePeriod() / 1000;
|
||||
|
||||
// int dr = setDynamicRange(-1);
|
||||
int imagesize = calculateDataBytes();
|
||||
int dataSize = imagesize / PACKETS_PER_FRAME;
|
||||
int packetSize = dataSize + sizeof(sls_detector_header);
|
||||
@ -2046,6 +2044,34 @@ void *start_timer(void *arg) {
|
||||
// Generate data
|
||||
char imageData[imagesize];
|
||||
memset(imageData, 0, imagesize);
|
||||
{
|
||||
int dr = setDynamicRange(-1);
|
||||
int numCounters = __builtin_popcount(getCounterMask());
|
||||
int nchannels = NCHAN_1_COUNTER * NCHIP * numCounters;
|
||||
|
||||
switch (dr) {
|
||||
/*case 1: // TODO: Not implemented in firmware yet
|
||||
break;*/
|
||||
case 8:
|
||||
for (int i = 0; i < nchannels; ++i) {
|
||||
*((uint8_t *)(imageData + i)) = (uint8_t)i;
|
||||
}
|
||||
break;
|
||||
case 16:
|
||||
for (int i = 0; i < nchannels; ++i) {
|
||||
*((uint16_t *)(imageData + i * sizeof(uint16_t))) = (uint16_t)i;
|
||||
}
|
||||
break;
|
||||
case 32:
|
||||
for (int i = 0; i < nchannels; ++i) {
|
||||
*((uint32_t *)(imageData + i * sizeof(uint32_t))) =
|
||||
((uint32_t)i & 0xFFFFFF); // 24 bit
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < imagesize; i += sizeof(uint8_t)) {
|
||||
*((uint8_t *)(imageData + i)) = i;
|
||||
}
|
||||
@ -2282,13 +2308,7 @@ int copyModule(sls_detector_module *destMod, sls_detector_module *srcMod) {
|
||||
int calculateDataBytes() {
|
||||
int numCounters = __builtin_popcount(getCounterMask());
|
||||
int dr = setDynamicRange(-1);
|
||||
int databytes = NCHAN_1_COUNTER * NCHIP * numCounters *
|
||||
((dr > 16) ? 4 : // 32 bit
|
||||
((dr > 8) ? 2 : // 16 bit
|
||||
((dr > 4) ? 0.5 : // 4 bit
|
||||
0.125))); // 1 bit
|
||||
|
||||
return databytes;
|
||||
return (NCHAN_1_COUNTER * NCHIP * numCounters * ((double)dr / 8.00));
|
||||
}
|
||||
|
||||
int getTotalNumberOfChannels() {
|
||||
|
@ -27,7 +27,7 @@
|
||||
#define DEFAULT_PATTERN_FILE ("DefaultPattern.txt")
|
||||
#define DEFAULT_INTERNAL_GATES (1)
|
||||
#define DEFAULT_EXTERNAL_GATES (1)
|
||||
#define DEFAULT_DYNAMIC_RANGE (24)
|
||||
#define DEFAULT_DYNAMIC_RANGE (32)
|
||||
#define DEFAULT_NUM_FRAMES (1)
|
||||
#define DEFAULT_NUM_CYCLES (1)
|
||||
#define DEFAULT_GATE_WIDTH (100 * 1000 * 1000) // ns
|
||||
|
@ -2684,10 +2684,13 @@ int set_dynamic_range(int file_des) {
|
||||
// check dr
|
||||
switch (dr) {
|
||||
case GET_FLAG:
|
||||
#ifdef MYTHEN3D
|
||||
case 32:
|
||||
#elif EIGERD
|
||||
/*#ifdef MYTHEN3D TODO:Not implemented in firmware yet
|
||||
case 1:
|
||||
#endif*/
|
||||
#ifdef EIGERD
|
||||
case 4:
|
||||
#endif
|
||||
#if defined(EIGERD) || defined(MYTHEN3D)
|
||||
case 8:
|
||||
case 16:
|
||||
case 32:
|
||||
@ -2698,6 +2701,11 @@ int set_dynamic_range(int file_des) {
|
||||
#endif
|
||||
retval = setDynamicRange(dr);
|
||||
LOG(logDEBUG1, ("Dynamic range: %d\n", retval));
|
||||
if (retval == -1) {
|
||||
ret = FAIL;
|
||||
sprintf(mess, "Could not get dynamic range.\n");
|
||||
LOG(logERROR, (mess));
|
||||
}
|
||||
validate(dr, retval, "set dynamic range", DEC);
|
||||
break;
|
||||
default:
|
||||
|
Reference in New Issue
Block a user