mirror of
https://github.com/AlexandreRouma/SDRPlusPlus.git
synced 2024-12-25 02:18:30 +01:00
fixed linux bugs
This commit is contained in:
parent
0d45217dfd
commit
edbc0c149d
@ -75,3 +75,36 @@ void ConfigManager::autoSaveWorker(ConfigManager* _this) {
|
|||||||
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
|
std::this_thread::sleep_for(std::chrono::milliseconds(1000));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// void ConfigManager::setResourceDir(std::string path) {
|
||||||
|
// if (!std::filesystem::exists(path)) {
|
||||||
|
// spdlog::error("Resource directory '{0}' does not exist", path);
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// if (!std::filesystem::is_regular_file(path)) {
|
||||||
|
// spdlog::error("Resource directory '{0}' is not a directory", path);
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// resDir = path;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// std::string ConfigManager::getResourceDir() {
|
||||||
|
// return resDir;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// void ConfigManager::setConfigDir(std::string path) {
|
||||||
|
// if (!std::filesystem::exists(path)) {
|
||||||
|
// spdlog::error("Resource directory '{0}' does not exist", path);
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// if (!std::filesystem::is_regular_file(path)) {
|
||||||
|
// spdlog::error("Resource directory '{0}' is not a directory", path);
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// resDir = path;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// std::string ConfigManager::getConfigDir() {
|
||||||
|
// return configDir;
|
||||||
|
// }
|
||||||
|
|
||||||
|
@ -8,6 +8,11 @@ using nlohmann::json;
|
|||||||
|
|
||||||
#define DEV_BUILD
|
#define DEV_BUILD
|
||||||
|
|
||||||
|
|
||||||
|
#define SDRPP_RESOURCE_DIR "/usr/local/"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef ROOT_DIR
|
#ifndef ROOT_DIR
|
||||||
#ifdef DEV_BUILD
|
#ifdef DEV_BUILD
|
||||||
#define ROOT_DIR "../root_dev"
|
#define ROOT_DIR "../root_dev"
|
||||||
@ -29,11 +34,20 @@ public:
|
|||||||
void aquire();
|
void aquire();
|
||||||
void release(bool changed = false);
|
void release(bool changed = false);
|
||||||
|
|
||||||
|
// static void setResourceDir(std::string path);
|
||||||
|
// static std::string getResourceDir();
|
||||||
|
|
||||||
|
// static void setConfigDir(std::string path);
|
||||||
|
// static std::string getConfigDir();
|
||||||
|
|
||||||
json conf;
|
json conf;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void autoSaveWorker(ConfigManager* _this);
|
static void autoSaveWorker(ConfigManager* _this);
|
||||||
|
|
||||||
|
//static std::string resDir;
|
||||||
|
//static std::string configDir;
|
||||||
|
|
||||||
std::string path = "";
|
std::string path = "";
|
||||||
bool changed = false;
|
bool changed = false;
|
||||||
bool autoSaveEnabled = false;
|
bool autoSaveEnabled = false;
|
||||||
|
@ -62,46 +62,11 @@ duk_ret_t test_func(duk_context *ctx) {
|
|||||||
int sdrpp_main() {
|
int sdrpp_main() {
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
//FreeConsole();
|
//FreeConsole();
|
||||||
|
// ConfigManager::setResourceDir("./res");
|
||||||
|
// ConfigManager::setConfigDir(".");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
// TESTING
|
|
||||||
|
|
||||||
|
|
||||||
// duk_context* ctx = duk_create_heap_default();
|
|
||||||
// duk_console_init(ctx, DUK_CONSOLE_PROXY_WRAPPER);
|
|
||||||
|
|
||||||
// std::ifstream file("test.js", std::ios::in);
|
|
||||||
// std::stringstream ss;
|
|
||||||
// ss << file.rdbuf();
|
|
||||||
// std::string code = ss.str();
|
|
||||||
|
|
||||||
// duk_idx_t baseObj = duk_push_object(ctx);
|
|
||||||
|
|
||||||
// duk_push_int(ctx, 42);
|
|
||||||
// duk_put_prop_string(ctx, baseObj, "my_property");
|
|
||||||
|
|
||||||
// duk_push_c_function(ctx, test_func, 0);
|
|
||||||
// duk_put_prop_string(ctx, baseObj, "my_func");
|
|
||||||
|
|
||||||
// duk_put_global_string(ctx, "my_object");
|
|
||||||
// duk_push_object(ctx);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// if (duk_peval_string(ctx, code.c_str()) != 0) {
|
|
||||||
// printf("Error: %s\n", duk_safe_to_string(ctx, -1));
|
|
||||||
// return -1;
|
|
||||||
// }
|
|
||||||
// duk_pop(ctx);
|
|
||||||
|
|
||||||
core::scriptManager.createScript("TestScript 1", "test.js");
|
|
||||||
//core::scriptManager.createScript("TestScript 2", "test.js");
|
|
||||||
//core::scriptManager.createScript("TestScript 3", "test.js");
|
|
||||||
//core::scriptManager.createScript("TestScript 4", "test.js");
|
|
||||||
|
|
||||||
// TESTING
|
|
||||||
|
|
||||||
spdlog::info("SDR++ v" VERSION_STR);
|
spdlog::info("SDR++ v" VERSION_STR);
|
||||||
|
|
||||||
// Load config
|
// Load config
|
||||||
|
@ -176,4 +176,76 @@ namespace dsp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
class Reshaper {
|
||||||
|
public:
|
||||||
|
Reshaper() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void init(int outBlockSize, dsp::stream<T>* input) {
|
||||||
|
outputBlockSize = outBlockSize;
|
||||||
|
in = input;
|
||||||
|
out.init(outputBlockSize * 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setOutputBlockSize(int blockSize) {
|
||||||
|
if (running) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
outputBlockSize = blockSize;
|
||||||
|
out.setMaxLatency(outputBlockSize * 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setInput(dsp::stream<T>* input) {
|
||||||
|
if (running) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
in = input;
|
||||||
|
}
|
||||||
|
|
||||||
|
void start() {
|
||||||
|
if (running) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
workerThread = std::thread(_worker, this);
|
||||||
|
running = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void stop() {
|
||||||
|
if (!running) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
in->stopReader();
|
||||||
|
out.stopWriter();
|
||||||
|
workerThread.join();
|
||||||
|
in->clearReadStop();
|
||||||
|
out.clearWriteStop();
|
||||||
|
running = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
dsp::stream<T> out;
|
||||||
|
|
||||||
|
private:
|
||||||
|
static void _worker(Reshaper* _this) {
|
||||||
|
T* buf = new T[_this->outputBlockSize];
|
||||||
|
while (true) {
|
||||||
|
if (_this->in->read(buf, _this->outputBlockSize) < 0) { break; }
|
||||||
|
if (_this->out.write(buf, _this->outputBlockSize) < 0) { break; }
|
||||||
|
}
|
||||||
|
delete[] buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
int outputBlockSize;
|
||||||
|
bool running = false;
|
||||||
|
std::thread workerThread;
|
||||||
|
|
||||||
|
dsp::stream<T>* in;
|
||||||
|
|
||||||
|
};
|
||||||
};
|
};
|
@ -3,6 +3,8 @@
|
|||||||
#include <dsp/stream.h>
|
#include <dsp/stream.h>
|
||||||
#include <dsp/types.h>
|
#include <dsp/types.h>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <spdlog/spdlog.h>
|
||||||
|
|
||||||
|
|
||||||
namespace dsp {
|
namespace dsp {
|
||||||
class HandlerSink {
|
class HandlerSink {
|
||||||
@ -61,18 +63,19 @@ namespace dsp {
|
|||||||
bool running = false;
|
bool running = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <class T>
|
||||||
class NullSink {
|
class NullSink {
|
||||||
public:
|
public:
|
||||||
NullSink() {
|
NullSink() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
NullSink(stream<complex_t>* input, int bufferSize) {
|
NullSink(stream<T>* input, int bufferSize) {
|
||||||
_in = input;
|
_in = input;
|
||||||
_bufferSize = bufferSize;
|
_bufferSize = bufferSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
void init(stream<complex_t>* input, int bufferSize) {
|
void init(stream<T>* input, int bufferSize) {
|
||||||
_in = input;
|
_in = input;
|
||||||
_bufferSize = bufferSize;
|
_bufferSize = bufferSize;
|
||||||
}
|
}
|
||||||
@ -85,13 +88,14 @@ namespace dsp {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
static void _worker(NullSink* _this) {
|
static void _worker(NullSink* _this) {
|
||||||
complex_t* buf = new complex_t[_this->_bufferSize];
|
T* buf = new T[_this->_bufferSize];
|
||||||
while (true) {
|
while (true) {
|
||||||
|
//spdlog::info("NS: Reading...");
|
||||||
_this->_in->read(buf, _this->_bufferSize);
|
_this->_in->read(buf, _this->_bufferSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stream<complex_t>* _in;
|
stream<T>* _in;
|
||||||
int _bufferSize;
|
int _bufferSize;
|
||||||
std::thread _workerThread;
|
std::thread _workerThread;
|
||||||
};
|
};
|
||||||
@ -113,6 +117,7 @@ namespace dsp {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void start() {
|
void start() {
|
||||||
|
spdlog::info("NS: Starting...");
|
||||||
_workerThread = std::thread(_worker, this);
|
_workerThread = std::thread(_worker, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,8 +125,10 @@ namespace dsp {
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
static void _worker(FloatNullSink* _this) {
|
static void _worker(FloatNullSink* _this) {
|
||||||
|
spdlog::info("NS: Started!");
|
||||||
float* buf = new float[_this->_bufferSize];
|
float* buf = new float[_this->_bufferSize];
|
||||||
while (true) {
|
while (true) {
|
||||||
|
spdlog::info("NS: Reading...");
|
||||||
_this->_in->read(buf, _this->_bufferSize);
|
_this->_in->read(buf, _this->_bufferSize);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -66,7 +66,6 @@ void fftHandler(dsp::complex_t* samples) {
|
|||||||
_data.clear();
|
_data.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
dsp::NullSink sink;
|
|
||||||
watcher<uint64_t> freq((uint64_t)90500000);
|
watcher<uint64_t> freq((uint64_t)90500000);
|
||||||
watcher<double> vfoFreq(92000000.0);
|
watcher<double> vfoFreq(92000000.0);
|
||||||
float dummyVolume = 1.0;
|
float dummyVolume = 1.0;
|
||||||
|
@ -11,7 +11,7 @@ namespace audio {
|
|||||||
astr->audio->init(1);
|
astr->audio->init(1);
|
||||||
astr->deviceId = astr->audio->getDeviceId();
|
astr->deviceId = astr->audio->getDeviceId();
|
||||||
double sampleRate = astr->audio->devices[astr->deviceId].sampleRates[0];
|
double sampleRate = astr->audio->devices[astr->deviceId].sampleRates[0];
|
||||||
int blockSize = sampleRate / 200; // default block size
|
int blockSize = sampleRate / 200.0; // default block size
|
||||||
astr->monoAudioStream = new dsp::stream<float>(blockSize * 2);
|
astr->monoAudioStream = new dsp::stream<float>(blockSize * 2);
|
||||||
astr->audio->setBlockSize(blockSize);
|
astr->audio->setBlockSize(blockSize);
|
||||||
astr->audio->setStreamType(io::AudioSink::MONO);
|
astr->audio->setStreamType(io::AudioSink::MONO);
|
||||||
@ -38,7 +38,7 @@ namespace audio {
|
|||||||
astr->audio = new io::AudioSink;
|
astr->audio = new io::AudioSink;
|
||||||
astr->audio->init(1);
|
astr->audio->init(1);
|
||||||
double sampleRate = astr->audio->devices[astr->audio->getDeviceId()].sampleRates[0];
|
double sampleRate = astr->audio->devices[astr->audio->getDeviceId()].sampleRates[0];
|
||||||
int blockSize = sampleRate / 200; // default block size
|
int blockSize = sampleRate / 200.0; // default block size
|
||||||
astr->stereoAudioStream = new dsp::stream<dsp::StereoFloat_t>(blockSize * 2);
|
astr->stereoAudioStream = new dsp::stream<dsp::StereoFloat_t>(blockSize * 2);
|
||||||
astr->audio->setBlockSize(blockSize);
|
astr->audio->setBlockSize(blockSize);
|
||||||
astr->audio->setStreamType(io::AudioSink::STEREO);
|
astr->audio->setStreamType(io::AudioSink::STEREO);
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
{
|
{
|
||||||
"audio": {
|
"audio": {
|
||||||
"Radio": {
|
"Radio": {
|
||||||
"device": "Speakers (Realtek High Definiti",
|
"device": "default",
|
||||||
"sampleRate": 48000.0,
|
"sampleRate": 48000.0,
|
||||||
"volume": 0.60546875
|
"volume": 0.5148147940635681
|
||||||
},
|
},
|
||||||
"Radio 1": {
|
"Radio 1": {
|
||||||
"device": "Speakers (Realtek High Definition Audio)",
|
"device": "Speakers (Realtek High Definition Audio)",
|
||||||
@ -19,7 +19,7 @@
|
|||||||
"bandPlan": "General",
|
"bandPlan": "General",
|
||||||
"bandPlanEnabled": true,
|
"bandPlanEnabled": true,
|
||||||
"fftHeight": 298,
|
"fftHeight": 298,
|
||||||
"frequency": 100100000,
|
"frequency": 99000000,
|
||||||
"max": 0.0,
|
"max": 0.0,
|
||||||
"maximized": true,
|
"maximized": true,
|
||||||
"menuOrder": [
|
"menuOrder": [
|
||||||
|
@ -1,29 +1,29 @@
|
|||||||
{
|
{
|
||||||
"device": "Generic RTL2832U OEM :: 00000001",
|
"device": "HackRF One #0 901868dc282c8f8b",
|
||||||
"devices": {
|
"devices": {
|
||||||
"AirSpy HF+ [c852435de0224af7]": {
|
"AirSpy HF+ [c852435de0224af7]": {
|
||||||
"gains": {
|
"gains": {
|
||||||
"LNA": 6.0,
|
"LNA": 6.0,
|
||||||
"RF": 0.0
|
"RF": 0.0
|
||||||
},
|
},
|
||||||
"sampleRate": 768000.0
|
"sampleRate": 768000.0
|
||||||
},
|
},
|
||||||
"Generic RTL2832U OEM :: 00000001": {
|
"Generic RTL2832U OEM :: 00000001": {
|
||||||
"gains": {
|
"gains": {
|
||||||
"TUNER": 49.599998474121094
|
"TUNER": 49.599998474121094
|
||||||
},
|
},
|
||||||
"sampleRate": 2560000.0
|
"sampleRate": 2560000.0
|
||||||
},
|
},
|
||||||
"HackRF One #0 901868dc282c8f8b": {
|
"HackRF One #0 901868dc282c8f8b": {
|
||||||
"gains": {
|
"gains": {
|
||||||
"AMP": 0.0,
|
"AMP": 13.86299991607666,
|
||||||
"LNA": 24.711999893188477,
|
"LNA": 24.711999893188477,
|
||||||
"VGA": 14.282999992370605
|
"VGA": 14.282999992370605
|
||||||
},
|
},
|
||||||
"sampleRate": 8000000.0
|
"sampleRate": 8000000.0
|
||||||
},
|
},
|
||||||
"PulseAudio": {
|
"PulseAudio": {
|
||||||
"sampleRate": 96000.0
|
"sampleRate": 96000.0
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user