diff options
-rw-r--r-- | src/DabMod.cpp | 15 | ||||
-rw-r--r-- | src/FrameMultiplexer.cpp | 4 | ||||
-rw-r--r-- | src/FrameMultiplexer.h | 10 |
3 files changed, 19 insertions, 10 deletions
diff --git a/src/DabMod.cpp b/src/DabMod.cpp index dfefb53..b6f2dee 100644 --- a/src/DabMod.cpp +++ b/src/DabMod.cpp @@ -36,6 +36,7 @@ #include "InputMemory.h" #include "OutputFile.h" #include "FormatConverter.h" +#include "FrameMultiplexer.h" #if defined(HAVE_OUTPUT_UHD) # include "OutputUHD.h" #endif @@ -534,17 +535,19 @@ run_modulator_state_t run_modulator(modulator_data& m) running = 0; ret = run_modulator_state_t::normal_end; } - } catch (zmq_input_overflow& e) { + } + catch (const zmq_input_overflow& e) { // The ZeroMQ input has overflowed its buffer etiLog.level(warn) << e.what(); ret = run_modulator_state_t::again; - } catch (std::out_of_range& e) { - // One of the DSP blocks has detected an invalid change - // or value in some settings. This can be due to a multiplex - // reconfiguration. + } + catch (const FrameMultiplexerError& e) { + // The FrameMultiplexer saw an error or a change in the size of a + // subchannel. This can be due to a multiplex reconfiguration. etiLog.level(warn) << e.what(); ret = run_modulator_state_t::reconfigure; - } catch (std::exception& e) { + } + catch (const std::exception& e) { etiLog.level(error) << "Exception caught: " << e.what(); ret = run_modulator_state_t::failure; } diff --git a/src/FrameMultiplexer.cpp b/src/FrameMultiplexer.cpp index 4cee0b2..5dc6dca 100644 --- a/src/FrameMultiplexer.cpp +++ b/src/FrameMultiplexer.cpp @@ -74,7 +74,7 @@ int FrameMultiplexer::process(std::vector<Buffer*> dataIn, Buffer* dataOut) // Write subchannel const auto subchannels = m_etiSource.getSubchannels(); if (subchannels.size() != dataIn.size() - 1) { - throw std::out_of_range( + throw FrameMultiplexerError( "FrameMultiplexer detected subchannel size change from " + std::to_string(dataIn.size() - 1) + " to " + std::to_string(subchannels.size())); @@ -82,7 +82,7 @@ int FrameMultiplexer::process(std::vector<Buffer*> dataIn, Buffer* dataOut) auto subchannel = subchannels.begin(); while (in != dataIn.end()) { if ((*subchannel)->framesizeCu() * 8 != (*in)->getLength()) { - throw std::out_of_range( + throw FrameMultiplexerError( "FrameMultiplexer detected invalid subchannel size! " + std::to_string((*subchannel)->framesizeCu() * 8) + " != " + std::to_string((*in)->getLength())); diff --git a/src/FrameMultiplexer.h b/src/FrameMultiplexer.h index 680cdc7..4d68d88 100644 --- a/src/FrameMultiplexer.h +++ b/src/FrameMultiplexer.h @@ -38,12 +38,18 @@ #include <sys/types.h> +class FrameMultiplexerError : public std::runtime_error { + public: + FrameMultiplexerError(const char* msg) : + std::runtime_error(msg) {} + FrameMultiplexerError(const std::string& msg) : + std::runtime_error(msg) {} +}; class FrameMultiplexer : public ModMux { public: - FrameMultiplexer( - const EtiSource& etiSource); + FrameMultiplexer(const EtiSource& etiSource); int process(std::vector<Buffer*> dataIn, Buffer* dataOut); const char* name() { return "FrameMultiplexer"; } |