mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-13 13:27:14 +02:00
WIP
This commit is contained in:
@ -90,7 +90,7 @@ int eiger_virtual_transmission_delay_right=0;
|
|||||||
int eiger_virtual_transmission_delay_frame=0;
|
int eiger_virtual_transmission_delay_frame=0;
|
||||||
int eiger_virtual_transmission_flowcontrol_10g=0;
|
int eiger_virtual_transmission_flowcontrol_10g=0;
|
||||||
int eiger_virtual_activate=1;
|
int eiger_virtual_activate=1;
|
||||||
uint64_t eiger_virtual_startingframenumber = 0;
|
uint64_t eiger_virtual_startingframenumber = 1;
|
||||||
int eiger_virtual_detPos[2] = {0, 0};
|
int eiger_virtual_detPos[2] = {0, 0};
|
||||||
int eiger_virtual_test_mode = 0;
|
int eiger_virtual_test_mode = 0;
|
||||||
int eiger_virtual_quad_mode = 0;
|
int eiger_virtual_quad_mode = 0;
|
||||||
@ -1921,9 +1921,11 @@ void* start_timer(void* arg) {
|
|||||||
|
|
||||||
// Send data
|
// Send data
|
||||||
{
|
{
|
||||||
int frameNr = 1;
|
uint64_t frameNr = 0;
|
||||||
|
getStartingFrameNumber(&frameNr);
|
||||||
// loop over number of frames
|
// loop over number of frames
|
||||||
for(frameNr = 1; frameNr <= numFrames; ++frameNr ) {
|
int iframes = 0;
|
||||||
|
for(iframes = 0; iframes != numFrames; ++iframes ) {
|
||||||
|
|
||||||
usleep(eiger_virtual_transmission_delay_frame);
|
usleep(eiger_virtual_transmission_delay_frame);
|
||||||
|
|
||||||
@ -1931,6 +1933,7 @@ void* start_timer(void* arg) {
|
|||||||
virtual_stop = ComVirtual_getStop();
|
virtual_stop = ComVirtual_getStop();
|
||||||
//check if virtual_stop is high
|
//check if virtual_stop is high
|
||||||
if(virtual_stop == 1){
|
if(virtual_stop == 1){
|
||||||
|
setStartingFrameNumber(frameNr + iframes + 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1952,7 +1955,7 @@ void* start_timer(void* arg) {
|
|||||||
sls_detector_header* header = (sls_detector_header*)(packetData);
|
sls_detector_header* header = (sls_detector_header*)(packetData);
|
||||||
header->detType = 3;//(uint16_t)myDetectorType; updated when firmware updates
|
header->detType = 3;//(uint16_t)myDetectorType; updated when firmware updates
|
||||||
header->version = SLS_DETECTOR_HEADER_VERSION - 1;
|
header->version = SLS_DETECTOR_HEADER_VERSION - 1;
|
||||||
header->frameNumber = frameNr;
|
header->frameNumber = frameNr + iframes;
|
||||||
header->packetNumber = i;
|
header->packetNumber = i;
|
||||||
header->row = row;
|
header->row = row;
|
||||||
header->column = colLeft;
|
header->column = colLeft;
|
||||||
@ -1962,7 +1965,7 @@ void* start_timer(void* arg) {
|
|||||||
header = (sls_detector_header*)(packetData2);
|
header = (sls_detector_header*)(packetData2);
|
||||||
header->detType = 3;//(uint16_t)myDetectorType; updated when firmware updates
|
header->detType = 3;//(uint16_t)myDetectorType; updated when firmware updates
|
||||||
header->version = SLS_DETECTOR_HEADER_VERSION - 1;
|
header->version = SLS_DETECTOR_HEADER_VERSION - 1;
|
||||||
header->frameNumber = frameNr;
|
header->frameNumber = frameNr + iframes;
|
||||||
header->packetNumber = i;
|
header->packetNumber = i;
|
||||||
header->row = row;
|
header->row = row;
|
||||||
header->column = colRight;
|
header->column = colRight;
|
||||||
@ -2008,18 +2011,19 @@ void* start_timer(void* arg) {
|
|||||||
sendUDPPacket(1, packetData2, packetsize);
|
sendUDPPacket(1, packetData2, packetsize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LOG(logINFO, ("Sent frame: %d\n", frameNr));
|
LOG(logINFO, ("Sent frame: %d\n", iframes));
|
||||||
clock_gettime(CLOCK_REALTIME, &end);
|
clock_gettime(CLOCK_REALTIME, &end);
|
||||||
int64_t timeNs = ((end.tv_sec - begin.tv_sec) * 1E9 +
|
int64_t timeNs = ((end.tv_sec - begin.tv_sec) * 1E9 +
|
||||||
(end.tv_nsec - begin.tv_nsec));
|
(end.tv_nsec - begin.tv_nsec));
|
||||||
|
|
||||||
// sleep for (period - exptime)
|
// sleep for (period - exptime)
|
||||||
if (frameNr < numFrames) { // if there is a next frame
|
if (iframes < numFrames) { // if there is a next frame
|
||||||
if (periodNs > timeNs) {
|
if (periodNs > timeNs) {
|
||||||
usleep((periodNs - timeNs)/ 1000);
|
usleep((periodNs - timeNs)/ 1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
setStartingFrameNumber(frameNr + numFrames);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -560,16 +560,24 @@ int selectStoragecellStart(int pos) {
|
|||||||
|
|
||||||
int setStartingFrameNumber(uint64_t value) {
|
int setStartingFrameNumber(uint64_t value) {
|
||||||
LOG(logINFO, ("Setting starting frame number: %llu\n",(long long unsigned int)value));
|
LOG(logINFO, ("Setting starting frame number: %llu\n",(long long unsigned int)value));
|
||||||
|
#ifdef VIRTUAL
|
||||||
|
setU64BitReg(value, FRAME_NUMBER_LSB_REG, FRAME_NUMBER_MSB_REG);
|
||||||
|
#else
|
||||||
// decrement is for firmware
|
// decrement is for firmware
|
||||||
setU64BitReg(value - 1, FRAME_NUMBER_LSB_REG, FRAME_NUMBER_MSB_REG);
|
setU64BitReg(value - 1, FRAME_NUMBER_LSB_REG, FRAME_NUMBER_MSB_REG);
|
||||||
// need to set it twice for the firmware to catch
|
// need to set it twice for the firmware to catch
|
||||||
setU64BitReg(value - 1, FRAME_NUMBER_LSB_REG, FRAME_NUMBER_MSB_REG);
|
setU64BitReg(value - 1, FRAME_NUMBER_LSB_REG, FRAME_NUMBER_MSB_REG);
|
||||||
|
#endif
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int getStartingFrameNumber(uint64_t* retval) {
|
int getStartingFrameNumber(uint64_t* retval) {
|
||||||
|
#ifdef VIRTUAL
|
||||||
|
*retval = getU64BitReg(FRAME_NUMBER_LSB_REG, FRAME_NUMBER_MSB_REG);
|
||||||
|
#else
|
||||||
// increment is for firmware
|
// increment is for firmware
|
||||||
*retval = (getU64BitReg(GET_FRAME_NUMBER_LSB_REG, GET_FRAME_NUMBER_MSB_REG) + 1);
|
*retval = (getU64BitReg(GET_FRAME_NUMBER_LSB_REG, GET_FRAME_NUMBER_MSB_REG) + 1);
|
||||||
|
#endif
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1705,8 +1713,10 @@ void* start_timer(void* arg) {
|
|||||||
|
|
||||||
// Send data
|
// Send data
|
||||||
{
|
{
|
||||||
int frameNr = 0;
|
uint64_t frameNr = 0;
|
||||||
for(frameNr = 0; frameNr != numFrames; ++frameNr ) {
|
getStartingFrameNumber(&frameNr);
|
||||||
|
int iframes = 0;
|
||||||
|
for(iframes = 0; iframes != numFrames; ++iframes ) {
|
||||||
|
|
||||||
usleep(transmissionDelayUs);
|
usleep(transmissionDelayUs);
|
||||||
|
|
||||||
@ -1714,6 +1724,7 @@ void* start_timer(void* arg) {
|
|||||||
virtual_stop = ComVirtual_getStop();
|
virtual_stop = ComVirtual_getStop();
|
||||||
//check if virtual_stop is high
|
//check if virtual_stop is high
|
||||||
if(virtual_stop == 1){
|
if(virtual_stop == 1){
|
||||||
|
setStartingFrameNumber(frameNr + iframes + 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1734,7 +1745,7 @@ void* start_timer(void* arg) {
|
|||||||
sls_detector_header* header = (sls_detector_header*)(packetData);
|
sls_detector_header* header = (sls_detector_header*)(packetData);
|
||||||
header->detType = (uint16_t)myDetectorType;
|
header->detType = (uint16_t)myDetectorType;
|
||||||
header->version = SLS_DETECTOR_HEADER_VERSION - 1;
|
header->version = SLS_DETECTOR_HEADER_VERSION - 1;
|
||||||
header->frameNumber = frameNr;
|
header->frameNumber = frameNr + iframes;
|
||||||
header->packetNumber = i;
|
header->packetNumber = i;
|
||||||
header->modId = 0;
|
header->modId = 0;
|
||||||
header->row = detPos[2];
|
header->row = detPos[2];
|
||||||
@ -1769,18 +1780,19 @@ void* start_timer(void* arg) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
LOG(logINFO, ("Sent frame: %d\n", frameNr));
|
LOG(logINFO, ("Sent frame: %d\n", iframes));
|
||||||
clock_gettime(CLOCK_REALTIME, &end);
|
clock_gettime(CLOCK_REALTIME, &end);
|
||||||
int64_t timeNs = ((end.tv_sec - begin.tv_sec) * 1E9 +
|
int64_t timeNs = ((end.tv_sec - begin.tv_sec) * 1E9 +
|
||||||
(end.tv_nsec - begin.tv_nsec));
|
(end.tv_nsec - begin.tv_nsec));
|
||||||
|
|
||||||
// sleep for (period - exptime)
|
// sleep for (period - exptime)
|
||||||
if (frameNr < numFrames) { // if there is a next frame
|
if (iframes < numFrames) { // if there is a next frame
|
||||||
if (periodNs > timeNs) {
|
if (periodNs > timeNs) {
|
||||||
usleep((periodNs - timeNs)/ 1000);
|
usleep((periodNs - timeNs)/ 1000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
setStartingFrameNumber(frameNr + numFrames);
|
||||||
}
|
}
|
||||||
|
|
||||||
closeUDPSocket(0);
|
closeUDPSocket(0);
|
||||||
|
@ -862,7 +862,7 @@ TEST_CASE("clearbusy", "[.cmd][.new]") {
|
|||||||
REQUIRE_THROWS(proxy.Call("clearbusy", {}, -1, GET));
|
REQUIRE_THROWS(proxy.Call("clearbusy", {}, -1, GET));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("start", "[.cmd][.rx][.new]") {
|
TEST_CASE("start", "[.cmd][.new]") {
|
||||||
Detector det;
|
Detector det;
|
||||||
CmdProxy proxy(&det);
|
CmdProxy proxy(&det);
|
||||||
// PUT only command
|
// PUT only command
|
||||||
@ -885,7 +885,7 @@ TEST_CASE("start", "[.cmd][.rx][.new]") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("stop", "[.cmd][.rx][.new]") {
|
TEST_CASE("stop", "[.cmd][.new]") {
|
||||||
Detector det;
|
Detector det;
|
||||||
CmdProxy proxy(&det);
|
CmdProxy proxy(&det);
|
||||||
// PUT only command
|
// PUT only command
|
||||||
@ -913,7 +913,7 @@ TEST_CASE("stop", "[.cmd][.rx][.new]") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("status", "[.cmd][.rx][.new]") {
|
TEST_CASE("status", "[.cmd][.new]") {
|
||||||
Detector det;
|
Detector det;
|
||||||
CmdProxy proxy(&det);
|
CmdProxy proxy(&det);
|
||||||
auto prev_val = det.getExptime();
|
auto prev_val = det.getExptime();
|
||||||
@ -935,7 +935,35 @@ TEST_CASE("status", "[.cmd][.rx][.new]") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE("startingfnum", "[.cmd][.new]") {
|
||||||
|
Detector det;
|
||||||
|
CmdProxy proxy(&det);
|
||||||
|
auto det_type = det.getDetectorType().squash();
|
||||||
|
if (det_type == defs::EIGER || det_type == defs::JUNGFRAU) {
|
||||||
|
auto prev_sfnum = det.getStartingFrameNumber();
|
||||||
|
REQUIRE_THROWS(proxy.Call("startingfnum", {"0"}, -1, PUT));
|
||||||
|
{
|
||||||
|
std::ostringstream oss;
|
||||||
|
proxy.Call("startingfnum", {"3"}, -1, PUT, oss);
|
||||||
|
REQUIRE(oss.str() == "startingfnum 3\n");
|
||||||
|
}
|
||||||
|
{
|
||||||
|
std::ostringstream oss;
|
||||||
|
proxy.Call("startingfnum", {}, -1, GET, oss);
|
||||||
|
REQUIRE(oss.str() == "startingfnum 3\n");
|
||||||
|
}
|
||||||
|
{
|
||||||
|
std::ostringstream oss;
|
||||||
|
proxy.Call("startingfnum", {"1"}, -1, PUT, oss);
|
||||||
|
REQUIRE(oss.str() == "startingfnum 1\n");
|
||||||
|
}
|
||||||
|
for (int i = 0; i != det.size(); ++i) {
|
||||||
|
det.setStartingFrameNumber(prev_sfnum[i], {i});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
REQUIRE_THROWS(proxy.Call("startingfnum", {}, -1, GET));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user