6 Commits
1.0.0 ... 1.0.2

Author SHA1 Message Date
9eb3ef0500 Fixed rigctl server not starting on AOS 2021-08-08 21:38:15 +02:00
ffc20f5fee Added new patron 2021-08-08 21:38:15 +02:00
6144f3a3f9 Update readme.md 2021-08-04 16:46:32 +02:00
a3bda1b8fd Bugfix 2 2021-08-04 00:16:14 +02:00
2a6c742a51 Bugfix 2021-08-04 00:15:05 +02:00
604a559b54 Update readme.md 2021-08-03 21:37:35 +02:00
12 changed files with 58 additions and 22 deletions

1
.gitignore vendored
View File

@ -11,3 +11,4 @@ build/
root_dev/ root_dev/
Folder.DotSettings.user Folder.DotSettings.user
CMakeSettings.json CMakeSettings.json
poggers_decoder

View File

@ -32,9 +32,16 @@ void ConfigManager::load(json def, bool lock) {
return; return;
} }
try {
std::ifstream file(path.c_str()); std::ifstream file(path.c_str());
file >> conf; file >> conf;
file.close(); file.close();
}
catch (std::exception e) {
spdlog::error("Config file '{0}' is corrupted, resetting it", path);
conf = def;
save(false);
}
if (lock) { mtx.unlock(); } if (lock) { mtx.unlock(); }
} }

View File

@ -35,6 +35,7 @@ namespace sdrpp_credits {
const char* patrons[] = { const char* patrons[] = {
"Croccydile", "Croccydile",
"Daniele D'Agnelli", "Daniele D'Agnelli",
"EB3FRN",
"Eric Johnson", "Eric Johnson",
"W4IPA", "W4IPA",
"Lee Donaghy", "Lee Donaghy",

View File

@ -53,7 +53,7 @@ namespace dsp {
} }
_in->flush(); _in->flush();
if (!out.swap(outCount)) { return -1; } if (outCount > 0 && !out.swap(outCount)) { return -1; }
return count; return count;
} }
@ -217,7 +217,7 @@ namespace dsp {
memcpy(delay, &_in->readBuf[count - 7], 7 * sizeof(T)); memcpy(delay, &_in->readBuf[count - 7], 7 * sizeof(T));
_in->flush(); _in->flush();
if (!out.swap(outCount)) { return -1; } if (outCount > 0 && !out.swap(outCount)) { return -1; }
return count; return count;
} }

View File

@ -64,7 +64,7 @@ namespace dsp {
if (bitsRead >= _frameLen) { if (bitsRead >= _frameLen) {
if (!out.swap((bitsRead / 8) + ((bitsRead % 8) > 0))) { return -1; } if (!out.swap((bitsRead / 8) + ((bitsRead % 8) > 0))) { return -1; }
bitsRead = -1; bitsRead = -1;
nextBitIsStartOfFrame = true; if (allowSequential) { nextBitIsStartOfFrame = true; }
} }
continue; continue;
@ -106,6 +106,8 @@ namespace dsp {
return count; return count;
} }
bool allowSequential = true;
stream<uint8_t> out; stream<uint8_t> out;
private: private:

View File

@ -396,6 +396,11 @@ namespace dsp {
generic_hier_block<MSKDemod>::_block_init = true; generic_hier_block<MSKDemod>::_block_init = true;
} }
void setInput(stream<complex_t>* input) {
assert((generic_hier_block<MSKDemod>::_block_init));
demod.setInput(input);
}
void setSampleRate(float sampleRate) { void setSampleRate(float sampleRate) {
assert(generic_hier_block<MSKDemod>::_block_init); assert(generic_hier_block<MSKDemod>::_block_init);
generic_hier_block<MSKDemod>::tempStop(); generic_hier_block<MSKDemod>::tempStop();

View File

@ -1,9 +1,17 @@
#include <gui/widgets/symbol_diagram.h> #include <gui/widgets/symbol_diagram.h>
namespace ImGui { namespace ImGui {
SymbolDiagram::SymbolDiagram(float scale) { SymbolDiagram::SymbolDiagram(float scale, int count) {
_scale = scale; _scale = scale;
memset(buffer, 0, 1024 * sizeof(float)); sampleCount = count;
buffer = new float[count];
memset(buffer, 0, sampleCount * sizeof(float));
}
SymbolDiagram::~SymbolDiagram() {
delete[] buffer;
} }
void SymbolDiagram::draw(const ImVec2& size_arg) { void SymbolDiagram::draw(const ImVec2& size_arg) {
@ -23,9 +31,9 @@ namespace ImGui {
window->DrawList->AddRectFilled(min, ImVec2(min.x+size.x, min.y+size.y), IM_COL32(0,0,0,255)); window->DrawList->AddRectFilled(min, ImVec2(min.x+size.x, min.y+size.y), IM_COL32(0,0,0,255));
ImU32 col = ImGui::GetColorU32(ImGuiCol_CheckMark, 0.7f); ImU32 col = ImGui::GetColorU32(ImGuiCol_CheckMark, 0.7f);
float increment = size.x / 1024.0f; float increment = size.x / (float)sampleCount;
float val; float val;
for (int i = 0; i < 1024; i++) { for (int i = 0; i < sampleCount; i++) {
val = buffer[i] * _scale; val = buffer[i] * _scale;
if (val > 1.0f || val < -1.0f) { continue; } if (val > 1.0f || val < -1.0f) { continue; }
window->DrawList->AddCircleFilled(ImVec2(((float)i * increment) + min.x, ((val + 1) * (size.y*0.5f)) + min.y), 2, col); window->DrawList->AddCircleFilled(ImVec2(((float)i * increment) + min.x, ((val + 1) * (size.y*0.5f)) + min.y), 2, col);

View File

@ -8,7 +8,8 @@
namespace ImGui { namespace ImGui {
class SymbolDiagram { class SymbolDiagram {
public: public:
SymbolDiagram(float _scale = 1.0f); SymbolDiagram(float _scale = 1.0f, int count = 1024);
~SymbolDiagram();
void draw(const ImVec2& size_arg = ImVec2(0, 0)); void draw(const ImVec2& size_arg = ImVec2(0, 0));
@ -18,8 +19,9 @@ namespace ImGui {
private: private:
std::mutex bufferMtx; std::mutex bufferMtx;
float buffer[1024]; float* buffer;
float _scale; float _scale;
int sampleCount = 0;
}; };
} }

View File

@ -682,6 +682,7 @@ namespace ImGui {
if (waterfallVisible) { if (waterfallVisible) {
FFTAreaHeight = std::min<int>(FFTAreaHeight, widgetSize.y - 50); FFTAreaHeight = std::min<int>(FFTAreaHeight, widgetSize.y - 50);
newFFTAreaHeight = FFTAreaHeight;
fftHeight = FFTAreaHeight - 50; fftHeight = FFTAreaHeight - 50;
waterfallHeight = widgetSize.y - fftHeight - 52; waterfallHeight = widgetSize.y - fftHeight - 52;
} }

View File

@ -1,3 +1,3 @@
#pragma once #pragma once
#define VERSION_STR "1.0.0" #define VERSION_STR "1.0.2"

View File

@ -270,16 +270,16 @@ Modules in beta are still included in releases for the most part but not enabled
|------------------|------------|-------------------|----------------------------|:---------------:|:-----------------------:|:---------------------------:| |------------------|------------|-------------------|----------------------------|:---------------:|:-----------------------:|:---------------------------:|
| airspy_source | Working | libairspy | OPT_BUILD_AIRSPY_SOURCE | ✅ | ✅ | ✅ | | airspy_source | Working | libairspy | OPT_BUILD_AIRSPY_SOURCE | ✅ | ✅ | ✅ |
| airspyhf_source | Working | libairspyhf | OPT_BUILD_AIRSPYHF_SOURCE | ✅ | ✅ | ✅ | | airspyhf_source | Working | libairspyhf | OPT_BUILD_AIRSPYHF_SOURCE | ✅ | ✅ | ✅ |
| bladerf_source | Beta | libbladeRF | OPT_BUILD_BLADERF_SOURCE | ⛔ | ⚠️ (not Debian Buster) | ✅ | | bladerf_source | Working | libbladeRF | OPT_BUILD_BLADERF_SOURCE | ⛔ | ⚠️ (not Debian Buster) | ✅ |
| file_source | Working | - | OPT_BUILD_FILE_SOURCE | ✅ | ✅ | ✅ | | file_source | Working | - | OPT_BUILD_FILE_SOURCE | ✅ | ✅ | ✅ |
| hackrf_source | Working | libhackrf | OPT_BUILD_HACKRF_SOURCE | ✅ | ✅ | ✅ | | hackrf_source | Working | libhackrf | OPT_BUILD_HACKRF_SOURCE | ✅ | ✅ | ✅ |
| limesdr_source | Beta | liblimesuite | OPT_BUILD_LIMESDR_SOURCE | ⛔ | ✅ | ✅ | | limesdr_source | Working | liblimesuite | OPT_BUILD_LIMESDR_SOURCE | ⛔ | ✅ | ✅ |
| sddc_source | Unfinished | - | OPT_BUILD_SDDC_SOURCE | ⛔ | ⛔ | ⛔ | | sddc_source | Unfinished | - | OPT_BUILD_SDDC_SOURCE | ⛔ | ⛔ | ⛔ |
| rtl_sdr_source | Working | librtlsdr | OPT_BUILD_RTL_SDR_SOURCE | ✅ | ✅ | ✅ | | rtl_sdr_source | Working | librtlsdr | OPT_BUILD_RTL_SDR_SOURCE | ✅ | ✅ | ✅ |
| rtl_tcp_source | Working | - | OPT_BUILD_RTL_TCP_SOURCE | ✅ | ✅ | ✅ | | rtl_tcp_source | Working | - | OPT_BUILD_RTL_TCP_SOURCE | ✅ | ✅ | ✅ |
| sdrplay_source | Working | SDRplay API | OPT_BUILD_SDRPLAY_SOURCE | ⛔ | ✅ | ✅ | | sdrplay_source | Working | SDRplay API | OPT_BUILD_SDRPLAY_SOURCE | ⛔ | ✅ | ✅ |
| soapy_source | Working | soapysdr | OPT_BUILD_SOAPY_SOURCE | ✅ | ✅ | ✅ | | soapy_source | Working | soapysdr | OPT_BUILD_SOAPY_SOURCE | ✅ | ✅ | ✅ |
| spyserver_source | Beta | - | OPT_BUILD_SPYSERVER_SOURCE | ✅ | ✅ | ✅ | | spyserver_source | Working | - | OPT_BUILD_SPYSERVER_SOURCE | ✅ | ✅ | ✅ |
| plutosdr_source | Working | libiio, libad9361 | OPT_BUILD_PLUTOSDR_SOURCE | ✅ | ✅ | ✅ | | plutosdr_source | Working | libiio, libad9361 | OPT_BUILD_PLUTOSDR_SOURCE | ✅ | ✅ | ✅ |
## Sinks ## Sinks
@ -287,14 +287,14 @@ Modules in beta are still included in releases for the most part but not enabled
| Name | Stage | Dependencies | Option | Built by default| Built in Release | Enabled in SDR++ by default | | Name | Stage | Dependencies | Option | Built by default| Built in Release | Enabled in SDR++ by default |
|--------------------|------------|--------------|------------------------------|:---------------:|:----------------:|:---------------------------:| |--------------------|------------|--------------|------------------------------|:---------------:|:----------------:|:---------------------------:|
| audio_sink | Working | rtaudio | OPT_BUILD_AUDIO_SINK | ✅ | ✅ | ✅ | | audio_sink | Working | rtaudio | OPT_BUILD_AUDIO_SINK | ✅ | ✅ | ✅ |
| network_sink | Beta | - | OPT_BUILD_NETWORK_SINK | ✅ | ✅ | ✅ | | network_sink | Working | - | OPT_BUILD_NETWORK_SINK | ✅ | ✅ | ✅ |
| new_portaudio_sink | Beta | portaudio | OPT_BUILD_NEW_PORTAUDIO_SINK | ⛔ | ✅ | ⛔ | | new_portaudio_sink | Beta | portaudio | OPT_BUILD_NEW_PORTAUDIO_SINK | ⛔ | ✅ | ⛔ |
## Decoders ## Decoders
| Name | Stage | Dependencies | Option | Built by default| Built in Release | Enabled in SDR++ by default | | Name | Stage | Dependencies | Option | Built by default| Built in Release | Enabled in SDR++ by default |
|---------------------|------------|--------------|-------------------------------|:---------------:|:----------------:|:---------------------------:| |---------------------|------------|--------------|-------------------------------|:---------------:|:----------------:|:---------------------------:|
| falcon9_decoder | Beta | ffplay | OPT_BUILD_FALCON9_DECODER | ⛔ | ⛔ | ⛔ | | falcon9_decoder | Unfinished | ffplay | OPT_BUILD_FALCON9_DECODER | ⛔ | ⛔ | ⛔ |
| meteor_demodulator | Working | - | OPT_BUILD_METEOR_DEMODULATOR | ✅ | ✅ | ⛔ | | meteor_demodulator | Working | - | OPT_BUILD_METEOR_DEMODULATOR | ✅ | ✅ | ⛔ |
| radio | Working | - | OPT_BUILD_RADIO | ✅ | ✅ | ✅ | | radio | Working | - | OPT_BUILD_RADIO | ✅ | ✅ | ✅ |
| weather_sat_decoder | Unfinished | - | OPT_BUILD_WEATHER_SAT_DECODER | ⛔ | ⛔ | ⛔ | | weather_sat_decoder | Unfinished | - | OPT_BUILD_WEATHER_SAT_DECODER | ⛔ | ⛔ | ⛔ |
@ -304,14 +304,22 @@ Modules in beta are still included in releases for the most part but not enabled
| Name | Stage | Dependencies | Option | Built by default | Built in Release | Enabled in SDR++ by default | | Name | Stage | Dependencies | Option | Built by default | Built in Release | Enabled in SDR++ by default |
|---------------------|------------|--------------|-----------------------------|:----------------:|:----------------:|:---------------------------:| |---------------------|------------|--------------|-----------------------------|:----------------:|:----------------:|:---------------------------:|
| discord_integration | Working | - | OPT_BUILD_DISCORD_PRESENCE | ✅ | ✅ | ⛔ | | discord_integration | Working | - | OPT_BUILD_DISCORD_PRESENCE | ✅ | ✅ | ⛔ |
| frequency_manager | Beta | - | OPT_BUILD_FREQUENCY_MANAGER | ✅ | ✅ | ✅ | | frequency_manager | Working | - | OPT_BUILD_FREQUENCY_MANAGER | ✅ | ✅ | ✅ |
| recorder | Working | - | OPT_BUILD_RECORDER | ✅ | ✅ | ✅ | | recorder | Working | - | OPT_BUILD_RECORDER | ✅ | ✅ | ✅ |
| rigctl_server | Unfinished | - | OPT_BUILD_RIGCTL_SERVER | ✅ | ✅ | ⛔ | | rigctl_server | Working | - | OPT_BUILD_RIGCTL_SERVER | ✅ | ✅ | ⛔ |
# Troubleshooting # Troubleshooting
First, please make sure you're running the latest automated build. If your issue is linked to a bug it is likely that is has already been fixed in later releases First, please make sure you're running the latest automated build. If your issue is linked to a bug it is likely that is has already been fixed in later releases
## SDR++ crashes then it won't start again no matter what
This is a bug in 1.0.0 that was fixed in 1.0.1
In some cases, if a crash happened while the config was being saved, the config file woul be corrupted and SDR++ would refuse to start because of it.
This has now been fixed. If a config file is corrupted it'll just reset it to its default state.
## "hash collision" error when starting ## "hash collision" error when starting
You likely installed the `soapysdr-module-all` package on Ubuntu/Debian. If not it's still a SoapySDR bug caused by multiple soapy modules coming in conflict. Uninstall anything related to SoapySDR then install soapysdr itself and only the soapy modules you actually need. You likely installed the `soapysdr-module-all` package on Ubuntu/Debian. If not it's still a SoapySDR bug caused by multiple soapy modules coming in conflict. Uninstall anything related to SoapySDR then install soapysdr itself and only the soapy modules you actually need.
@ -347,6 +355,7 @@ I will soon publish a contributing.md listing the code style to use.
* [Croccydile](https://example.com/) * [Croccydile](https://example.com/)
* [Daniele D'Agnelli](https://linkedin.com/in/dagnelli) * [Daniele D'Agnelli](https://linkedin.com/in/dagnelli)
* [EB3FRN](https://www.eb3frn.net/)
* [Eric Johnson](https://example.com/) * [Eric Johnson](https://example.com/)
* [W4IPA](https://twitter.com/W4IPAstroke5) * [W4IPA](https://twitter.com/W4IPAstroke5)
* [Lee Donaghy](https://github.com/github) * [Lee Donaghy](https://github.com/github)

View File

@ -365,7 +365,7 @@ private:
if (parts.size() == 0) { return; } if (parts.size() == 0) { return; }
// If the command is a compound command, execute each one separately // If the command is a compound command, execute each one separately
if (parts[0].size() > 1 && parts[0][0] != '\\') { if (parts[0].size() > 1 && parts[0][0] != '\\' && parts[0] != "AOS" && parts[0] != "LOS") {
std::string arguments; std::string arguments;
if (parts.size() > 1) { arguments = cmd.substr(parts[0].size()); } if (parts.size() > 1) { arguments = cmd.substr(parts[0].size()); }
for (char c : parts[0]) { for (char c : parts[0]) {