diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..db8c583 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,57 @@ +# CMake definitions for SoftFM + +cmake_minimum_required(VERSION 2.4) +project(SoftFM) + +find_package(PkgConfig) +find_package(ALSA REQUIRED) + +# Find RTL-SDR library (for linking). +pkg_check_modules(PKG_RTLSDR librtlsdr) +find_path(RTLSDR_INCLUDE_DIR rtl-sdr.h + HINT ${PKG_RTLSDR_INCLUDE_DIRS}) +find_library(RTLSDR_LIBRARY librtlsdr.a + HINT ${PKG_RTLSDR_LIBRARY_DIRS}) + +# Find libusb +pkg_check_modules(PKG_LIBUSB libusb-1.0) +find_path(LIBUSB_INCLUDE_DIR libusb.h + HINT ${PKG_LIBUSB_INCLUDE_DIRS} + PATH_SUFFIXES libusb-1.0) +find_library(LIBUSB_LIBRARY usb-1.0 + HINT ${PKG_LIBUSB_LIBRARY_DIRS}) + +if(RTLSDR_INCLUDE_DIR AND RTLSDR_LIBRARY) + message(STATUS "Found librtlsdr: ${RTLSDR_INCLUDE_DIR}, ${RTLSDR_LIBRARY}") +else() + message(WARNING "Can not find Osmocom RTL-SDR library") + message("Try again with environment variable PKG_CONFIG_PATH") + message("or with -DRTLSDR_INCLUDE_DIR=/path/rtlsdr/include") + message(" -DRTLSDR_LIBRARY=/path/rtlsdr/lib/librtlsdr.a") +endif() + +set(RTLSDR_INCLUDE_DIRS ${RTLSDR_INCLUDE_DIR} ${LIBUSB_INCLUDE_DIR}) +set(RTLSDR_LIBRARIES ${RTLSDR_LIBRARY} ${LIBUSB_LIBRARY}) + +# Compiler flags. +set(CMAKE_CXX_FLAGS "-Wall -std=c++11 -O2 -ffast-math -ftree-vectorize ${EXTRA_FLAGS}") + +add_executable(softfm + main.cc + RtlSdrSource.cc + Filter.cc + FmDecode.cc + AudioOutput.cc ) + +include_directories( + ${RTLSDR_INCLUDE_DIRS} + ${ALSA_INCLUDE_DIRS} + ${EXTRA_INCLUDES} ) + +target_link_libraries(softfm + ${RTLSDR_LIBRARIES} + ${ALSA_LIBRARIES} + ${EXTRA_LIBS} ) + +install(TARGETS softfm DESTINATION bin) + diff --git a/Makefile b/Makefile deleted file mode 100644 index e104c0d..0000000 --- a/Makefile +++ /dev/null @@ -1,41 +0,0 @@ -# Makefile for SoftFM - -# ----- Tweak these settings to configure for your system - -CROSS = -CFLAGS_OPT = -O2 -ffast-math -ftree-vectorize -CFLAGS_DEBUG = -g -CFLAGS_ARCH = -CFLAGS_PATH = -I/home/joris/test/rtl-sdr/inst/include -CFLAGS_EXTRA = -LDFLAGS_PATH = -L/home/joris/test/rtl-sdr/inst/lib -LDFLAGS_EXTRA = -LIBS_ALSA = -lasound -LIBS_RTLSDR = /home/joris/test/rtl-sdr/inst/lib/librtlsdr.a -lusb-1.0 -LIBS_EXTRA = - -# ----- end tweakable settings - - -CXX = $(CROSS)g++ -CXXFLAGS = -std=c++11 -Wall -D_FILE_OFFSET_BITS=64 \ - $(CFLAGS_OPT) $(CFLAGS_DEBUG) \ - $(CFLAGS_ARCH) $(CFLAGS_PATH) $(CFLAGS_EXTRA) -LDFLAGS = $(LDFLAGS_PATH) $(LDFLAGS_EXTRA) -LDLIBS = $(LIBS_ALSA) $(LIBS_RTLSDR) $(LIBS_EXTRA) - -OBJS = RtlSdrSource.o Filter.o FmDecode.o AudioOutput.o main.o - -softfm : $(OBJS) - $(CXX) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS) - -RtlSdrSource.o : RtlSdrSource.cc RtlSdrSource.h SoftFM.h -Filter.o : Filter.cc Filter.h SoftFM.h -FmDecode.o : FmDecode.cc FmDecode.h SoftFM.h Filter.h -AudioOutput.o : AudioOutput.cc AudioOutput.h SoftFM.h -main.o : main.cc SoftFM.h RtlSdrSource.h Filter.h FmDecode.h AudioOutput.h - -.PHONY: clean -clean: - $(RM) softfm *.o - diff --git a/TODO.txt b/TODO.txt new file mode 100644 index 0000000..95079fd --- /dev/null +++ b/TODO.txt @@ -0,0 +1,10 @@ +* write README.txt +* push to github +* implement WAV file writing +* implement stereo pilot PPS +* implement RDS decoding +* figure out why we sometimes lose stereo lock +* investigate problem at low IF sample rates; apparently librtlsdr is not telling the truth about the actual sample rate. +* look at I/Q balance to improve weak stations +* look at hardware gain settings to improve weak stations +* consider FM demodulation with PLL instead of phase discriminator