diff --git a/examples/moench01_T1_lab.config b/examples/moench03_T1.config old mode 100755 new mode 100644 similarity index 87% rename from examples/moench01_T1_lab.config rename to examples/moench03_T1.config index 6140887b9..6bafc1813 --- a/examples/moench01_T1_lab.config +++ b/examples/moench03_T1.config @@ -1,4 +1,13 @@ -hostname bchip085+ +############################################# +### edit with hostname or IP address of your detector +############################################ +hostname bchip181+ +runclk 40 +adcclk 20 +dbitclk 40 + + + patword 0000 0000000000000000 patword 0001 0000000000000000 @@ -408,84 +417,80 @@ patnloop1 0 patloop2 0400 0400 patnloop2 0 patwait0 00aa -patwaittime0 40000 +patwaittime0 10000 patwait1 0400 patwaittime1 0 patwait2 0400 patwaittime2 0 -####mcp2011 -#0:rx_udpip 10.1.1.102 -#0:detectorip 10.1.1.19 -#0:rx_udpport 32410 -####gui listening to -#zmqip 129.129.202.131 -#zmqport 30001 -####data streaming out of -#rx_zmqip 10.1.2.103 -#rx_zmqport 30003 -#0:rx_hostname mpc2011 +#0:rx_tcpport 1977 -####mx-test-1 -0:rx_udpip 10.1.1.100 -0:detectorip 10.1.1.19 -0:rx_udpport 32410 -####gui listening to (on receiver pc) -zmqip 129.129.202.92 -zmqport 30001 -####data streaming out of -rx_zmqip 10.1.1.100 -rx_zmqport 30003 -0:rx_hostname pcmoench01 +############################################# +### edit with 10 Gbs IP of your server +############################################ +0:udp_dstip 10.1.2.102 +############################################# +### edit with any number in the subnet of your server (first 3 numbers as above) +############################################ +0:udp_srcip 10.1.2.19 + +0:udp_dstport 32410 +############################################# +### edit with 10 Gbs IP of your server +############################################ +#zmqip 129.129.202.110 +rx_zmqip 10.1.1.102 +rx_zmqport 30001 +############################################# +### edit with 1 Gbs IP of PC where you will run the GUI +############################################ +#zmqip 129.129.202.110 +#zmqport 50001 +############################################# +### edit with hostname or 1Gbs IP address of your server +############################################ +0:rx_hostname mpc2011 + +tengiga 1 + +#rx_datastream 1 +#rx_readfreq 1 - - - - - - - -#turn on datastream from commandline -rx_datastream 1 - -r_readfreq 1 - -#0:configuremac -1 -rx_datastream 1 - -r_readfreq 1 - - -dac:6 800 -dac:0 1300 -dac:4 1428 -dac:1 1000 -dac:7 900 -dac:3 680 -dac:2 1400 -dac:5 1200 +dac 6 800 +dac 0 1300 +dac 4 1428 +dac 1 1000 +dac 7 900 +dac 3 680 +dac 2 1400 +dac 5 1200 adcinvert 4a342593 samples 5000 -adcphase 90 -adcpipeline 15 +adcphase 30 deg +adcpipeline 14 adcreg 14 40 -powerchip 1 -vhighvoltage 90 -period 0.005 +frames 1000 +period 0.001 +############################################# +### edit with directory you want to write to +############################################ +fpath /tmp/ +fwrite 0 +romode analog +#rx_jsonaddheader frameMode +rx_jsonpara frameMode newpedestal +#rx_jsonaddheader detectorMode +rx_jsonpara detectorMode analog +#flags newpedestal +#flags analog - - -frames 100 -period 0.1 -outdir /scratch/ -enablefwrite 0 - - - +reg 0x5e 0x00010000 +#powerchip 1 +vhighvoltage 90 \ No newline at end of file diff --git a/slsSupportLib/include/UdpRxSocket.h b/slsSupportLib/include/UdpRxSocket.h index 7b3e3e2b0..e9013148d 100644 --- a/slsSupportLib/include/UdpRxSocket.h +++ b/slsSupportLib/include/UdpRxSocket.h @@ -9,14 +9,12 @@ this might be deprecated in the future */ -#include "container_utils.h" #include "genericSocket.h" #include "network_utils.h" #include "sls_detector_exceptions.h" #include #include #include -#include #include #include #include @@ -28,12 +26,12 @@ namespace sls { class UdpRxSocket { const ssize_t packet_size; - std::unique_ptr buff; - int sockfd = -1; + char *buff; + int fd = -1; public: UdpRxSocket(int port, ssize_t packet_size, const char *hostname = nullptr, - ssize_t kernel_rbuffer_size = 0) + ssize_t buffer_size = 0) : packet_size(packet_size) { /* hostname = nullptr -> wildcard */ @@ -50,11 +48,11 @@ class UdpRxSocket { throw RuntimeError("Failed at getaddrinfo with " + std::string(hostname)); } - sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol); - if (sockfd == -1) { + fd = socket(res->ai_family, res->ai_socktype, res->ai_protocol); + if (fd == -1) { throw RuntimeError("Failed to create UDP RX socket"); } - if (bind(sockfd, res->ai_addr, res->ai_addrlen) == -1) { + if (bind(fd, res->ai_addr, res->ai_addrlen) == -1) { throw RuntimeError("Failed to bind UDP RX socket"); } freeaddrinfo(res); @@ -62,19 +60,19 @@ class UdpRxSocket { // If we get a specified buffer size that is larger than the set one // we set it. Otherwise we leave it there since it could have been // set by the rx_udpsocksize command - if (kernel_rbuffer_size) { + if (buffer_size) { auto current = getBufferSize() / 2; - if (current < kernel_rbuffer_size) { - setBufferSize(kernel_rbuffer_size); - if (getBufferSize() / 2 < kernel_rbuffer_size) { + if (current < buffer_size) { + setBufferSize(buffer_size); + if (getBufferSize() / 2 < buffer_size) { FILE_LOG(logWARNING) << "Could not set buffer size. Got: " - << getBufferSize() / 2 << " instead of " - << kernel_rbuffer_size; + << getBufferSize() / 2 << " instead of " << buffer_size; } } } - buff = sls::make_unique(packet_size); + // Allocate at the end to avoid memory leak if we throw + buff = new char[packet_size]; } // Delegating constructor to allow drop in replacement for old socket class @@ -87,33 +85,35 @@ class UdpRxSocket { buf_size) {} ~UdpRxSocket() { - if (sockfd >= 0) - close(sockfd); + delete[] buff; + Shutdown(); } - UdpRxSocket(const UdpRxSocket &) = delete; - UdpRxSocket(UdpRxSocket &&) = delete; + const char *LastPacket() const noexcept { return buff; } + //constexpr + ssize_t getPacketSize() const noexcept { return packet_size; } - const char *LastPacket() const noexcept { return buff.get(); } - ssize_t getPacketSize() const noexcept { return packet_size; } - - bool ReceivePacket() noexcept { return ReceivePacket(buff.get()); } + bool ReceivePacket() noexcept { + auto bytes_received = + recvfrom(fd, buff, packet_size, 0, nullptr, nullptr); + return bytes_received == packet_size; + } bool ReceivePacket(char *dst) noexcept { auto bytes_received = - recvfrom(sockfd, dst, packet_size, 0, nullptr, nullptr); + recvfrom(fd, buff, packet_size, 0, nullptr, nullptr); return bytes_received == packet_size; } // Only for backwards compatibility this function will be removed during // refactoring of the receiver ssize_t ReceiveDataOnly(char *dst) { - auto r = recvfrom(sockfd, dst, packet_size, 0, nullptr, nullptr); + auto r = recvfrom(fd, dst, packet_size, 0, nullptr, nullptr); constexpr ssize_t eiger_header_packet = 40; // only detector that has this if (r == eiger_header_packet) { FILE_LOG(logWARNING) << "Got header pkg"; - r = recvfrom(sockfd, dst, packet_size, 0, nullptr, nullptr); + r = recvfrom(fd, dst, packet_size, 0, nullptr, nullptr); } return r; } @@ -121,7 +121,7 @@ class UdpRxSocket { ssize_t getBufferSize() const { uint64_t ret_size = 0; socklen_t optlen = sizeof(uint64_t); - if (getsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &ret_size, &optlen) == -1) + if (getsockopt(fd, SOL_SOCKET, SO_RCVBUF, &ret_size, &optlen) == -1) return -1; else return ret_size; @@ -131,22 +131,22 @@ class UdpRxSocket { ssize_t getActualUDPSocketBufferSize() const { return getBufferSize(); } // Only for backwards compatibility will be removed - void ShutDownSocket() { Close(); } + void ShutDownSocket() { Shutdown(); } void setBufferSize(ssize_t size) { socklen_t optlen = sizeof(size); - if (setsockopt(sockfd, SOL_SOCKET, SO_RCVBUF, &size, optlen)) { + if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &size, optlen)) { throw RuntimeError("Could not set socket buffer size"); } } - // Do we need this function or can we rely on scope? - void Close() { - if (sockfd >= 0) { - close(sockfd); - sockfd = -1; + void Shutdown() { + shutdown(fd, SHUT_RDWR); + if (fd >= 0) { + close(fd); + fd = -1; } } }; -} // namespace sls \ No newline at end of file +} // namespace sls