mirror of
https://github.com/cjcliffe/CubicSDR.git
synced 2025-02-03 09:44:26 -05:00
Basic configuration file init and ppm value save/load test
This commit is contained in:
parent
4f2b9d93c3
commit
68d4627e99
@ -226,6 +226,7 @@ ENDIF (APPLE)
|
|||||||
SET (cubicsdr_sources
|
SET (cubicsdr_sources
|
||||||
src/CubicSDR.cpp
|
src/CubicSDR.cpp
|
||||||
src/AppFrame.cpp
|
src/AppFrame.cpp
|
||||||
|
src/AppConfig.cpp
|
||||||
src/sdr/SDRThread.cpp
|
src/sdr/SDRThread.cpp
|
||||||
src/sdr/SDRPostThread.cpp
|
src/sdr/SDRPostThread.cpp
|
||||||
src/demod/DemodulatorPreThread.cpp
|
src/demod/DemodulatorPreThread.cpp
|
||||||
@ -267,6 +268,7 @@ SET (cubicsdr_headers
|
|||||||
src/CubicSDRDefs.h
|
src/CubicSDRDefs.h
|
||||||
src/CubicSDR.h
|
src/CubicSDR.h
|
||||||
src/AppFrame.h
|
src/AppFrame.h
|
||||||
|
src/AppConfig.h
|
||||||
src/sdr/SDRThread.h
|
src/sdr/SDRThread.h
|
||||||
src/sdr/SDRPostThread.h
|
src/sdr/SDRPostThread.h
|
||||||
src/demod/DemodulatorPreThread.h
|
src/demod/DemodulatorPreThread.h
|
||||||
|
100
src/AppConfig.cpp
Normal file
100
src/AppConfig.cpp
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
#include "AppConfig.h"
|
||||||
|
|
||||||
|
std::string AppConfig::getConfigDir() {
|
||||||
|
|
||||||
|
std::string dataDir = wxStandardPaths::Get().GetUserDataDir().ToStdString();
|
||||||
|
|
||||||
|
bool mkStatus = false;
|
||||||
|
|
||||||
|
if (!wxDir::Exists(dataDir)) {
|
||||||
|
mkStatus = wxDir::Make(dataDir);
|
||||||
|
} else {
|
||||||
|
mkStatus = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!mkStatus) {
|
||||||
|
std::cout << "Warning, unable to initialize user data directory." << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
return dataDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AppConfig::setPPM(std::string device_serial, int ppm) {
|
||||||
|
device_ppm[device_serial] = ppm;
|
||||||
|
}
|
||||||
|
|
||||||
|
int AppConfig::getPPM(std::string device_serial) {
|
||||||
|
if (device_ppm.find(device_serial) == device_ppm.end()) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return device_ppm[device_serial];
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AppConfig::save() {
|
||||||
|
DataTree cfg;
|
||||||
|
|
||||||
|
cfg.rootNode()->setName("cubicsdr_config");
|
||||||
|
DataNode *ppm_data = cfg.rootNode()->newChild("ppm");
|
||||||
|
|
||||||
|
std::map<std::string, int>::iterator device_ppm_i;
|
||||||
|
for (device_ppm_i = device_ppm.begin(); device_ppm_i != device_ppm.end(); device_ppm_i++) {
|
||||||
|
DataNode *ppm_ent = ppm_data->newChild("device");
|
||||||
|
ppm_ent->newChild("id")->element()->set(device_ppm_i->first);
|
||||||
|
ppm_ent->newChild("value")->element()->set((int)device_ppm_i->second);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string cfgFileDir = getConfigDir();
|
||||||
|
|
||||||
|
wxFileName cfgFile = wxFileName(cfgFileDir, "cubicsdr.xml");
|
||||||
|
std::string cfgFileName = cfgFile.GetFullPath(wxPATH_NATIVE).ToStdString();
|
||||||
|
|
||||||
|
if (!cfg.SaveToFileXML(cfgFileName)) {
|
||||||
|
std::cout << "Error saving :: configuration file '" << cfgFileName << "' is not writable!" << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AppConfig::load() {
|
||||||
|
DataTree cfg;
|
||||||
|
std::string cfgFileDir = getConfigDir();
|
||||||
|
|
||||||
|
wxFileName cfgFile = wxFileName(cfgFileDir, "cubicsdr.xml");
|
||||||
|
std::string cfgFileName = cfgFile.GetFullPath(wxPATH_NATIVE).ToStdString();
|
||||||
|
|
||||||
|
if (!cfgFile.Exists()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cfgFile.IsFileReadable()) {
|
||||||
|
cfg.LoadFromFileXML(cfgFileName);
|
||||||
|
} else {
|
||||||
|
std::cout << "Error loading:: configuration file '" << cfgFileName << "' is not readable!" << std::endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cfg.rootNode()->hasAnother("ppm")) {
|
||||||
|
device_ppm.clear();
|
||||||
|
|
||||||
|
DataNode *ppm_data = cfg.rootNode()->getNext("ppm");
|
||||||
|
|
||||||
|
while (ppm_data->hasAnother("device")) {
|
||||||
|
DataNode *ppm_ent = ppm_data->getNext("device");
|
||||||
|
|
||||||
|
if (ppm_ent->hasAnother("id") && ppm_ent->hasAnother("value")) {
|
||||||
|
std::string deviceId(*ppm_ent->getNext("id"));
|
||||||
|
int ppmValue = *ppm_ent->getNext("value");
|
||||||
|
setPPM(deviceId, ppmValue);
|
||||||
|
std::cout << "Loaded PPM for device '" << deviceId << "' at " << ppmValue << "ppm" << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AppConfig::reset() {
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
21
src/AppConfig.h
Normal file
21
src/AppConfig.h
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <wx/stdpaths.h>
|
||||||
|
#include <wx/dir.h>
|
||||||
|
#include <wx/filename.h>
|
||||||
|
|
||||||
|
#include "DataTree.h"
|
||||||
|
|
||||||
|
class AppConfig {
|
||||||
|
public:
|
||||||
|
|
||||||
|
std::string getConfigDir();
|
||||||
|
|
||||||
|
void setPPM(std::string device_serial, int ppm);
|
||||||
|
int getPPM(std::string device_serial);
|
||||||
|
bool save();
|
||||||
|
bool load();
|
||||||
|
bool reset();
|
||||||
|
private:
|
||||||
|
std::map<std::string, int> device_ppm;
|
||||||
|
};
|
@ -34,8 +34,20 @@ bool CubicSDR::OnInit() {
|
|||||||
chdir(path);
|
chdir(path);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!wxApp::OnInit())
|
if (!wxApp::OnInit()) {
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxApp:SetAppName("cubicsdr");
|
||||||
|
|
||||||
|
config.setPPM("RTLBlah :: 00000001",11);
|
||||||
|
config.setPPM("RTLBlah :: 00000002",12);
|
||||||
|
config.save();
|
||||||
|
config.load();
|
||||||
|
|
||||||
|
std::cout << "test1: " << config.getPPM("RTLBlah :: 00000001") << std::endl;
|
||||||
|
std::cout << "test2: " << config.getPPM("RTLBlah :: 00000002") << std::endl;
|
||||||
|
std::cout << "test3: " << config.getPPM("foo") << std::endl;
|
||||||
|
|
||||||
frequency = DEFAULT_FREQ;
|
frequency = DEFAULT_FREQ;
|
||||||
offset = 0;
|
offset = 0;
|
||||||
@ -221,3 +233,8 @@ void CubicSDR::setDevice(int deviceId) {
|
|||||||
int CubicSDR::getDevice() {
|
int CubicSDR::getDevice() {
|
||||||
return sdrThread->getDeviceId();
|
return sdrThread->getDeviceId();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
AppConfig *CubicSDR::getConfig() {
|
||||||
|
return &config;
|
||||||
|
}
|
||||||
|
@ -14,6 +14,7 @@
|
|||||||
#include "SDRPostThread.h"
|
#include "SDRPostThread.h"
|
||||||
#include "AudioThread.h"
|
#include "AudioThread.h"
|
||||||
#include "DemodulatorMgr.h"
|
#include "DemodulatorMgr.h"
|
||||||
|
#include "AppConfig.h"
|
||||||
|
|
||||||
#define NUM_DEMODULATORS 1
|
#define NUM_DEMODULATORS 1
|
||||||
|
|
||||||
@ -49,7 +50,10 @@ public:
|
|||||||
void bindDemodulator(DemodulatorInstance *demod);
|
void bindDemodulator(DemodulatorInstance *demod);
|
||||||
void removeDemodulator(DemodulatorInstance *demod);
|
void removeDemodulator(DemodulatorInstance *demod);
|
||||||
|
|
||||||
|
AppConfig *getConfig();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
AppConfig config;
|
||||||
PrimaryGLContext *m_glContext;
|
PrimaryGLContext *m_glContext;
|
||||||
std::vector<SDRDeviceInfo *> devs;
|
std::vector<SDRDeviceInfo *> devs;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user