mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-26 08:10:02 +02:00
updated for partialread
This commit is contained in:
parent
5f8dc7a7f0
commit
f8b5795c29
@ -75,6 +75,10 @@ serialnumber (put)
|
|||||||
dbitpipeline
|
dbitpipeline
|
||||||
readnlines->partialread
|
readnlines->partialread
|
||||||
|
|
||||||
|
setting number of udp interfaces from 1 to 2, didnt get image in gui
|
||||||
|
|
||||||
|
virtual server plots increasing values for every packet.. not every pixel
|
||||||
|
|
||||||
3. Firmware Requirements
|
3. Firmware Requirements
|
||||||
========================
|
========================
|
||||||
|
|
||||||
|
@ -2306,55 +2306,70 @@ void *start_timer(void *arg) {
|
|||||||
int tgEnable = send_to_ten_gig;
|
int tgEnable = send_to_ten_gig;
|
||||||
int datasize = (tgEnable ? 4096 : 1024);
|
int datasize = (tgEnable ? 4096 : 1024);
|
||||||
int packetsize = datasize + sizeof(sls_detector_header);
|
int packetsize = datasize + sizeof(sls_detector_header);
|
||||||
int numPacketsPerFrame = (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[0];
|
||||||
int colLeft = top ? eiger_virtual_detPos[1] : eiger_virtual_detPos[1] + 1;
|
int colLeft = top ? eiger_virtual_detPos[1] : eiger_virtual_detPos[1] + 1;
|
||||||
int colRight = top ? eiger_virtual_detPos[1] + 1 : eiger_virtual_detPos[1];
|
int colRight = top ? eiger_virtual_detPos[1] + 1 : eiger_virtual_detPos[1];
|
||||||
int ntotpixels = 256 * 256 * 4;
|
|
||||||
|
int partialReadout = getPartialReadout();
|
||||||
|
if (partialReadout == -1) {
|
||||||
|
LOG(logERROR,
|
||||||
|
("partial readout is -1. Assuming no partial readout.\n"));
|
||||||
|
partialReadout = MAX_ROWS_PER_READOUT;
|
||||||
|
}
|
||||||
|
const int maxRows = MAX_ROWS_PER_READOUT;
|
||||||
|
const int packetsPerFrame =
|
||||||
|
(maxPacketsPerFrame * partialReadout) / maxRows;
|
||||||
|
|
||||||
|
|
||||||
LOG(logDEBUG1,
|
LOG(logDEBUG1,
|
||||||
(" dr:%d\n bytesperpixel:%f\n tgenable:%d\n datasize:%d\n "
|
(" dr:%d\n bytesperpixel:%f\n tgenable:%d\n datasize:%d\n "
|
||||||
"packetsize:%d\n numpackes:%d\n npixelsx:%d\n databytes:%d\n "
|
"packetsize:%d\n maxnumpackes:%d\n npixelsx:%d\n databytes:%d\n",
|
||||||
"ntotpixels:%d\n",
|
dr, bytesPerPixel, tgEnable, datasize, packetsize, maxPacketsPerFrame,
|
||||||
dr, bytesPerPixel, tgEnable, datasize, packetsize, numPacketsPerFrame,
|
npixelsx, databytes));
|
||||||
npixelsx, databytes, ntotpixels));
|
|
||||||
|
|
||||||
// Generate data
|
// Generate data
|
||||||
char imageData[databytes * 2];
|
char imageData[databytes * 2];
|
||||||
memset(imageData, 0, databytes * 2);
|
memset(imageData, 0, databytes * 2);
|
||||||
{
|
{
|
||||||
switch (dr) {
|
int npixels = NCHAN * NCHIP;
|
||||||
case 4:
|
const int pixelsPerPacket = (double)datasize / eiger_dynamicrange;
|
||||||
for (int i = 0; i < ntotpixels / 2; ++i) {
|
int pixelVal = 0;
|
||||||
|
if (dr == 4) {
|
||||||
|
npixels /= 2;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < npixels; ++i) {
|
||||||
|
if (i > 0 && i % pixelsPerPacket == 0) {
|
||||||
|
++pixelVal;
|
||||||
|
}
|
||||||
|
switch (dr) {
|
||||||
|
case 4:
|
||||||
*((uint8_t *)(imageData + i)) =
|
*((uint8_t *)(imageData + i)) =
|
||||||
eiger_virtual_test_mode
|
eiger_virtual_test_mode
|
||||||
? 0xEE
|
? 0xEE
|
||||||
: (uint8_t)(((2 * i & 0xF) << 4) | ((2 * i + 1) & 0xF));
|
: (uint8_t)(((2 * pixelVal & 0xF) << 4) | ((2 * pixelVal + 1) & 0xF));
|
||||||
}
|
break;
|
||||||
break;
|
case 8:
|
||||||
case 8:
|
|
||||||
for (int i = 0; i < ntotpixels; ++i) {
|
|
||||||
*((uint8_t *)(imageData + i)) =
|
*((uint8_t *)(imageData + i)) =
|
||||||
eiger_virtual_test_mode ? 0xFE : (uint8_t)i;
|
eiger_virtual_test_mode ? 0xFE : (uint8_t)pixelVal;
|
||||||
}
|
break;
|
||||||
break;
|
case 16:
|
||||||
case 16:
|
|
||||||
for (int i = 0; i < ntotpixels; ++i) {
|
|
||||||
*((uint16_t *)(imageData + i * sizeof(uint16_t))) =
|
*((uint16_t *)(imageData + i * sizeof(uint16_t))) =
|
||||||
eiger_virtual_test_mode ? 0xFFE : (uint16_t)i;
|
eiger_virtual_test_mode ? 0xFFE
|
||||||
}
|
: (uint16_t)pixelVal;
|
||||||
break;
|
break;
|
||||||
case 32:
|
case 32:
|
||||||
for (int i = 0; i < ntotpixels; ++i) {
|
|
||||||
*((uint32_t *)(imageData + i * sizeof(uint32_t))) =
|
*((uint32_t *)(imageData + i * sizeof(uint32_t))) =
|
||||||
eiger_virtual_test_mode ? 0xFFFFFE : (uint32_t)i;
|
eiger_virtual_test_mode ? 0xFFFFFE
|
||||||
|
: (uint32_t)pixelVal;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send data
|
// Send data
|
||||||
@ -2381,7 +2396,13 @@ void *start_timer(void *arg) {
|
|||||||
int srcOffset2 = npixelsx;
|
int srcOffset2 = npixelsx;
|
||||||
|
|
||||||
// loop packet
|
// loop packet
|
||||||
for (int i = 0; i != numPacketsPerFrame; ++i) {
|
for (int i = 0; i != maxPacketsPerFrame; ++i) {
|
||||||
|
|
||||||
|
// calculate for partial readout
|
||||||
|
const int startval = 0;
|
||||||
|
const int endval = startval + packetsPerFrame - 1;
|
||||||
|
|
||||||
|
|
||||||
// set header
|
// set header
|
||||||
char packetData[packetsize];
|
char packetData[packetsize];
|
||||||
memset(packetData, 0, packetsize);
|
memset(packetData, 0, packetsize);
|
||||||
@ -2443,13 +2464,15 @@ void *start_timer(void *arg) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (eiger_virtual_left_datastream) {
|
if (eiger_virtual_left_datastream && i >= startval && i <= endval) {
|
||||||
usleep(eiger_virtual_transmission_delay_left);
|
usleep(eiger_virtual_transmission_delay_left);
|
||||||
sendUDPPacket(0, packetData, packetsize);
|
sendUDPPacket(0, packetData, packetsize);
|
||||||
|
LOG(logDEBUG1, ("Sent left packet: %d\n", i));
|
||||||
}
|
}
|
||||||
if (eiger_virtual_right_datastream) {
|
if (eiger_virtual_right_datastream && i >= startval && i <= endval) {
|
||||||
usleep(eiger_virtual_transmission_delay_right);
|
usleep(eiger_virtual_transmission_delay_right);
|
||||||
sendUDPPacket(1, packetData2, packetsize);
|
sendUDPPacket(1, packetData2, packetsize);
|
||||||
|
LOG(logDEBUG1, ("Sent right packet: %d\n", i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LOG(logINFO, ("Sent frame: %d[%lld]\n", iframes,
|
LOG(logINFO, ("Sent frame: %d[%lld]\n", iframes,
|
||||||
|
@ -2358,20 +2358,9 @@ void *start_timer(void *arg) {
|
|||||||
// loop packet (128 packets)
|
// loop packet (128 packets)
|
||||||
for (int i = 0; i != maxPacketsPerFrame; ++i) {
|
for (int i = 0; i != maxPacketsPerFrame; ++i) {
|
||||||
|
|
||||||
// send out only the partial packets
|
const int startval =
|
||||||
if (partialReadout != MAX_ROWS_PER_READOUT) {
|
|
||||||
// get the mid point
|
|
||||||
const int startval =
|
|
||||||
(maxPacketsPerFrame / 2) - (packetsPerFrame / 2);
|
(maxPacketsPerFrame / 2) - (packetsPerFrame / 2);
|
||||||
const int endval = startval + packetsPerFrame - 1;
|
const int endval = startval + packetsPerFrame - 1;
|
||||||
LOG(logINFOBLUE,
|
|
||||||
("packetsperframe:%d startval:%d endval:%d'\n",
|
|
||||||
packetsPerFrame, startval, endval));
|
|
||||||
// skip sending out this packet
|
|
||||||
if (i < startval || i > endval) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
int pnum = i;
|
int pnum = i;
|
||||||
|
|
||||||
// first interface
|
// first interface
|
||||||
@ -2391,10 +2380,12 @@ void *start_timer(void *arg) {
|
|||||||
// fill data
|
// fill data
|
||||||
memcpy(packetData + sizeof(sls_detector_header),
|
memcpy(packetData + sizeof(sls_detector_header),
|
||||||
imageData + srcOffset, dataSize);
|
imageData + srcOffset, dataSize);
|
||||||
|
|
||||||
sendUDPPacket(0, packetData, packetsize);
|
|
||||||
srcOffset += dataSize;
|
srcOffset += dataSize;
|
||||||
LOG(logDEBUG1, ("Sent packet: %d [interface 0]\n", i));
|
|
||||||
|
if (i >= startval && i <= endval) {
|
||||||
|
sendUDPPacket(0, packetData, packetsize);
|
||||||
|
LOG(logDEBUG1, ("Sent packet: %d [interface 0]\n", i));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// second interface
|
// second interface
|
||||||
@ -2416,10 +2407,12 @@ void *start_timer(void *arg) {
|
|||||||
// fill data
|
// fill data
|
||||||
memcpy(packetData2 + sizeof(sls_detector_header),
|
memcpy(packetData2 + sizeof(sls_detector_header),
|
||||||
imageData + srcOffset2, dataSize);
|
imageData + srcOffset2, dataSize);
|
||||||
|
|
||||||
sendUDPPacket(1, packetData2, packetsize);
|
|
||||||
srcOffset2 += dataSize;
|
srcOffset2 += dataSize;
|
||||||
LOG(logDEBUG1, ("Sent packet: %d [interface 1]\n", pnum));
|
|
||||||
|
if (i >= startval && i <= endval) {
|
||||||
|
sendUDPPacket(1, packetData2, packetsize);
|
||||||
|
LOG(logDEBUG1, ("Sent packet: %d [interface 1]\n", pnum));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LOG(logINFO, ("Sent frame: %d\n", iframes));
|
LOG(logINFO, ("Sent frame: %d\n", iframes));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user