mirror of
https://github.com/cjcliffe/CubicSDR.git
synced 2024-11-26 21:58:37 -05:00
Improved config code / xml format
This commit is contained in:
parent
adc1500091
commit
ca851add76
@ -1,7 +1,53 @@
|
|||||||
#include "AppConfig.h"
|
#include "AppConfig.h"
|
||||||
|
|
||||||
std::string AppConfig::getConfigDir() {
|
DeviceConfig::DeviceConfig() : ppm(0), deviceId("") {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
DeviceConfig::DeviceConfig(std::string deviceId) : ppm(0) {
|
||||||
|
this->deviceId = deviceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DeviceConfig::setPPM(int ppm) {
|
||||||
|
this->ppm = ppm;
|
||||||
|
}
|
||||||
|
|
||||||
|
int DeviceConfig::getPPM() {
|
||||||
|
return ppm;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DeviceConfig::setDeviceId(std::string deviceId) {
|
||||||
|
this->deviceId = deviceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string DeviceConfig::getDeviceId() {
|
||||||
|
return deviceId;
|
||||||
|
}
|
||||||
|
|
||||||
|
void DeviceConfig::save(DataNode *node) {
|
||||||
|
node->newChild("id")->element()->set(deviceId);
|
||||||
|
DataNode *ppm_node = node->newChild("ppm");
|
||||||
|
ppm_node->element()->set((int)ppm);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DeviceConfig::load(DataNode *node) {
|
||||||
|
if (node->hasAnother("ppm")) {
|
||||||
|
DataNode *ppm_node = node->getNext("ppm");
|
||||||
|
int ppmValue = 0;
|
||||||
|
ppm_node->element()->get(ppmValue);
|
||||||
|
setPPM(ppmValue);
|
||||||
|
std::cout << "Loaded PPM for device '" << deviceId << "' at " << ppmValue << "ppm" << std::endl;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
DeviceConfig *AppConfig::getDevice(std::string deviceId) {
|
||||||
|
DeviceConfig *conf = &deviceConfig[deviceId];
|
||||||
|
conf->setDeviceId(deviceId);
|
||||||
|
return conf;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string AppConfig::getConfigDir() {
|
||||||
std::string dataDir = wxStandardPaths::Get().GetUserDataDir().ToStdString();
|
std::string dataDir = wxStandardPaths::Get().GetUserDataDir().ToStdString();
|
||||||
|
|
||||||
bool mkStatus = false;
|
bool mkStatus = false;
|
||||||
@ -19,33 +65,21 @@ std::string AppConfig::getConfigDir() {
|
|||||||
return dataDir;
|
return dataDir;
|
||||||
}
|
}
|
||||||
|
|
||||||
void AppConfig::setPPM(std::string deviceId, int ppm) {
|
|
||||||
device_ppm[deviceId] = ppm;
|
|
||||||
}
|
|
||||||
|
|
||||||
int AppConfig::getPPM(std::string deviceId) {
|
|
||||||
if (device_ppm.find(deviceId) == device_ppm.end()) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return device_ppm[deviceId];
|
|
||||||
}
|
|
||||||
|
|
||||||
bool AppConfig::save() {
|
bool AppConfig::save() {
|
||||||
DataTree cfg;
|
DataTree cfg;
|
||||||
|
|
||||||
cfg.rootNode()->setName("cubicsdr_config");
|
cfg.rootNode()->setName("cubicsdr_config");
|
||||||
DataNode *ppm_data = cfg.rootNode()->newChild("ppm");
|
DataNode *devices_node = cfg.rootNode()->newChild("devices");
|
||||||
|
|
||||||
std::map<std::string, int>::iterator device_ppm_i;
|
std::map<std::string, DeviceConfig>::iterator device_config_i;
|
||||||
for (device_ppm_i = device_ppm.begin(); device_ppm_i != device_ppm.end(); device_ppm_i++) {
|
for (device_config_i = deviceConfig.begin(); device_config_i != deviceConfig.end(); device_config_i++) {
|
||||||
DataNode *ppm_ent = ppm_data->newChild("device");
|
DataNode *device_node = devices_node->newChild("device");
|
||||||
ppm_ent->newChild("id")->element()->set(device_ppm_i->first);
|
device_config_i->second.save(device_node);
|
||||||
ppm_ent->newChild("value")->element()->set((int)device_ppm_i->second);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string cfgFileDir = getConfigDir();
|
std::string cfgFileDir = getConfigDir();
|
||||||
|
|
||||||
wxFileName cfgFile = wxFileName(cfgFileDir, "cubicsdr.xml");
|
wxFileName cfgFile = wxFileName(cfgFileDir, "config.xml");
|
||||||
std::string cfgFileName = cfgFile.GetFullPath(wxPATH_NATIVE).ToStdString();
|
std::string cfgFileName = cfgFile.GetFullPath(wxPATH_NATIVE).ToStdString();
|
||||||
|
|
||||||
if (!cfg.SaveToFileXML(cfgFileName)) {
|
if (!cfg.SaveToFileXML(cfgFileName)) {
|
||||||
@ -60,7 +94,7 @@ bool AppConfig::load() {
|
|||||||
DataTree cfg;
|
DataTree cfg;
|
||||||
std::string cfgFileDir = getConfigDir();
|
std::string cfgFileDir = getConfigDir();
|
||||||
|
|
||||||
wxFileName cfgFile = wxFileName(cfgFileDir, "cubicsdr.xml");
|
wxFileName cfgFile = wxFileName(cfgFileDir, "config.xml");
|
||||||
std::string cfgFileName = cfgFile.GetFullPath(wxPATH_NATIVE).ToStdString();
|
std::string cfgFileName = cfgFile.GetFullPath(wxPATH_NATIVE).ToStdString();
|
||||||
|
|
||||||
if (!cfgFile.Exists()) {
|
if (!cfgFile.Exists()) {
|
||||||
@ -68,25 +102,24 @@ bool AppConfig::load() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (cfgFile.IsFileReadable()) {
|
if (cfgFile.IsFileReadable()) {
|
||||||
|
std::cout << "Loading:: configuration file '" << cfgFileName << "'" << std::endl;
|
||||||
|
|
||||||
cfg.LoadFromFileXML(cfgFileName);
|
cfg.LoadFromFileXML(cfgFileName);
|
||||||
} else {
|
} else {
|
||||||
std::cout << "Error loading:: configuration file '" << cfgFileName << "' is not readable!" << std::endl;
|
std::cout << "Error loading:: configuration file '" << cfgFileName << "' is not readable!" << std::endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cfg.rootNode()->hasAnother("ppm")) {
|
if (cfg.rootNode()->hasAnother("devices")) {
|
||||||
device_ppm.clear();
|
DataNode *devices_node = cfg.rootNode()->getNext("devices");
|
||||||
|
|
||||||
DataNode *ppm_data = cfg.rootNode()->getNext("ppm");
|
while (devices_node->hasAnother("device")) {
|
||||||
|
DataNode *device_node = devices_node->getNext("device");
|
||||||
|
if (device_node->hasAnother("id")) {
|
||||||
|
std::string deviceId;
|
||||||
|
device_node->getNext("id")->element()->get(deviceId);
|
||||||
|
|
||||||
while (ppm_data->hasAnother("device")) {
|
getDevice(deviceId)->load(device_node);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,16 +6,35 @@
|
|||||||
|
|
||||||
#include "DataTree.h"
|
#include "DataTree.h"
|
||||||
|
|
||||||
|
|
||||||
|
class DeviceConfig {
|
||||||
|
public:
|
||||||
|
DeviceConfig();
|
||||||
|
DeviceConfig(std::string deviceId);
|
||||||
|
|
||||||
|
void setPPM(int ppm);
|
||||||
|
int getPPM();
|
||||||
|
|
||||||
|
void setDeviceId(std::string deviceId);
|
||||||
|
std::string getDeviceId();
|
||||||
|
|
||||||
|
void save(DataNode *node);
|
||||||
|
void load(DataNode *node);
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::string deviceId;
|
||||||
|
int ppm;
|
||||||
|
};
|
||||||
|
|
||||||
class AppConfig {
|
class AppConfig {
|
||||||
public:
|
public:
|
||||||
|
|
||||||
std::string getConfigDir();
|
std::string getConfigDir();
|
||||||
|
DeviceConfig *getDevice(std::string deviceId);
|
||||||
|
|
||||||
void setPPM(std::string deviceId, int ppm);
|
|
||||||
int getPPM(std::string deviceId);
|
|
||||||
bool save();
|
bool save();
|
||||||
bool load();
|
bool load();
|
||||||
bool reset();
|
bool reset();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::map<std::string, int> device_ppm;
|
std::map<std::string, DeviceConfig> deviceConfig;
|
||||||
};
|
};
|
||||||
|
@ -38,7 +38,7 @@ bool CubicSDR::OnInit() {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxApp::SetAppName("cubicsdr");
|
wxApp::SetAppName("CubicSDR");
|
||||||
|
|
||||||
config.load();
|
config.load();
|
||||||
|
|
||||||
@ -226,7 +226,7 @@ void CubicSDR::setDevice(int deviceId) {
|
|||||||
SDRDeviceInfo *dev = (*getDevices())[deviceId];
|
SDRDeviceInfo *dev = (*getDevices())[deviceId];
|
||||||
|
|
||||||
SDRThreadCommand command_ppm(SDRThreadCommand::SDR_THREAD_CMD_SET_PPM);
|
SDRThreadCommand command_ppm(SDRThreadCommand::SDR_THREAD_CMD_SET_PPM);
|
||||||
ppm = config.getPPM(dev->getDeviceId());
|
ppm = config.getDevice(dev->getDeviceId())->getPPM();
|
||||||
command_ppm.llong_value = ppm;
|
command_ppm.llong_value = ppm;
|
||||||
threadCmdQueueSDR->push(command_ppm);
|
threadCmdQueueSDR->push(command_ppm);
|
||||||
}
|
}
|
||||||
@ -251,7 +251,7 @@ void CubicSDR::setPPM(int ppm_in) {
|
|||||||
|
|
||||||
SDRDeviceInfo *dev = (*getDevices())[getDevice()];
|
SDRDeviceInfo *dev = (*getDevices())[getDevice()];
|
||||||
|
|
||||||
config.setPPM(dev->getDeviceId(), ppm_in);
|
config.getDevice(dev->getDeviceId())->setPPM(ppm_in);
|
||||||
config.save();
|
config.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -262,7 +262,7 @@ int CubicSDR::getPPM() {
|
|||||||
SDRDeviceInfo *dev = (*getDevices())[getDevice()];
|
SDRDeviceInfo *dev = (*getDevices())[getDevice()];
|
||||||
|
|
||||||
SDRThreadCommand command_ppm(SDRThreadCommand::SDR_THREAD_CMD_SET_PPM);
|
SDRThreadCommand command_ppm(SDRThreadCommand::SDR_THREAD_CMD_SET_PPM);
|
||||||
ppm = config.getPPM(dev->getDeviceId());
|
ppm = config.getDevice(dev->getDeviceId())->getPPM();
|
||||||
|
|
||||||
return ppm;
|
return ppm;
|
||||||
}
|
}
|
||||||
|
@ -137,7 +137,7 @@ void SDRThread::threadMain() {
|
|||||||
signed char buf[BUF_SIZE];
|
signed char buf[BUF_SIZE];
|
||||||
|
|
||||||
long long frequency = DEFAULT_FREQ;
|
long long frequency = DEFAULT_FREQ;
|
||||||
int ppm = wxGetApp().getConfig()->getPPM(devs[deviceId]->getDeviceId());
|
int ppm = wxGetApp().getConfig()->getDevice(devs[deviceId]->getDeviceId())->getPPM();
|
||||||
|
|
||||||
rtlsdr_open(&dev, deviceId);
|
rtlsdr_open(&dev, deviceId);
|
||||||
rtlsdr_set_sample_rate(dev, sampleRate);
|
rtlsdr_set_sample_rate(dev, sampleRate);
|
||||||
|
Loading…
Reference in New Issue
Block a user