1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-12-18 15:45:49 -05:00

Server: web API: /sdrangel/deviceset/{deviceSetIndex}/device/run POST,DELETE. LimeSDR Tx example working

This commit is contained in:
f4exb 2017-12-27 11:10:47 +01:00
parent 6eda2fa087
commit 3bc221bab8
7 changed files with 105 additions and 45 deletions

View File

@ -37,7 +37,6 @@ MESSAGE_CLASS_DEFINITION(NFMMod::MsgConfigureNFMMod, Message)
MESSAGE_CLASS_DEFINITION(NFMMod::MsgConfigureChannelizer, Message) MESSAGE_CLASS_DEFINITION(NFMMod::MsgConfigureChannelizer, Message)
MESSAGE_CLASS_DEFINITION(NFMMod::MsgConfigureFileSourceName, Message) MESSAGE_CLASS_DEFINITION(NFMMod::MsgConfigureFileSourceName, Message)
MESSAGE_CLASS_DEFINITION(NFMMod::MsgConfigureFileSourceSeek, Message) MESSAGE_CLASS_DEFINITION(NFMMod::MsgConfigureFileSourceSeek, Message)
MESSAGE_CLASS_DEFINITION(NFMMod::MsgConfigureAFInput, Message)
MESSAGE_CLASS_DEFINITION(NFMMod::MsgConfigureFileSourceStreamTiming, Message) MESSAGE_CLASS_DEFINITION(NFMMod::MsgConfigureFileSourceStreamTiming, Message)
MESSAGE_CLASS_DEFINITION(NFMMod::MsgReportFileSourceStreamData, Message) MESSAGE_CLASS_DEFINITION(NFMMod::MsgReportFileSourceStreamData, Message)
MESSAGE_CLASS_DEFINITION(NFMMod::MsgReportFileSourceStreamTiming, Message) MESSAGE_CLASS_DEFINITION(NFMMod::MsgReportFileSourceStreamTiming, Message)
@ -356,15 +355,6 @@ bool NFMMod::handleMessage(const Message& cmd)
return true; return true;
} }
else if (MsgConfigureAFInput::match(cmd))
{
MsgConfigureAFInput& conf = (MsgConfigureAFInput&) cmd;
m_afInput = conf.getAFInput();
qDebug() << "NFMMod::handleMessage: MsgConfigureAFInput:"
<< " m_afInput: " << m_afInput;
return true;
}
else if (MsgConfigureFileSourceStreamTiming::match(cmd)) else if (MsgConfigureFileSourceStreamTiming::match(cmd))
{ {
std::size_t samplesCount; std::size_t samplesCount;
@ -537,6 +527,7 @@ int NFMMod::webapiSettingsPutPatch(
QString& errorMessage __attribute__((unused))) QString& errorMessage __attribute__((unused)))
{ {
NFMModSettings settings; NFMModSettings settings;
bool frequencyOffsetChanged = false;
// for (int i = 0; i < channelSettingsKeys.size(); i++) { // for (int i = 0; i < channelSettingsKeys.size(); i++) {
// qDebug("NFMMod::webapiSettingsPutPatch: settingKey: %s", qPrintable(channelSettingsKeys.at(i))); // qDebug("NFMMod::webapiSettingsPutPatch: settingKey: %s", qPrintable(channelSettingsKeys.at(i)));
@ -563,8 +554,10 @@ int NFMMod::webapiSettingsPutPatch(
if (channelSettingsKeys.contains("fmDeviation")) { if (channelSettingsKeys.contains("fmDeviation")) {
settings.m_fmDeviation = response.getNfmModSettings()->getFmDeviation(); settings.m_fmDeviation = response.getNfmModSettings()->getFmDeviation();
} }
if (channelSettingsKeys.contains("inputFrequencyOffset")) { if (channelSettingsKeys.contains("inputFrequencyOffset"))
{
settings.m_inputFrequencyOffset = response.getNfmModSettings()->getInputFrequencyOffset(); settings.m_inputFrequencyOffset = response.getNfmModSettings()->getInputFrequencyOffset();
frequencyOffsetChanged = true;
} }
if (channelSettingsKeys.contains("modAFInput")) { if (channelSettingsKeys.contains("modAFInput")) {
settings.m_modAFInput = (NFMModSettings::NFMModInputAF) response.getNfmModSettings()->getModAfInput(); settings.m_modAFInput = (NFMModSettings::NFMModInputAF) response.getNfmModSettings()->getModAfInput();
@ -625,6 +618,13 @@ int NFMMod::webapiSettingsPutPatch(
} }
} }
if (frequencyOffsetChanged)
{
NFMMod::MsgConfigureChannelizer *msgChan = NFMMod::MsgConfigureChannelizer::create(
48000, settings.m_inputFrequencyOffset);
m_inputMessageQueue.push(msgChan);
}
MsgConfigureNFMMod *msg = MsgConfigureNFMMod::create(settings, force); MsgConfigureNFMMod *msg = MsgConfigureNFMMod::create(settings, force);
m_inputMessageQueue.push(msg); m_inputMessageQueue.push(msg);

View File

@ -159,27 +159,6 @@ public:
{ } { }
}; };
class MsgConfigureAFInput : public Message
{
MESSAGE_CLASS_DECLARATION
public:
NFMModInputAF getAFInput() const { return m_afInput; }
static MsgConfigureAFInput* create(NFMModInputAF afInput)
{
return new MsgConfigureAFInput(afInput);
}
private:
NFMModInputAF m_afInput;
MsgConfigureAFInput(NFMModInputAF afInput) :
Message(),
m_afInput(afInput)
{ }
};
class MsgReportFileSourceStreamTiming : public Message class MsgReportFileSourceStreamTiming : public Message
{ {
MESSAGE_CLASS_DECLARATION MESSAGE_CLASS_DECLARATION

View File

@ -205,8 +205,6 @@ void NFMModGUI::on_play_toggled(bool checked)
ui->morseKeyer->setEnabled(!checked); ui->morseKeyer->setEnabled(!checked);
m_settings.m_modAFInput = checked ? NFMModSettings::NFMModInputFile : NFMModSettings::NFMModInputNone; m_settings.m_modAFInput = checked ? NFMModSettings::NFMModInputFile : NFMModSettings::NFMModInputNone;
applySettings(); applySettings();
// NFMMod::MsgConfigureAFInput* message = NFMMod::MsgConfigureAFInput::create(m_modAFInput);
// m_nfmMod->getInputMessageQueue()->push(message);
ui->navTimeSlider->setEnabled(!checked); ui->navTimeSlider->setEnabled(!checked);
m_enableNavTime = !checked; m_enableNavTime = !checked;
} }
@ -218,8 +216,6 @@ void NFMModGUI::on_tone_toggled(bool checked)
ui->morseKeyer->setEnabled(!checked); ui->morseKeyer->setEnabled(!checked);
m_settings.m_modAFInput = checked ? NFMModSettings::NFMModInputTone : NFMModSettings::NFMModInputNone; m_settings.m_modAFInput = checked ? NFMModSettings::NFMModInputTone : NFMModSettings::NFMModInputNone;
applySettings(); applySettings();
// NFMMod::MsgConfigureAFInput* message = NFMMod::MsgConfigureAFInput::create(m_modAFInput);
// m_nfmMod->getInputMessageQueue()->push(message);
} }
void NFMModGUI::on_morseKeyer_toggled(bool checked) void NFMModGUI::on_morseKeyer_toggled(bool checked)
@ -229,8 +225,6 @@ void NFMModGUI::on_morseKeyer_toggled(bool checked)
ui->play->setEnabled(!checked); ui->play->setEnabled(!checked);
m_settings.m_modAFInput = checked ? NFMModSettings::NFMModInputCWTone : NFMModSettings::NFMModInputNone; m_settings.m_modAFInput = checked ? NFMModSettings::NFMModInputCWTone : NFMModSettings::NFMModInputNone;
applySettings(); applySettings();
// NFMMod::MsgConfigureAFInput* message = NFMMod::MsgConfigureAFInput::create(m_modAFInput);
// m_nfmMod->getInputMessageQueue()->push(message);
} }
void NFMModGUI::on_mic_toggled(bool checked) void NFMModGUI::on_mic_toggled(bool checked)
@ -240,8 +234,6 @@ void NFMModGUI::on_mic_toggled(bool checked)
ui->morseKeyer->setEnabled(!checked); ui->morseKeyer->setEnabled(!checked);
m_settings.m_modAFInput = checked ? NFMModSettings::NFMModInputAudio : NFMModSettings::NFMModInputNone; m_settings.m_modAFInput = checked ? NFMModSettings::NFMModInputAudio : NFMModSettings::NFMModInputNone;
applySettings(); applySettings();
// NFMMod::MsgConfigureAFInput* message = NFMMod::MsgConfigureAFInput::create(m_modAFInput);
// m_nfmMod->getInputMessageQueue()->push(message);
} }
void NFMModGUI::on_navTimeSlider_valueChanged(int value) void NFMModGUI::on_navTimeSlider_valueChanged(int value)

View File

@ -45,6 +45,7 @@ NFMModSettings::NFMModSettings() :
void NFMModSettings::resetToDefaults() void NFMModSettings::resetToDefaults()
{ {
m_afBandwidth = 3000;
m_basebandSampleRate = 48000; m_basebandSampleRate = 48000;
m_outputSampleRate = 48000; m_outputSampleRate = 48000;
m_inputFrequencyOffset = 0; m_inputFrequencyOffset = 0;

View File

@ -353,9 +353,12 @@ DSPDeviceSinkEngine::State DSPDeviceSinkEngine::gotoIdle()
(*it)->stop(); (*it)->stop();
} }
if (m_spectrumSink)
{
disconnect(m_deviceSampleSink->getSampleFifo(), SIGNAL(dataRead(int)), this, SLOT(handleForwardToSpectrumSink(int))); disconnect(m_deviceSampleSink->getSampleFifo(), SIGNAL(dataRead(int)), this, SLOT(handleForwardToSpectrumSink(int)));
m_spectrumSink->stop(); m_spectrumSink->stop();
}
m_deviceSampleSink->stop(); m_deviceSampleSink->stop();
m_deviceDescription.clear(); m_deviceDescription.clear();
m_sampleRate = 0; m_sampleRate = 0;
@ -410,7 +413,9 @@ DSPDeviceSinkEngine::State DSPDeviceSinkEngine::gotoInit()
(*it)->handleSourceMessage(notif); (*it)->handleSourceMessage(notif);
} }
if (m_spectrumSink) {
m_spectrumSink->handleMessage(notif); m_spectrumSink->handleMessage(notif);
}
// pass data to listeners // pass data to listeners
if (m_deviceSampleSink->getMessageQueueToGUI()) if (m_deviceSampleSink->getMessageQueueToGUI())
@ -481,8 +486,11 @@ DSPDeviceSinkEngine::State DSPDeviceSinkEngine::gotoRunning()
(*it)->start(); (*it)->start();
} }
if (m_spectrumSink)
{
connect(m_deviceSampleSink->getSampleFifo(), SIGNAL(dataRead(int)), this, SLOT(handleForwardToSpectrumSink(int))); connect(m_deviceSampleSink->getSampleFifo(), SIGNAL(dataRead(int)), this, SLOT(handleForwardToSpectrumSink(int)));
m_spectrumSink->start(); m_spectrumSink->start();
}
qDebug() << "DSPDeviceSinkEngine::gotoRunning: input message queue pending: " << m_inputMessageQueue.size(); qDebug() << "DSPDeviceSinkEngine::gotoRunning: input message queue pending: " << m_inputMessageQueue.size();

View File

@ -925,6 +925,76 @@ int WebAPIAdapterSrv::devicesetDeviceSettingsPutPatch(
} }
} }
int WebAPIAdapterSrv::devicesetDeviceRunPost(
int deviceSetIndex,
SWGSDRangel::SWGDeviceState& response,
SWGSDRangel::SWGErrorResponse& error)
{
if ((deviceSetIndex >= 0) && (deviceSetIndex < (int) m_mainCore.m_deviceSets.size()))
{
DeviceSet *deviceSet = m_mainCore.m_deviceSets[deviceSetIndex];
if (deviceSet->m_deviceSourceEngine) // Rx
{
DeviceSampleSource *source = deviceSet->m_deviceSourceAPI->getSampleSource();
return source->webapiRun(true, response, *error.getMessage());
}
else if (deviceSet->m_deviceSinkEngine) // Tx
{
DeviceSampleSink *sink = deviceSet->m_deviceSinkAPI->getSampleSink();
return sink->webapiRun(true, response, *error.getMessage());
}
else
{
error.init();
*error.getMessage() = QString("DeviceSet error");
return 500;
}
}
else
{
error.init();
*error.getMessage() = QString("There is no device set with index %1").arg(deviceSetIndex);
return 404;
}
}
int WebAPIAdapterSrv::devicesetDeviceRunDelete(
int deviceSetIndex,
SWGSDRangel::SWGDeviceState& response,
SWGSDRangel::SWGErrorResponse& error)
{
if ((deviceSetIndex >= 0) && (deviceSetIndex < (int) m_mainCore.m_deviceSets.size()))
{
DeviceSet *deviceSet = m_mainCore.m_deviceSets[deviceSetIndex];
if (deviceSet->m_deviceSourceEngine) // Rx
{
DeviceSampleSource *source = deviceSet->m_deviceSourceAPI->getSampleSource();
return source->webapiRun(false, response, *error.getMessage());
}
else if (deviceSet->m_deviceSinkEngine) // Tx
{
DeviceSampleSink *sink = deviceSet->m_deviceSinkAPI->getSampleSink();
return sink->webapiRun(false, response, *error.getMessage());
}
else
{
error.init();
*error.getMessage() = QString("DeviceSet error");
return 500;
}
}
else
{
error.init();
*error.getMessage() = QString("There is no device set with index %1").arg(deviceSetIndex);
return 404;
}
}
int WebAPIAdapterSrv::devicesetChannelPost( int WebAPIAdapterSrv::devicesetChannelPost(
int deviceSetIndex, int deviceSetIndex,
SWGSDRangel::SWGChannelSettings& query, SWGSDRangel::SWGChannelSettings& query,

View File

@ -147,6 +147,16 @@ public:
SWGSDRangel::SWGDeviceSettings& response, SWGSDRangel::SWGDeviceSettings& response,
SWGSDRangel::SWGErrorResponse& error); SWGSDRangel::SWGErrorResponse& error);
virtual int devicesetDeviceRunPost(
int deviceSetIndex,
SWGSDRangel::SWGDeviceState& response,
SWGSDRangel::SWGErrorResponse& error);
virtual int devicesetDeviceRunDelete(
int deviceSetIndex,
SWGSDRangel::SWGDeviceState& response,
SWGSDRangel::SWGErrorResponse& error);
virtual int devicesetChannelPost( virtual int devicesetChannelPost(
int deviceSetIndex, int deviceSetIndex,
SWGSDRangel::SWGChannelSettings& query, SWGSDRangel::SWGChannelSettings& query,