mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-06 01:50:40 +02:00
Fixpositions (#436)
* fix positions on server side * wip * numports wip * wip * jungfrau top inner interface row increment * x, y detpos, wip * removed eiger row indices flipping in gui (bottom flipping maintained) * wip * wip, jungfrau numinterfaces2 * jungfrau virtual works * eiger, jungfrau, g2 virtual server works * eiger positions fix, wip * binaries in * minor printout * binaries in * pointer bug * comment to define test_mod_geometry define
This commit is contained in:
parent
b7153fe3e0
commit
afeee5501c
@ -67,7 +67,8 @@ This document describes the differences between v7.0.0 and v6.x.x
|
|||||||
- registerCallBackStartAcquisition gave incorrect imagesize (+120 bytes). corrected.
|
- registerCallBackStartAcquisition gave incorrect imagesize (+120 bytes). corrected.
|
||||||
- registerCallBackStartAcquisition parameter is a const string reference
|
- registerCallBackStartAcquisition parameter is a const string reference
|
||||||
- m3 (runnig config second time with tengiga 0, dr !=32, counters !=0x7) calculated incorrect image size expected
|
- m3 (runnig config second time with tengiga 0, dr !=32, counters !=0x7) calculated incorrect image size expected
|
||||||
|
- fixed row column indexing (mainly for multi module Jungfrau 2 interfaces )
|
||||||
|
- eiger gui row indices not flipped anymore (fix in config)
|
||||||
|
|
||||||
2. Resolved Issues
|
2. Resolved Issues
|
||||||
==================
|
==================
|
||||||
|
Binary file not shown.
@ -2060,8 +2060,8 @@ void *start_timer(void *arg) {
|
|||||||
header->frameNumber = frameNr + iframes;
|
header->frameNumber = frameNr + iframes;
|
||||||
header->packetNumber = i;
|
header->packetNumber = i;
|
||||||
header->modId = 0;
|
header->modId = 0;
|
||||||
header->row = detPos[X];
|
header->row = detPos[Y];
|
||||||
header->column = detPos[Y];
|
header->column = detPos[X];
|
||||||
|
|
||||||
// fill data
|
// fill data
|
||||||
memcpy(packetData + sizeof(sls_detector_header),
|
memcpy(packetData + sizeof(sls_detector_header),
|
||||||
|
@ -1095,19 +1095,19 @@ int *Beb_GetDetectorPosition() { return Beb_positions; }
|
|||||||
int Beb_SetDetectorPosition(int pos[]) {
|
int Beb_SetDetectorPosition(int pos[]) {
|
||||||
if (!Beb_activated)
|
if (!Beb_activated)
|
||||||
return OK;
|
return OK;
|
||||||
LOG(logINFO, ("Got Position values %d %d...\n", pos[0], pos[1]));
|
LOG(logINFO, ("Setting Position: (%d, %d)\n", pos[X], pos[Y]));
|
||||||
|
|
||||||
// save positions
|
// save positions
|
||||||
Beb_positions[0] = pos[0];
|
Beb_positions[Y] = pos[Y];
|
||||||
Beb_positions[1] = pos[1];
|
Beb_positions[X] = pos[X];
|
||||||
|
|
||||||
// get left and right
|
// get left and right
|
||||||
int posLeft[2] = {pos[0], Beb_top ? pos[1] : pos[1] + 1};
|
int posLeft[2] = {Beb_top ? pos[X] : pos[X] + 1, pos[Y]};
|
||||||
int posRight[2] = {pos[0], Beb_top ? pos[1] + 1 : pos[1]};
|
int posRight[2] = {Beb_top ? pos[X] + 1 : pos[X], pos[Y]};
|
||||||
|
|
||||||
if (Beb_quadEnable) {
|
if (Beb_quadEnable) {
|
||||||
posRight[0] = 1; // right is next row
|
posRight[Y] = 1; // right is next row
|
||||||
posRight[1] = 0; // right same first column
|
posRight[X] = 0; // right same first column
|
||||||
}
|
}
|
||||||
|
|
||||||
int ret = FAIL;
|
int ret = FAIL;
|
||||||
@ -1122,7 +1122,7 @@ int Beb_SetDetectorPosition(int pos[]) {
|
|||||||
uint32_t value = 0;
|
uint32_t value = 0;
|
||||||
ret = OK;
|
ret = OK;
|
||||||
// x left
|
// x left
|
||||||
int posval = Beb_swap_uint16(posLeft[0]);
|
int posval = Beb_swap_uint16(posLeft[Y]);
|
||||||
value = Beb_Read32(csp0base, UDP_HEADER_A_LEFT_OFST);
|
value = Beb_Read32(csp0base, UDP_HEADER_A_LEFT_OFST);
|
||||||
value &= UDP_HEADER_ID_MSK; // to keep previous id value
|
value &= UDP_HEADER_ID_MSK; // to keep previous id value
|
||||||
Beb_Write32(csp0base, UDP_HEADER_A_LEFT_OFST,
|
Beb_Write32(csp0base, UDP_HEADER_A_LEFT_OFST,
|
||||||
@ -1134,7 +1134,7 @@ int Beb_SetDetectorPosition(int pos[]) {
|
|||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
}
|
}
|
||||||
// x right
|
// x right
|
||||||
posval = Beb_swap_uint16(posRight[0]);
|
posval = Beb_swap_uint16(posRight[Y]);
|
||||||
value = Beb_Read32(csp0base, UDP_HEADER_A_RIGHT_OFST);
|
value = Beb_Read32(csp0base, UDP_HEADER_A_RIGHT_OFST);
|
||||||
value &= UDP_HEADER_ID_MSK; // to keep previous id value
|
value &= UDP_HEADER_ID_MSK; // to keep previous id value
|
||||||
Beb_Write32(csp0base, UDP_HEADER_A_RIGHT_OFST,
|
Beb_Write32(csp0base, UDP_HEADER_A_RIGHT_OFST,
|
||||||
@ -1147,7 +1147,7 @@ int Beb_SetDetectorPosition(int pos[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// y left (column)
|
// y left (column)
|
||||||
posval = Beb_swap_uint16(posLeft[1]);
|
posval = Beb_swap_uint16(posLeft[X]);
|
||||||
value = Beb_Read32(csp0base, UDP_HEADER_B_LEFT_OFST);
|
value = Beb_Read32(csp0base, UDP_HEADER_B_LEFT_OFST);
|
||||||
value &= UDP_HEADER_Z_MSK; // to keep previous z value
|
value &= UDP_HEADER_Z_MSK; // to keep previous z value
|
||||||
Beb_Write32(csp0base, UDP_HEADER_B_LEFT_OFST,
|
Beb_Write32(csp0base, UDP_HEADER_B_LEFT_OFST,
|
||||||
@ -1160,7 +1160,7 @@ int Beb_SetDetectorPosition(int pos[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// y right
|
// y right
|
||||||
posval = Beb_swap_uint16(posRight[1]);
|
posval = Beb_swap_uint16(posRight[X]);
|
||||||
value = Beb_Read32(csp0base, UDP_HEADER_B_RIGHT_OFST);
|
value = Beb_Read32(csp0base, UDP_HEADER_B_RIGHT_OFST);
|
||||||
value &= UDP_HEADER_Z_MSK; // to keep previous z value
|
value &= UDP_HEADER_Z_MSK; // to keep previous z value
|
||||||
Beb_Write32(csp0base, UDP_HEADER_B_RIGHT_OFST,
|
Beb_Write32(csp0base, UDP_HEADER_B_RIGHT_OFST,
|
||||||
@ -1176,10 +1176,10 @@ int Beb_SetDetectorPosition(int pos[]) {
|
|||||||
Beb_close(fd, csp0base);
|
Beb_close(fd, csp0base);
|
||||||
}
|
}
|
||||||
if (ret == OK) {
|
if (ret == OK) {
|
||||||
LOG(logINFO, ("Position set to...\n"
|
LOG(logINFO, ("Position set to (col, row):\n"
|
||||||
"\tLeft: [%d, %d]\n"
|
"\tLeft: [%d, %d]\n"
|
||||||
"\tRight:[%d, %d]\n",
|
"\tRight:[%d, %d]\n",
|
||||||
posLeft[0], posLeft[1], posRight[0], posRight[1]));
|
posLeft[X], posLeft[Y], posRight[X], posRight[Y]));
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
Binary file not shown.
@ -19,7 +19,7 @@
|
|||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#endif
|
#endif
|
||||||
|
extern int portno;
|
||||||
// Global variable from slsDetectorServer_funcs
|
// Global variable from slsDetectorServer_funcs
|
||||||
extern int debugflag;
|
extern int debugflag;
|
||||||
extern int updateFlag;
|
extern int updateFlag;
|
||||||
@ -2473,9 +2473,9 @@ void *start_timer(void *arg) {
|
|||||||
int maxPacketsPerFrame = (tgEnable ? 4 : 16) * dr;
|
int maxPacketsPerFrame = (tgEnable ? 4 : 16) * dr;
|
||||||
int npixelsx = 256 * 2 * bytesPerPixel;
|
int npixelsx = 256 * 2 * bytesPerPixel;
|
||||||
int databytes = 256 * 256 * 2 * bytesPerPixel;
|
int databytes = 256 * 256 * 2 * bytesPerPixel;
|
||||||
int row = eiger_virtual_detPos[0];
|
int row = eiger_virtual_detPos[Y];
|
||||||
int colLeft = top ? eiger_virtual_detPos[1] : eiger_virtual_detPos[1] + 1;
|
int colLeft = top ? eiger_virtual_detPos[X] : eiger_virtual_detPos[X] + 1;
|
||||||
int colRight = top ? eiger_virtual_detPos[1] + 1 : eiger_virtual_detPos[1];
|
int colRight = top ? eiger_virtual_detPos[X] + 1 : eiger_virtual_detPos[X];
|
||||||
|
|
||||||
int readNRows = getReadNRows();
|
int readNRows = getReadNRows();
|
||||||
if (readNRows == -1) {
|
if (readNRows == -1) {
|
||||||
@ -2548,8 +2548,20 @@ void *start_timer(void *arg) {
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 16:
|
case 16:
|
||||||
|
// to debug multi module geometry (row, column) in virtual servers (all pixels
|
||||||
|
// in a module set to particular value)
|
||||||
|
#ifdef TEST_MOD_GEOMETRY
|
||||||
|
if ((i % 1024) < 512) {
|
||||||
|
*((uint16_t *)(imageData + i * sizeof(uint16_t))) =
|
||||||
|
top ? (portno % 1900) : ((portno % 1900) + 1);
|
||||||
|
} else {
|
||||||
|
*((uint16_t *)(imageData + i * sizeof(uint16_t))) =
|
||||||
|
top ? ((portno % 1900) + 1) : (portno % 1900);
|
||||||
|
}
|
||||||
|
#else
|
||||||
*((uint16_t *)(imageData + i * sizeof(uint16_t))) =
|
*((uint16_t *)(imageData + i * sizeof(uint16_t))) =
|
||||||
eiger_virtual_test_mode ? 0xFFE : (uint16_t)pixelVal;
|
eiger_virtual_test_mode ? 0xFFE : (uint16_t)pixelVal;
|
||||||
|
#endif
|
||||||
break;
|
break;
|
||||||
case 32:
|
case 32:
|
||||||
*((uint32_t *)(imageData + i * sizeof(uint32_t))) =
|
*((uint32_t *)(imageData + i * sizeof(uint32_t))) =
|
||||||
|
Binary file not shown.
@ -1917,7 +1917,7 @@ int setDetectorPosition(int pos[]) {
|
|||||||
int ret = OK;
|
int ret = OK;
|
||||||
|
|
||||||
// row
|
// row
|
||||||
value = detPos[X];
|
value = detPos[Y];
|
||||||
bus_w(addr, (bus_r(addr) & ~COORD_ROW_MSK) |
|
bus_w(addr, (bus_r(addr) & ~COORD_ROW_MSK) |
|
||||||
((value << COORD_ROW_OFST) & COORD_ROW_MSK));
|
((value << COORD_ROW_OFST) & COORD_ROW_MSK));
|
||||||
valueRead = ((bus_r(addr) & COORD_ROW_MSK) >> COORD_ROW_OFST);
|
valueRead = ((bus_r(addr) & COORD_ROW_MSK) >> COORD_ROW_OFST);
|
||||||
@ -1928,7 +1928,7 @@ int setDetectorPosition(int pos[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// col
|
// col
|
||||||
value = detPos[Y];
|
value = detPos[X];
|
||||||
bus_w(addr, (bus_r(addr) & ~COORD_COL_MSK) |
|
bus_w(addr, (bus_r(addr) & ~COORD_COL_MSK) |
|
||||||
((value << COORD_COL_OFST) & COORD_COL_MSK));
|
((value << COORD_COL_OFST) & COORD_COL_MSK));
|
||||||
valueRead = ((bus_r(addr) & COORD_COL_MSK) >> COORD_COL_OFST);
|
valueRead = ((bus_r(addr) & COORD_COL_MSK) >> COORD_COL_OFST);
|
||||||
@ -1939,7 +1939,8 @@ int setDetectorPosition(int pos[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ret == OK) {
|
if (ret == OK) {
|
||||||
LOG(logINFO, ("\tPosition set to [%d, %d]\n", detPos[X], detPos[Y]));
|
LOG(logINFO,
|
||||||
|
("\tPosition set to [%d, %d] #(col, row)\n", detPos[X], detPos[Y]));
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -3095,8 +3096,8 @@ void *start_timer(void *arg) {
|
|||||||
header->frameNumber = virtual_currentFrameNumber;
|
header->frameNumber = virtual_currentFrameNumber;
|
||||||
header->packetNumber = 0;
|
header->packetNumber = 0;
|
||||||
header->modId = virtual_moduleid;
|
header->modId = virtual_moduleid;
|
||||||
header->row = detPos[X];
|
header->row = detPos[Y];
|
||||||
header->column = detPos[Y];
|
header->column = detPos[X];
|
||||||
// fill data
|
// fill data
|
||||||
memcpy(packetData + sizeof(sls_detector_header), imageData,
|
memcpy(packetData + sizeof(sls_detector_header), imageData,
|
||||||
datasize);
|
datasize);
|
||||||
|
Binary file not shown.
Binary file not shown.
@ -21,7 +21,7 @@
|
|||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#endif
|
#endif
|
||||||
|
extern int portno;
|
||||||
// Global variable from slsDetectorServer_funcs
|
// Global variable from slsDetectorServer_funcs
|
||||||
extern int debugflag;
|
extern int debugflag;
|
||||||
extern int updateFlag;
|
extern int updateFlag;
|
||||||
@ -1621,6 +1621,7 @@ int configureMAC() {
|
|||||||
|
|
||||||
int setDetectorPosition(int pos[]) {
|
int setDetectorPosition(int pos[]) {
|
||||||
int ret = OK;
|
int ret = OK;
|
||||||
|
// row, col
|
||||||
uint32_t innerPos[2] = {pos[X], pos[Y]};
|
uint32_t innerPos[2] = {pos[X], pos[Y]};
|
||||||
uint32_t outerPos[2] = {pos[X], pos[Y]};
|
uint32_t outerPos[2] = {pos[X], pos[Y]};
|
||||||
int selInterface = getPrimaryInterface();
|
int selInterface = getPrimaryInterface();
|
||||||
@ -1630,15 +1631,16 @@ int setDetectorPosition(int pos[]) {
|
|||||||
("Setting detector position: 1 Interface %s \n(%d, %d)\n",
|
("Setting detector position: 1 Interface %s \n(%d, %d)\n",
|
||||||
(selInterface ? "Inner" : "Outer"), innerPos[X], innerPos[Y]));
|
(selInterface ? "Inner" : "Outer"), innerPos[X], innerPos[Y]));
|
||||||
} else {
|
} else {
|
||||||
++outerPos[X];
|
// top has row incremented by 1
|
||||||
|
++innerPos[Y];
|
||||||
LOG(logDEBUG, ("Setting detector position: 2 Interfaces \n"
|
LOG(logDEBUG, ("Setting detector position: 2 Interfaces \n"
|
||||||
" inner top(%d, %d), outer bottom(%d, %d)\n",
|
" inner top(%d, %d), outer bottom(%d, %d)\n",
|
||||||
innerPos[X], innerPos[Y], outerPos[X], outerPos[Y]));
|
innerPos[X], innerPos[Y], outerPos[X], outerPos[Y]));
|
||||||
}
|
}
|
||||||
detPos[0] = innerPos[0];
|
detPos[0] = innerPos[X];
|
||||||
detPos[1] = innerPos[1];
|
detPos[1] = innerPos[Y];
|
||||||
detPos[2] = outerPos[0];
|
detPos[2] = outerPos[X];
|
||||||
detPos[3] = outerPos[1];
|
detPos[3] = outerPos[Y];
|
||||||
|
|
||||||
// row
|
// row
|
||||||
// outer
|
// outer
|
||||||
@ -1676,8 +1678,8 @@ int setDetectorPosition(int pos[]) {
|
|||||||
|
|
||||||
if (ret == OK) {
|
if (ret == OK) {
|
||||||
if (getNumberofUDPInterfaces() == 1) {
|
if (getNumberofUDPInterfaces() == 1) {
|
||||||
LOG(logINFOBLUE,
|
LOG(logINFOBLUE, ("Position set to [%d, %d] #(col, row)\n",
|
||||||
("Position set to [%d, %d]\n", innerPos[X], innerPos[Y]));
|
innerPos[X], innerPos[Y]));
|
||||||
} else {
|
} else {
|
||||||
LOG(logINFOBLUE, (" Inner (top) position set to [%d, %d]\n",
|
LOG(logINFOBLUE, (" Inner (top) position set to [%d, %d]\n",
|
||||||
innerPos[X], innerPos[Y]));
|
innerPos[X], innerPos[Y]));
|
||||||
@ -2531,8 +2533,16 @@ void *start_timer(void *arg) {
|
|||||||
if (i > 0 && i % pixelsPerPacket == 0) {
|
if (i > 0 && i % pixelsPerPacket == 0) {
|
||||||
++pixelVal;
|
++pixelVal;
|
||||||
}
|
}
|
||||||
|
// to debug multi module geometry (row, column) in virtual servers (all pixels
|
||||||
|
// in a module set to particular value)
|
||||||
|
#ifdef TEST_MOD_GEOMETRY
|
||||||
|
*((uint16_t *)(imageData + i * sizeof(uint16_t))) =
|
||||||
|
portno % 1900 + (i >= npixels / 2 ? 1 : 0);
|
||||||
|
#else
|
||||||
*((uint16_t *)(imageData + i * sizeof(uint16_t))) =
|
*((uint16_t *)(imageData + i * sizeof(uint16_t))) =
|
||||||
virtual_image_test_mode ? 0x0FFE : (uint16_t)pixelVal;
|
virtual_image_test_mode ? 0x0FFE : (uint16_t)pixelVal;
|
||||||
|
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2557,6 +2567,10 @@ void *start_timer(void *arg) {
|
|||||||
|
|
||||||
int srcOffset = 0;
|
int srcOffset = 0;
|
||||||
int srcOffset2 = DATA_BYTES / 2;
|
int srcOffset2 = DATA_BYTES / 2;
|
||||||
|
int row0 = (numInterfaces == 1 ? detPos[1] : detPos[3]);
|
||||||
|
int col0 = (numInterfaces == 1 ? detPos[0] : detPos[2]);
|
||||||
|
int row1 = detPos[1];
|
||||||
|
int col1 = detPos[0];
|
||||||
// loop packet (128 packets)
|
// loop packet (128 packets)
|
||||||
for (int i = 0; i != maxPacketsPerFrame; ++i) {
|
for (int i = 0; i != maxPacketsPerFrame; ++i) {
|
||||||
|
|
||||||
@ -2576,8 +2590,8 @@ void *start_timer(void *arg) {
|
|||||||
header->frameNumber = frameNr + iframes;
|
header->frameNumber = frameNr + iframes;
|
||||||
header->packetNumber = pnum;
|
header->packetNumber = pnum;
|
||||||
header->modId = 0;
|
header->modId = 0;
|
||||||
header->row = detPos[0];
|
header->row = row0;
|
||||||
header->column = detPos[1];
|
header->column = col0;
|
||||||
|
|
||||||
// fill data
|
// fill data
|
||||||
memcpy(packetData + sizeof(sls_detector_header),
|
memcpy(packetData + sizeof(sls_detector_header),
|
||||||
@ -2603,8 +2617,8 @@ void *start_timer(void *arg) {
|
|||||||
header->frameNumber = frameNr + iframes;
|
header->frameNumber = frameNr + iframes;
|
||||||
header->packetNumber = pnum;
|
header->packetNumber = pnum;
|
||||||
header->modId = 0;
|
header->modId = 0;
|
||||||
header->row = detPos[2];
|
header->row = row1;
|
||||||
header->column = detPos[3];
|
header->column = col1;
|
||||||
|
|
||||||
// fill data
|
// fill data
|
||||||
memcpy(packetData2 + sizeof(sls_detector_header),
|
memcpy(packetData2 + sizeof(sls_detector_header),
|
||||||
|
Binary file not shown.
@ -1731,8 +1731,8 @@ void *start_timer(void *arg) {
|
|||||||
header->frameNumber = frameNr + iframes;
|
header->frameNumber = frameNr + iframes;
|
||||||
header->packetNumber = i;
|
header->packetNumber = i;
|
||||||
header->modId = 0;
|
header->modId = 0;
|
||||||
header->row = detPos[X];
|
header->row = detPos[Y];
|
||||||
header->column = detPos[Y];
|
header->column = detPos[X];
|
||||||
|
|
||||||
// fill data
|
// fill data
|
||||||
memcpy(packetData + sizeof(sls_detector_header),
|
memcpy(packetData + sizeof(sls_detector_header),
|
||||||
|
Binary file not shown.
@ -1941,7 +1941,7 @@ int setDetectorPosition(int pos[]) {
|
|||||||
int ret = OK;
|
int ret = OK;
|
||||||
|
|
||||||
// row
|
// row
|
||||||
value = detPos[X];
|
value = detPos[Y];
|
||||||
bus_w(addr, (bus_r(addr) & ~COORD_ROW_MSK) |
|
bus_w(addr, (bus_r(addr) & ~COORD_ROW_MSK) |
|
||||||
((value << COORD_ROW_OFST) & COORD_ROW_MSK));
|
((value << COORD_ROW_OFST) & COORD_ROW_MSK));
|
||||||
valueRead = ((bus_r(addr) & COORD_ROW_MSK) >> COORD_ROW_OFST);
|
valueRead = ((bus_r(addr) & COORD_ROW_MSK) >> COORD_ROW_OFST);
|
||||||
@ -1952,7 +1952,7 @@ int setDetectorPosition(int pos[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// col
|
// col
|
||||||
value = detPos[Y];
|
value = detPos[X];
|
||||||
bus_w(addr, (bus_r(addr) & ~COORD_COL_MSK) |
|
bus_w(addr, (bus_r(addr) & ~COORD_COL_MSK) |
|
||||||
((value << COORD_COL_OFST) & COORD_COL_MSK));
|
((value << COORD_COL_OFST) & COORD_COL_MSK));
|
||||||
valueRead = ((bus_r(addr) & COORD_COL_MSK) >> COORD_COL_OFST);
|
valueRead = ((bus_r(addr) & COORD_COL_MSK) >> COORD_COL_OFST);
|
||||||
@ -1963,7 +1963,8 @@ int setDetectorPosition(int pos[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (ret == OK) {
|
if (ret == OK) {
|
||||||
LOG(logINFO, ("\tPosition set to [%d, %d]\n", detPos[X], detPos[Y]));
|
LOG(logINFO,
|
||||||
|
("\tPosition set to [%d, %d] #(col, row)\n", detPos[X], detPos[Y]));
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
@ -2385,8 +2386,8 @@ void *start_timer(void *arg) {
|
|||||||
header->frameNumber = virtual_currentFrameNumber;
|
header->frameNumber = virtual_currentFrameNumber;
|
||||||
header->packetNumber = i;
|
header->packetNumber = i;
|
||||||
header->modId = virtual_moduleid;
|
header->modId = virtual_moduleid;
|
||||||
header->row = detPos[X];
|
header->row = detPos[Y];
|
||||||
header->column = detPos[Y];
|
header->column = detPos[X];
|
||||||
|
|
||||||
// fill data
|
// fill data
|
||||||
memcpy(packetData + sizeof(sls_detector_header),
|
memcpy(packetData + sizeof(sls_detector_header),
|
||||||
|
@ -39,6 +39,7 @@ extern int masterCommandLine;
|
|||||||
#ifdef EIGERD
|
#ifdef EIGERD
|
||||||
extern int topCommandLine;
|
extern int topCommandLine;
|
||||||
#endif
|
#endif
|
||||||
|
int portno = DEFAULT_PORTNO;
|
||||||
|
|
||||||
void error(char *msg) { perror(msg); }
|
void error(char *msg) { perror(msg); }
|
||||||
|
|
||||||
@ -50,7 +51,6 @@ void sigInterruptHandler(int p) {
|
|||||||
int main(int argc, char *argv[]) {
|
int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
// options
|
// options
|
||||||
int portno = DEFAULT_PORTNO;
|
|
||||||
isControlServer = 1;
|
isControlServer = 1;
|
||||||
debugflag = 0;
|
debugflag = 0;
|
||||||
updateFlag = 0;
|
updateFlag = 0;
|
||||||
|
@ -62,8 +62,8 @@ int firstUDPDestination = 0;
|
|||||||
|
|
||||||
int configured = FAIL;
|
int configured = FAIL;
|
||||||
char configureMessage[MAX_STR_LENGTH] = "udp parameters not configured yet";
|
char configureMessage[MAX_STR_LENGTH] = "udp parameters not configured yet";
|
||||||
int maxydet = -1;
|
int maxYMods = -1;
|
||||||
int detectorId = -1;
|
int moduleIndex = -1;
|
||||||
|
|
||||||
// Local variables
|
// Local variables
|
||||||
int (*flist[NUM_DET_FUNCTIONS])(int);
|
int (*flist[NUM_DET_FUNCTIONS])(int);
|
||||||
@ -81,27 +81,14 @@ char scanErrMessage[MAX_STR_LENGTH] = "";
|
|||||||
/* initialization functions */
|
/* initialization functions */
|
||||||
|
|
||||||
int updateModeAllowedFunction(int file_des) {
|
int updateModeAllowedFunction(int file_des) {
|
||||||
enum detFuncs allowedFuncs[] = {F_EXEC_COMMAND,
|
enum detFuncs allowedFuncs[] = {
|
||||||
F_GET_DETECTOR_TYPE,
|
F_EXEC_COMMAND, F_GET_DETECTOR_TYPE, F_GET_FIRMWARE_VERSION,
|
||||||
F_GET_FIRMWARE_VERSION,
|
F_GET_SERVER_VERSION, F_GET_SERIAL_NUMBER, F_WRITE_REGISTER,
|
||||||
F_GET_SERVER_VERSION,
|
F_READ_REGISTER, F_LOCK_SERVER, F_GET_LAST_CLIENT_IP,
|
||||||
F_GET_SERIAL_NUMBER,
|
F_PROGRAM_FPGA, F_RESET_FPGA, F_CHECK_VERSION,
|
||||||
F_WRITE_REGISTER,
|
F_REBOOT_CONTROLLER, F_GET_KERNEL_VERSION, F_UPDATE_KERNEL,
|
||||||
F_READ_REGISTER,
|
F_UPDATE_DETECTOR_SERVER, F_GET_UPDATE_MODE, F_SET_UPDATE_MODE,
|
||||||
F_LOCK_SERVER,
|
F_GET_NUM_CHANNELS, F_GET_NUM_INTERFACES, F_ACTIVATE};
|
||||||
F_GET_LAST_CLIENT_IP,
|
|
||||||
F_PROGRAM_FPGA,
|
|
||||||
F_RESET_FPGA,
|
|
||||||
F_CHECK_VERSION,
|
|
||||||
F_REBOOT_CONTROLLER,
|
|
||||||
F_GET_KERNEL_VERSION,
|
|
||||||
F_UPDATE_KERNEL,
|
|
||||||
F_UPDATE_DETECTOR_SERVER,
|
|
||||||
F_GET_UPDATE_MODE,
|
|
||||||
F_SET_UPDATE_MODE,
|
|
||||||
F_GET_NUM_CHANNELS,
|
|
||||||
F_GET_NUM_INTERFACES,
|
|
||||||
F_ACTIVATE};
|
|
||||||
size_t allowedFuncsSize = sizeof(allowedFuncs) / sizeof(enum detFuncs);
|
size_t allowedFuncsSize = sizeof(allowedFuncs) / sizeof(enum detFuncs);
|
||||||
|
|
||||||
for (unsigned int i = 0; i < allowedFuncsSize; ++i) {
|
for (unsigned int i = 0; i < allowedFuncsSize; ++i) {
|
||||||
@ -129,6 +116,7 @@ void init_detector() {
|
|||||||
#ifdef VIRTUAL
|
#ifdef VIRTUAL
|
||||||
LOG(logINFO, ("This is a VIRTUAL detector\n"));
|
LOG(logINFO, ("This is a VIRTUAL detector\n"));
|
||||||
udpDetails[0].srcip = LOCALHOSTIP_INT;
|
udpDetails[0].srcip = LOCALHOSTIP_INT;
|
||||||
|
udpDetails[0].srcip2 = LOCALHOSTIP_INT;
|
||||||
#endif
|
#endif
|
||||||
udpDetails[0].srcport = DEFAULT_UDP_SRC_PORTNO;
|
udpDetails[0].srcport = DEFAULT_UDP_SRC_PORTNO;
|
||||||
udpDetails[0].dstport = DEFAULT_UDP_DST_PORTNO;
|
udpDetails[0].dstport = DEFAULT_UDP_DST_PORTNO;
|
||||||
@ -4700,7 +4688,7 @@ int get_read_n_rows(int file_des) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void calculate_and_set_position() {
|
void calculate_and_set_position() {
|
||||||
if (maxydet == -1 || detectorId == -1) {
|
if (maxYMods == -1 || moduleIndex == -1) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(mess,
|
sprintf(mess,
|
||||||
"Could not set detector position (did not get multi size).\n");
|
"Could not set detector position (did not get multi size).\n");
|
||||||
@ -4709,21 +4697,20 @@ void calculate_and_set_position() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// calculating new position
|
// calculating new position
|
||||||
int modulePorts[2] = {1, 1};
|
int pos[2] = {0, 0};
|
||||||
|
|
||||||
|
int portGeometry[2] = {1, 1};
|
||||||
// position does change for eiger and jungfrau (2 interfaces)
|
// position does change for eiger and jungfrau (2 interfaces)
|
||||||
#if defined(EIGERD)
|
#if defined(EIGERD)
|
||||||
modulePorts[1] = getNumberofUDPInterfaces(); // horz
|
portGeometry[X] = getNumberofUDPInterfaces(); // horz
|
||||||
#elif defined(JUNGFRAUD)
|
#elif defined(JUNGFRAUD)
|
||||||
modulePorts[0] = getNumberofUDPInterfaces(); // vert
|
portGeometry[Y] = getNumberofUDPInterfaces(); // vert
|
||||||
#endif
|
#endif
|
||||||
int maxy = maxydet * modulePorts[0];
|
LOG(logDEBUG1, ("moduleIndex:%d maxymods:%d portGeo.x:%d portgeo.y:%d\n",
|
||||||
int pos[2] = {0, 0};
|
moduleIndex, maxYMods, portGeometry[X], portGeometry[Y]));
|
||||||
// row
|
pos[Y] = (moduleIndex % maxYMods) * portGeometry[Y];
|
||||||
pos[0] = (detectorId % maxy);
|
pos[X] = (moduleIndex / maxYMods) * portGeometry[X];
|
||||||
// col for horiz. udp ports
|
LOG(logINFO, ("Setting Positions (%d,%d) #(col, row)\n", pos[X], pos[Y]));
|
||||||
pos[1] = (detectorId / maxy) * modulePorts[1];
|
|
||||||
|
|
||||||
LOG(logDEBUG, ("Setting Positions (%d,%d)\n", pos[0], pos[1]));
|
|
||||||
if (setDetectorPosition(pos) == FAIL) {
|
if (setDetectorPosition(pos) == FAIL) {
|
||||||
ret = FAIL;
|
ret = FAIL;
|
||||||
sprintf(mess, "Could not set detector position.\n");
|
sprintf(mess, "Could not set detector position.\n");
|
||||||
@ -4735,8 +4722,8 @@ void calculate_and_set_position() {
|
|||||||
if (udpDetails[0].srcmac == 0) {
|
if (udpDetails[0].srcmac == 0) {
|
||||||
char dmac[MAC_ADDRESS_SIZE];
|
char dmac[MAC_ADDRESS_SIZE];
|
||||||
memset(dmac, 0, MAC_ADDRESS_SIZE);
|
memset(dmac, 0, MAC_ADDRESS_SIZE);
|
||||||
sprintf(dmac, "aa:bb:cc:dd:%02x:%02x", pos[0] & 0xFF,
|
sprintf(dmac, "aa:bb:cc:dd:%02x:%02x", pos[X] & 0xFF,
|
||||||
pos[1] & 0xFF);
|
pos[Y] & 0xFF);
|
||||||
LOG(logINFO, ("Udp source mac address created: %s\n", dmac));
|
LOG(logINFO, ("Udp source mac address created: %s\n", dmac));
|
||||||
unsigned char a[6];
|
unsigned char a[6];
|
||||||
sscanf(dmac, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx", &a[0], &a[1], &a[2],
|
sscanf(dmac, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx", &a[0], &a[1], &a[2],
|
||||||
@ -4755,8 +4742,8 @@ void calculate_and_set_position() {
|
|||||||
if (udpDetails[0].srcmac2 == 0) {
|
if (udpDetails[0].srcmac2 == 0) {
|
||||||
char dmac2[MAC_ADDRESS_SIZE];
|
char dmac2[MAC_ADDRESS_SIZE];
|
||||||
memset(dmac2, 0, MAC_ADDRESS_SIZE);
|
memset(dmac2, 0, MAC_ADDRESS_SIZE);
|
||||||
sprintf(dmac2, "aa:bb:cc:dd:%02x:%02x", (pos[0] + 1) & 0xFF,
|
sprintf(dmac2, "aa:bb:cc:dd:%02x:%02x", (pos[X] + 1) & 0xFF,
|
||||||
pos[1] & 0xFF);
|
pos[Y] & 0xFF);
|
||||||
LOG(logINFO, ("Udp source mac address2 created: %s\n", dmac2));
|
LOG(logINFO, ("Udp source mac address2 created: %s\n", dmac2));
|
||||||
unsigned char a[6];
|
unsigned char a[6];
|
||||||
sscanf(dmac2, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx", &a[0], &a[1],
|
sscanf(dmac2, "%hhx:%hhx:%hhx:%hhx:%hhx:%hhx", &a[0], &a[1],
|
||||||
@ -4784,15 +4771,16 @@ int set_detector_position(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();
|
||||||
LOG(logINFO, ("Setting detector positions: [%u, %u]\n", args[0], args[1]));
|
LOG(logDEBUG, ("Setting detector positions: [maxy:%u, modIndex:%u]\n",
|
||||||
|
args[0], args[1]));
|
||||||
|
|
||||||
// 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
|
||||||
// up)
|
// up)
|
||||||
if (!updateFlag && check_detector_idle("configure mac") == OK) {
|
if (!updateFlag && check_detector_idle("configure mac") == OK) {
|
||||||
maxydet = args[0];
|
maxYMods = args[0];
|
||||||
detectorId = args[1];
|
moduleIndex = args[1];
|
||||||
calculate_and_set_position();
|
calculate_and_set_position();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -602,14 +602,12 @@ void DetectorImpl::readFrameFromReceiver() {
|
|||||||
currentSubFrameIndex = zHeader.expLength;
|
currentSubFrameIndex = zHeader.expLength;
|
||||||
coordY = zHeader.row;
|
coordY = zHeader.row;
|
||||||
coordX = zHeader.column;
|
coordX = zHeader.column;
|
||||||
if (eiger) {
|
|
||||||
coordY = (nY - 1) - coordY;
|
|
||||||
}
|
|
||||||
flipRows = zHeader.flipRows;
|
flipRows = zHeader.flipRows;
|
||||||
if (zHeader.completeImage == 0) {
|
if (zHeader.completeImage == 0) {
|
||||||
completeImage = false;
|
completeImage = false;
|
||||||
}
|
}
|
||||||
LOG(logDEBUG1)
|
LOG(logDEBUG1)
|
||||||
|
<< zmqSocket[isocket]->GetPortNumber() << " "
|
||||||
<< "Header Info:"
|
<< "Header Info:"
|
||||||
"\n\tcurrentFileName: "
|
"\n\tcurrentFileName: "
|
||||||
<< currentFileName << "\n\tcurrentAcquisitionIndex: "
|
<< currentFileName << "\n\tcurrentAcquisitionIndex: "
|
||||||
|
@ -17,12 +17,11 @@
|
|||||||
const std::string DataStreamer::TypeName = "DataStreamer";
|
const std::string DataStreamer::TypeName = "DataStreamer";
|
||||||
|
|
||||||
DataStreamer::DataStreamer(int ind, Fifo *f, uint32_t *dr, ROI *r, uint64_t *fi,
|
DataStreamer::DataStreamer(int ind, Fifo *f, uint32_t *dr, ROI *r, uint64_t *fi,
|
||||||
bool fr, slsDetectorDefs::xy nm, bool *qe,
|
bool fr, slsDetectorDefs::xy np, bool *qe,
|
||||||
uint64_t *tot)
|
uint64_t *tot)
|
||||||
: ThreadObject(ind, TypeName), fifo(f), dynamicRange(dr), roi(r),
|
: ThreadObject(ind, TypeName), fifo(f), dynamicRange(dr), roi(r),
|
||||||
fileIndex(fi), flipRows(fr), quadEnable(qe), totalNumFrames(tot) {
|
fileIndex(fi), flipRows(fr), numPorts(np), quadEnable(qe),
|
||||||
numMods.x = nm.x;
|
totalNumFrames(tot) {
|
||||||
numMods.y = nm.y;
|
|
||||||
|
|
||||||
LOG(logDEBUG) << "DataStreamer " << ind << " created";
|
LOG(logDEBUG) << "DataStreamer " << ind << " created";
|
||||||
}
|
}
|
||||||
@ -63,10 +62,7 @@ void DataStreamer::RecordFirstIndex(uint64_t fnum, char *buf) {
|
|||||||
|
|
||||||
void DataStreamer::SetGeneralData(GeneralData *g) { generalData = g; }
|
void DataStreamer::SetGeneralData(GeneralData *g) { generalData = g; }
|
||||||
|
|
||||||
void DataStreamer::SetNumberofModules(xy nm) {
|
void DataStreamer::SetNumberofPorts(xy np) { numPorts = np; }
|
||||||
numMods.x = nm.x;
|
|
||||||
numMods.y = nm.y;
|
|
||||||
}
|
|
||||||
|
|
||||||
void DataStreamer::SetFlipRows(bool fd) { flipRows = fd; }
|
void DataStreamer::SetFlipRows(bool fd) { flipRows = fd; }
|
||||||
|
|
||||||
@ -220,8 +216,8 @@ int DataStreamer::SendHeader(sls_receiver_header *rheader, uint32_t size,
|
|||||||
|
|
||||||
zHeader.dynamicRange = *dynamicRange;
|
zHeader.dynamicRange = *dynamicRange;
|
||||||
zHeader.fileIndex = *fileIndex;
|
zHeader.fileIndex = *fileIndex;
|
||||||
zHeader.ndetx = numMods.x;
|
zHeader.ndetx = numPorts.x;
|
||||||
zHeader.ndety = numMods.y;
|
zHeader.ndety = numPorts.y;
|
||||||
zHeader.npixelsx = nx;
|
zHeader.npixelsx = nx;
|
||||||
zHeader.npixelsy = ny;
|
zHeader.npixelsy = ny;
|
||||||
zHeader.imageSize = size;
|
zHeader.imageSize = size;
|
||||||
|
@ -33,12 +33,12 @@ class DataStreamer : private virtual slsDetectorDefs, public ThreadObject {
|
|||||||
* @param r roi
|
* @param r roi
|
||||||
* @param fi pointer to file index
|
* @param fi pointer to file index
|
||||||
* @param fr flip rows
|
* @param fr flip rows
|
||||||
* @param nm number of modules in each dimension
|
* @param nm number of ports in each dimension
|
||||||
* @param qe pointer to quad Enable
|
* @param qe pointer to quad Enable
|
||||||
* @param tot pointer to total number of frames
|
* @param tot pointer to total number of frames
|
||||||
*/
|
*/
|
||||||
DataStreamer(int ind, Fifo *f, uint32_t *dr, ROI *r, uint64_t *fi, bool fr,
|
DataStreamer(int ind, Fifo *f, uint32_t *dr, ROI *r, uint64_t *fi, bool fr,
|
||||||
xy nm, bool *qe, uint64_t *tot);
|
xy np, bool *qe, uint64_t *tot);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Destructor
|
* Destructor
|
||||||
@ -46,39 +46,11 @@ class DataStreamer : private virtual slsDetectorDefs, public ThreadObject {
|
|||||||
*/
|
*/
|
||||||
~DataStreamer();
|
~DataStreamer();
|
||||||
|
|
||||||
/**
|
|
||||||
* Set Fifo pointer to the one given
|
|
||||||
* @param f address of Fifo pointer
|
|
||||||
*/
|
|
||||||
void SetFifo(Fifo *f);
|
void SetFifo(Fifo *f);
|
||||||
|
|
||||||
/**
|
|
||||||
* Reset parameters for new acquisition
|
|
||||||
*/
|
|
||||||
void ResetParametersforNewAcquisition(const std::string &fname);
|
void ResetParametersforNewAcquisition(const std::string &fname);
|
||||||
|
|
||||||
/**
|
|
||||||
* Set GeneralData pointer to the one given
|
|
||||||
* @param g address of GeneralData (Detector Data) pointer
|
|
||||||
*/
|
|
||||||
void SetGeneralData(GeneralData *g);
|
void SetGeneralData(GeneralData *g);
|
||||||
|
void SetNumberofPorts(xy np);
|
||||||
/**
|
|
||||||
* Set number of detectors
|
|
||||||
* @param nm number of modules/ports in both dimensions
|
|
||||||
*/
|
|
||||||
void SetNumberofModules(xy nm);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Set Flipped rows
|
|
||||||
* @param fd flip rows enable
|
|
||||||
*/
|
|
||||||
void SetFlipRows(bool fd);
|
void SetFlipRows(bool fd);
|
||||||
|
|
||||||
/**
|
|
||||||
* Set additional json header
|
|
||||||
* @param json additional json header
|
|
||||||
*/
|
|
||||||
void
|
void
|
||||||
SetAdditionalJsonHeader(const std::map<std::string, std::string> &json);
|
SetAdditionalJsonHeader(const std::map<std::string, std::string> &json);
|
||||||
|
|
||||||
@ -143,34 +115,16 @@ class DataStreamer : private virtual slsDetectorDefs, public ThreadObject {
|
|||||||
int SendHeader(sls_receiver_header *rheader, uint32_t size = 0,
|
int SendHeader(sls_receiver_header *rheader, uint32_t size = 0,
|
||||||
uint32_t nx = 0, uint32_t ny = 0, bool dummy = true);
|
uint32_t nx = 0, uint32_t ny = 0, bool dummy = true);
|
||||||
|
|
||||||
/** type of thread */
|
|
||||||
static const std::string TypeName;
|
static const std::string TypeName;
|
||||||
|
|
||||||
/** GeneralData (Detector Data) object */
|
|
||||||
const GeneralData *generalData{nullptr};
|
const GeneralData *generalData{nullptr};
|
||||||
|
|
||||||
/** Fifo structure */
|
|
||||||
Fifo *fifo;
|
Fifo *fifo;
|
||||||
|
|
||||||
/** ZMQ Socket - Receiver to Client */
|
|
||||||
ZmqSocket *zmqSocket{nullptr};
|
ZmqSocket *zmqSocket{nullptr};
|
||||||
|
|
||||||
/** Pointer to dynamic range */
|
|
||||||
uint32_t *dynamicRange;
|
uint32_t *dynamicRange;
|
||||||
|
|
||||||
/** ROI */
|
|
||||||
ROI *roi;
|
ROI *roi;
|
||||||
|
|
||||||
/** adc Configured */
|
|
||||||
int adcConfigured{-1};
|
int adcConfigured{-1};
|
||||||
|
|
||||||
/** Pointer to file index */
|
|
||||||
uint64_t *fileIndex;
|
uint64_t *fileIndex;
|
||||||
|
|
||||||
/** flip rows */
|
|
||||||
bool flipRows;
|
bool flipRows;
|
||||||
|
|
||||||
/** additional json header */
|
|
||||||
std::map<std::string, std::string> additionalJsonHeader;
|
std::map<std::string, std::string> additionalJsonHeader;
|
||||||
|
|
||||||
/** Used by streamer thread to update local copy (reduce number of locks
|
/** Used by streamer thread to update local copy (reduce number of locks
|
||||||
@ -189,18 +143,12 @@ class DataStreamer : private virtual slsDetectorDefs, public ThreadObject {
|
|||||||
/** Frame Number of First Frame */
|
/** Frame Number of First Frame */
|
||||||
uint64_t firstIndex{0};
|
uint64_t firstIndex{0};
|
||||||
|
|
||||||
/* File name to stream */
|
|
||||||
std::string fileNametoStream;
|
std::string fileNametoStream;
|
||||||
|
|
||||||
/** Complete buffer used for roi, eg. shortGotthard */
|
/** Complete buffer used for roi, eg. shortGotthard */
|
||||||
char *completeBuffer{nullptr};
|
char *completeBuffer{nullptr};
|
||||||
|
|
||||||
/** Number of Modules in X and Y dimension */
|
xy numPorts{1, 1};
|
||||||
xy numMods{1, 1};
|
|
||||||
|
|
||||||
/** Quad Enable */
|
|
||||||
bool *quadEnable;
|
bool *quadEnable;
|
||||||
|
|
||||||
/** Total number of frames */
|
|
||||||
uint64_t *totalNumFrames;
|
uint64_t *totalNumFrames;
|
||||||
};
|
};
|
||||||
|
@ -217,7 +217,7 @@ slsDetectorDefs::xy Implementation::GetPortGeometry() {
|
|||||||
xy portGeometry{1, 1};
|
xy portGeometry{1, 1};
|
||||||
if (detType == EIGER)
|
if (detType == EIGER)
|
||||||
portGeometry.x = numUDPInterfaces;
|
portGeometry.x = numUDPInterfaces;
|
||||||
else // (jungfrau and gotthard2)
|
else if (detType == JUNGFRAU)
|
||||||
portGeometry.y = numUDPInterfaces;
|
portGeometry.y = numUDPInterfaces;
|
||||||
return portGeometry;
|
return portGeometry;
|
||||||
}
|
}
|
||||||
@ -226,18 +226,18 @@ void Implementation::setDetectorSize(const slsDetectorDefs::xy size) {
|
|||||||
xy portGeometry = GetPortGeometry();
|
xy portGeometry = GetPortGeometry();
|
||||||
|
|
||||||
std::string log_message = "Detector Size (ports): (";
|
std::string log_message = "Detector Size (ports): (";
|
||||||
numModules.x = portGeometry.x * size.x;
|
numModules = size;
|
||||||
numModules.y = portGeometry.y * size.y;
|
numPorts.x = portGeometry.x * size.x;
|
||||||
xy nm{numModules.x, numModules.y};
|
numPorts.y = portGeometry.y * size.y;
|
||||||
if (quadEnable) {
|
if (quadEnable) {
|
||||||
nm.x = 1;
|
numPorts.x = 1;
|
||||||
nm.y = 2;
|
numPorts.y = 2;
|
||||||
}
|
}
|
||||||
for (const auto &it : dataStreamer) {
|
for (const auto &it : dataStreamer) {
|
||||||
it->SetNumberofModules(nm);
|
it->SetNumberofPorts(numPorts);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG(logINFO) << "Detector Size (ports): " << sls::ToString(numModules);
|
LOG(logINFO) << "Detector Size (ports): " << sls::ToString(numPorts);
|
||||||
}
|
}
|
||||||
|
|
||||||
int Implementation::getModulePositionId() const { return modulePos; }
|
int Implementation::getModulePositionId() const { return modulePos; }
|
||||||
@ -254,8 +254,16 @@ void Implementation::setModulePositionId(const int id) {
|
|||||||
for (unsigned int i = 0; i < listener.size(); ++i) {
|
for (unsigned int i = 0; i < listener.size(); ++i) {
|
||||||
uint16_t row = 0, col = 0;
|
uint16_t row = 0, col = 0;
|
||||||
row = (modulePos % numModules.y) * portGeometry.y;
|
row = (modulePos % numModules.y) * portGeometry.y;
|
||||||
col = (modulePos / numModules.y) * portGeometry.x + i;
|
col = (modulePos / numModules.y) * portGeometry.x;
|
||||||
|
if (portGeometry.y == 2) {
|
||||||
|
row += i;
|
||||||
|
}
|
||||||
|
if (portGeometry.x == 2) {
|
||||||
|
col += i;
|
||||||
|
}
|
||||||
|
LOG(logDEBUG1) << i << ":numModules:" << numModules.x << ","
|
||||||
|
<< numModules.y << " portGeometry:" << portGeometry.x
|
||||||
|
<< "," << portGeometry.y;
|
||||||
listener[i]->SetHardCodedPosition(row, col);
|
listener[i]->SetHardCodedPosition(row, col);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -758,12 +766,7 @@ void Implementation::StartMasterWriter() {
|
|||||||
MasterAttributes masterAttributes;
|
MasterAttributes masterAttributes;
|
||||||
masterAttributes.detType = detType;
|
masterAttributes.detType = detType;
|
||||||
masterAttributes.timingMode = timingMode;
|
masterAttributes.timingMode = timingMode;
|
||||||
xy nm{numModules.x, numModules.y};
|
masterAttributes.geometry = numPorts;
|
||||||
if (quadEnable) {
|
|
||||||
nm.x = 1;
|
|
||||||
nm.y = 2;
|
|
||||||
}
|
|
||||||
masterAttributes.geometry = xy(nm.x, nm.y);
|
|
||||||
masterAttributes.imageSize = generalData->imageSize;
|
masterAttributes.imageSize = generalData->imageSize;
|
||||||
masterAttributes.nPixels =
|
masterAttributes.nPixels =
|
||||||
xy(generalData->nPixelsX, generalData->nPixelsY);
|
xy(generalData->nPixelsX, generalData->nPixelsY);
|
||||||
@ -823,12 +826,12 @@ void Implementation::StartMasterWriter() {
|
|||||||
std::array<std::string, 2> virtualFileAndDatasetNames;
|
std::array<std::string, 2> virtualFileAndDatasetNames;
|
||||||
// create virtual hdf5 file (if multiple files)
|
// create virtual hdf5 file (if multiple files)
|
||||||
if (dataProcessor[0]->GetFilesInAcquisition() > 1 ||
|
if (dataProcessor[0]->GetFilesInAcquisition() > 1 ||
|
||||||
(numModules.x * numModules.y) > 1) {
|
(numPorts.x * numPorts.y) > 1) {
|
||||||
virtualFileAndDatasetNames =
|
virtualFileAndDatasetNames =
|
||||||
dataProcessor[0]->CreateVirtualFile(
|
dataProcessor[0]->CreateVirtualFile(
|
||||||
filePath, fileName, fileIndex, overwriteEnable,
|
filePath, fileName, fileIndex, overwriteEnable,
|
||||||
silentMode, modulePos, numUDPInterfaces, framesPerFile,
|
silentMode, modulePos, numUDPInterfaces, framesPerFile,
|
||||||
numberOfTotalFrames, numModules.x, numModules.y,
|
numberOfTotalFrames, numPorts.x, numPorts.y,
|
||||||
dynamicRange, &hdf5LibMutex);
|
dynamicRange, &hdf5LibMutex);
|
||||||
}
|
}
|
||||||
// link file in master
|
// link file in master
|
||||||
@ -879,12 +882,6 @@ void Implementation::setNumberofUDPInterfaces(const int n) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (numUDPInterfaces != n) {
|
if (numUDPInterfaces != n) {
|
||||||
|
|
||||||
// reduce number of detectors to size with 1 interface
|
|
||||||
xy portGeometry = GetPortGeometry();
|
|
||||||
numModules.x /= portGeometry.x;
|
|
||||||
numModules.y /= portGeometry.y;
|
|
||||||
|
|
||||||
// clear all threads and fifos
|
// clear all threads and fifos
|
||||||
listener.clear();
|
listener.clear();
|
||||||
dataProcessor.clear();
|
dataProcessor.clear();
|
||||||
@ -933,15 +930,12 @@ void Implementation::setNumberofUDPInterfaces(const int n) {
|
|||||||
if (dataStreamEnable) {
|
if (dataStreamEnable) {
|
||||||
try {
|
try {
|
||||||
bool flip = flipRows;
|
bool flip = flipRows;
|
||||||
xy nm{numModules.x, numModules.y};
|
|
||||||
if (quadEnable) {
|
if (quadEnable) {
|
||||||
flip = (i == 1 ? true : false);
|
flip = (i == 1 ? true : false);
|
||||||
nm.x = 1;
|
|
||||||
nm.y = 2;
|
|
||||||
}
|
}
|
||||||
dataStreamer.push_back(sls::make_unique<DataStreamer>(
|
dataStreamer.push_back(sls::make_unique<DataStreamer>(
|
||||||
i, fifo[i].get(), &dynamicRange, &roi, &fileIndex, flip,
|
i, fifo[i].get(), &dynamicRange, &roi, &fileIndex, flip,
|
||||||
nm, &quadEnable, &numberOfTotalFrames));
|
numPorts, &quadEnable, &numberOfTotalFrames));
|
||||||
dataStreamer[i]->SetGeneralData(generalData);
|
dataStreamer[i]->SetGeneralData(generalData);
|
||||||
dataStreamer[i]->CreateZmqSockets(
|
dataStreamer[i]->CreateZmqSockets(
|
||||||
&numUDPInterfaces, streamingPort, streamingSrcIP,
|
&numUDPInterfaces, streamingPort, streamingSrcIP,
|
||||||
@ -1063,15 +1057,12 @@ void Implementation::setDataStreamEnable(const bool enable) {
|
|||||||
for (int i = 0; i < numUDPInterfaces; ++i) {
|
for (int i = 0; i < numUDPInterfaces; ++i) {
|
||||||
try {
|
try {
|
||||||
bool flip = flipRows;
|
bool flip = flipRows;
|
||||||
xy nm{numModules.x, numModules.y};
|
|
||||||
if (quadEnable) {
|
if (quadEnable) {
|
||||||
flip = (i == 1 ? true : false);
|
flip = (i == 1 ? true : false);
|
||||||
nm.x = 1;
|
|
||||||
nm.y = 2;
|
|
||||||
}
|
}
|
||||||
dataStreamer.push_back(sls::make_unique<DataStreamer>(
|
dataStreamer.push_back(sls::make_unique<DataStreamer>(
|
||||||
i, fifo[i].get(), &dynamicRange, &roi, &fileIndex, flip,
|
i, fifo[i].get(), &dynamicRange, &roi, &fileIndex, flip,
|
||||||
nm, &quadEnable, &numberOfTotalFrames));
|
numPorts, &quadEnable, &numberOfTotalFrames));
|
||||||
dataStreamer[i]->SetGeneralData(generalData);
|
dataStreamer[i]->SetGeneralData(generalData);
|
||||||
dataStreamer[i]->CreateZmqSockets(
|
dataStreamer[i]->CreateZmqSockets(
|
||||||
&numUDPInterfaces, streamingPort, streamingSrcIP,
|
&numUDPInterfaces, streamingPort, streamingSrcIP,
|
||||||
@ -1499,18 +1490,12 @@ bool Implementation::getQuad() const { return quadEnable; }
|
|||||||
void Implementation::setQuad(const bool b) {
|
void Implementation::setQuad(const bool b) {
|
||||||
if (quadEnable != b) {
|
if (quadEnable != b) {
|
||||||
quadEnable = b;
|
quadEnable = b;
|
||||||
|
setDetectorSize(numModules);
|
||||||
if (!quadEnable) {
|
if (!quadEnable) {
|
||||||
xy nm{numModules.x, numModules.y};
|
|
||||||
for (const auto &it : dataStreamer) {
|
for (const auto &it : dataStreamer) {
|
||||||
it->SetNumberofModules(nm);
|
|
||||||
it->SetFlipRows(flipRows);
|
it->SetFlipRows(flipRows);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
xy nm{1, 2};
|
|
||||||
for (const auto &it : dataStreamer) {
|
|
||||||
it->SetNumberofModules(nm);
|
|
||||||
}
|
|
||||||
if (dataStreamer.size() == 2) {
|
if (dataStreamer.size() == 2) {
|
||||||
dataStreamer[0]->SetFlipRows(false);
|
dataStreamer[0]->SetFlipRows(false);
|
||||||
dataStreamer[1]->SetFlipRows(true);
|
dataStreamer[1]->SetFlipRows(true);
|
||||||
|
@ -290,6 +290,7 @@ class Implementation : private virtual slsDetectorDefs {
|
|||||||
// config parameters
|
// config parameters
|
||||||
detectorType detType{GENERIC};
|
detectorType detType{GENERIC};
|
||||||
xy numModules{1, 1};
|
xy numModules{1, 1};
|
||||||
|
xy numPorts{1, 1};
|
||||||
int modulePos{0};
|
int modulePos{0};
|
||||||
std::string detHostname;
|
std::string detHostname;
|
||||||
bool silentMode{false};
|
bool silentMode{false};
|
||||||
|
@ -210,6 +210,8 @@ void Listener::CreateDummySocketForUDPSocketBufferSize(int s) {
|
|||||||
void Listener::SetHardCodedPosition(uint16_t r, uint16_t c) {
|
void Listener::SetHardCodedPosition(uint16_t r, uint16_t c) {
|
||||||
row = r;
|
row = r;
|
||||||
column = c;
|
column = c;
|
||||||
|
LOG(logDEBUG1) << "Setting hardcoded position [" << index
|
||||||
|
<< "] (row: " << row << ", col: " << column << ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
void Listener::ThreadExecution() {
|
void Listener::ThreadExecution() {
|
||||||
|
@ -47,12 +47,12 @@ void printHelp() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start Acquisition Call back (slsMultiReceiver writes data if file write enabled)
|
* Start Acquisition Call back (slsMultiReceiver writes data if file write
|
||||||
* if registerCallBackRawDataReady or registerCallBackRawDataModifyReady registered,
|
* enabled) if registerCallBackRawDataReady or
|
||||||
* users get data
|
* registerCallBackRawDataModifyReady registered, users get data
|
||||||
*/
|
*/
|
||||||
int StartAcq(const std::string & filePath, const std::string & fileName, uint64_t fileIndex,
|
int StartAcq(const std::string &filePath, const std::string &fileName,
|
||||||
size_t imageSize, void *objectPointer) {
|
uint64_t fileIndex, size_t imageSize, void *objectPointer) {
|
||||||
LOG(logINFOBLUE) << "#### StartAcq: filePath:" << filePath
|
LOG(logINFOBLUE) << "#### StartAcq: filePath:" << filePath
|
||||||
<< " fileName:" << fileName << " fileIndex:" << fileIndex
|
<< " fileName:" << fileName << " fileIndex:" << fileIndex
|
||||||
<< " imageSize:" << imageSize << " ####";
|
<< " imageSize:" << imageSize << " ####";
|
||||||
@ -61,8 +61,8 @@ int StartAcq(const std::string & filePath, const std::string & fileName, uint64_
|
|||||||
|
|
||||||
/** Acquisition Finished Call back */
|
/** Acquisition Finished Call back */
|
||||||
void AcquisitionFinished(uint64_t framesCaught, void *objectPointer) {
|
void AcquisitionFinished(uint64_t framesCaught, void *objectPointer) {
|
||||||
LOG(logINFOBLUE) << "#### AcquisitionFinished: framesCaught:" << framesCaught
|
LOG(logINFOBLUE) << "#### AcquisitionFinished: framesCaught:"
|
||||||
<< " ####";
|
<< framesCaught << " ####";
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -76,16 +76,16 @@ void GetData(slsDetectorDefs::sls_receiver_header *header, char *dataPointer,
|
|||||||
|
|
||||||
PRINT_IN_COLOR(
|
PRINT_IN_COLOR(
|
||||||
detectorHeader.modId ? detectorHeader.modId : detectorHeader.row,
|
detectorHeader.modId ? detectorHeader.modId : detectorHeader.row,
|
||||||
"#### %d GetData: ####\n"
|
"#### %d %d GetData: ####\n"
|
||||||
"frameNumber: %lu\t\texpLength: %u\t\tpacketNumber: %u\t\tbunchId: %lu"
|
"frameNumber: %lu\t\texpLength: %u\t\tpacketNumber: %u\t\tbunchId: %lu"
|
||||||
"\t\ttimestamp: %lu\t\tmodId: %u\t\t"
|
"\t\ttimestamp: %lu\t\tmodId: %u\t\t"
|
||||||
"row: %u\t\tcolumn: %u\t\treserved: %u\t\tdebug: %u"
|
"row: %u\t\tcolumn: %u\t\treserved: %u\t\tdebug: %u"
|
||||||
"\t\troundRNumber: %u\t\tdetType: %u\t\tversion: %u"
|
"\t\troundRNumber: %u\t\tdetType: %u\t\tversion: %u"
|
||||||
//"\t\tpacketsMask:%s"
|
//"\t\tpacketsMask:%s"
|
||||||
"\t\tfirstbytedata: 0x%x\t\tdatsize: %zu\n\n",
|
"\t\tfirstbytedata: 0x%x\t\tdatsize: %zu\n\n",
|
||||||
detectorHeader.row, (long unsigned int)detectorHeader.frameNumber,
|
detectorHeader.column, detectorHeader.row,
|
||||||
detectorHeader.expLength, detectorHeader.packetNumber,
|
(long unsigned int)detectorHeader.frameNumber, detectorHeader.expLength,
|
||||||
(long unsigned int)detectorHeader.bunchId,
|
detectorHeader.packetNumber, (long unsigned int)detectorHeader.bunchId,
|
||||||
(long unsigned int)detectorHeader.timestamp, detectorHeader.modId,
|
(long unsigned int)detectorHeader.timestamp, detectorHeader.modId,
|
||||||
detectorHeader.row, detectorHeader.column, detectorHeader.reserved,
|
detectorHeader.row, detectorHeader.column, detectorHeader.reserved,
|
||||||
detectorHeader.debug, detectorHeader.roundRNumber,
|
detectorHeader.debug, detectorHeader.roundRNumber,
|
||||||
|
@ -28,9 +28,9 @@ struct zmqHeader {
|
|||||||
uint32_t jsonversion{0};
|
uint32_t jsonversion{0};
|
||||||
uint32_t dynamicRange{0};
|
uint32_t dynamicRange{0};
|
||||||
uint64_t fileIndex{0};
|
uint64_t fileIndex{0};
|
||||||
/** number of detectors in x axis */
|
/** number of detectors/port in x axis */
|
||||||
uint32_t ndetx{0};
|
uint32_t ndetx{0};
|
||||||
/** number of detectors in y axis */
|
/** number of detectors/port in y axis */
|
||||||
uint32_t ndety{0};
|
uint32_t ndety{0};
|
||||||
/** number of pixels/channels in x axis for this zmq socket */
|
/** number of pixels/channels in x axis for this zmq socket */
|
||||||
uint32_t npixelsx{0};
|
uint32_t npixelsx{0};
|
||||||
|
@ -6,10 +6,10 @@
|
|||||||
#define APIRECEIVER 0x220408
|
#define APIRECEIVER 0x220408
|
||||||
#define APIGUI 0x220328
|
#define APIGUI 0x220328
|
||||||
|
|
||||||
#define APICTB 0x220408
|
#define APICTB 0x220428
|
||||||
#define APIGOTTHARD 0x220408
|
#define APIGOTTHARD 0x220428
|
||||||
#define APIGOTTHARD2 0x220408
|
#define APIGOTTHARD2 0x220428
|
||||||
#define APIJUNGFRAU 0x220408
|
#define APIJUNGFRAU 0x220428
|
||||||
#define APIMYTHEN3 0x220408
|
#define APIMYTHEN3 0x220428
|
||||||
#define APIMOENCH 0x220408
|
#define APIMOENCH 0x220427
|
||||||
#define APIEIGER 0x220408
|
#define APIEIGER 0x220428
|
||||||
|
Loading…
x
Reference in New Issue
Block a user