From 0b7bc4a405ea4d6f24fade9420e9919420c64d8e Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Sun, 14 Sep 2014 00:05:51 +0200 Subject: Add little check for zeromq url syntax --- src/DabMod.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'src/DabMod.cpp') diff --git a/src/DabMod.cpp b/src/DabMod.cpp index 14c7c4b..7ee65dc 100644 --- a/src/DabMod.cpp +++ b/src/DabMod.cpp @@ -667,7 +667,13 @@ int main(int argc, char* argv[]) ret = -1; goto END_MAIN; #else - inputZeroMQReader.Open(inputName.substr(4)); + // The URL might start with zmq+tcp:// + if (inputName.substr(0, 4) == "zmq+") { + inputZeroMQReader.Open(inputName.substr(4)); + } + else { + inputZeroMQReader.Open(inputName); + } inputReader = &inputZeroMQReader; #endif } -- cgit v1.2.3 From ea6f1557a0dd686fd74020509bdaadf689dd1c76 Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Fri, 10 Oct 2014 12:11:31 +0000 Subject: Get compilation working on ARM --- configure.ac | 20 ++++++++++++++++++++ src/Buffer.cpp | 2 +- src/DabMod.cpp | 4 ++-- src/Flowgraph.cpp | 6 +++--- src/Makefile.am | 8 +++++++- src/Resampler.cpp | 6 +++--- 6 files changed, 36 insertions(+), 10 deletions(-) (limited to 'src/DabMod.cpp') diff --git a/configure.ac b/configure.ac index 9b8bcb7..07d6195 100644 --- a/configure.ac +++ b/configure.ac @@ -133,6 +133,26 @@ AC_COMPILE_IFELSE( [AC_MSG_RESULT([yes])], [AC_MSG_RESULT([no]) AC_DEFINE([M_PIl], [M_PI], [Replacing define])]) AC_LANG_POP([C++]) +# Check for SSE +AC_MSG_CHECKING(for SSE in current arch/CFLAGS) +AC_LINK_IFELSE([ +AC_LANG_PROGRAM([[ +#include +__m128 testfunc(float *a, float *b) { + return _mm_add_ps(_mm_loadu_ps(a), _mm_loadu_ps(b)); +} +]])], +[ +has_sse=yes +], +[ +has_sse=no +] +) +AC_MSG_RESULT($has_sse) + +AM_CONDITIONAL([HAVE_SSE], [test "x$has_sse" = "xyes"]) + AM_CONDITIONAL([IS_GIT_REPO], [test -d '.git']) AC_TYPE_SIGNAL diff --git a/src/Buffer.cpp b/src/Buffer.cpp index dff2623..aa0ef4c 100644 --- a/src/Buffer.cpp +++ b/src/Buffer.cpp @@ -26,7 +26,7 @@ #include #include #include -#ifdef HAVE_DECL__MM_MALLOC +#if HAVE_DECL__MM_MALLOC # include #else # define memalign(a, b) malloc(b) diff --git a/src/DabMod.cpp b/src/DabMod.cpp index 7ee65dc..67ad12d 100644 --- a/src/DabMod.cpp +++ b/src/DabMod.cpp @@ -56,11 +56,11 @@ #include #include -#ifdef HAVE_NETINET_IN_H +#if HAVE_NETINET_IN_H # include #endif -#ifdef HAVE_DECL__MM_MALLOC +#if HAVE_DECL__MM_MALLOC # include #else # define memalign(a, b) malloc(b) diff --git a/src/Flowgraph.cpp b/src/Flowgraph.cpp index 4e44f28..dd9c68b 100644 --- a/src/Flowgraph.cpp +++ b/src/Flowgraph.cpp @@ -23,10 +23,10 @@ #include "PcDebug.h" -#ifdef __ppc__ -# define memalign(a, b) malloc(b) -#else // !__ppc__ +#if HAVE_DECL__MM_MALLOC # include +#else +# define memalign(a, b) malloc(b) #endif #include #include diff --git a/src/Makefile.am b/src/Makefile.am index 3e851c4..f6102e9 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -34,6 +34,12 @@ else UHD_SOURCES = endif +if HAVE_SSE +SIMD_CFLAGS = -msse -msse2 +else +SIMD_CFLAGS = +endif + FFT_DIR=$(top_builddir)/lib/kiss_fft129 FFT_INC=-I$(FFT_DIR) -I$(FFT_DIR)/tools FFT_SRC=$(FFT_DIR)/kiss_fft.c $(FFT_DIR)/kiss_fft.h $(FFT_DIR)/tools/kiss_fftr.c $(FFT_DIR)/tools/kiss_fftr.h kiss_fftsimd.c kiss_fftsimd.h @@ -52,7 +58,7 @@ $(FFT_DIR): tar xzf $(top_srcdir)/lib/kiss_fft129.tar.gz -C $(top_builddir)/lib; \ fi -odr_dabmod_CPPFLAGS = -Wall $(FFT_INC) $(FFT_FLG) -msse -msse2 $(GITVERSION_FLAGS) +odr_dabmod_CPPFLAGS = -Wall $(FFT_INC) $(FFT_FLG) $(SIMD_CFLAGS) $(GITVERSION_FLAGS) odr_dabmod_LDADD = $(ZMQ_LIBS) odr_dabmod_SOURCES = DabMod.cpp \ PcDebug.h \ diff --git a/src/Resampler.cpp b/src/Resampler.cpp index 773b9cc..334be99 100644 --- a/src/Resampler.cpp +++ b/src/Resampler.cpp @@ -23,10 +23,10 @@ #include "PcDebug.h" -#ifdef __ppc__ -# define memalign(a, b) malloc(b) -#else // !__ppc__ +#if HAVE_DECL__MM_MALLOC # include +#else +# define memalign(a, b) malloc(b) #endif #include #include -- cgit v1.2.3 From 7f5faf87e6373d27ae6709a1185154ca8e98276b Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Sat, 1 Nov 2014 13:45:25 +0100 Subject: Add new ZeroMQ IQ output --- configure.ac | 14 +++++++---- src/DabMod.cpp | 33 ++++++++++++++++++++------ src/Makefile.am | 9 ++----- src/OutputZeroMQ.cpp | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++ src/OutputZeroMQ.h | 62 ++++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 167 insertions(+), 18 deletions(-) create mode 100644 src/OutputZeroMQ.cpp create mode 100644 src/OutputZeroMQ.h (limited to 'src/DabMod.cpp') diff --git a/configure.ac b/configure.ac index 2053c9c..7f7ad0a 100644 --- a/configure.ac +++ b/configure.ac @@ -74,6 +74,10 @@ AC_ARG_ENABLE([kiss_fft], AC_ARG_ENABLE([input_zeromq], AS_HELP_STRING([--enable-input-zeromq], [Enable ZeroMQ input])) +# ZeroMQ message IQ output +AC_ARG_ENABLE([output_zeromq], + AS_HELP_STRING([--enable-output-zeromq], [Enable ZeroMQ output])) + # UHD support control AC_ARG_ENABLE([output_uhd], [AS_HELP_STRING([--enable-output-uhd], [Enable UHD output])], @@ -91,7 +95,10 @@ echo "Checking input zeromq" AS_IF([test "x$enable_input_zeromq" = "xyes"], [AC_DEFINE(HAVE_INPUT_ZEROMQ, [1], [Define if ZeroMQ input is enabled]) , - AC_CHECK_LIB(zmq, zmq_init, ,[AC_MSG_ERROR([ZeroMQ libzmq is required])])]) + AC_CHECK_LIB(zmq, zmq_init, ZMQ_LIBS="-lzmq" ,[AC_MSG_ERROR([ZeroMQ libzmq is required])])]) +AS_IF([test "x$enable_output_zeromq" = "xyes"], + [AC_DEFINE(HAVE_OUTPUT_ZEROMQ, [1], [Define if ZeroMQ output is enabled]) , + AC_CHECK_LIB(zmq, zmq_init, ZMQ_LIBS="-lzmq" ,[AC_MSG_ERROR([ZeroMQ libzmq is required])])]) AS_IF([test "x$enable_debug" = "xno"], [OPTIM="-O2" DEBUG="" EXTRA="$EXTRA -DNDEBUG"], [OPTIM="-O0" DEBUG="-ggdb" EXTRA="$EXTRA"]) @@ -101,7 +108,6 @@ AS_IF([test "x$enable_prof" != "xno"], # Define conditionals for Makefile.am AM_CONDITIONAL([USE_KISS_FFT], [test "x$enable_fftw" = "xno"]) AM_CONDITIONAL([DEBUG], [test "x$enable_trace" = "xyes"]) -AM_CONDITIONAL([HAVE_INPUT_ZEROMQ_TEST], [test "x$enable_input_zeromq" = "xyes"]) AM_CONDITIONAL([IS_GIT_REPO], [test -d '.git']) # Defines for config.h @@ -116,7 +122,7 @@ AX_PTHREAD([], AC_MSG_ERROR([requires pthread])) AC_SUBST([CFLAGS], ["$OPTIM $DEBUG $EXTRA $FFTW_CFLAGS $PTHREAD_CFLAGS"]) AC_SUBST([CXXFLAGS], ["$OPTIM $DEBUG $EXTRA $FFTW_CFLAGS $PTHREAD_CFLAGS"]) -AC_SUBST([LIBS], ["$FFTW_LIBS $PTHREAD_LIBS"]) +AC_SUBST([LIBS], ["$FFTW_LIBS $PTHREAD_LIBS $ZMQ_LIBS"]) # Checks for UHD. AS_IF([test "x$enable_output_uhd" = "xyes"], @@ -199,7 +205,7 @@ echo "***********************************************" echo enabled="" disabled="" -for feat in debug prof trace fftw fft_simd output_uhd input_zeromq +for feat in debug prof trace fftw fft_simd output_uhd input_zeromq output_zeromq do eval var=\$enable_$feat AS_IF([test "x$var" = "xyes"], diff --git a/src/DabMod.cpp b/src/DabMod.cpp index 67ad12d..f27d720 100644 --- a/src/DabMod.cpp +++ b/src/DabMod.cpp @@ -38,6 +38,7 @@ #if defined(HAVE_OUTPUT_UHD) # include "OutputUHD.h" #endif +#include "OutputZeroMQ.h" #include "InputReader.h" #include "PcDebug.h" #include "TimestampDecoder.h" @@ -166,6 +167,7 @@ int main(int argc, char* argv[]) std::string inputTransport = "file"; std::string outputName; + int useZeroMQOutput = 0; int useFileOutput = 0; int useUHDOutput = 0; @@ -399,7 +401,7 @@ int main(int argc, char* argv[]) clockRate = pt.get("modulator.dac_clk_rate", (size_t)0); digitalgain = pt.get("modulator.digital_gain", digitalgain); outputRate = pt.get("modulator.rate", outputRate); - + // FIR Filter parameters: if (pt.get("firfilter.enabled", 0) == 1) { try { @@ -530,6 +532,12 @@ int main(int argc, char* argv[]) useUHDOutput = 1; } +#endif +#if defined(HAVE_OUTPUT_ZEROMQ) + else if (output_selected == "zmq") { + outputName = pt.get("zmqoutput.listen"); + useZeroMQOutput = 1; + } #endif else { std::cerr << "Error: Invalid output defined.\n"; @@ -612,7 +620,7 @@ int main(int argc, char* argv[]) goto END_MAIN; } - if (!useFileOutput && !useUHDOutput) { + if (!useFileOutput && !useUHDOutput && !useZeroMQOutput) { logger.level(error) << "Output not specified"; fprintf(stderr, "Must specify output !"); goto END_MAIN; @@ -623,8 +631,12 @@ int main(int argc, char* argv[]) fprintf(stderr, " Type: %s\n", inputTransport.c_str()); fprintf(stderr, " Source: %s\n", inputName.c_str()); fprintf(stderr, "Output\n"); + + if (useFileOutput) { + fprintf(stderr, " Name: %s\n", outputName.c_str()); + } #if defined(HAVE_OUTPUT_UHD) - if (useUHDOutput) { + else if (useUHDOutput) { fprintf(stderr, " UHD\n" " Device: %s\n" " Type: %s\n" @@ -633,12 +645,13 @@ int main(int argc, char* argv[]) outputuhd_conf.usrpType.c_str(), outputuhd_conf.masterClockRate); } - else if (useFileOutput) { -#else - if (useFileOutput) { #endif - fprintf(stderr, " Name: %s\n", outputName.c_str()); + else if (useZeroMQOutput) { + fprintf(stderr, " ZeroMQ\n" + " Listening on: %s\n", + outputName.c_str()); } + fprintf(stderr, " Sampling rate: "); if (outputRate > 1000) { if (outputRate > 1000000) { @@ -713,6 +726,12 @@ int main(int argc, char* argv[]) } } #endif + else if (useZeroMQOutput) { + /* We normalise the same way as for the UHD output */ + normalise = 1.0f/50000.0f; + + output = new OutputZeroMQ(outputName); + } flowgraph = new Flowgraph(); data.setLength(6144); diff --git a/src/Makefile.am b/src/Makefile.am index 6c83cb1..635a3d8 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -22,12 +22,6 @@ else GITVERSION_FLAGS = endif -if HAVE_INPUT_ZEROMQ_TEST -ZMQ_LIBS = -lzmq -else -ZMQ_LIBS = -endif - if HAVE_OUTPUT_UHD_TEST UHD_SOURCES = OutputUHD.cpp OutputUHD.h else @@ -76,7 +70,7 @@ endif odr_dabmod_CPPFLAGS = -Wall \ $(FFT_INC) $(FFT_FLG) $(SIMD_CFLAGS) $(GITVERSION_FLAGS) -odr_dabmod_LDADD = $(ZMQ_LIBS) $(FFT_LDADD) +odr_dabmod_LDADD = $(FFT_LDADD) odr_dabmod_SOURCES = DabMod.cpp \ PcDebug.h \ porting.c porting.h \ @@ -96,6 +90,7 @@ odr_dabmod_SOURCES = DabMod.cpp \ Flowgraph.cpp Flowgraph.h \ GainControl.cpp GainControl.h \ OutputMemory.cpp OutputMemory.h \ + OutputZeroMQ.cpp OutputZeroMQ.h \ TimestampDecoder.h TimestampDecoder.cpp \ $(UHD_SOURCES) \ ModOutput.cpp ModOutput.h \ diff --git a/src/OutputZeroMQ.cpp b/src/OutputZeroMQ.cpp new file mode 100644 index 0000000..0e759dd --- /dev/null +++ b/src/OutputZeroMQ.cpp @@ -0,0 +1,67 @@ +/* + Copyright (C) 2007, 2008, 2009, 2010, 2011 Her Majesty the Queen in + Right of Canada (Communications Research Center Canada) + + Copyright (C) 2014 + Matthias P. Braendli, matthias.braendli@mpb.li + + http://opendigitalradio.org + */ +/* + This file is part of ODR-DabMod. + + ODR-DabMod is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + ODR-DabMod is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with ODR-DabMod. If not, see . + */ + +#include "OutputZeroMQ.h" +#include "PcDebug.h" +#include +#include +#include + +#if defined(HAVE_OUTPUT_ZEROMQ) + +OutputZeroMQ::OutputZeroMQ(std::string endpoint, Buffer* dataOut) + : ModOutput(ModFormat(1), ModFormat(0)), + m_zmq_context(1), + m_zmq_pub_sock(m_zmq_context, ZMQ_PUB), + m_endpoint(endpoint) +{ + PDEBUG("OutputZeroMQ::OutputZeroMQ(%p) @ %p\n", dataOut, this); + + std::stringstream ss; + ss << "OutputZeroMQ(" << m_endpoint << ")"; + m_name = ss.str(); + + m_zmq_pub_sock.bind(m_endpoint.c_str()); +} + +OutputZeroMQ::~OutputZeroMQ() +{ + PDEBUG("OutputZeroMQ::~OutputZeroMQ() @ %p\n", this); +} + +int OutputZeroMQ::process(Buffer* dataIn, Buffer* dataOut) +{ + PDEBUG("OutputZeroMQ::process" + "(dataIn: %p, dataOut: %p)\n", + dataIn, dataOut); + + m_zmq_pub_sock.send(dataIn->getData(), dataIn->getLength()); + + return dataIn->getLength(); +} + +#endif // HAVE_OUTPUT_ZEROMQ_H + diff --git a/src/OutputZeroMQ.h b/src/OutputZeroMQ.h new file mode 100644 index 0000000..a3ac060 --- /dev/null +++ b/src/OutputZeroMQ.h @@ -0,0 +1,62 @@ +/* + Copyright (C) 2007, 2008, 2009, 2010, 2011 Her Majesty the Queen in + Right of Canada (Communications Research Center Canada) + + Copyright (C) 2014 + Matthias P. Braendli, matthias.braendli@mpb.li + + http://opendigitalradio.org + */ +/* + This file is part of ODR-DabMod. + + ODR-DabMod is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + ODR-DabMod is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with ODR-DabMod. If not, see . + */ + +#ifndef OUTPUT_ZEROMQ_H +#define OUTPUT_ZEROMQ_H + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#if defined(HAVE_OUTPUT_ZEROMQ) + +#include "ModOutput.h" +#include "zmq.hpp" + +class OutputZeroMQ : public ModOutput +{ + public: + OutputZeroMQ(std::string endpoint, Buffer* dataOut = NULL); + virtual ~OutputZeroMQ(); + virtual int process(Buffer* dataIn, Buffer* dataOut); + const char* name() { return m_name.c_str(); } + + protected: + zmq::context_t m_zmq_context; // handle for the zmq context + zmq::socket_t m_zmq_pub_sock; // handle for the zmq publisher socket + + std::string m_endpoint; // On which port to listen: e.g. + // tcp://*:58300 + + std::string m_name; + + Buffer* m_data_out; +}; + +#endif // HAVE_OUTPUT_ZEROMQ_H + +#endif // OUTPUT_ZEROMQ_H + -- cgit v1.2.3 From 014e35d73f80cef14895bc9c0dad5d35213e8aab Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Sat, 1 Nov 2014 16:48:13 +0100 Subject: Fix compilation without zmq output --- src/DabMod.cpp | 2 ++ src/OutputZeroMQ.h | 2 -- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'src/DabMod.cpp') diff --git a/src/DabMod.cpp b/src/DabMod.cpp index f27d720..a4ef228 100644 --- a/src/DabMod.cpp +++ b/src/DabMod.cpp @@ -726,12 +726,14 @@ int main(int argc, char* argv[]) } } #endif +#if defined(HAVE_OUTPUT_ZEROMQ) else if (useZeroMQOutput) { /* We normalise the same way as for the UHD output */ normalise = 1.0f/50000.0f; output = new OutputZeroMQ(outputName); } +#endif flowgraph = new Flowgraph(); data.setLength(6144); diff --git a/src/OutputZeroMQ.h b/src/OutputZeroMQ.h index a3ac060..1c48fe7 100644 --- a/src/OutputZeroMQ.h +++ b/src/OutputZeroMQ.h @@ -52,8 +52,6 @@ class OutputZeroMQ : public ModOutput // tcp://*:58300 std::string m_name; - - Buffer* m_data_out; }; #endif // HAVE_OUTPUT_ZEROMQ_H -- cgit v1.2.3 From cf46de6e9faa6628650217f53bae72059475c63e Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Sun, 2 Nov 2014 21:07:08 +0100 Subject: Change UHD txgain to double --- doc/example.ini | 2 +- src/DabMod.cpp | 4 ++-- src/OutputUHD.h | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'src/DabMod.cpp') diff --git a/doc/example.ini b/doc/example.ini index 9cdfe03..38a856c 100644 --- a/doc/example.ini +++ b/doc/example.ini @@ -107,7 +107,7 @@ filename=/dev/stdout ; ; Settings for a USRP B100: device=master_clock_rate=32768000,type=b100 -txgain=2 +txgain=2.0 ; Try first with small gain values ; Also set rate to 2048000 diff --git a/src/DabMod.cpp b/src/DabMod.cpp index a4ef228..b0a7a2c 100644 --- a/src/DabMod.cpp +++ b/src/DabMod.cpp @@ -259,7 +259,7 @@ int main(int argc, char* argv[]) break; case 'G': #if defined(HAVE_OUTPUT_UHD) - outputuhd_conf.txgain = (int)strtol(optarg, NULL, 10); + outputuhd_conf.txgain = strtod(optarg, NULL); #endif break; case 'l': @@ -453,7 +453,7 @@ int main(int argc, char* argv[]) "setting type in [uhd] device is deprecated !\n"; } - outputuhd_conf.txgain = pt.get("uhdoutput.txgain", 0); + outputuhd_conf.txgain = pt.get("uhdoutput.txgain", 0.0); outputuhd_conf.frequency = pt.get("uhdoutput.frequency", 0); std::string chan = pt.get("uhdoutput.channel", ""); diff --git a/src/OutputUHD.h b/src/OutputUHD.h index 3a047bf..ef9740d 100644 --- a/src/OutputUHD.h +++ b/src/OutputUHD.h @@ -166,7 +166,7 @@ struct OutputUHDConfig { long masterClockRate; unsigned sampleRate; double frequency; - int txgain; + double txgain; bool enableSync; bool muteNoTimestamps; -- cgit v1.2.3 From 8ba7e406e1d71460865c0eb493956520e2f35ae1 Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Fri, 14 Nov 2014 23:42:52 +0100 Subject: Update -V output --- src/DabMod.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/DabMod.cpp') diff --git a/src/DabMod.cpp b/src/DabMod.cpp index b0a7a2c..df7e2a1 100644 --- a/src/DabMod.cpp +++ b/src/DabMod.cpp @@ -138,8 +138,13 @@ void printVersion(FILE *out = stderr) { fprintf(out, "Welcome to %s %s, compiled at %s, %s\n\n", PACKAGE, VERSION, __DATE__, __TIME__); - fprintf(out, "ODR-DabMod is copyright (C) Her Majesty the Queen in Right of Canada,\n" - " 2009, 2010, 2011, 2012 Communications Research Centre (CRC).\n" + fprintf(out, + " ODR-DabMod is copyright (C) Her Majesty the Queen in Right of Canada,\n" + " 2009, 2010, 2011, 2012 Communications Research Centre (CRC),\n" + " and\n" + " Copyright (C) 2014 Matthias P. Braendli, matthias.braendli@mpb.li\n" + "\n" + " http://opendigitalradio.org\n" "\n" " This program is available free of charge and is licensed to you on a\n" " non-exclusive basis; you may not redistribute it.\n" @@ -152,8 +157,10 @@ void printVersion(FILE *out = stderr) " In no event shall CRC be LIABLE for any LOSS, DAMAGE or COST that may be\n" " incurred in connection with the use of this software.\n" "\n" +#if USE_KISS_FFT "ODR-DabMod makes use of the following open source packages:\n" " Kiss FFT v1.2.9 (Revised BSD) - http://kissfft.sourceforge.net/\n" +#endif ); } -- cgit v1.2.3 From ae4bed0f8ef4b7b318befe49336902deee983614 Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Fri, 14 Nov 2014 23:54:46 +0100 Subject: Print compile-time settings on startup --- src/DabMod.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/DabMod.cpp') diff --git a/src/DabMod.cpp b/src/DabMod.cpp index df7e2a1..1afdfb5 100644 --- a/src/DabMod.cpp +++ b/src/DabMod.cpp @@ -339,6 +339,30 @@ int main(int argc, char* argv[]) #endif << std::endl; + std::cerr << "Using FFT library " << +#if defined(USE_FFTW) + "FFTW" << +#endif +#if defined(USE_KISS_FFT) + "Kiss FFT" << +#endif +#if defined(USE_SIMD) + " (with fft_simd)" << +#endif + "\n"; + + std::cerr << "Compiled with features: " << +#if defined(HAVE_INPUT_ZEROMQ) + "input_zeromq " << +#endif +#if defined(HAVE_OUTPUT_UHD) + "output_uhd " << +#endif +#if defined(HAVE_OUTPUT_ZEROMQ) + "output_zeromq " << +#endif + "\n"; + if (use_configuration_file && use_configuration_cmdline) { fprintf(stderr, "Warning: configuration file and command line parameters are defined:\n\t" "Command line parameters override settings in the configuration file !\n"); @@ -578,6 +602,7 @@ int main(int argc, char* argv[]) outputuhd_conf.muteNoTimestamps = (pt.get("delaymanagement.mutenotimestamps", 0) == 1); #endif } + if (!rc) { logger.level(warn) << "No Remote-Control started"; rc = new RemoteControllerDummy(); -- cgit v1.2.3 From e2d7cfa4ed5d8bfd4a4798b5f653d0bc222d5bce Mon Sep 17 00:00:00 2001 From: "Matthias P. Braendli" Date: Fri, 14 Nov 2014 23:55:19 +0100 Subject: Interpret a single cmdline option as ini file name --- src/DabMod.cpp | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'src/DabMod.cpp') diff --git a/src/DabMod.cpp b/src/DabMod.cpp index 1afdfb5..91c0b9d 100644 --- a/src/DabMod.cpp +++ b/src/DabMod.cpp @@ -92,11 +92,11 @@ void printUsage(char* progName, FILE* out = stderr) #endif __DATE__, __TIME__); fprintf(out, "Usage with configuration file:\n"); - fprintf(out, "\t%s -C config_file.ini\n\n", progName); + fprintf(out, "\t%s [-C] config_file.ini\n\n", progName); fprintf(out, "Usage with command line options:\n"); fprintf(out, "\t%s" - " [input]" + " input" " (-f filename | -u uhddevice -F frequency) " " [-G txgain]" " [-o offset]" @@ -368,6 +368,18 @@ int main(int argc, char* argv[]) "Command line parameters override settings in the configuration file !\n"); } + // No argument given ? You can't be serious ! Show usage. + if (argc == 1) { + printUsage(argv[0]); + goto END_MAIN; + } + + // If only one argument is given, interpret as configuration file name + if (argc == 2) { + use_configuration_file = true; + configuration_file = argv[1]; + } + if (use_configuration_file) { // First read parameters from the file using boost::property_tree::ptree; @@ -624,7 +636,7 @@ int main(int argc, char* argv[]) } // Setting ETI input filename - if (inputName == "") { + if (use_configuration_cmdline && inputName == "") { if (optind < argc) { inputName = argv[optind++]; @@ -640,7 +652,7 @@ int main(int argc, char* argv[]) } // Checking unused arguments - if (optind != argc) { + if (use_configuration_cmdline && optind != argc) { fprintf(stderr, "Invalid arguments:"); while (optind != argc) { fprintf(stderr, " %s", argv[optind++]); -- cgit v1.2.3