Restructure: Move sdr from common code to 'libsdr'

This commit is contained in:
Andreas Eversberg 2017-11-17 22:51:18 +01:00
parent 45a5568f70
commit 1650cc5ad2
29 changed files with 207 additions and 84 deletions

1
.gitignore vendored
View File

@ -38,6 +38,7 @@ src/libwave/libwave.a
src/libfft/libfft.a
src/libmncc/libmncc.a
src/libsound/libsound.a
src/libsdr/libsdr.a
src/common/libcommon.a
src/common/libmobile.a
src/anetz/libgermanton.a

View File

@ -93,6 +93,7 @@ AC_OUTPUT(
src/libfft/Makefile
src/libmncc/Makefile
src/libsound/Makefile
src/libsdr/Makefile
src/common/Makefile
src/anetz/Makefile
src/bnetz/Makefile

View File

@ -1,3 +1,41 @@
AUTOMAKE_OPTIONS = foreign
SUBDIRS = libsound libimage libcompandor libgoertzel libjitter libsquelch libhagelbarger libdtmf libtimer libsamplerate libscrambler libemphasis libfsk libfm libfilter libwave libfft libmncc common anetz bnetz cnetz nmt amps tacs jtacs r2000 tv test
SUBDIRS = \
libimage \
libcompandor \
libgoertzel \
libjitter \
libsquelch \
libhagelbarger \
libdtmf \
libtimer \
libsamplerate \
libscrambler \
libemphasis \
libfsk \
libfm \
libfilter \
libwave \
libfft \
libmncc \
libsound
if HAVE_SDR
SUBDIRS += \
libsdr
endif
SUBDIRS += \
common \
anetz \
bnetz \
cnetz \
nmt \
amps \
tacs \
jtacs \
r2000 \
tv \
test

View File

@ -34,10 +34,8 @@ amps_LDADD = \
$(top_builddir)/src/libtimer/libtimer.a \
$(top_builddir)/src/libsamplerate/libsamplerate.a \
$(top_builddir)/src/libemphasis/libemphasis.a \
$(top_builddir)/src/libfm/libfm.a \
$(top_builddir)/src/libfilter/libfilter.a \
$(top_builddir)/src/libwave/libwave.a \
$(top_builddir)/src/libfft/libfft.a \
$(top_builddir)/src/libmncc/libmncc.a \
$(top_builddir)/src/libsound/libsound.a \
$(ALSA_LIBS) \
@ -45,3 +43,10 @@ amps_LDADD = \
$(SOAPY_LIBS) \
-lm
if HAVE_SDR
amps_LDADD += \
$(top_builddir)/src/libsdr/libsdr.a \
$(top_builddir)/src/libfft/libfft.a \
$(top_builddir)/src/libfm/libfm.a
endif

View File

@ -26,10 +26,8 @@ anetz_LDADD = \
$(top_builddir)/src/libtimer/libtimer.a \
$(top_builddir)/src/libsamplerate/libsamplerate.a \
$(top_builddir)/src/libemphasis/libemphasis.a \
$(top_builddir)/src/libfm/libfm.a \
$(top_builddir)/src/libfilter/libfilter.a \
$(top_builddir)/src/libwave/libwave.a \
$(top_builddir)/src/libfft/libfft.a \
$(top_builddir)/src/libmncc/libmncc.a \
$(top_builddir)/src/libsound/libsound.a \
$(ALSA_LIBS) \
@ -37,3 +35,10 @@ anetz_LDADD = \
$(SOAPY_LIBS) \
-lm
if HAVE_SDR
anetz_LDADD += \
$(top_builddir)/src/libsdr/libsdr.a \
$(top_builddir)/src/libfft/libfft.a \
$(top_builddir)/src/libfm/libfm.a
endif

View File

@ -22,10 +22,8 @@ bnetz_LDADD = \
$(top_builddir)/src/libsamplerate/libsamplerate.a \
$(top_builddir)/src/libemphasis/libemphasis.a \
$(top_builddir)/src/libfsk/libfsk.a \
$(top_builddir)/src/libfm/libfm.a \
$(top_builddir)/src/libfilter/libfilter.a \
$(top_builddir)/src/libwave/libwave.a \
$(top_builddir)/src/libfft/libfft.a \
$(top_builddir)/src/libmncc/libmncc.a \
$(top_builddir)/src/libsound/libsound.a \
$(ALSA_LIBS) \
@ -33,3 +31,10 @@ bnetz_LDADD = \
$(SOAPY_LIBS) \
-lm
if HAVE_SDR
bnetz_LDADD += \
$(top_builddir)/src/libsdr/libsdr.a \
$(top_builddir)/src/libfft/libfft.a \
$(top_builddir)/src/libfm/libfm.a
endif

View File

@ -25,10 +25,8 @@ cnetz_LDADD = \
$(top_builddir)/src/libsamplerate/libsamplerate.a \
$(top_builddir)/src/libscrambler/libscrambler.a \
$(top_builddir)/src/libemphasis/libemphasis.a \
$(top_builddir)/src/libfm/libfm.a \
$(top_builddir)/src/libfilter/libfilter.a \
$(top_builddir)/src/libwave/libwave.a \
$(top_builddir)/src/libfft/libfft.a \
$(top_builddir)/src/libmncc/libmncc.a \
$(top_builddir)/src/libsound/libsound.a \
$(ALSA_LIBS) \
@ -36,3 +34,10 @@ cnetz_LDADD = \
$(SOAPY_LIBS) \
-lm
if HAVE_SDR
cnetz_LDADD += \
$(top_builddir)/src/libsdr/libsdr.a \
$(top_builddir)/src/libfft/libfft.a \
$(top_builddir)/src/libfm/libfm.a
endif

View File

@ -1,4 +1,4 @@
AM_CPPFLAGS = -Wall -Wextra -g $(all_includes) $(GRAPHICSMAGICK_CFLAGS) $(IMAGEMAGICK_CFLAGS) $(UHD_CFLAGS) $(SOAPY_CFLAGS)
AM_CPPFLAGS = -Wall -Wextra -g $(all_includes)
noinst_LIBRARIES = libcommon.a libmobile.a
@ -16,25 +16,5 @@ libmobile_a_SOURCES = \
if HAVE_SDR
AM_CPPFLAGS += -DHAVE_SDR
libcommon_a_SOURCES += \
sdr_config.c \
sdr.c \
display_iq.c \
display_spectrum.c
endif
if HAVE_UHD
AM_CPPFLAGS += -DHAVE_UHD
libcommon_a_SOURCES += \
uhd.c
endif
if HAVE_SOAPY
AM_CPPFLAGS += -DHAVE_SOAPY
libcommon_a_SOURCES += \
soapy.c
endif

View File

@ -39,8 +39,8 @@
#include "../libmncc/mncc_sock.h"
#include "../libmncc/mncc_cross.h"
#ifdef HAVE_SDR
#include "sdr.h"
#include "sdr_config.h"
#include "../libsdr/sdr.h"
#include "../libsdr/sdr_config.h"
#endif
static int got_init = 0;

View File

@ -1,6 +1,6 @@
#include "../libsound/sound.h"
#ifdef HAVE_SDR
#include "sdr.h"
#include "../libsdr/sdr.h"
#endif
#include "../libwave/wave.h"
#include "../libsamplerate/samplerate.h"

View File

@ -20,10 +20,8 @@ jtacs_LDADD = \
$(top_builddir)/src/libtimer/libtimer.a \
$(top_builddir)/src/libsamplerate/libsamplerate.a \
$(top_builddir)/src/libemphasis/libemphasis.a \
$(top_builddir)/src/libfm/libfm.a \
$(top_builddir)/src/libfilter/libfilter.a \
$(top_builddir)/src/libwave/libwave.a \
$(top_builddir)/src/libfft/libfft.a \
$(top_builddir)/src/libmncc/libmncc.a \
$(top_builddir)/src/libsound/libsound.a \
$(ALSA_LIBS) \
@ -31,3 +29,10 @@ jtacs_LDADD = \
$(SOAPY_LIBS) \
-lm
if HAVE_SDR
jtacs_LDADD += \
$(top_builddir)/src/libsdr/libsdr.a \
$(top_builddir)/src/libfft/libfft.a \
$(top_builddir)/src/libfm/libfm.a
endif

View File

@ -1,4 +1,4 @@
AM_CPPFLAGS = -Wall -Wextra -g $(all_includes)
AM_CPPFLAGS = -Wall -Wextra -g $(all_includes) $(GRAPHICSMAGICK_CFLAGS) $(IMAGEMAGICK_CFLAGS)
noinst_LIBRARIES = libimage.a

26
src/libsdr/Makefile.am Normal file
View File

@ -0,0 +1,26 @@
AM_CPPFLAGS = -Wall -Wextra -g $(all_includes)
noinst_LIBRARIES = libsdr.a
libsdr_a_SOURCES = \
dd sdr_config.c \
sdr.c \
display_iq.c \
display_spectrum.c
AM_CPPFLAGS += -DHAVE_SDR
if HAVE_UHD
AM_CPPFLAGS += -DHAVE_UHD
libsdr_a_SOURCES += \
uhd.c
endif
if HAVE_SOAPY
AM_CPPFLAGS += -DHAVE_SOAPY
libsdr_a_SOURCES += \
soapy.c
endif

View File

@ -23,8 +23,8 @@
#include <math.h>
#include <pthread.h>
#include <stdlib.h>
#include "sample.h"
#include "sender.h"
#include "../common/sample.h"
#include "../common/sender.h"
/* must be odd value! */
#define SIZE 23

View File

@ -22,8 +22,8 @@
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "sample.h"
#include "sender.h"
#include "../common/sample.h"
#include "../common/sender.h"
#include "../libfft/fft.h"
#define HEIGHT 20

View File

@ -29,10 +29,10 @@ enum paging_signal;
#define __USE_GNU
#include <pthread.h>
#include <unistd.h>
#include "sample.h"
#include "../common/sample.h"
#include "../libfm/fm.h"
#include "../libtimer/timer.h"
#include "sender.h"
#include "../common/sender.h"
#include "sdr_config.h"
#include "sdr.h"
#ifdef HAVE_UHD
@ -41,7 +41,7 @@ enum paging_signal;
#ifdef HAVE_SOAPY
#include "soapy.h"
#endif
#include "debug.h"
#include "../common/debug.h"
/* enable to debug buffer handling */
//#define DEBUG_BUFFER
@ -52,6 +52,8 @@ enum paging_signal;
/* usable bandwidth of IQ rate, because no filter is perfect */
#define USABLE_BANDWIDTH 0.75
int sdr_rx_overflow = 0;
typedef struct sdr_thread {
int use;
volatile int running, exit; /* flags to control exit of threads */
@ -399,17 +401,6 @@ static void *sdr_write_child(void *arg)
while (sdr->thread_write.running) {
/* write to SDR */
fill = (sdr->thread_write.in - sdr->thread_write.out + sdr->thread_write.buffer_size) % sdr->thread_write.buffer_size;
if (fill > sdr->thread_write.max_fill)
sdr->thread_write.max_fill = fill;
if (sdr->thread_write.max_fill_timer == 0.0)
sdr->thread_write.max_fill_timer = get_time();
if (get_time() - sdr->thread_write.max_fill_timer > 1.0) {
double delay;
delay = (double)sdr->thread_write.max_fill / 2.0 / (double)sdr->samplerate;
sdr->thread_write.max_fill = 0;
sdr->thread_write.max_fill_timer += 1.0;
PDEBUG(DSDR, DEBUG_DEBUG, "write delay = %.3f ms\n", delay * 1000.0);
}
num = fill / 2;
if (num) {
#ifdef DEBUG_BUFFER
@ -668,9 +659,24 @@ int sdr_write(void *inst, sample_t **samples, uint8_t **power, int num, enum pag
if (sdr->threads) {
/* store data towards SDR in ring buffer */
int space, in;
int fill, space, in;
fill = (sdr->thread_write.in - sdr->thread_write.out + sdr->thread_write.buffer_size) % sdr->thread_write.buffer_size;
space = (sdr->thread_write.out - sdr->thread_write.in - 2 + sdr->thread_write.buffer_size) % sdr->thread_write.buffer_size;
/* debug fill level */
if (fill > sdr->thread_write.max_fill)
sdr->thread_write.max_fill = fill;
if (sdr->thread_write.max_fill_timer == 0.0)
sdr->thread_write.max_fill_timer = get_time();
if (get_time() - sdr->thread_write.max_fill_timer > 1.0) {
double delay;
delay = (double)sdr->thread_write.max_fill / 2.0 / (double)sdr->samplerate;
sdr->thread_write.max_fill = 0;
sdr->thread_write.max_fill_timer += 1.0;
PDEBUG(DSDR, DEBUG_DEBUG, "write delay = %.3f ms\n", delay * 1000.0);
}
if (space < num * 2) {
PDEBUG(DSDR, DEBUG_ERROR, "Write SDR buffer overflow!\n");
num = space / 2;
@ -725,6 +731,8 @@ int sdr_read(void *inst, sample_t **samples, int num, int channels, double *rf_l
int fill, out;
fill = (sdr->thread_read.in - sdr->thread_read.out + sdr->thread_read.buffer_size) % sdr->thread_read.buffer_size;
/* debug fill level */
if (fill > sdr->thread_read.max_fill)
sdr->thread_read.max_fill = fill;
if (sdr->thread_read.max_fill_timer == 0.0)
@ -736,6 +744,7 @@ int sdr_read(void *inst, sample_t **samples, int num, int channels, double *rf_l
sdr->thread_read.max_fill_timer += 1.0;
PDEBUG(DSDR, DEBUG_DEBUG, "read delay = %.3f ms\n", delay * 1000.0);
}
if (fill / 2 / sdr->oversample < num)
num = fill / 2 / sdr->oversample;
#ifdef DEBUG_BUFFER
@ -762,6 +771,11 @@ int sdr_read(void *inst, sample_t **samples, int num, int channels, double *rf_l
return count;
}
if (sdr_rx_overflow) {
PDEBUG(DSDR, DEBUG_ERROR, "SDR RX overflow!\n");
sdr_rx_overflow = 0;
}
if (sdr->wave_rx_rec.fp) {
sample_t *spl_list[2] = { sdr->wavespl0, sdr->wavespl1 };
for (s = 0, ss = 0; s < count; s++) {

View File

@ -24,7 +24,7 @@ enum paging_signal;
#include <string.h>
#include <stdint.h>
#include <getopt.h>
#include "sample.h"
#include "../common/sample.h"
#include "sdr.h"
#include "sdr_config.h"

View File

@ -26,7 +26,9 @@
#include <SoapySDR/Device.h>
#include <SoapySDR/Formats.h>
#include "soapy.h"
#include "debug.h"
#include "../common/debug.h"
extern int sdr_rx_overflow;
static SoapySDRDevice *sdr = NULL;
SoapySDRStream *rxStream = NULL;
@ -413,7 +415,7 @@ int soapy_receive(float *buff, int max)
while (1) {
if (max < rx_samps_per_buff) {
/* no more space this time */
PDEBUG(DSOAPY, DEBUG_ERROR, "SDR RX overflow!\n");
sdr_rx_overflow = 1;
break;
}
/* read RX stream */

View File

@ -25,11 +25,13 @@
#include <uhd.h>
#include <uhd/usrp/usrp.h>
#include "uhd.h"
#include "debug.h"
#include "../common/debug.h"
/* use to TX time stamp */
//#define TX_TIMESTAMP
extern int sdr_rx_overflow;
static uhd_usrp_handle usrp = NULL;
static uhd_tx_streamer_handle tx_streamer = NULL;
static uhd_rx_streamer_handle rx_streamer = NULL;
@ -519,7 +521,7 @@ int uhd_receive(float *buff, int max)
while (1) {
if (max < (int)rx_samps_per_buff) {
/* no more space this time */
PDEBUG(DUHD, DEBUG_ERROR, "SDR RX overflow!\n");
sdr_rx_overflow = 1;
break;
}
/* read RX stream */

View File

@ -36,7 +36,6 @@ nmt_LDADD = \
$(top_builddir)/src/libfm/libfm.a \
$(top_builddir)/src/libfilter/libfilter.a \
$(top_builddir)/src/libwave/libwave.a \
$(top_builddir)/src/libfft/libfft.a \
$(top_builddir)/src/libmncc/libmncc.a \
$(top_builddir)/src/libsound/libsound.a \
$(ALSA_LIBS) \
@ -44,3 +43,9 @@ nmt_LDADD = \
$(SOAPY_LIBS) \
-lm
if HAVE_SDR
nmt_LDADD += \
$(top_builddir)/src/libsdr/libsdr.a \
$(top_builddir)/src/libfft/libfft.a
endif

View File

@ -24,7 +24,6 @@ radiocom2000_LDADD = \
$(top_builddir)/src/libfm/libfm.a \
$(top_builddir)/src/libfilter/libfilter.a \
$(top_builddir)/src/libwave/libwave.a \
$(top_builddir)/src/libfft/libfft.a \
$(top_builddir)/src/libmncc/libmncc.a \
$(top_builddir)/src/libsound/libsound.a \
$(ALSA_LIBS) \
@ -32,3 +31,9 @@ radiocom2000_LDADD = \
$(SOAPY_LIBS) \
-lm
if HAVE_SDR
radiocom2000_LDADD += \
$(top_builddir)/src/libsdr/libsdr.a \
$(top_builddir)/src/libfft/libfft.a
endif

View File

@ -21,10 +21,8 @@ tacs_LDADD = \
$(top_builddir)/src/libtimer/libtimer.a \
$(top_builddir)/src/libsamplerate/libsamplerate.a \
$(top_builddir)/src/libemphasis/libemphasis.a \
$(top_builddir)/src/libfm/libfm.a \
$(top_builddir)/src/libfilter/libfilter.a \
$(top_builddir)/src/libwave/libwave.a \
$(top_builddir)/src/libfft/libfft.a \
$(top_builddir)/src/libmncc/libmncc.a \
$(top_builddir)/src/libsound/libsound.a \
$(ALSA_LIBS) \
@ -32,3 +30,10 @@ tacs_LDADD = \
$(SOAPY_LIBS) \
-lm
if HAVE_SDR
tacs_LDADD += \
$(top_builddir)/src/libsdr/libsdr.a \
$(top_builddir)/src/libfft/libfft.a \
$(top_builddir)/src/libfm/libfm.a
endif

View File

@ -19,10 +19,8 @@ test_filter_LDADD = \
$(top_builddir)/src/libtimer/libtimer.a \
$(top_builddir)/src/libsamplerate/libsamplerate.a \
$(top_builddir)/src/libemphasis/libemphasis.a \
$(top_builddir)/src/libfm/libfm.a \
$(top_builddir)/src/libfilter/libfilter.a \
$(top_builddir)/src/libwave/libwave.a \
$(top_builddir)/src/libfft/libfft.a \
$(top_builddir)/src/libmncc/libmncc.a \
$(top_builddir)/src/libsound/libsound.a \
$(ALSA_LIBS) \
@ -30,6 +28,13 @@ test_filter_LDADD = \
$(SOAPY_LIBS) \
-lm
if HAVE_SDR
test_filter_LDADD += \
$(top_builddir)/src/libsdr/libsdr.a \
$(top_builddir)/src/libfft/libfft.a \
$(top_builddir)/src/libfm/libfm.a
endif
test_compandor_SOURCES = dummy.x test_compandor.c
test_compandor_LDADD = \
@ -52,10 +57,8 @@ test_emphasis_LDADD = \
$(top_builddir)/src/libtimer/libtimer.a \
$(top_builddir)/src/libsamplerate/libsamplerate.a \
$(top_builddir)/src/libemphasis/libemphasis.a \
$(top_builddir)/src/libfm/libfm.a \
$(top_builddir)/src/libfilter/libfilter.a \
$(top_builddir)/src/libwave/libwave.a \
$(top_builddir)/src/libfft/libfft.a \
$(top_builddir)/src/libmncc/libmncc.a \
$(top_builddir)/src/libsound/libsound.a \
$(ALSA_LIBS) \
@ -63,6 +66,13 @@ test_emphasis_LDADD = \
$(SOAPY_LIBS) \
-lm
if HAVE_SDR
test_emphasis_LDADD += \
$(top_builddir)/src/libsdr/libsdr.a \
$(top_builddir)/src/libfft/libfft.a \
$(top_builddir)/src/libfm/libfm.a
endif
test_dms_SOURCES = test_dms.c dummy.c
test_dms_LDADD = \
@ -74,10 +84,8 @@ test_dms_LDADD = \
$(top_builddir)/src/libtimer/libtimer.a \
$(top_builddir)/src/libsamplerate/libsamplerate.a \
$(top_builddir)/src/libemphasis/libemphasis.a \
$(top_builddir)/src/libfm/libfm.a \
$(top_builddir)/src/libfilter/libfilter.a \
$(top_builddir)/src/libwave/libwave.a \
$(top_builddir)/src/libfft/libfft.a \
$(top_builddir)/src/libmncc/libmncc.a \
$(top_builddir)/src/libsound/libsound.a \
$(ALSA_LIBS) \
@ -85,6 +93,13 @@ test_dms_LDADD = \
$(SOAPY_LIBS) \
-lm
if HAVE_SDR
test_dms_LDADD += \
$(top_builddir)/src/libsdr/libsdr.a \
$(top_builddir)/src/libfft/libfft.a \
$(top_builddir)/src/libfm/libfm.a
endif
test_sms_SOURCES = dummy.c test_sms.c
test_sms_LDADD = \
@ -96,10 +111,8 @@ test_sms_LDADD = \
$(top_builddir)/src/libtimer/libtimer.a \
$(top_builddir)/src/libsamplerate/libsamplerate.a \
$(top_builddir)/src/libemphasis/libemphasis.a \
$(top_builddir)/src/libfm/libfm.a \
$(top_builddir)/src/libfilter/libfilter.a \
$(top_builddir)/src/libwave/libwave.a \
$(top_builddir)/src/libfft/libfft.a \
$(top_builddir)/src/libmncc/libmncc.a \
$(top_builddir)/src/libsound/libsound.a \
$(ALSA_LIBS) \
@ -107,6 +120,13 @@ test_sms_LDADD = \
$(SOAPY_LIBS) \
-lm
if HAVE_SDR
test_sms_LDADD += \
$(top_builddir)/src/libsdr/libsdr.a \
$(top_builddir)/src/libfft/libfft.a \
$(top_builddir)/src/libfm/libfm.a
endif
test_performance_SOURCES = dummy.c test_performance.c
test_performance_LDADD = \

View File

@ -16,29 +16,28 @@ osmotv_LDADD = \
$(COMMON_LA) \
$(top_builddir)/src/libimage/libimage.a \
$(top_builddir)/src/common/libcommon.a \
$(top_builddir)/src/libtimer/libtimer.a \
$(top_builddir)/src/libfm/libfm.a \
$(top_builddir)/src/libfilter/libfilter.a \
$(top_builddir)/src/libwave/libwave.a \
$(top_builddir)/src/libfft/libfft.a \
$(ALSA_LIBS) \
$(UHD_LIBS) \
$(SOAPY_LIBS) \
$(GRAPHICSMAGICK_LIBS) $(IMAGEMAGICK_LIBS) \
-lm
if HAVE_SDR
osmotv_LDADD += \
$(top_builddir)/src/libsdr/libsdr.a \
$(top_builddir)/src/libfft/libfft.a
endif
osmotv_LDADD += \
$(top_builddir)/src/libtimer/libtimer.a
if HAVE_SDR
AM_CPPFLAGS += -DHAVE_SDR
endif
if HAVE_UHD
AM_CPPFLAGS += -DHAVE_UHD
endif
if HAVE_SOAPY
AM_CPPFLAGS += -DHAVE_SOAPY
endif
if ENABLE_MAGICK
AM_CPPFLAGS += -DWITH_MAGICK
endif

View File

@ -34,8 +34,8 @@ enum paging_signal;
#include "../libimage/img.h"
#include "../common/debug.h"
#ifdef HAVE_SDR
#include "../common/sdr_config.h"
#include "../common/sdr.h"
#include "../libsdr/sdr_config.h"
#include "../libsdr/sdr.h"
#endif
#include "bas.h"
#include "tv_modulate.h"