mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-26 00:00:02 +02:00
updated for partialread
This commit is contained in:
parent
5f8dc7a7f0
commit
f8b5795c29
@ -75,6 +75,10 @@ serialnumber (put)
|
||||
dbitpipeline
|
||||
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
|
||||
========================
|
||||
|
||||
|
@ -2306,55 +2306,70 @@ void *start_timer(void *arg) {
|
||||
int tgEnable = send_to_ten_gig;
|
||||
int datasize = (tgEnable ? 4096 : 1024);
|
||||
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 databytes = 256 * 256 * 2 * bytesPerPixel;
|
||||
int row = eiger_virtual_detPos[0];
|
||||
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 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,
|
||||
(" dr:%d\n bytesperpixel:%f\n tgenable:%d\n datasize:%d\n "
|
||||
"packetsize:%d\n numpackes:%d\n npixelsx:%d\n databytes:%d\n "
|
||||
"ntotpixels:%d\n",
|
||||
dr, bytesPerPixel, tgEnable, datasize, packetsize, numPacketsPerFrame,
|
||||
npixelsx, databytes, ntotpixels));
|
||||
"packetsize:%d\n maxnumpackes:%d\n npixelsx:%d\n databytes:%d\n",
|
||||
dr, bytesPerPixel, tgEnable, datasize, packetsize, maxPacketsPerFrame,
|
||||
npixelsx, databytes));
|
||||
|
||||
// Generate data
|
||||
char imageData[databytes * 2];
|
||||
memset(imageData, 0, databytes * 2);
|
||||
{
|
||||
switch (dr) {
|
||||
case 4:
|
||||
for (int i = 0; i < ntotpixels / 2; ++i) {
|
||||
int npixels = NCHAN * NCHIP;
|
||||
const int pixelsPerPacket = (double)datasize / eiger_dynamicrange;
|
||||
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)) =
|
||||
eiger_virtual_test_mode
|
||||
? 0xEE
|
||||
: (uint8_t)(((2 * i & 0xF) << 4) | ((2 * i + 1) & 0xF));
|
||||
}
|
||||
break;
|
||||
case 8:
|
||||
for (int i = 0; i < ntotpixels; ++i) {
|
||||
: (uint8_t)(((2 * pixelVal & 0xF) << 4) | ((2 * pixelVal + 1) & 0xF));
|
||||
break;
|
||||
case 8:
|
||||
*((uint8_t *)(imageData + i)) =
|
||||
eiger_virtual_test_mode ? 0xFE : (uint8_t)i;
|
||||
}
|
||||
break;
|
||||
case 16:
|
||||
for (int i = 0; i < ntotpixels; ++i) {
|
||||
eiger_virtual_test_mode ? 0xFE : (uint8_t)pixelVal;
|
||||
break;
|
||||
case 16:
|
||||
*((uint16_t *)(imageData + i * sizeof(uint16_t))) =
|
||||
eiger_virtual_test_mode ? 0xFFE : (uint16_t)i;
|
||||
}
|
||||
break;
|
||||
case 32:
|
||||
for (int i = 0; i < ntotpixels; ++i) {
|
||||
eiger_virtual_test_mode ? 0xFFE
|
||||
: (uint16_t)pixelVal;
|
||||
break;
|
||||
case 32:
|
||||
*((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
|
||||
@ -2381,7 +2396,13 @@ void *start_timer(void *arg) {
|
||||
int srcOffset2 = npixelsx;
|
||||
|
||||
// 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
|
||||
char packetData[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);
|
||||
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);
|
||||
sendUDPPacket(1, packetData2, packetsize);
|
||||
LOG(logDEBUG1, ("Sent right packet: %d\n", i));
|
||||
}
|
||||
}
|
||||
LOG(logINFO, ("Sent frame: %d[%lld]\n", iframes,
|
||||
|
@ -2358,20 +2358,9 @@ void *start_timer(void *arg) {
|
||||
// loop packet (128 packets)
|
||||
for (int i = 0; i != maxPacketsPerFrame; ++i) {
|
||||
|
||||
// send out only the partial packets
|
||||
if (partialReadout != MAX_ROWS_PER_READOUT) {
|
||||
// get the mid point
|
||||
const int startval =
|
||||
const int startval =
|
||||
(maxPacketsPerFrame / 2) - (packetsPerFrame / 2);
|
||||
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;
|
||||
}
|
||||
}
|
||||
const int endval = startval + packetsPerFrame - 1;
|
||||
int pnum = i;
|
||||
|
||||
// first interface
|
||||
@ -2391,10 +2380,12 @@ void *start_timer(void *arg) {
|
||||
// fill data
|
||||
memcpy(packetData + sizeof(sls_detector_header),
|
||||
imageData + srcOffset, dataSize);
|
||||
|
||||
sendUDPPacket(0, packetData, packetsize);
|
||||
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
|
||||
@ -2416,10 +2407,12 @@ void *start_timer(void *arg) {
|
||||
// fill data
|
||||
memcpy(packetData2 + sizeof(sls_detector_header),
|
||||
imageData + srcOffset2, dataSize);
|
||||
|
||||
sendUDPPacket(1, packetData2, packetsize);
|
||||
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));
|
||||
|
Loading…
x
Reference in New Issue
Block a user