diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2014-03-26 18:22:56 +0100 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2014-03-26 18:22:56 +0100 |
commit | 77b7ee920e74d73178254a8f6d0954df6bd57ee9 (patch) | |
tree | 46872cefa78bc0ec21152e8fe6df0ecc6325c3d5 /src/dabOutput/dabOutputZMQ.cpp | |
parent | 12f130a487a0119fa9f9fa2da33e0ab19b54cdda (diff) | |
download | dabmux-77b7ee920e74d73178254a8f6d0954df6bd57ee9.tar.gz dabmux-77b7ee920e74d73178254a8f6d0954df6bd57ee9.tar.bz2 dabmux-77b7ee920e74d73178254a8f6d0954df6bd57ee9.zip |
Change ZMQ output message format
Diffstat (limited to 'src/dabOutput/dabOutputZMQ.cpp')
-rw-r--r-- | src/dabOutput/dabOutputZMQ.cpp | 40 |
1 files changed, 37 insertions, 3 deletions
diff --git a/src/dabOutput/dabOutputZMQ.cpp b/src/dabOutput/dabOutputZMQ.cpp index cbb3445..ac26403 100644 --- a/src/dabOutput/dabOutputZMQ.cpp +++ b/src/dabOutput/dabOutputZMQ.cpp @@ -2,9 +2,11 @@ Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Her Majesty the Queen in Right of Canada (Communications Research Center Canada) - Copyright (C) 2013 Matthias P. Braendli + Copyright (C) 2013, 2014 Matthias P. Braendli http://mpb.li + http://opendigitalradio.org + ZeroMQ output. see www.zeromq.org for more info From the ZeroMQ manpage 'zmq': @@ -66,9 +68,40 @@ int DabOutputZMQ::Open(const char* endpoint) int DabOutputZMQ::Write(void* buffer, int size) { - int flags = 0; + int offset = 0; + + for (int i = 0; i < zmq_message_ix; i++) { + offset += zmq_message.buflen[i]; + } + + if (offset + size > NUM_FRAMES_PER_ZMQ_MESSAGE*6144) { + throw std::runtime_error("FAULT: invalid ETI frame size!"); + } + memcpy(zmq_message.buf + offset, buffer, size); + zmq_message.buflen[zmq_message_ix] = size; + zmq_message_ix++; + + if (zmq_message_ix == NUM_FRAMES_PER_ZMQ_MESSAGE) { + int full_length = 0; + + for (int i = 0; i < NUM_FRAMES_PER_ZMQ_MESSAGE; i++) { + full_length += zmq_message.buflen[i]; + } - return zmq_send(zmq_pub_sock_, buffer, size, flags); + zmq_message_ix = 0; + + const int flags = 0; + zmq_send(zmq_pub_sock_, + (uint8_t*)&zmq_message, + NUM_FRAMES_PER_ZMQ_MESSAGE * sizeof(*zmq_message.buflen) + + full_length, flags); + + for (int i = 0; i < NUM_FRAMES_PER_ZMQ_MESSAGE; i++) { + zmq_message.buflen[i] = -1; + } + } + + return size; } @@ -78,3 +111,4 @@ int DabOutputZMQ::Close() } #endif + |