updated for partialread

This commit is contained in:
maliakal_d 2021-08-16 16:34:11 +02:00
parent 5f8dc7a7f0
commit f8b5795c29
3 changed files with 70 additions and 50 deletions

View File

@ -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
======================== ========================

View File

@ -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,

View File

@ -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));