diff --git a/Makefile b/Makefile index f6c6c5e..7c707d5 100644 --- a/Makefile +++ b/Makefile @@ -6,11 +6,10 @@ OBJS = $(addsuffix .o, $(basename $(notdir $(SOURCES)))) CXXFLAGS = -std=c++14 -I$(IMGUI_DIR) -I$(IMGUI_DIR)/backends -I$(POCKETFFT_DIR) CXXFLAGS += -g -Wall -Wformat -O2 -LIBS = -L$(TINYALSA_DIR)/lib -LIBS += -lGL `pkg-config --static --libs glfw3 alsa` +LIBS += -lGL `pkg-config --static --libs glfw3 libbladeRF` -CXXFLAGS += `pkg-config --cflags glfw3 alsa` +CXXFLAGS += `pkg-config --cflags glfw3 libbladeRF` CFLAGS = $(CXXFLAGS) ##--------------------------------------------------------------------- diff --git a/flake.nix b/flake.nix index ae6af96..992dd29 100644 --- a/flake.nix +++ b/flake.nix @@ -17,7 +17,7 @@ name = "fastsa"; src = self; nativeBuildInputs = [ pkgs.pkg-config ]; - propagatedBuildInputs = [ pkgs.wayland pkgs.glfw-wayland pkgs.libffi pkgs.alsa-lib ]; + propagatedBuildInputs = [ pkgs.wayland pkgs.glfw-wayland pkgs.libffi pkgs.libbladeRF ]; preBuild = '' export IMGUI_DIR=${imgui_dir} export POCKETFFT_DIR=${pocketfft} diff --git a/main.cpp b/main.cpp index 10be93a..01d0dbd 100644 --- a/main.cpp +++ b/main.cpp @@ -14,14 +14,14 @@ #include #include -#include +#include #include static std::atomic terminate_dsp; -static snd_pcm_t* pcm; +struct bladerf* bladerf_dev; static std::mutex waterfall_data_mutex; static int waterfall_width = 1600; @@ -33,10 +33,10 @@ static std::atomic fps; static void dsp_thread() { using namespace std::literals::chrono_literals; - size_t len = 6400; - std::vector frames(len); + size_t len = 8192; + std::vector> frames(len); - std::vector frames_f(len); + std::vector> frames_f(len); pocketfft::shape_t shape{len}; pocketfft::stride_t stride(shape.size()); size_t tmp=sizeof(float); @@ -51,19 +51,19 @@ static void dsp_thread() { int iterations = 0; auto last_second = std::chrono::steady_clock::now(); while(!terminate_dsp) { - int read_count = snd_pcm_readi(pcm, frames.data(), len); - if(read_count < 0) { - std::cerr << "read from audio interface failed: " << snd_strerror(read_count) << std::endl; + int status; + if((status = bladerf_sync_rx(bladerf_dev, frames.data(), len, NULL, 0)) != 0) { + std::cerr << "failed to receive samples from bladeRF: " << bladerf_strerror(status) << std::endl; break; } for(size_t i=0;i guard(waterfall_data_mutex); std::memmove(&waterfall_data[waterfall_width], &waterfall_data[0], sizeof(int)*waterfall_width*(waterfall_height - 1)); for(int i=0;i