From 09d874a385c318741e8a1f9ff22621946b3ecbd3 Mon Sep 17 00:00:00 2001 From: Ryzerth Date: Sun, 19 Jul 2020 18:09:59 +0200 Subject: [PATCH] readme.md --- CMakeLists.txt | 5 ---- readme.md | 41 +++++++++++++++++++++++++++++++++ res/icons/logo.png | Bin 0 -> 39771 bytes src/icons.cpp | 2 ++ src/icons.h | 1 + src/main.cpp | 3 ++- src/main_window.cpp | 55 +++++++++++++++++--------------------------- src/signal_path.cpp | 11 --------- src/styles.h | 4 ---- src/version.h | 3 +++ 10 files changed, 70 insertions(+), 55 deletions(-) create mode 100644 readme.md create mode 100644 res/icons/logo.png create mode 100644 src/version.h diff --git a/CMakeLists.txt b/CMakeLists.txt index 8158e5dd..6d3e51fc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -6,11 +6,6 @@ set(CMAKE_BUILD_TYPE "RelWithDebInfo") # Compiler config set(CMAKE_CXX_FLAGS "-O2 /std:c++17") -# HackRF -include_directories(sdrpp "C:/Program Files/PothosSDR/include/libhackrf/") -link_directories(sdrpp "C:/Program Files/PothosSDR/lib/") -link_libraries(hackrf) - # Volk include_directories(sdrpp "C:/Program Files/PothosSDR/include/volk/") link_libraries(volk) diff --git a/readme.md b/readme.md new file mode 100644 index 00000000..bff25647 --- /dev/null +++ b/readme.md @@ -0,0 +1,41 @@ +## SDR++, The bloat-free SDR software. +SDR++ is a cross-platform and open source SDR software with the aim of being bloat free and simple to use. + +# Current Features +* Uses SoapySDR for wide hardware support +* Hardware accelerated graphics (OpenGL + ImGui) +* SIMD accelerated DSP (parts of the DSP are still missing) +* Cross-platform +* Full waterfall update when possible. Makes browsing signals easier and more pleasant + +# Comming soon +* Multi-VFO +* Plugins +* Digital demodulators and decoders + +## Building on Windows +# Requirements +* cmake +* vcpkg (for the packages listed below) +* fftw3 +* portaudio +* glfw +* glew +* PothosSDR (for libvolk and SoapySDR) + +``` +mkdir build +cd build +cmake .. "-DCMAKE_TOOLCHAIN_FILE=C:/Users/Alex/vcpkg/scripts/buildsystems/vcpkg.cmake" -G "Visual Studio 15 2017 Win64" +cmake --build . --config Release +``` + +## Building on Linux +comming soon :) + +## Building on OSX +comming soon as well :) + +## Contributing +Feel free to issue pull request and report bugs via the github issues. +I will soon publish a contributing.md listing the code style to use. \ No newline at end of file diff --git a/res/icons/logo.png b/res/icons/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..6b4ec18aa0abeab6f93dc5aaea7da53e32f53a4d GIT binary patch literal 39771 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 XtI<(`?WCPCfJ0ecU9Mc_{ipu{K{O=K literal 0 HcmV?d00001 diff --git a/src/icons.cpp b/src/icons.cpp index 012ea674..3a77362a 100644 --- a/src/icons.cpp +++ b/src/icons.cpp @@ -4,6 +4,7 @@ #include namespace icons { + ImTextureID LOGO; ImTextureID PLAY; ImTextureID STOP; ImTextureID PLAY_RAW; @@ -24,6 +25,7 @@ namespace icons { } void load() { + LOGO = (ImTextureID)loadTexture("res/icons/logo.png"); PLAY_RAW = (ImTextureID)loadTexture("res/icons/play_raw.png"); STOP_RAW = (ImTextureID)loadTexture("res/icons/stop_raw.png"); } diff --git a/src/icons.h b/src/icons.h index 47ba1a8f..92dca23d 100644 --- a/src/icons.h +++ b/src/icons.h @@ -4,6 +4,7 @@ #include namespace icons { + extern ImTextureID LOGO; extern ImTextureID PLAY; extern ImTextureID STOP; extern ImTextureID PLAY_RAW; diff --git a/src/main.cpp b/src/main.cpp index b8677e62..97ba6b06 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #ifdef _WIN32 @@ -34,7 +35,7 @@ int main() { glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); // Required on Mac // Create window with graphics context - GLFWwindow* window = glfwCreateWindow(1280, 720, "SDR++ v0.1.0 (Built at " __TIME__ ", " __DATE__ ")", NULL, NULL); + GLFWwindow* window = glfwCreateWindow(1280, 720, "SDR++ v" VERSION_STR " (Built at " __TIME__ ", " __DATE__ ")", NULL, NULL); if (window == NULL) return 1; glfwMakeContextCurrent(window); diff --git a/src/main_window.cpp b/src/main_window.cpp index 8b2957de..e2e11dbe 100644 --- a/src/main_window.cpp +++ b/src/main_window.cpp @@ -211,13 +211,6 @@ void drawWindow() { fSel.setFrequency(wtf.getCenterFrequency() + wtf.getVFOOfset()); } - // vfoFreq = wtf.getVFOOfset() + freq; - - // if (vfoFreq != lastVfoFreq) { - // lastVfoFreq = vfoFreq; - // sigPath.setVFOFrequency(vfoFreq - freq); - // } - if (volume != lastVolume) { lastVolume = volume; sigPath.setVolume(volume); @@ -239,26 +232,6 @@ void drawWindow() { bw = sampleRate; } - - // if (ImGui::BeginMenuBar()) - // { - // if (ImGui::BeginMenu("File")) - // { - // ImGui::EndMenu(); - // } - // if (ImGui::BeginMenu("Edit")) - // { - // ImGui::MenuItem("Show Example Window", "", &showExample); - // ImGui::EndMenu(); - // } - // ImGui::EndMenuBar(); - // } - - if (showExample) { - ImGui::ShowDemoWindow(); - } - - ImVec2 vMin = ImGui::GetWindowContentRegionMin(); ImVec2 vMax = ImGui::GetWindowContentRegionMax(); @@ -290,12 +263,16 @@ void drawWindow() { fSel.draw(); + ImGui::SetCursorPosY(ImGui::GetCursorPosY() - 8); + ImGui::SameLine(ImGui::GetWindowWidth() - 40); + ImGui::Image(icons::LOGO, ImVec2(30, 30)); + ImGui::Columns(3, "WindowColumns", false); ImVec2 winSize = ImGui::GetWindowSize(); ImGui::SetColumnWidth(0, 300); - ImGui::SetColumnWidth(1, winSize.x - 300 - 50); - ImGui::SetColumnWidth(2, 50); + ImGui::SetColumnWidth(1, winSize.x - 300 - 60); + ImGui::SetColumnWidth(2, 60); // Left Column ImGui::BeginChild("Left Column"); @@ -303,7 +280,14 @@ void drawWindow() { if (ImGui::CollapsingHeader("Source")) { ImGui::PushItemWidth(ImGui::GetWindowSize().x); ImGui::Combo("##_0_", &devId, soapy.txtDevList.c_str()); - ImGui::Combo("##_1_", &srId, soapy.txtSampleRateList.c_str()); + + if (!playing) { + ImGui::Combo("##_1_", &srId, soapy.txtSampleRateList.c_str()); + } + else { + ImGui::Text("%s Samples/s", soapy.txtSampleRateList.c_str()); + } + if (ImGui::Button("Refresh")) { soapy.refresh(); @@ -380,23 +364,26 @@ void drawWindow() { ImGui::NextColumn(); ImGui::Text("Zoom"); - ImGui::NewLine(); ImGui::VSliderFloat("##_7_", ImVec2(20.0f, 150.0f), &bw, 1000.0f, sampleRate, ""); - ImGui::Text("Max"); ImGui::NewLine(); + + ImGui::Text("Max"); ImGui::VSliderFloat("##_8_", ImVec2(20.0f, 150.0f), &fftMax, -100.0f, 0.0f, ""); - ImGui::Text("Min"); ImGui::NewLine(); + + ImGui::Text("Min"); ImGui::VSliderFloat("##_9_", ImVec2(20.0f, 150.0f), &fftMin, -100.0f, 0.0f, ""); if (bw != lastBW) { lastBW = bw; - wtf.setViewOffset(wtf.getVFOOfset()); wtf.setViewBandwidth(bw); + wtf.setViewOffset(wtf.getVFOOfset()); } + + wtf.setFFTMin(fftMin); wtf.setFFTMax(fftMax); wtf.setWaterfallMin(fftMin); diff --git a/src/signal_path.cpp b/src/signal_path.cpp index 5718b281..30614049 100644 --- a/src/signal_path.cpp +++ b/src/signal_path.cpp @@ -32,17 +32,6 @@ void SignalPath::init(uint64_t sampleRate, int fftRate, int fftSize, dsp::stream audio.init(&audioResamp.output, 16); } - -dsp::DCBiasRemover dcBiasRemover; - dsp::Splitter split; - dsp::BlockDecimator fftBlockDec; - dsp::HandlerSink fftHandlerSink; - dsp::VFO mainVFO; - dsp::FMDemodulator demod; - dsp::AMDemodulator amDemod; - dsp::FloatResampler audioResamp; - io::AudioSink audio; - void SignalPath::setSampleRate(float sampleRate) { dcBiasRemover.stop(); split.stop(); diff --git a/src/styles.h b/src/styles.h index 20c042c1..b3ba260e 100644 --- a/src/styles.h +++ b/src/styles.h @@ -13,8 +13,4 @@ void setImguiStyle(ImGuiIO& io) { ImGui::StyleColorsDark(); //ImGui::StyleColorsLight(); - - //ImGui::GetStyle().Colors[ImGuiCol_Header] = ImVec4(0.235f, 0.235f, 0.235f, 1.0f); - //ImGui::GetStyle().Colors[ImGuiCol_HeaderHovered] = ImVec4(0.235f, 0.235f, 0.235f, 1.0f); - //ImGui::GetStyle().Colors[ImGuiCol_HeaderActive] = ImVec4(0.235f, 0.235f, 0.235f, 1.0f); } \ No newline at end of file diff --git a/src/version.h b/src/version.h new file mode 100644 index 00000000..fed749b8 --- /dev/null +++ b/src/version.h @@ -0,0 +1,3 @@ +#pragma once + +#define VERSION_STR "0.2.1_alpha" \ No newline at end of file