diff options
author | Matthias P. Braendli <matthias.braendli@mpb.li> | 2016-05-20 15:05:02 +0200 |
---|---|---|
committer | Matthias P. Braendli <matthias.braendli@mpb.li> | 2016-05-20 15:05:02 +0200 |
commit | d9ef93e7e8cc94da627f39f3c443b9a845ccecf4 (patch) | |
tree | 08f0ed87e8b88d70bacad136b62949378d40afd5 /src/OutputUHD.h | |
parent | 5d702c4fcfdfe56c0f33c10c76f35b1c36810096 (diff) | |
download | dabmod-d9ef93e7e8cc94da627f39f3c443b9a845ccecf4.tar.gz dabmod-d9ef93e7e8cc94da627f39f3c443b9a845ccecf4.tar.bz2 dabmod-d9ef93e7e8cc94da627f39f3c443b9a845ccecf4.zip |
Refactor OutputUHD, replace double buffering by queue
Diffstat (limited to 'src/OutputUHD.h')
-rw-r--r-- | src/OutputUHD.h | 33 |
1 files changed, 13 insertions, 20 deletions
diff --git a/src/OutputUHD.h b/src/OutputUHD.h index d55d38e..8cbfb3d 100644 --- a/src/OutputUHD.h +++ b/src/OutputUHD.h @@ -47,9 +47,8 @@ DESCRIPTION: #include <uhd/utils/thread_priority.hpp> #include <uhd/utils/safe_main.hpp> #include <uhd/usrp/multi_usrp.hpp> -#include <boost/thread/thread.hpp> -#include <boost/thread/barrier.hpp> -#include <list> +#include <boost/thread.hpp> +#include <deque> #include <memory> #include <string> @@ -58,6 +57,7 @@ DESCRIPTION: #include "EtiReader.h" #include "TimestampDecoder.h" #include "RemoteControl.h" +#include "ThreadsafeQueue.h" #include <stdio.h> #include <sys/types.h> @@ -73,13 +73,19 @@ DESCRIPTION: // frames are too far in the future #define TIMESTAMP_MARGIN_FUTURE 0.5 +// Maximum number of frames that can wait in uwd.frames +#define FRAMES_MAX_SIZE 2 + typedef std::complex<float> complexf; +// Each frame contains one OFDM frame, and its +// associated timestamp struct UHDWorkerFrameData { // Buffer holding frame data - void* buf; + std::vector<uint8_t> buf; - // Full timestamp + // A full timestamp contains a TIST according to standard + // and time information within MNSC with tx_second. struct frame_timestamp ts; }; @@ -102,20 +108,13 @@ struct UHDWorkerData { #endif unsigned sampleRate; - // Double buffering between the two threads - // Each buffer contains one OFDM frame, and it's - // associated timestamp - // A full timestamp contains a TIST according to standard - // and time information within MNSC with tx_second. bool sourceContainsTimestamp; // When working with timestamps, mute the frames that // do not have a timestamp bool muteNoTimestamps; - struct UHDWorkerFrameData frame0; - struct UHDWorkerFrameData frame1; - size_t bufsize; // in bytes + ThreadsafeQueue<UHDWorkerFrameData> frames; // If we want to verify loss of refclk bool check_refclk_loss; @@ -128,9 +127,6 @@ struct UHDWorkerData { // muting set by remote control bool muting; - // A barrier to synchronise the two threads - std::shared_ptr<boost::barrier> sync_barrier; - // What to do when the reference clock PLL loses lock refclk_lock_loss_behaviour_t refclk_lock_loss_behaviour; @@ -234,9 +230,7 @@ class OutputUHD: public ModOutput, public RemoteControllable { const char* name() { return "OutputUHD"; } - void setETIReader(EtiReader *etiReader) { - myEtiReader = etiReader; - } + void setETIReader(EtiReader *etiReader); /*********** REMOTE CONTROL ***************/ /* virtual void enrol_at(BaseRemoteController& controller) @@ -264,7 +258,6 @@ class OutputUHD: public ModOutput, public RemoteControllable { bool first_run; bool gps_fix_verified; struct UHDWorkerData uwd; - int activebuffer; private: // Resize the internal delay buffer according to the dabMode and |