mirror of
https://github.com/cjcliffe/CubicSDR.git
synced 2025-09-06 07:07:48 -04:00
SDR Device dialog property settings now functional
This commit is contained in:
parent
efbdb2d69f
commit
5346bdd50d
@ -373,6 +373,10 @@ void CubicSDR::setDevice(SDRDeviceInfo *dev) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (SoapySDR::Kwargs::const_iterator i = settingArgs.begin(); i != settingArgs.end(); i++) {
|
||||||
|
sdrThread->writeSetting(i->first, i->second);
|
||||||
|
}
|
||||||
|
sdrThread->setStreamArgs(streamArgs);
|
||||||
sdrThread->setDevice(dev);
|
sdrThread->setDevice(dev);
|
||||||
|
|
||||||
DeviceConfig *devConfig = config.getDevice(dev->getDeviceId());
|
DeviceConfig *devConfig = config.getDevice(dev->getDeviceId());
|
||||||
@ -599,3 +603,11 @@ float CubicSDR::getGain(std::string name) {
|
|||||||
return sdrThread->getGain(name);
|
return sdrThread->getGain(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CubicSDR::setStreamArgs(SoapySDR::Kwargs streamArgs_in) {
|
||||||
|
streamArgs = streamArgs_in;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CubicSDR::setDeviceArgs(SoapySDR::Kwargs settingArgs_in) {
|
||||||
|
settingArgs = settingArgs_in;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -109,6 +109,9 @@ public:
|
|||||||
void setGain(std::string name, float gain_in);
|
void setGain(std::string name, float gain_in);
|
||||||
float getGain(std::string name);
|
float getGain(std::string name);
|
||||||
|
|
||||||
|
void setStreamArgs(SoapySDR::Kwargs streamArgs_in);
|
||||||
|
void setDeviceArgs(SoapySDR::Kwargs settingArgs_in);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
AppFrame *appframe;
|
AppFrame *appframe;
|
||||||
AppConfig config;
|
AppConfig config;
|
||||||
@ -140,6 +143,9 @@ private:
|
|||||||
|
|
||||||
SDRDevicesDialog *deviceSelectorDialog;
|
SDRDevicesDialog *deviceSelectorDialog;
|
||||||
|
|
||||||
|
SoapySDR::Kwargs streamArgs;
|
||||||
|
SoapySDR::Kwargs settingArgs;
|
||||||
|
|
||||||
std::thread *t_SDR, *t_SDREnum, *t_PostSDR, *t_SpectrumVisual, *t_DemodVisual;
|
std::thread *t_SDR, *t_SDREnum, *t_PostSDR, *t_SpectrumVisual, *t_DemodVisual;
|
||||||
std::atomic_bool devicesReady;
|
std::atomic_bool devicesReady;
|
||||||
std::atomic_bool deviceSelectorOpen;
|
std::atomic_bool deviceSelectorOpen;
|
||||||
|
@ -93,7 +93,7 @@ void SDRDevicesDialog::OnSelectionChanged( wxTreeEvent& event ) {
|
|||||||
wxTreeItemId selId = devTree->GetSelection();
|
wxTreeItemId selId = devTree->GetSelection();
|
||||||
|
|
||||||
dev = getSelectedDevice(selId);
|
dev = getSelectedDevice(selId);
|
||||||
|
props.erase(props.begin(), props.end());
|
||||||
if (dev) {
|
if (dev) {
|
||||||
m_propertyGrid->Clear();
|
m_propertyGrid->Clear();
|
||||||
m_propertyGrid->Append(new wxPropertyCategory("Run-time Settings"));
|
m_propertyGrid->Append(new wxPropertyCategory("Run-time Settings"));
|
||||||
@ -104,7 +104,7 @@ void SDRDevicesDialog::OnSelectionChanged( wxTreeEvent& event ) {
|
|||||||
|
|
||||||
for (args_i = args.begin(); args_i != args.end(); args_i++) {
|
for (args_i = args.begin(); args_i != args.end(); args_i++) {
|
||||||
SoapySDR::ArgInfo arg = (*args_i);
|
SoapySDR::ArgInfo arg = (*args_i);
|
||||||
addArgInfoProperty(m_propertyGrid, arg);
|
props.push_back(addArgInfoProperty(m_propertyGrid, arg));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dev->getRxChannel()) {
|
if (dev->getRxChannel()) {
|
||||||
@ -115,7 +115,7 @@ void SDRDevicesDialog::OnSelectionChanged( wxTreeEvent& event ) {
|
|||||||
|
|
||||||
for (args_i = args.begin(); args_i != args.end(); args_i++) {
|
for (args_i = args.begin(); args_i != args.end(); args_i++) {
|
||||||
SoapySDR::ArgInfo arg = (*args_i);
|
SoapySDR::ArgInfo arg = (*args_i);
|
||||||
addArgInfoProperty(m_propertyGrid, arg);
|
props.push_back(addArgInfoProperty(m_propertyGrid, arg));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -158,6 +158,53 @@ void SDRDevicesDialog::OnUseSelected( wxMouseEvent& event ) {
|
|||||||
|
|
||||||
dev = getSelectedDevice(selId);
|
dev = getSelectedDevice(selId);
|
||||||
if (dev != NULL) {
|
if (dev != NULL) {
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
SoapySDR::ArgInfoList::const_iterator args_i;
|
||||||
|
SoapySDR::ArgInfoList args = dev->getSettingsArgInfo();
|
||||||
|
|
||||||
|
SoapySDR::Kwargs settingArgs;
|
||||||
|
SoapySDR::Kwargs streamArgs;
|
||||||
|
|
||||||
|
for (args_i = args.begin(); args_i != args.end(); args_i++) {
|
||||||
|
SoapySDR::ArgInfo arg = (*args_i);
|
||||||
|
wxPGProperty *prop = props[i];
|
||||||
|
|
||||||
|
if (arg.type == SoapySDR::ArgInfo::STRING && arg.options.size()) {
|
||||||
|
settingArgs[arg.key] = arg.options[prop->GetChoiceSelection()];
|
||||||
|
} else if (arg.type == SoapySDR::ArgInfo::BOOL) {
|
||||||
|
settingArgs[arg.key] = (prop->GetValueAsString()=="True")?"true":"false";
|
||||||
|
} else {
|
||||||
|
settingArgs[arg.key] = prop->GetValueAsString();
|
||||||
|
}
|
||||||
|
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dev->getRxChannel()) {
|
||||||
|
args = dev->getRxChannel()->getStreamArgsInfo();
|
||||||
|
|
||||||
|
if (args.size()) {
|
||||||
|
for (args_i = args.begin(); args_i != args.end(); args_i++) {
|
||||||
|
SoapySDR::ArgInfo arg = (*args_i);
|
||||||
|
wxPGProperty *prop = props[i];
|
||||||
|
|
||||||
|
if (arg.type == SoapySDR::ArgInfo::STRING && arg.options.size()) {
|
||||||
|
streamArgs[arg.key] = arg.options[prop->GetChoiceSelection()];
|
||||||
|
} else if (arg.type == SoapySDR::ArgInfo::BOOL) {
|
||||||
|
streamArgs[arg.key] = (prop->GetValueAsString()=="True")?"true":"false";
|
||||||
|
} else {
|
||||||
|
streamArgs[arg.key] = prop->GetValueAsString();
|
||||||
|
}
|
||||||
|
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wxGetApp().setDeviceArgs(settingArgs);
|
||||||
|
wxGetApp().setStreamArgs(streamArgs);
|
||||||
wxGetApp().setDevice(dev);
|
wxGetApp().setDevice(dev);
|
||||||
Close();
|
Close();
|
||||||
}
|
}
|
||||||
|
@ -30,4 +30,5 @@ private:
|
|||||||
std::map<wxTreeItemId, SDRDeviceInfo *> devItems;
|
std::map<wxTreeItemId, SDRDeviceInfo *> devItems;
|
||||||
std::map<wxTreeItemId, SDRDeviceInfo *>::iterator devItems_i;
|
std::map<wxTreeItemId, SDRDeviceInfo *>::iterator devItems_i;
|
||||||
SDRDeviceInfo *dev = NULL;
|
SDRDeviceInfo *dev = NULL;
|
||||||
|
std::vector<wxPGProperty *> props;
|
||||||
};
|
};
|
@ -38,6 +38,18 @@ SDRThread::~SDRThread() {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SoapySDR::Kwargs SDRThread::combineArgs(SoapySDR::Kwargs a, SoapySDR::Kwargs b) {
|
||||||
|
SoapySDR::Kwargs c;
|
||||||
|
SoapySDR::Kwargs::iterator i;
|
||||||
|
for (i = a.begin(); i != a.end(); i++) {
|
||||||
|
c[i->first] = i->second;
|
||||||
|
}
|
||||||
|
for (i = b.begin(); i != b.end(); i++) {
|
||||||
|
c[i->first] = i->second;
|
||||||
|
}
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
void SDRThread::init() {
|
void SDRThread::init() {
|
||||||
SDRDeviceInfo *devInfo = deviceInfo.load();
|
SDRDeviceInfo *devInfo = deviceInfo.load();
|
||||||
deviceConfig.store(wxGetApp().getConfig()->getDevice(devInfo->getDeviceId()));
|
deviceConfig.store(wxGetApp().getConfig()->getDevice(devInfo->getDeviceId()));
|
||||||
@ -54,7 +66,7 @@ void SDRThread::init() {
|
|||||||
|
|
||||||
wxGetApp().sdrEnumThreadNotify(SDREnumerator::SDR_ENUM_MESSAGE, std::string("Initializing device."));
|
wxGetApp().sdrEnumThreadNotify(SDREnumerator::SDR_ENUM_MESSAGE, std::string("Initializing device."));
|
||||||
device = SoapySDR::Device::make(args);
|
device = SoapySDR::Device::make(args);
|
||||||
stream = device->setupStream(SOAPY_SDR_RX,"CF32", std::vector<size_t>(), devInfo->getStreamArgs());
|
stream = device->setupStream(SOAPY_SDR_RX,"CF32", std::vector<size_t>(), combineArgs(devInfo->getStreamArgs(),streamArgs));
|
||||||
|
|
||||||
wxGetApp().sdrEnumThreadNotify(SDREnumerator::SDR_ENUM_MESSAGE, std::string("Activating stream."));
|
wxGetApp().sdrEnumThreadNotify(SDREnumerator::SDR_ENUM_MESSAGE, std::string("Activating stream."));
|
||||||
device->setSampleRate(SOAPY_SDR_RX,0,sampleRate.load());
|
device->setSampleRate(SOAPY_SDR_RX,0,sampleRate.load());
|
||||||
@ -406,3 +418,6 @@ std::string SDRThread::readSetting(std::string name) {
|
|||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SDRThread::setStreamArgs(SoapySDR::Kwargs streamArgs_in) {
|
||||||
|
streamArgs = streamArgs_in;
|
||||||
|
}
|
||||||
|
@ -78,9 +78,12 @@ public:
|
|||||||
void writeSetting(std::string name, std::string value);
|
void writeSetting(std::string name, std::string value);
|
||||||
std::string readSetting(std::string name);
|
std::string readSetting(std::string name);
|
||||||
|
|
||||||
|
void setStreamArgs(SoapySDR::Kwargs streamArgs);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void updateGains();
|
void updateGains();
|
||||||
void updateSettings();
|
void updateSettings();
|
||||||
|
SoapySDR::Kwargs combineArgs(SoapySDR::Kwargs a, SoapySDR::Kwargs b);
|
||||||
|
|
||||||
SoapySDR::Stream *stream;
|
SoapySDR::Stream *stream;
|
||||||
SoapySDR::Device *device;
|
SoapySDR::Device *device;
|
||||||
@ -104,4 +107,6 @@ protected:
|
|||||||
std::mutex gain_busy;
|
std::mutex gain_busy;
|
||||||
std::map<std::string, float> gainValues;
|
std::map<std::string, float> gainValues;
|
||||||
std::map<std::string, bool> gainChanged;
|
std::map<std::string, bool> gainChanged;
|
||||||
|
|
||||||
|
SoapySDR::Kwargs streamArgs;
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user