diff --git a/CMakeLists.txt b/CMakeLists.txt index fdc30f5f7..ba2614716 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -36,8 +36,10 @@ endif (USE_TEXTCLIENT) if (USE_RECEIVER) add_subdirectory(slsReceiverSoftware) + add_subdirectory(manual/manual-api) endif (USE_RECEIVER) + if (USE_GUI) if (QT4_FOUND AND QWT_FOUND) add_subdirectory(slsDetectorGui) diff --git a/manual/manual-api/CMakeLists.txt b/manual/manual-api/CMakeLists.txt new file mode 100644 index 000000000..247fae56e --- /dev/null +++ b/manual/manual-api/CMakeLists.txt @@ -0,0 +1,17 @@ + +add_executable(slsMultiReceiver + mainReceiver.cpp +) +set_target_properties(slsMultiReceiver PROPERTIES + RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin +) +target_link_libraries(slsMultiReceiver + slsReceiverShared + pthread + zmq + rt +) + +install(TARGETS slsMultiReceiver + RUNTIME DESTINATION bin) + \ No newline at end of file diff --git a/manual/manual-api/mainReceiver.cpp b/manual/manual-api/mainReceiver.cpp index e39663d3d..f86381634 100644 --- a/manual/manual-api/mainReceiver.cpp +++ b/manual/manual-api/mainReceiver.cpp @@ -90,34 +90,30 @@ void AcquisitionFinished(uint64_t frames, void*p){ /** * Get Receiver Data Call back * Prints in different colors(for each receiver process) the different headers for each image call back. - * @param frameNumber frame number - * @param expLength real time exposure length (in 100ns) or sub frame number (Eiger 32 bit mode only) - * @param packetNumber number of packets caught for this frame - * @param bunchId bunch id from beamline - * @param timestamp time stamp in 10MHz clock (not implemented for most) - * @param modId module id (not implemented for most) - * @param xCoord x coordinates (detector id in 1D) - * @param yCoord y coordinates (not implemented) - * @param zCoord z coordinates (not implemented) - * @param debug debug values if any - * @param roundRNumber (not implemented) - * @param detType detector type see :: detectorType - * @param version version of standard header (structure format) + * @param metadata sls_receiver_header metadata * @param datapointer pointer to data * @param datasize data size in bytes. * @param p pointer to object */ -void GetData(uint64_t frameNumber, uint32_t expLength, uint32_t packetNumber, uint64_t bunchId, uint64_t timestamp, - uint16_t modId, uint16_t xCoord, uint16_t yCoord, uint16_t zCoord, uint32_t debug, uint16_t roundRNumber, uint8_t detType, uint8_t version, - char* datapointer, uint32_t datasize, void* p){ +void GetData(char* metadata, char* datapointer, uint32_t datasize, void* p){ + slsReceiverDefs::sls_receiver_header* header = (slsReceiverDefs::sls_receiver_header*)metadata; + slsReceiverDefs::sls_detector_header detectorHeader = header->detHeader; - PRINT_IN_COLOR (modId?modId:xCoord, - "#### %d GetData: ####\n" - "frameNumber: %llu\t\texpLength: %u\t\tpacketNumber: %u\t\tbunchId: %llu\t\ttimestamp: %llu\t\tmodId: %u\t\t" - "xCoord: %u\t\tyCoord: %u\t\tzCoord: %u\t\tdebug: %u\t\troundRNumber: %u\t\tdetType: %u\t\t" - "version: %u\t\tfirstbytedata: 0x%x\t\tdatsize: %u\n\n", - xCoord, frameNumber, expLength, packetNumber, bunchId, timestamp, modId, - xCoord, yCoord, zCoord, debug, roundRNumber, detType, version, + PRINT_IN_COLOR (detectorHeader.modId?detectorHeader.modId:detectorHeader.xCoord, + "#### %d GetData: ####\n" + "frameNumber: %llu\t\texpLength: %u\t\tpacketNumber: %u\t\tbunchId: %llu" + "\t\ttimestamp: %llu\t\tmodId: %u\t\t" + "xCoord: %u\t\tyCoord: %u\t\tzCoord: %u\t\tdebug: %u" + "\t\troundRNumber: %u\t\tdetType: %u\t\tversion: %u" + //"\t\tpacketsMask:%s" + "\t\tfirstbytedata: 0x%x\t\tdatsize: %u\n\n", + detectorHeader.xCoord, detectorHeader.frameNumber, + detectorHeader.expLength, detectorHeader.packetNumber, detectorHeader.bunchId, + detectorHeader.timestamp, detectorHeader.modId, + detectorHeader.xCoord, detectorHeader.yCoord, detectorHeader.zCoord, + detectorHeader.debug, detectorHeader.roundRNumber, + detectorHeader.detType, detectorHeader.version, + //header->packetsMask.to_string().c_str(), ((uint8_t)(*((uint8_t*)(datapointer)))), datasize); } @@ -126,36 +122,32 @@ void GetData(uint64_t frameNumber, uint32_t expLength, uint32_t packetNumber, ui /** * Get Receiver Data Call back (modified) * Prints in different colors(for each receiver process) the different headers for each image call back. - * @param frameNumber frame number - * @param expLength real time exposure length (in 100ns) or sub frame number (Eiger 32 bit mode only) - * @param packetNumber number of packets caught for this frame - * @param bunchId bunch id from beamline - * @param timestamp time stamp in 10MHz clock (not implemented for most) - * @param modId module id (not implemented for most) - * @param xCoord x coordinates (detector id in 1D) - * @param yCoord y coordinates (not implemented) - * @param zCoord z coordinates (not implemented) - * @param debug debug values if any - * @param roundRNumber (not implemented) - * @param detType detector type see :: detectorType - * @param version version of standard header (structure format) + * @param metadata sls_receiver_header metadata * @param datapointer pointer to data * @param datasize data size in bytes. * @param revDatasize new data size in bytes after the callback. * This will be the size written/streamed. (only smaller value is allowed). * @param p pointer to object */ -void GetData(uint64_t frameNumber, uint32_t expLength, uint32_t packetNumber, uint64_t bunchId, uint64_t timestamp, - uint16_t modId, uint16_t xCoord, uint16_t yCoord, uint16_t zCoord, uint32_t debug, uint16_t roundRNumber, uint8_t detType, uint8_t version, - char* datapointer, uint32_t &revDatasize, void* p){ +void GetData(char* metadata, char* datapointer, uint32_t &revDatasize, void* p){ + slsReceiverDefs::sls_receiver_header* header = (slsReceiverDefs::sls_receiver_header*)metadata; + slsReceiverDefs::sls_detector_header detectorHeader = header->detHeader; - PRINT_IN_COLOR (modId?modId:xCoord, + PRINT_IN_COLOR (detectorHeader.modId?detectorHeader.modId:detectorHeader.xCoord, "#### %d GetData: ####\n" - "frameNumber: %llu\t\texpLength: %u\t\tpacketNumber: %u\t\tbunchId: %llu\t\ttimestamp: %llu\t\tmodId: %u\t\t" - "xCoord: %u\t\tyCoord: %u\t\tzCoord: %u\t\tdebug: %u\t\troundRNumber: %u\t\tdetType: %u\t\t" - "version: %u\t\tfirstbytedata: 0x%x\t\tdatsize: %u\n\n", - xCoord, frameNumber, expLength, packetNumber, bunchId, timestamp, modId, - xCoord, yCoord, zCoord, debug, roundRNumber, detType, version, + "frameNumber: %llu\t\texpLength: %u\t\tpacketNumber: %u\t\tbunchId: %llu" + "\t\ttimestamp: %llu\t\tmodId: %u\t\t" + "xCoord: %u\t\tyCoord: %u\t\tzCoord: %u\t\tdebug: %u" + "\t\troundRNumber: %u\t\tdetType: %u\t\tversion: %u" + //"\t\tpacketsMask:%s" + "\t\tfirstbytedata: 0x%x\t\tdatsize: %u\n\n", + detectorHeader.xCoord, detectorHeader.frameNumber, + detectorHeader.expLength, detectorHeader.packetNumber, detectorHeader.bunchId, + detectorHeader.timestamp, detectorHeader.modId, + detectorHeader.xCoord, detectorHeader.yCoord, detectorHeader.zCoord, + detectorHeader.debug, detectorHeader.roundRNumber, + detectorHeader.detType, detectorHeader.version, + //header->packetsMask.to_string().c_str(), ((uint8_t)(*((uint8_t*)(datapointer)))), revDatasize); // if data is modified, eg ROI and size is reduced diff --git a/slsReceiverSoftware/src/main.cpp b/slsReceiverSoftware/src/main.cpp index 91c22db9a..dba13f4c2 100644 --- a/slsReceiverSoftware/src/main.cpp +++ b/slsReceiverSoftware/src/main.cpp @@ -40,19 +40,26 @@ void AcquisitionFinished(uint64_t frames, void*p){ } -void GetData(uint64_t frameNumber, uint32_t expLength, uint32_t packetNumber, uint64_t bunchId, uint64_t timestamp, - uint16_t modId, uint16_t xCoord, uint16_t yCoord, uint16_t zCoord, uint32_t debug, uint16_t roundRNumber, uint8_t detType, uint8_t version, - char* datapointer, uint32_t* datasize, void* p){ +void GetData(char* metadata, char* datapointer, uint32_t datasize, void* p){ + slsReceiverDefs::sls_receiver_header* header = (slsReceiverDefs::sls_receiver_header*)metadata; + slsReceiverDefs::sls_detector_header detectorHeader = header->detHeader; - PRINT_IN_COLOR (xCoord, + PRINT_IN_COLOR (detectorHeader.modId?detectorHeader.modId:detectorHeader.xCoord, "#### %d GetData: ####\n" - "frameNumber: %llu\t\texpLength: %u\t\tpacketNumber: %u\t\tbunchId: %llu\t\ttimestamp: %llu\t\tmodId: %u\t\t" - "xCoord: %u\t\tyCoord: %u\t\tzCoord: %u\t\tdebug: %u\t\troundRNumber: %u\t\tdetType: %u\t\t" - "version: %u\t\tfirstbytedata: 0x%x\t\tdatsize: %u\n\n", - xCoord, frameNumber, expLength, packetNumber, bunchId, timestamp, modId, - xCoord, yCoord, zCoord, debug, roundRNumber, detType, version, - ((uint8_t)(*((uint8_t*)(datapointer)))), *datasize); - + "frameNumber: %llu\t\texpLength: %u\t\tpacketNumber: %u\t\tbunchId: %llu" + "\t\ttimestamp: %llu\t\tmodId: %u\t\t" + "xCoord: %u\t\tyCoord: %u\t\tzCoord: %u\t\tdebug: %u" + "\t\troundRNumber: %u\t\tdetType: %u\t\tversion: %u" + //"\t\tpacketsMask:%s" + "\t\tfirstbytedata: 0x%x\t\tdatsize: %u\n\n", + detectorHeader.xCoord, detectorHeader.frameNumber, + detectorHeader.expLength, detectorHeader.packetNumber, detectorHeader.bunchId, + detectorHeader.timestamp, detectorHeader.modId, + detectorHeader.xCoord, detectorHeader.yCoord, detectorHeader.zCoord, + detectorHeader.debug, detectorHeader.roundRNumber, + detectorHeader.detType, detectorHeader.version, + //header->packetsMask.to_string().c_str(), + ((uint8_t)(*((uint8_t*)(datapointer)))), datasize); } */ @@ -121,13 +128,13 @@ int main(int argc, char *argv[]) { /** args to raw data ready callback are - framenum + sls_receiver_header frame metadata datapointer file descriptor guidatapointer (NULL, no data required) NEVER DELETE THE DATA POINTER REMEMBER THAT THE CALLBACK IS BLOCKING - registerCallBackRawDataReady(void (*func)(int, char*, FILE*, char*, void*),void *arg); + registerCallBackRawDataReady(void (*func)(char*, char*, uint32_t, void*),void *arg); */ //receiver->registerCallBackRawDataReady(rawDataReadyCallBack,NULL);