1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2026-01-04 23:38:42 -05:00

REST API: channels update

This commit is contained in:
f4exb 2019-12-29 19:19:23 +01:00
parent 884f83c82a
commit cda925faab
7 changed files with 80 additions and 18 deletions

View File

@ -72,6 +72,14 @@ void BeamSteeringCWMod::startSources()
qDebug("BeamSteeringCWMod::startSources");
m_basebandSource->reset();
m_thread->start();
BeamSteeringCWModBaseband::MsgSignalNotification *sig = BeamSteeringCWModBaseband::MsgSignalNotification::create(
m_basebandSampleRate);
m_basebandSource->getInputMessageQueue()->push(sig);
BeamSteeringCWModBaseband::MsgConfigureBeamSteeringCWModBaseband *msg = BeamSteeringCWModBaseband::MsgConfigureBeamSteeringCWModBaseband::create(
m_settings, true);
m_basebandSource->getInputMessageQueue()->push(msg);
}
void BeamSteeringCWMod::stopSources()
@ -237,6 +245,12 @@ int BeamSteeringCWMod::webapiSettingsPutPatch(
MsgConfigureBeamSteeringCWMod *msg = MsgConfigureBeamSteeringCWMod::create(settings, force);
m_inputMessageQueue.push(msg);
if (getMessageQueueToGUI()) // forward to GUI if any
{
MsgConfigureBeamSteeringCWMod *msgToGUI = MsgConfigureBeamSteeringCWMod::create(settings, force);
getMessageQueueToGUI()->push(msgToGUI);
}
webapiFormatChannelSettings(response, settings);
return 200;

View File

@ -49,8 +49,8 @@ Interferometer::Interferometer(DeviceAPI *deviceAPI) :
setObjectName(m_channelId);
m_thread = new QThread(this);
m_basbandSink = new InterferometerBaseband(m_fftSize);
m_basbandSink->moveToThread(m_thread);
m_basebandSink = new InterferometerBaseband(m_fftSize);
m_basebandSink->moveToThread(m_thread);
m_deviceAPI->addMIMOChannel(this);
m_deviceAPI->addMIMOChannelAPI(this);
connect(&m_inputMessageQueue, SIGNAL(messageEnqueued()), this, SLOT(handleInputMessages()));
@ -66,26 +66,34 @@ Interferometer::~Interferometer()
m_deviceAPI->removeChannelSinkAPI(this);
m_deviceAPI->removeMIMOChannel(this);
delete m_basbandSink;
delete m_basebandSink;
delete m_thread;
}
void Interferometer::setSpectrumSink(BasebandSampleSink *spectrumSink)
{
m_spectrumSink = spectrumSink;
m_basbandSink->setSpectrumSink(spectrumSink);
m_basebandSink->setSpectrumSink(spectrumSink);
}
void Interferometer::setScopeSink(BasebandSampleSink *scopeSink)
{
m_scopeSink = scopeSink;
m_basbandSink->setScopeSink(scopeSink);
m_basebandSink->setScopeSink(scopeSink);
}
void Interferometer::startSinks()
{
m_basbandSink->reset();
if (m_deviceSampleRate != 0) {
m_basebandSink->setBasebandSampleRate(m_deviceSampleRate);
}
m_basebandSink->reset();
m_thread->start();
InterferometerBaseband::MsgConfigureChannelizer *msg = InterferometerBaseband::MsgConfigureChannelizer::create(
m_settings.m_log2Decim, m_settings.m_filterChainHash);
m_basebandSink->getInputMessageQueue()->push(msg);
}
void Interferometer::stopSinks()
@ -96,7 +104,7 @@ void Interferometer::stopSinks()
void Interferometer::feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, unsigned int sinkIndex)
{
m_basbandSink->feed(begin, end, sinkIndex);
m_basebandSink->feed(begin, end, sinkIndex);
}
void Interferometer::pull(SampleVector::iterator& begin, unsigned int nbSamples, unsigned int sourceIndex)
@ -126,18 +134,18 @@ void Interferometer::applySettings(const InterferometerSettings& settings, bool
{
InterferometerBaseband::MsgConfigureChannelizer *msg = InterferometerBaseband::MsgConfigureChannelizer::create(
settings.m_log2Decim, settings.m_filterChainHash);
m_basbandSink->getInputMessageQueue()->push(msg);
m_basebandSink->getInputMessageQueue()->push(msg);
}
if ((m_settings.m_correlationType != settings.m_correlationType) || force)
{
InterferometerBaseband::MsgConfigureCorrelation *msg = InterferometerBaseband::MsgConfigureCorrelation::create(
settings.m_correlationType);
m_basbandSink->getInputMessageQueue()->push(msg);
m_basebandSink->getInputMessageQueue()->push(msg);
}
if ((m_settings.m_phase != settings.m_phase) || force) {
m_basbandSink->setPhase(settings.m_phase);
m_basebandSink->setPhase(settings.m_phase);
}
m_settings = settings;
@ -185,7 +193,7 @@ bool Interferometer::handleMessage(const Message& cmd)
m_deviceSampleRate, notif.getCenterFrequency(), notif.getIndex()
);
qDebug() << "Interferometer::handleMessage: DSPMIMOSignalNotification: push to sink";
m_basbandSink->getInputMessageQueue()->push(sig);
m_basebandSink->getInputMessageQueue()->push(sig);
if (getMessageQueueToGUI())
{
@ -247,7 +255,7 @@ void Interferometer::calculateFrequencyOffset()
void Interferometer::applyChannelSettings(uint32_t log2Decim, uint32_t filterChainHash)
{
InterferometerBaseband::MsgConfigureChannelizer *msg = InterferometerBaseband::MsgConfigureChannelizer::create(log2Decim, filterChainHash);
m_basbandSink->getInputMessageQueue()->push(msg);
m_basebandSink->getInputMessageQueue()->push(msg);
}
int Interferometer::webapiSettingsGet(
@ -274,6 +282,12 @@ int Interferometer::webapiSettingsPutPatch(
MsgConfigureInterferometer *msg = MsgConfigureInterferometer::create(settings, force);
m_inputMessageQueue.push(msg);
if (getMessageQueueToGUI()) // forward to GUI if any
{
MsgConfigureInterferometer *msgToGUI = MsgConfigureInterferometer::create(settings, force);
getMessageQueueToGUI()->push(msgToGUI);
}
webapiFormatChannelSettings(response, settings);
return 200;

View File

@ -149,7 +149,7 @@ public:
private:
DeviceAPI *m_deviceAPI;
QThread *m_thread;
InterferometerBaseband* m_basbandSink;
InterferometerBaseband* m_basebandSink;
BasebandSampleSink* m_spectrumSink;
BasebandSampleSink* m_scopeSink;
InterferometerSettings m_settings;

View File

@ -246,4 +246,13 @@ bool InterferometerBaseband::handleMessage(const Message& cmd)
qDebug("InterferometerBaseband::handleMessage: unhandled: %s", cmd.getIdentifier());
return false;
}
}
}
void InterferometerBaseband::setBasebandSampleRate(unsigned int sampleRate)
{
for (int istream = 0; istream < 2; istream++)
{
m_channelizers[istream]->setBasebandSampleRate(sampleRate);
m_sinks[istream].reset();
}
}

View File

@ -109,6 +109,7 @@ public:
void setPhase(int phase) { m_correlator.setPhase(phase); }
void feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, unsigned int streamIndex);
void setBasebandSampleRate(unsigned int sampleRate);
private:
void processFifo(const std::vector<SampleVector>& data, unsigned int ibegin, unsigned int iend);

View File

@ -72,11 +72,14 @@ QByteArray InterferometerGUI::serialize() const
bool InterferometerGUI::deserialize(const QByteArray& data)
{
if(m_settings.deserialize(data)) {
if (m_settings.deserialize(data))
{
displaySettings();
applySettings(true);
return true;
} else {
}
else
{
resetToDefaults();
return false;
}
@ -97,6 +100,13 @@ bool InterferometerGUI::handleMessage(const Message& message)
displayRateAndShift();
return true;
}
else if (Interferometer::MsgConfigureInterferometer::match(message))
{
const Interferometer::MsgConfigureInterferometer& notif = (const Interferometer::MsgConfigureInterferometer&) message;
m_settings = notif.getSettings();
displaySettings();
return true;
}
else
{
return false;

View File

@ -80,7 +80,9 @@ const QMap<QString, QString> WebAPIRequestMapper::m_channelURIToSettingsKey = {
{"sdrangel.channel.udpsrc", "UDPSinkSettings"}, // remap
{"sdrangel.channel.wfmdemod", "WFMDemodSettings"},
{"de.maintech.sdrangelove.channel.wfm", "WFMDemodSettings"}, // remap
{"sdrangel.channeltx.modwfm", "WFMModSettings"}
{"sdrangel.channeltx.modwfm", "WFMModSettings"},
{"sdrangel.channel.beamsteeringcwmod", "BeamSteeringCWModSettings"},
{"sdrangel.channelmimo.interferometer", "InterferometerSettings"}
};
const QMap<QString, QString> WebAPIRequestMapper::m_deviceIdToSettingsKey = {
@ -148,7 +150,9 @@ const QMap<QString, QString> WebAPIRequestMapper::m_channelTypeToSettingsKey = {
{"UDPSink", "UDPSourceSettings"},
{"UDPSource", "UDPSinkSettings"},
{"WFMDemod", "WFMDemodSettings"},
{"WFMMod", "WFMModSettings"}
{"WFMMod", "WFMModSettings"},
{"BeamSteeringCWMod", "BeamSteeringCWModSettings"},
{"Interferometer", "InterferometerSettings"}
};
const QMap<QString, QString> WebAPIRequestMapper::m_sourceDeviceHwIdToSettingsKey = {
@ -2648,6 +2652,16 @@ bool WebAPIRequestMapper::getChannel(
channelSettings->setWfmModSettings(new SWGSDRangel::SWGWFMModSettings());
channelSettings->getWfmModSettings()->fromJsonObject(settingsJsonObject);
}
else if (channelSettingsKey == "BeamSteeringCWModSettings")
{
channelSettings->setBeamSteeringCwModSettings(new SWGSDRangel::SWGBeamSteeringCWModSettings());
channelSettings->getBeamSteeringCwModSettings()->fromJsonObject(settingsJsonObject);
}
else if (channelSettingsKey == "InterferometerSettings")
{
channelSettings->setInterferometerSettings(new SWGSDRangel::SWGInterferometerSettings());
channelSettings->getInterferometerSettings()->fromJsonObject(settingsJsonObject);
}
else
{
return false;