1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-09-28 07:46:37 -04:00

Use a name field in channels to be used in headless version to replace the GUI object name that was used as the name field

This commit is contained in:
f4exb 2017-12-20 23:57:06 +01:00
parent ef5cf18778
commit 9dd707896d
39 changed files with 318 additions and 185 deletions

View File

@ -33,6 +33,7 @@ const QString ChannelAnalyzer::m_channelIdURI = "org.f4exb.sdrangelove.channel.c
const QString ChannelAnalyzer::m_channelId = "ChannelAnalyzer";
ChannelAnalyzer::ChannelAnalyzer(DeviceSourceAPI *deviceAPI) :
ChannelSinkAPI(m_channelIdURI),
m_deviceAPI(deviceAPI),
m_sampleSink(0),
m_settingsMutex(QMutex::Recursive)

View File

@ -129,8 +129,6 @@ public:
virtual int getDeltaFrequency() const { return m_frequency; }
virtual void getIdentifier(QString& id) { id = objectName(); }
virtual void getTitle(QString& title) { title = objectName(); }
virtual void setName(const QString& name) { setObjectName(name); }
virtual QString getName() const { return objectName(); }
virtual qint64 getCenterFrequency() const { return m_frequency; }
virtual QByteArray serialize() const { return QByteArray(); }

View File

@ -33,6 +33,7 @@ const QString ChannelAnalyzerNG::m_channelIdURI = "sdrangel.channel.chanalyzerng
const QString ChannelAnalyzerNG::m_channelId = "ChannelAnalyzerNG";
ChannelAnalyzerNG::ChannelAnalyzerNG(DeviceSourceAPI *deviceAPI) :
ChannelSinkAPI(m_channelIdURI),
m_deviceAPI(deviceAPI),
m_sampleSink(0),
m_settingsMutex(QMutex::Recursive)

View File

@ -148,8 +148,6 @@ public:
virtual int getDeltaFrequency() const { return m_running.m_frequency; }
virtual void getIdentifier(QString& id) { id = objectName(); }
virtual void getTitle(QString& title) { title = objectName(); }
virtual void setName(const QString& name) { setObjectName(name); }
virtual QString getName() const { return objectName(); }
virtual qint64 getCenterFrequency() const { return m_running.m_frequency; }
virtual QByteArray serialize() const { return QByteArray(); }

View File

@ -37,6 +37,7 @@ const QString AMDemod::m_channelId = "AMDemod";
const int AMDemod::m_udpBlockSize = 512;
AMDemod::AMDemod(DeviceSourceAPI *deviceAPI) :
ChannelSinkAPI(m_channelIdURI),
m_deviceAPI(deviceAPI),
m_absoluteFrequencyOffset(0),
m_squelchOpen(false),

View File

@ -96,8 +96,6 @@ public:
virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; }
virtual void getIdentifier(QString& id) { id = objectName(); }
virtual void getTitle(QString& title) { title = m_settings.m_title; }
virtual void setName(const QString& name) { setObjectName(name); }
virtual QString getName() const { return objectName(); }
virtual qint64 getCenterFrequency() const { return m_settings.m_inputFrequencyOffset; }
virtual QByteArray serialize() const;

View File

@ -40,6 +40,7 @@ const QString ATVDemod::m_channelId = "ATVDemod";
const int ATVDemod::m_ssbFftLen = 1024;
ATVDemod::ATVDemod(DeviceSourceAPI *deviceAPI) :
ChannelSinkAPI(m_channelIdURI),
m_deviceAPI(deviceAPI),
m_scopeSink(0),
m_registeredATVScreen(0),

View File

@ -227,8 +227,6 @@ public:
virtual int getDeltaFrequency() const { return m_rfRunning.m_intFrequencyOffset; }
virtual void getIdentifier(QString& id) { id = objectName(); }
virtual void getTitle(QString& title) { title = objectName(); }
virtual void setName(const QString& name) { setObjectName(name); }
virtual QString getName() const { return objectName(); }
virtual qint64 getCenterFrequency() const { return m_rfRunning.m_intFrequencyOffset; }
virtual QByteArray serialize() const { return QByteArray(); }

View File

@ -40,6 +40,7 @@ const Real BFMDemod::default_deemphasis = 50.0; // 50 us
const int BFMDemod::m_udpBlockSize = 512;
BFMDemod::BFMDemod(DeviceSourceAPI *deviceAPI) :
ChannelSinkAPI(m_channelIdURI),
m_deviceAPI(deviceAPI),
m_absoluteFrequencyOffset(0),
m_audioFifo(250000),

View File

@ -126,8 +126,6 @@ public:
virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; }
virtual void getIdentifier(QString& id) { id = objectName(); }
virtual void getTitle(QString& title) { title = m_settings.m_title; }
virtual void setName(const QString& name) { setObjectName(name); }
virtual QString getName() const { return objectName(); }
virtual qint64 getCenterFrequency() const { return m_settings.m_inputFrequencyOffset; }
virtual QByteArray serialize() const;

View File

@ -40,6 +40,7 @@ const QString DSDDemod::m_channelId = "DSDDemod";
const int DSDDemod::m_udpBlockSize = 512;
DSDDemod::DSDDemod(DeviceSourceAPI *deviceAPI) :
ChannelSinkAPI(m_channelIdURI),
m_deviceAPI(deviceAPI),
m_absoluteFrequencyOffset(0),
m_interpolatorDistance(0.0f),

View File

@ -105,8 +105,6 @@ public:
virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; }
virtual void getIdentifier(QString& id) { id = objectName(); }
virtual void getTitle(QString& title) { title = m_settings.m_title; }
virtual void setName(const QString& name) { setObjectName(name); }
virtual QString getName() const { return objectName(); }
virtual qint64 getCenterFrequency() const { return m_settings.m_inputFrequencyOffset; }
virtual QByteArray serialize() const;

View File

@ -35,6 +35,7 @@ const QString LoRaDemod::m_channelIdURI = "de.maintech.sdrangelove.channel.lora"
const QString LoRaDemod::m_channelId = "LoRaDemod";
LoRaDemod::LoRaDemod(DeviceSourceAPI* deviceAPI) :
ChannelSinkAPI(m_channelIdURI),
m_deviceAPI(deviceAPI),
m_sampleSink(0),
m_settingsMutex(QMutex::Recursive)

View File

@ -101,8 +101,6 @@ public:
virtual int getDeltaFrequency() const { return 0; }
virtual void getIdentifier(QString& id) { id = objectName(); }
virtual void getTitle(QString& title) { title = m_settings.m_title; }
virtual void setName(const QString& name) { setObjectName(name); }
virtual QString getName() const { return objectName(); }
virtual qint64 getCenterFrequency() const { return 0; }
virtual QByteArray serialize() const;

View File

@ -45,6 +45,7 @@ static const double afSqTones[2] = {1000.0, 6000.0}; // {1200.0, 8000.0};
const int NFMDemod::m_udpBlockSize = 512;
NFMDemod::NFMDemod(DeviceSourceAPI *devieAPI) :
ChannelSinkAPI(m_channelIdURI),
m_deviceAPI(devieAPI),
m_absoluteFrequencyOffset(0),
m_ctcssIndex(0),

View File

@ -121,8 +121,6 @@ public:
virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; }
virtual void getIdentifier(QString& id) { id = objectName(); }
virtual void getTitle(QString& title) { title = m_settings.m_title; }
virtual void setName(const QString& name) { setObjectName(name); }
virtual QString getName() const { return objectName(); }
virtual qint64 getCenterFrequency() const { return m_settings.m_inputFrequencyOffset; }
virtual QByteArray serialize() const;

View File

@ -39,6 +39,7 @@ const QString SSBDemod::m_channelId = "SSBDemod";
const int SSBDemod::m_udpBlockSize = 512;
SSBDemod::SSBDemod(DeviceSourceAPI *deviceAPI) :
ChannelSinkAPI(m_channelIdURI),
m_deviceAPI(deviceAPI),
m_audioBinaual(false),
m_audioFlipChannels(false),

View File

@ -115,8 +115,6 @@ public:
virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; }
virtual void getIdentifier(QString& id) { id = objectName(); }
virtual void getTitle(QString& title) { title = m_settings.m_title; }
virtual void setName(const QString& name) { setObjectName(name); }
virtual QString getName() const { return objectName(); }
virtual qint64 getCenterFrequency() const { return m_settings.m_inputFrequencyOffset; }
virtual QByteArray serialize() const;

View File

@ -38,6 +38,7 @@ const QString WFMDemod::m_channelId = "WFMDemod";
const int WFMDemod::m_udpBlockSize = 512;
WFMDemod::WFMDemod(DeviceSourceAPI* deviceAPI) :
ChannelSinkAPI(m_channelIdURI),
m_deviceAPI(deviceAPI),
m_absoluteFrequencyOffset(0),
m_squelchOpen(false),
@ -49,7 +50,6 @@ WFMDemod::WFMDemod(DeviceSourceAPI* deviceAPI) :
m_sampleSink(0),
m_audioFifo(250000),
m_settingsMutex(QMutex::Recursive)
{
setObjectName(m_channelId);

View File

@ -101,8 +101,6 @@ public:
virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; }
virtual void getIdentifier(QString& id) { id = objectName(); }
virtual void getTitle(QString& title) { title = m_settings.m_title; }
virtual void setName(const QString& name) { setObjectName(name); }
virtual QString getName() const { return objectName(); }
virtual qint64 getCenterFrequency() const { return m_settings.m_inputFrequencyOffset; }
virtual QByteArray serialize() const;

View File

@ -34,6 +34,7 @@ const QString TCPSrc::m_channelIdURI = "sdrangel.channel.tcpsrc";
const QString TCPSrc::m_channelId = "TCPSrc";
TCPSrc::TCPSrc(DeviceSourceAPI* deviceAPI) :
ChannelSinkAPI(m_channelIdURI),
m_deviceAPI(deviceAPI),
m_absoluteFrequencyOffset(0),
m_settingsMutex(QMutex::Recursive)

View File

@ -118,8 +118,6 @@ public:
virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; }
virtual void getIdentifier(QString& id) { id = objectName(); }
virtual void getTitle(QString& title) { title = m_settings.m_title; }
virtual void setName(const QString& name) { setObjectName(name); }
virtual QString getName() const { return objectName(); }
virtual qint64 getCenterFrequency() const { return m_settings.m_inputFrequencyOffset; }
virtual QByteArray serialize() const;

View File

@ -37,6 +37,7 @@ const QString UDPSrc::m_channelIdURI = "sdrangel.channel.udpsrc";
const QString UDPSrc::m_channelId = "UDPSrc";
UDPSrc::UDPSrc(DeviceSourceAPI *deviceAPI) :
ChannelSinkAPI(m_channelIdURI),
m_deviceAPI(deviceAPI),
m_absoluteFrequencyOffset(0),
m_outMovingAverage(480, 1e-10),

View File

@ -110,8 +110,6 @@ public:
virtual int getDeltaFrequency() const { return m_absoluteFrequencyOffset; }
virtual void getIdentifier(QString& id) { id = objectName(); }
virtual void getTitle(QString& title) { title = m_settings.m_title; }
virtual void setName(const QString& name) { setObjectName(name); }
virtual QString getName() const { return objectName(); }
virtual qint64 getCenterFrequency() const { return m_settings.m_inputFrequencyOffset; }
virtual QByteArray serialize() const;

View File

@ -41,6 +41,7 @@ const QString AMMod::m_channelId ="AMMod";
const int AMMod::m_levelNbSamples = 480; // every 10ms
AMMod::AMMod(DeviceSinkAPI *deviceAPI) :
ChannelSourceAPI(m_channelIdURI),
m_deviceAPI(deviceAPI),
m_absoluteFrequencyOffset(0),
m_movingAverage(40, 0),

View File

@ -50,6 +50,7 @@ const int ATVMod::m_cameraFPSTestNbFrames = 100;
const int ATVMod::m_ssbFftLen = 1024;
ATVMod::ATVMod(DeviceSinkAPI *deviceAPI) :
ChannelSourceAPI(m_channelIdURI),
m_deviceAPI(deviceAPI),
m_absoluteFrequencyOffset(0),
m_modPhasor(0.0f),

View File

@ -47,6 +47,7 @@ const QString NFMMod::m_channelId = "NFMMod";
const int NFMMod::m_levelNbSamples = 480; // every 10ms
NFMMod::NFMMod(DeviceSinkAPI *deviceAPI) :
ChannelSourceAPI(m_channelIdURI),
m_deviceAPI(deviceAPI),
m_absoluteFrequencyOffset(0),
m_modPhasor(0.0f),

View File

@ -43,6 +43,7 @@ const int SSBMod::m_levelNbSamples = 480; // every 10ms
const int SSBMod::m_ssbFftLen = 1024;
SSBMod::SSBMod(DeviceSinkAPI *deviceAPI) :
ChannelSourceAPI(m_channelIdURI),
m_deviceAPI(deviceAPI),
m_absoluteFrequencyOffset(0),
m_SSBFilter(0),

View File

@ -45,6 +45,7 @@ const int WFMMod::m_levelNbSamples = 480; // every 10ms
const int WFMMod::m_rfFilterFFTLength = 1024;
WFMMod::WFMMod(DeviceSinkAPI *deviceAPI) :
ChannelSourceAPI(m_channelIdURI),
m_deviceAPI(deviceAPI),
m_modPhasor(0.0f),
m_movingAverage(40, 0),

View File

@ -33,6 +33,7 @@ const QString UDPSink::m_channelIdURI = "sdrangel.channeltx.udpsink";
const QString UDPSink::m_channelId = "UDPSink";
UDPSink::UDPSink(DeviceSinkAPI *deviceAPI) :
ChannelSourceAPI(m_channelIdURI),
m_deviceAPI(deviceAPI),
m_squelch(1e-6),
m_spectrum(0),

View File

@ -19,7 +19,8 @@
#include "util/uid.h"
#include "channelsinkapi.h"
ChannelSinkAPI::ChannelSinkAPI() :
ChannelSinkAPI::ChannelSinkAPI(const QString& name) :
m_name(name),
m_indexInDeviceSet(-1),
m_uid(UidCalculator::getNewObjectId())
{

View File

@ -32,15 +32,15 @@ namespace SWGSDRangel
class SDRANGEL_API ChannelSinkAPI {
public:
ChannelSinkAPI();
ChannelSinkAPI(const QString& name);
virtual ~ChannelSinkAPI() {}
virtual void destroy() = 0;
virtual int getDeltaFrequency() const = 0;
virtual void getIdentifier(QString& id) = 0;
virtual void getTitle(QString& title) = 0;
virtual void setName(const QString& name) = 0;
virtual QString getName() const = 0;
virtual void setName(const QString& name) { m_name = name; }
virtual const QString& getName() const { return m_name; }
virtual qint64 getCenterFrequency() const = 0;
virtual QByteArray serialize() const = 0;
@ -62,6 +62,11 @@ public:
uint64_t getUID() const { return m_uid; }
private:
/** Unique identifier in a device set used for sorting. Used when there is no GUI.
* In GUI version it is supported by GUI object name accessed through PluginInstanceGUI.
*/
QString m_name;
int m_indexInDeviceSet;
uint64_t m_uid;
};

View File

@ -19,7 +19,8 @@
#include "util/uid.h"
#include "channelsourceapi.h"
ChannelSourceAPI::ChannelSourceAPI() :
ChannelSourceAPI::ChannelSourceAPI(const QString& name) :
m_name(name),
m_indexInDeviceSet(-1),
m_uid(UidCalculator::getNewObjectId())
{ }

View File

@ -31,7 +31,7 @@ namespace SWGSDRangel
class SDRANGEL_API ChannelSourceAPI {
public:
ChannelSourceAPI();
ChannelSourceAPI(const QString& name);
virtual ~ChannelSourceAPI() {}
virtual void destroy() = 0;
@ -61,6 +61,11 @@ public:
uint64_t getUID() const { return m_uid; }
private:
/** Unique identifier in a device set used for sorting. Used when there is no GUI.
* In GUI version it is supported by GUI object name accessed through PluginInstanceGUI.
*/
QString m_name;
int m_indexInDeviceSet;
uint64_t m_uid;
};

View File

@ -36,6 +36,7 @@
MESSAGE_CLASS_DEFINITION(MainCore::MsgDeleteInstance, Message)
MESSAGE_CLASS_DEFINITION(MainCore::MsgLoadPreset, Message)
MESSAGE_CLASS_DEFINITION(MainCore::MsgSavePreset, Message)
MESSAGE_CLASS_DEFINITION(MainCore::MsgAddDeviceSet, Message)
MESSAGE_CLASS_DEFINITION(MainCore::MsgRemoveLastDeviceSet, Message)
@ -103,6 +104,14 @@ bool MainCore::handleMessage(const Message& cmd)
loadPresetSettings(notif.getPreset(), notif.getDeviceSetIndex());
return true;
}
else if (MsgSavePreset::match(cmd))
{
MsgSavePreset& notif = (MsgSavePreset&) cmd;
savePresetSettings(notif.getPreset(), notif.getDeviceSetIndex());
m_settings.sortPresets();
m_settings.save();
return true;
}
else if (MsgAddDeviceSet::match(cmd))
{
MsgAddDeviceSet& notif = (MsgAddDeviceSet&) cmd;

View File

@ -93,6 +93,32 @@ private:
{ }
};
class MsgSavePreset : public Message {
MESSAGE_CLASS_DECLARATION
public:
Preset *getPreset() const { return m_preset; }
int getDeviceSetIndex() const { return m_deviceSetIndex; }
bool isNewPreset() const { return m_newPreset; }
static MsgSavePreset* create(Preset *preset, int deviceSetIndex, bool newPreset)
{
return new MsgSavePreset(preset, deviceSetIndex, newPreset);
}
private:
Preset *m_preset;
int m_deviceSetIndex;
bool m_newPreset;
MsgSavePreset(Preset *preset, int deviceSetIndex, bool newPreset) :
Message(),
m_preset(preset),
m_deviceSetIndex(deviceSetIndex),
m_newPreset(newPreset)
{ }
};
class MsgDeleteInstance : public Message {
MESSAGE_CLASS_DECLARATION

View File

@ -539,6 +539,62 @@ int WebAPIAdapterSrv::instancePresetPatch(
return 200;
}
int WebAPIAdapterSrv::instancePresetPut(
SWGSDRangel::SWGPresetTransfer& query,
SWGSDRangel::SWGPresetIdentifier& response,
SWGSDRangel::SWGErrorResponse& error)
{
int deviceSetIndex = query.getDeviceSetIndex();
SWGSDRangel::SWGPresetIdentifier *presetIdentifier = query.getPreset();
int nbDeviceSets = m_mainCore.m_deviceSets.size();
if (deviceSetIndex > nbDeviceSets)
{
*error.getMessage() = QString("There is no device set at index %1. Number of device sets is %2").arg(deviceSetIndex).arg(nbDeviceSets);
return 404;
}
const Preset *selectedPreset = m_mainCore.m_settings.getPreset(*presetIdentifier->getGroupName(),
presetIdentifier->getCenterFrequency(),
*presetIdentifier->getName());
if (selectedPreset == 0)
{
*error.getMessage() = QString("There is no preset [%1, %2, %3]")
.arg(*presetIdentifier->getGroupName())
.arg(presetIdentifier->getCenterFrequency())
.arg(*presetIdentifier->getName());
return 404;
}
else // update existing preset
{
DeviceSet *deviceSet = m_mainCore.m_deviceSets[deviceSetIndex];
if (deviceSet->m_deviceSourceEngine && !selectedPreset->isSourcePreset())
{
*error.getMessage() = QString("Preset type (T) and device set type (Rx) mismatch");
return 404;
}
if (deviceSet->m_deviceSinkEngine && selectedPreset->isSourcePreset())
{
*error.getMessage() = QString("Preset type (R) and device set type (Tx) mismatch");
return 404;
}
}
MainCore::MsgSavePreset *msg = MainCore::MsgSavePreset::create(const_cast<Preset*>(selectedPreset), deviceSetIndex, false);
m_mainCore.m_inputMessageQueue.push(msg);
response.init();
response.setCenterFrequency(selectedPreset->getCenterFrequency());
*response.getGroupName() = selectedPreset->getGroup();
*response.getType() = selectedPreset->isSourcePreset() ? "R" : "T";
*response.getName() = selectedPreset->getDescription();
return 200;
}
int WebAPIAdapterSrv::instanceDeviceSetsPost(
bool tx,
SWGSDRangel::SWGSuccessResponse& response,

View File

@ -98,6 +98,11 @@ public:
SWGSDRangel::SWGPresetIdentifier& response,
SWGSDRangel::SWGErrorResponse& error);
virtual int instancePresetPut(
SWGSDRangel::SWGPresetTransfer& query,
SWGSDRangel::SWGPresetIdentifier& response,
SWGSDRangel::SWGErrorResponse& error);
virtual int instanceDeviceSetsPost(
bool tx,
SWGSDRangel::SWGSuccessResponse& response,

View File

@ -1,6 +1,7 @@
#!/usr/bin/env python
import requests
import requests, traceback, sys
from optparse import OptionParser
base_url = "http://127.0.0.1:8091/sdrangel"
@ -34,6 +35,27 @@ requests_methods = {
"DELETE": requests.delete
}
# ======================================================================
def getInputOptions():
parser = OptionParser(usage="usage: %%prog [-t]\n")
parser.add_option("-a", "--address", dest="address", help="address and port", metavar="ADDRESS", type="string")
(options, args) = parser.parse_args()
if (options.address == None):
options.address = "127.0.0.1:8091"
return options
# ======================================================================
def main():
try:
options = getInputOptions()
global base_url
base_url = "http://%s/sdrangel" % options.address
for command in commands:
url = base_url + command[0]
method = requests_methods.get(command[1], None)
@ -50,3 +72,13 @@ for command in commands:
exit(1)
print("All done!")
except Exception, msg:
tb = traceback.format_exc()
print >> sys.stderr, tb
# ======================================================================
if __name__ == "__main__":
main()